天天看點

iptables的備份及腳本構成

    在Linux中,iptables為我們提供了批量備份與恢複規則的指令,防火牆腳本實際上是一個shell腳本程式,便于使用shell變量、程式控制邏輯,在需要重用、移植使用時會非常友善,隻需修改下變量值就可使用

iptables的備份及還原

    防火牆規則的批量備份、還原用到兩個指令,即iptables-save和iptables-restore,分别用來儲存和恢複

1. iptables-save指令

    用來批量導出防火牆規則,直接執行指令時,将顯示目前啟用的所有規則

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

<code>[root@localhost ~]</code><code># iptables-save</code>

<code># Generated by iptables-save v1.4.7 on Sun Jan  7 06:07:58 2018      //注釋</code>

<code>*filter                                                              </code><code>//</code><code>所在的表</code>

<code>:INPUT ACCEPT [0:0]                                                  </code><code>//</code><code>鍊名,預設政策</code>

<code>:FORWARD ACCEPT [0:0]</code>

<code>:OUTPUT ACCEPT [41:5449]</code>

<code>-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT              </code><code>//</code><code>規則,省略了iptables</code>

<code>-A INPUT -p icmp -j ACCEPT </code>

<code>-A INPUT -i lo -j ACCEPT </code>

<code>-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT </code>

<code>-A INPUT -j REJECT --reject-with icmp-host-prohibited </code>

<code>-A FORWARD -j REJECT --reject-with icmp-host-prohibited </code>

<code>COMMIT                                                               </code><code>//</code><code>送出前面的規則設定</code>

<code># Completed on Sun Jan  7 06:07:58 2018</code>

<code>[root@localhost ~]</code><code># iptables-save &gt; /opt/iptables.txt                //備份所有表的規則</code>

<code>[root@localhost ~]</code><code># iptables-save &gt; /etc/sysconfig/iptables          //每次開機後,根據儲存的規則内容進行重建</code>

2. iptables-restore指令

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

<code>[root@localhost ~]</code><code># iptables-restore /opt/iptables.txt               //從備份檔案中恢複規則</code>

使用防火牆腳本

1. 定義基本變量

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

<code>[root@localhost ~]</code><code># vim /opt/iptables.sh      //建立腳本檔案</code>

<code>#!/bin/bash </code>

<code>INET_IF= </code><code>"eth0"</code>                               <code>//</code><code>外網接口</code>

<code>INET_IP=</code><code>"218.29.30.31"</code>                        <code>//</code><code>外網接口位址</code>

<code>LAN_IF=</code><code>"eth1"</code>                                 <code>//</code><code>内網接口</code>

<code>LAN_IP= </code><code>"192.168.1.1"</code>                         <code>//</code><code>内網接口位址</code>

<code>LAN_NET=</code><code>"192.168.1.0/24"</code>                      <code>//</code><code>内網網段</code>

<code>LAN_WWW_IP=</code><code>"192.168.1.6"</code>                      <code>//</code><code>網站伺服器的内部位址</code>

<code>IPT=</code><code>"/sbin/iptables"</code>                          <code>//iptables</code><code>指令路徑</code>

<code>MOD=</code><code>"/sbin/modprobe"</code>                          <code>//modprobe</code><code>指令路徑</code>

<code>CTL=</code><code>"/sbin/sysctl"</code>                            <code>//sysctl</code><code>指令路徑</code>

2. 加載核心子產品

    如果需要啟用的規則數量較多,為了提高規則設定的效率,保持防火牆的穩定性,建議将用到的各種子產品提前加載到核心中

<code>$MOD ip_tables                 </code><code>//iptables</code><code>基本子產品</code>

<code>$MOD ip_conntrack              </code><code>//</code><code>連接配接跟蹤子產品</code>

<code>$MOD ipt_REJECT                </code><code>//</code><code>拒絕操作子產品</code>

<code>$MOD ipt_LOG                   </code><code>//</code><code>日志記錄子產品</code>

<code>$MOD ipt_iprange               </code><code>//</code><code>支援IP範圍比對</code>

<code>$MOD xt_tcpudp                 </code><code>//</code><code>支援TCP、UDP協定</code>

<code>$MOD xt_state                  </code><code>//</code><code>支援狀态比對</code>

<code>$MOD xt_multiport              </code><code>//</code><code>支援多端口比對</code>

<code>$MOD xt_mac                    </code><code>//</code><code>支援MAC位址比對</code>

<code>$MOD ip_nat_ftp                </code><code>//</code><code>支援FTP比對</code>

<code>$MOD ip_conntrack_ftp          </code><code>//</code><code>支援FTP連接配接跟蹤</code>

3. 調整/proc參數

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

<code>$CTL -w net.ipv4.ip_forward=1                 </code><code>//</code><code>打開路由轉發功能</code>

<code>$CTL -w net.ipv4.ip_default_ttl=128           </code><code>//</code><code>修改ICMP響應逾時</code>

<code>$CTL -w net.ipv4.icmp_echo_ignore_all=1       </code><code>//</code><code>拒絕響應ICMP請求</code>

<code>$CTL -w net.ipv4.icmp_echo_ignore_broadcasts          </code><code>//</code><code>拒絕響應ICMP廣播</code>

<code>$CTL -w net.ipv4.tcp_syncookies=1             </code><code>//</code><code>啟用SYN Cookie機制</code>

<code>$CTL -w net.ipv4.tcp_syn_retries=3            </code><code>//</code><code>最大SYN請求重試次數</code>

<code>$CTL -w net.ipv4.tcp_synack_retries=3         </code><code>//</code><code>最大ACK确認重試次數</code>

<code>$CTL -w net.ipv4.tcp_fin_timeout=60           </code><code>//TCP</code><code>連接配接等待逾時</code>

<code>$CTL -w net.ipv4.tcp_max_syn_backlog=3200     </code><code>//SYN</code><code>請求的隊列長度</code>

4. 設定具體的iptables規則

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

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

<code>$IPT -t filter -X          </code><code>//</code><code>删除各表中自定義的鍊</code>

<code>$IPT -t nat -X             </code>

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

<code>$IPT -t nat -F</code>

<code>$IPT -P INPUT DROP         </code><code>//</code><code>設定規則鍊的預設政策</code>

<code>$IPT -P FORWARD DROP</code>

<code>$IPT -P OUTPUT ACCEPT</code>

<code>$IPT -t nat -A POSTROUTING -s $LAN_NET -o $INET_IF -j SNAT --to-</code><code>source</code> <code>$INET_IP    </code><code>//SNAT</code><code>政策,區域網路共享上網</code>

<code>$IPT -t nat -A PREROUTING -i $INET_IF -d $INET_IP -p tcp --dport 80 -j DNAT --to-destination $LAN_WWW_IP   </code><code>//DNAT</code><code>政策,釋出内部Web伺服器</code>

<code>$IPT -A FORWARD -s $LAN_NET -o $INET_IF -p tcp --dport 80 -j ACCEPT       </code><code>//</code><code>允許内網與Internet中DNS、FTP、Web服務通信</code>

<code>$IPT -A FORWARD -s $LAN_NET -o $INET_IF -p tcp --dport 20:21 -j ACCEPT</code>

<code>$IPT -A FORWARD -s $LAN_NET -o $INET_IF -p udp --dport 53 -j ACCEPT</code>

5. 執行腳本

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

<code>[root@localhost ~]</code><code># chmod +x /opt/iptables.sh     //添加執行權限</code>

<code>[root@localhost ~]</code><code># /opt/iptables.sh              //執行腳本檔案</code>

<code>[root@localhost ~]</code><code># vim /etc/rc.local             //設定為開機自動執行</code>

<code>/opt/iptables</code><code>.sh</code>

    對于大多數應用伺服器,防火牆隻針對本機進行防護,是以filter表中的INPUT、OUTPUT鍊用到的最多,特别是前者

案例:某公司的Web伺服器采用RHEL6作業系統,為了加強網絡通路的安全性,要求管理者熟悉iptables防火牆規則的編寫,以便制定有效、可行的主機防護政策

需求描述:

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

(2)隻允許通路本機的Web服務,禁止其他任何形式的入站通路資料

(3)允許響應本機通路請求的資料包

實驗步驟:

18

19

20

21

22

23

24

25

26

27

<code>[root@localhost ~]</code><code># vim /opt/iptables_web.sh</code>

<code>#!/bin/bash</code>

<code># 1. 定義基本變量</code>

<code>IPT=</code><code>"/sbin/iptables"</code>                                                    

<code>CTL=</code><code>"/sbin/sysctl"</code>

<code># 2. 調整/proc參數</code>

<code>$CTL -w net.ipv4.tcp_syncookies=1             </code>

<code>$CTL -w net.ipv4.tcp_syn_retries=3         </code>

<code>$CTL -w net.ipv4.tcp_synack_retries=3        </code>

<code>$CTL -w net.ipv4.tcp_fin_timeout=60           </code>

<code>$CTL -w net.ipv4.tcp_max_syn_backlog=3200     </code>

<code># 3. 删除自定義的鍊、清空已有規則</code>

<code>$IPT -t filter -X          </code>

<code>$IPT -t mangle -X</code>

<code>$IPT -t raw -X</code>

<code>$IPT -t filter -F         </code>

<code>$IPT -t mangle -F</code>

<code>$IPT -t raw -F</code>

<code># 4. 定義預設政策</code>

<code>$IPT -P INPUT DROP         </code>

<code># 5. 設定filter表中的規則</code>

<code>$IPT -A INPUT -s $LAN_NET -o $INET_IF -p tcp --dport 80 -j ACCEPT</code>

<code>$IPT -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT</code>

<code></code>

本文轉自 楊書凡 51CTO部落格,原文連結:http://blog.51cto.com/yangshufan/2058232,如需轉載請自行聯系原作者

繼續閱讀