iptables的備份及腳本構成

    在Linux中,iptables爲我們提供了批量備份與恢復規則的命令,防火牆腳本實際上是一個shell腳本程序,便於使用shell變量、程序控制邏輯,在需要重用、移植使用時會非常方便,只需修改下變量值就可使用


iptables的備份及還原

    防火牆規則的批量備份、還原用到兩個命令,即iptables-save和iptables-restore,分別用來保存和恢復

1. iptables-save命令

    用來批量導出防火牆規則,直接執行命令時,將顯示當前啓用的所有規則

[root@localhost ~]# iptables-save
# Generated by iptables-save v1.4.7 on Sun Jan  7 06:07:58 2018      //註釋
*filter                                                              //所在的表
:INPUT ACCEPT [0:0]                                                  //鏈名,默認策略
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [41:5449]
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT              //規則,省略了iptables
-A INPUT -p icmp -j ACCEPT 
-A INPUT -i lo -j ACCEPT 
-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT 
-A INPUT -j REJECT --reject-with icmp-host-prohibited 
-A FORWARD -j REJECT --reject-with icmp-host-prohibited 
COMMIT                                                               //提交前面的規則設置
# Completed on Sun Jan  7 06:07:58 2018

[root@localhost ~]# iptables-save > /opt/iptables.txt                //備份所有表的規則
[root@localhost ~]# iptables-save > /etc/sysconfig/iptables          //每次開機後,根據保存的規則內容進行重建


2. iptables-restore命令

    用來批量導入Linux防火牆規則,如果已經使用iptables-save命令導出的備份文件,則恢復的過程一瞬間就能完成

[root@localhost ~]# iptables-restore /opt/iptables.txt               //從備份文件中恢復規則


使用防火牆腳本

1. 定義基本變量

    可以在防火牆規則較多時,定義以下變量,一旦網絡環境發生變化,只需改下變量值就可使用

[root@localhost ~]# vim /opt/iptables.sh      //創建腳本文件
#!/bin/bash 
INET_IF= "eth0"                               //外網接口
INET_IP="218.29.30.31"                        //外網接口地址
LAN_IF="eth1"                                 //內網接口
LAN_IP= "192.168.1.1"                         //內網接口地址
LAN_NET="192.168.1.0/24"                      //內網網段
LAN_WWW_IP="192.168.1.6"                      //網站服務器的內部地址
IPT="/sbin/iptables"                          //iptables命令路徑
MOD="/sbin/modprobe"                          //modprobe命令路徑
CTL="/sbin/sysctl"                            //sysctl命令路徑


2. 加載內核模塊

    如果需要啓用的規則數量較多,爲了提高規則設置的效率,保持防火牆的穩定性,建議將用到的各種模塊提前加載到內核中

$MOD ip_tables                 //iptables基本模塊
$MOD ip_conntrack              //連接跟蹤模塊
$MOD ipt_REJECT                //拒絕操作模塊
$MOD ipt_LOG                   //日誌記錄模塊
$MOD ipt_iprange               //支持IP範圍匹配
$MOD xt_tcpudp                 //支持TCP、UDP協議
$MOD xt_state                  //支持狀態匹配
$MOD xt_multiport              //支持多端口匹配
$MOD xt_mac                    //支持MAC地址匹配
$MOD ip_nat_ftp                //支持FTP匹配
$MOD ip_conntrack_ftp          //支持FTP連接跟蹤


3. 調整/proc參數

    在文件夾/proc/sys下存放着與系統相關的一些可控參數,可以直接用來改變內核的行爲,通常作爲Linux內核調優的實時入口,下面列出幾個常用的/proc參數

$CTL -w net.ipv4.ip_forward=1                 //打開路由轉發功能
$CTL -w net.ipv4.ip_default_ttl=128           //修改ICMP響應超時
$CTL -w net.ipv4.icmp_echo_ignore_all=1       //拒絕響應ICMP請求
$CTL -w net.ipv4.icmp_echo_ignore_broadcasts          //拒絕響應ICMP廣播
$CTL -w net.ipv4.tcp_syncookies=1             //啓用SYN Cookie機制
$CTL -w net.ipv4.tcp_syn_retries=3            //最大SYN請求重試次數
$CTL -w net.ipv4.tcp_synack_retries=3         //最大ACK確認重試次數
$CTL -w net.ipv4.tcp_fin_timeout=60           //TCP連接等待超時
$CTL -w net.ipv4.tcp_max_syn_backlog=3200     //SYN請求的隊列長度


4. 設置具體的iptables規則

   iptables的nat表主要用在Linux網關服務器,一般的主機型防火牆很少用到nat表

    iptables的filter表主要用來過濾各種數據包,無論是Linux網關還是一般的Linux服務器都可能用的。主機型的防火牆主要使用INPUT、OUTPUT鏈,而對於網絡型防火牆主要使用FORWARD鏈

$IPT -t filter -X          //刪除各表中自定義的鏈
$IPT -t nat -X             

$IPT -t filter -F          //清空各表中已有的規則
$IPT -t nat -F

$IPT -P INPUT DROP         //設置規則鏈的默認策略
$IPT -P FORWARD DROP
$IPT -P OUTPUT ACCEPT

$IPT -t nat -A POSTROUTING -s $LAN_NET -o $INET_IF -j SNAT --to-source $INET_IP    //SNAT策略,局域網共享上網
$IPT -t nat -A PREROUTING -i $INET_IF -d $INET_IP -p tcp --dport 80 -j DNAT --to-destination $LAN_WWW_IP   //DNAT策略,發佈內部Web服務器

$IPT -A FORWARD -s $LAN_NET -o $INET_IF -p tcp --dport 80 -j ACCEPT       //允許內網與Internet中DNS、FTP、Web服務通信
$IPT -A FORWARD -s $LAN_NET -o $INET_IF -p tcp --dport 20:21 -j ACCEPT
$IPT -A FORWARD -s $LAN_NET -o $INET_IF -p udp --dport 53 -j ACCEPT


5. 執行腳本

    在實際應用中,不要生硬的照搬他人腳本內容,應根據情況進行鍼對型的設計,並做好整天規劃,避免產生通信故障

[root@localhost ~]# chmod +x /opt/iptables.sh     //添加執行權限
[root@localhost ~]# /opt/iptables.sh              //執行腳本文件

[root@localhost ~]# vim /etc/rc.local             //設置爲開機自動執行
/opt/iptables.sh

    對於大多數應用服務器,防火牆只針對本機進行防護,因此filter表中的INPUT、OUTPUT鏈用到的最多,特別是前者



案例:某公司的Web服務器採用RHEL6操作系統,爲了加強網絡訪問的安全性,要求管理員熟悉iptables防火牆規則的編寫,以便制定有效、可行的主機防護策略

需求描述:

(1)調整TCP相關參數,提高抵抗DoS***的能力

(2)只允許訪問本機的Web服務,禁止其他任何形式的入站訪問數據

(3)允許響應本機訪問請求的數據包

實驗步驟:

[root@localhost ~]# vim /opt/iptables_web.sh
#!/bin/bash
# 1. 定義基本變量
IPT="/sbin/iptables"                                                    
CTL="/sbin/sysctl"
# 2. 調整/proc參數
$CTL -w net.ipv4.tcp_syncookies=1             
$CTL -w net.ipv4.tcp_syn_retries=3         
$CTL -w net.ipv4.tcp_synack_retries=3        
$CTL -w net.ipv4.tcp_fin_timeout=60           
$CTL -w net.ipv4.tcp_max_syn_backlog=3200     
# 3. 刪除自定義的鏈、清空已有規則
$IPT -t filter -X          
$IPT -t nat -X             
$IPT -t mangle -X
$IPT -t raw -X
$IPT -t filter -F         
$IPT -t nat -F
$IPT -t mangle -F
$IPT -t raw -F
# 4. 定義默認策略
$IPT -P INPUT DROP         
$IPT -P FORWARD DROP
$IPT -P OUTPUT ACCEPT
# 5. 設置filter表中的規則
$IPT -A INPUT -s $LAN_NET -o $INET_IF -p tcp --dport 80 -j ACCEPT
$IPT -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章