歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> Linux教程 >> RHEL5.7下iptables防火牆配置

RHEL5.7下iptables防火牆配置

日期:2017/2/28 16:03:40   编辑:Linux教程
iptables是與最新的 2.6.x 版本Linux 內核集成的 IP 信息包過濾系統。如果 Linux 系統連接到因特網或LAN、服務器或連接 LAN 和因特網的代理服務器, 則該系統有利於在 Linux 系統上更好地控制 IP 信息包過濾和防火牆配置。iptables 的一個重要優點是,它使用戶可以完全控制防火牆配置和信息包過濾。您可以定制自己的規則來滿足您的特定需求,從而只允許您想要的網絡流量進入系統。另外,iptables 是免費的,這對於那些想要節省費用的人來說十分理想,它可以代替昂貴的防火牆解決方案,並且其性能不輸於一些專業的硬件防火牆。
iptables的管理命令介紹
在iptables防火牆中,它所有功能都是通過命令的形式實現的,因此iptables命令格式非常重要。iptables命令的操作對象包括:
規則表(table):由規則鏈的集合組成,不同的規則表用於實現不同的功能
規則鏈(chain):由規則的集合組成,保存在規則表中;不同規則鏈代表了不同的數據包流向。
規則(rule):用於對防火牆策略進行設置,流經某個數據鏈的數據將按照先後順序進行過濾。
一條完整的iptables命令由以下幾個部分組成:
iptables [-t 表名] <命令> [鏈名] [規則號] [規則] [-j 目標]
-t選項用於指定所使用的表,iptables防火牆默認有filter、nat和mangle這3張表,也可以是用戶自定義的表。表中包含了分布在各個位置的鏈,iptables命令所管理的規則就是存在於各種鏈中的。該選項不是必需的,如果未指定一個具體的表,則默認使用的是filter表。
命令選項是必須要有的,它告訴iptables要做什麼事情,是添加規則、修改規則還是刪除規則。有些命令選項後面要指定具體的鏈名稱,而有些可以省略,此時,是對所有的鏈進行操作。還有一些命令要指定規則號。具體的命令選項名稱及其與後續選項的搭配形式如下所示。
針對規則鏈<命令>的操作有:
-L 列出鏈中所有的規則
-F 清除鏈中的所有規則
-P 設置鏈的默認動作(ACCEPT/REJECT/DROP)
-Z 計數器清零
-N 定義一個新的規則鏈
-X 刪除定義的規則鏈
針對規則<命令>的操作有:
-A 追加一個規則
-I 插入一個規矩
-D 刪除一個規則
-R 在指定的鏈中用新的規則置換掉某一規則號的舊規則
查詢iptables防火牆的狀態(列出所有規則)
iptables –L

由上圖可知,iptables設有三個[鏈名],即input、forward和output,默認規則均為accept放行,我們可以分別通過這三個規則鏈調用不同的策略。
以上是有關iptables命令格式中有關命令和規則鏈選項部分的解釋。iptables命令格式中的規則部分由很多選項構成,主要指定一些IP數據包的特征。例如,上一層的協議名稱、源IP地址、目的IP地址、進出的網絡接口名稱等,下面列出構成[規則號] [規則]的常見選項。
-p <協議類型>:指定上一層協議,可以是icmp、tcp、udp和all。
-s <IP地址/掩碼>:指定源IP地址或子網。
-d <IP地址/掩碼>:指定目的IP地址或子網。
-i <網絡接口>:指定數據包進入的網絡接口名稱。
-o <網絡接口>:指定數據包出去的網絡接口名稱。
注意:上述選項可以進行組合,每一種選項後面的參數前可以加"!",表示取反。
對於-p選項來說,確定了協議名稱後,還可以有進一步的子選項,以指定更細的數據包特征。常見的子選項如下所示。
-p tcp --sport <port>:指定TCP數據包的源端口。
-p tcp --dport <port>:指定TCP數據包的目的端口。
-p tcp --syn:具有SYN標志的TCP數據包,該數據包要發起一個新的TCP連接。
-p udp --sport <port>:指定UDP數據包的源端口。
-p udp --dport <port>:指定UDP數據包的目的端口。
-p icmp --icmp-type <type>:指定icmp數據包的類型,可以是echo-reply、echo-request等。
上述選項中,port可以是單個端口號,也可以是以port1:port2表示的端口范圍。每一選項後的參數可以加"!",表示取反。
最後,iptables命令中的-j選項可以對滿足規則的數據包執行指定的操作,其後的[-j 目標]可以是以下內容:
-j ACCEPT:將與規則匹配的數據包放行,並且該數據包將不再與其他規則匹配,而是跳向下一條鏈繼續處理。
-j REJECT:拒絕所匹配的數據包,並向該數據包的發送者回復一個ICMP錯誤通知。該處理動作完成後,數據包將不再與其他規則匹配,而且也不跳向下一條鏈。
-j DROP:丟棄所匹配的數據包,不回復錯誤通知。該處理動作完成後,數據包將不再與其他規則匹配,而且也不跳向下一條鏈。
-j LOG:將與規則匹配的數據包的相關信息記錄在日志(/var/log/message)中,並繼續與其他規則匹配。
舉例:

在配置iptables之前,首先查詢iptabels軟件包有沒有安裝(默認已安裝)
rpm -q iptables
iptables服務啟動腳本/etc/rc.d/init.d/iptables
配置文件位置 /etc/sysconfig/iptables-config
策略文件位置 /etc/sysconfig/iptables (默認文件不存在)
iptables命令即時生效,但是不保存的話重啟後就會消失,保存命令:
iptables-save &gt; /etc/sysconfig/iptables
將命令保存在iptables策略文件中,重啟後可立即應用。也可以使用以下命令進行保存:
service iptables save
將iptables-save命令保存的防火牆策略恢復到當前系統中
iptables-restore
開啟iptables防火牆
service iptables start
基於單個服務器的iptables防火牆配置
基於單個服務器防火牆的配置主要包括回環口的處理、狀態檢測以及協議和端口的處理。
例如一個普通的web服務器的典型防護配置:
iptables -A INPUT -i lo -j ACCEPT \\允許訪問服務器的lo回環口
iptables -A INPUT -p tcp -m multiport --port 22,80 -j ACCEPT \\開放服務器的22和80端口
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT \\狀態檢測,允許建立連接和相關連接
iptables -P INPUT DROP \\不匹配以上條件的數據包全部丟棄
這裡涉及到iptables防火牆的一些 [擴展規則],iptables軟件包提供了一套擴展的規則選項。使用時需要通過-m選項指定模塊的名稱,再使用該模塊提供的選項。下面列出幾個模塊名稱和其中的選項,大部分的選項也可以通過"!"取反。
-m multiport --sports <port, port, …>
功能:指定數據包的多個源端口,也可以以port1:port2的形式指定一個端口范圍。
-m multiport --dports <port, port, …>
功能:指定數據包的多個目的端口,也可以以port1:port2的形式指定一個端口范圍。
-m multiport --ports <port, port, …>
功能:指定數據包的多個端口,包括源端口和目的端口,也可以以port1:port2的形式指定一個端口范圍。
-m state --state <state>
功能:指定滿足某一種狀態的數據包,state可以是INVALID、ESTABLISHED、NEW和RELATED等,也可以是它們的組合,用","分隔。
-m connlimit --connlimit-above <n>
功能:用於限制客戶端到一台主機的TCP並發連接總數,n是一個數值。
-m mac --mac-source <address>
功能:指定數據包的源MAC地址。
現在我們在虛擬機環境下進行測試,仍然引用之前那個靜態路由的環境

在RHEL-B上輸入剛才的4條命令
iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -p tcp -m multiport --port 22,80 -j ACCEPT
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -P INPUT DROP
查看INPUT規則:

在RHEL-B上開啟vsftpd和httpd服務(分別為21端口和80端口)
service httpd start
service vsftpd start
在RHEL-A上使用命令測試,發現都是成功的
telnet 192.168.20.1 80
telnet 192.168.20.1 22
使用ftp命令去連接
ftp 192.168.20.1
發現許久連接不上,說明ftp的21端口沒有開啟。當然如果去ping的話,也是失敗的。這意味著iptables防火牆的命令生效,只開放了ssh和http服務。
保存剛才的iptables策略,即會生成/etc/sysconfig/iptables文件
service iptables save


這樣一個簡單的基於主機的iptables防火牆就配置成功了。
Copyright © Linux教程網 All Rights Reserved