iptables是與最新的 3.5 版本 Linux 內核集成的 IP 信息包過濾系統。如果 Linux 系統連接到因特網或 LAN、服務器或連接 LAN 和因特網的代理服務器, 則該系統有利於在 Linux 系統上更好地控制 IP 信息包過濾和防火牆配置。
防火牆在做信息包過濾決定時,有一套遵循和組成的規則,這些規則存儲在專用的信息包過濾表中,而這些表集成在Linux內核中。在信息包過濾表中,規則被分組放在我們所謂的鏈(chain)中。而iptables信息包過濾系統是一款功能強大的工具,可用於添加、編輯和移除規則。
規則:就是網絡管理員預定義的條件,規則一般定義爲“如果數據包頭符合這樣的條件,就這樣處理這個數據包”。規則存儲在內核空間的信息包過濾表中,這些規則分別定義了源地址、目的地址、傳輸協議(如TCP,UDP,ICMP)和服務類型(HTTP,FTP,SMTP)等,當數據包與規則匹配時,iptables就根據規則所定義的方法來處理這些數據包,如放行(accept),拒絕(reject),和丟棄(drop)等。配置防火牆主要工作就是添加,修改和刪除這些規則。
鏈:鏈(CHAINS)是數據包傳播的途徑,每一條鏈其實就是衆多規則中的一個檢查清單,每一條鏈可以有一條或數條規則。當一個數據包到達一條鏈時,iptables就從鏈中第一條規則開始檢查,看該數據包是否滿足規則定義的條件。如果滿足,系統就會根據這條規則所定義的方法處理該數據包;否則iptables將繼續檢查下一條規則,如果該數據包不符合鏈中任一條規則,iptables將會按照默認策略來處理數據包。
表:表(tables)提供了特定的功能,iptables內建了3個表,即filter表、nat表、和mangle表。分別用於實現包過濾,網絡地址轉換和包重構的功能
iptables常用命令格式:iptables [-t 表] –命令 匹配 動作
1. 表選項: filter(預設)、nat、mangle
2. 命令選項:用於指定執行方式,包括插入規則、刪除規則、添加規則等。常用命令,見表1:
表1 常用命令
-P |
定義默認策略 |
-L |
查看iptables規則列表 |
-A |
在規則列表最後面添加1條規則 |
-I |
在指定位置插入1條規則 |
-D |
從規則列表中刪除1條規則 |
-F |
刪除表中所有規則 |
3、匹配選項:匹配指定數據包與規則匹配所具有的特徵,包括源地址、目的地址、傳輸協議和端口號。常用匹配選項見表2
表2 常用匹配選項
-p |
指定數據包匹配的協議tcp,udp,icmp等 |
-s |
指定數據包匹配的源地址 |
--sport |
指定數據包匹配的源端口號 |
-d |
指定數據包匹配的目的地址 |
--dport |
指定數據包匹配的目標端口號 |
-j |
後面接動作 |
-i |
入站網卡 |
-o |
出站網卡 |
! |
否 |
4、動作選項:指定當數據包與規則匹配時,應該做什麼操作,如接收,丟棄等 。
表3 常用匹配選項
ACCEPT |
接受數據包 |
DROP |
丟棄數據包 |
實際應用:
iptables針對TCP/IP數據包實施過濾和限制。使用預設的表filter,使用輸入INPUT及輸出OUTPUT鏈限制包的流進及流出。以下介紹一些iptables常用調試方法及示例:
1、設置默認策略:當所有規則不匹配時,使用的就是默認策略:
iptables -P INPUT ACCEPT |
輸入允許 |
iptables -P OUTPUT ACCEPT |
輸出允許 |
2、黑名單:除了設置的黑名單地址不允許過,其他所有的包通過。
iptables -F #清除所有規則 iptables -A INPUT -s 192.0.0.128 –j DROP #增加第1條規則:丟棄源地址 192.0.0.128 數據包 iptables -A INPUT -s 192.0.0.65 -j DROP #增加第2條規則:丟棄源地址 192.0.0.65 數據包
例: 1. 192.0.0.65訪問設備,匹配第1條規則,不匹配,接着匹配第2條規則,匹配上,動作丟棄,設備不響應 2. 192.0.0.129訪問設備,那麼所有規則均不匹配,那麼使用默認策略,IPPUT輸入默認允許,那麼允許數據包通過,訪問設備成功
通過示例可以清楚的看到,黑名單中地址被過濾掉,其他地址允許通過,實現黑名單效果 |
3、白名單:除了設置的白名單地址,禁止其他所有包。
iptables -F #清除所有規則 iptables -A INPUT -s 172.8.4.205 –j ACCEPT #增加第1條規則:允許源地址192.0.0.128通過 iptables -A INPUT -s 172.8.4.199 –j ACCEPT #增加第2條規則:允許源地址192.168.1.100通過 ……………… iptables -A INPUT -j DROP #增加最後一條規則,丟棄 |
4、ftp 服務設置
u 禁用設備ftp服務
iptables -A INPUT -p TCP --dport 21 -j DROP #禁止訪問IPC的21端口,即ftp服務器
u 禁用指定主機訪問設備ftp
iptables -A INPUT -s 192.0.0.65 -p TCP --dport 21 -j DROP #禁止192.0.0.65通過TCP協議訪問設備的21端口
5、telnet服務設置
u iptables -A INPUT -p TCP --dport 23 -j DROP #禁止訪問IPC的23端口,即telnet服務
6、調試
我們常常調試設備時,很多多餘的網絡信息干擾,此時我們可以通過iptables簡單設置幾條規則,就可屏蔽其他的多餘網絡包的干擾。比如要使我們自己一臺主機訪問設備,只需設置允許自己主機通過,禁用其他所有包,就如白名單設置;再如我們PC主機是192.0.0.65,IPC地址時192.0.0.64,我們調試某一WEB接口(80端口)功能,去除其他的一些干擾網絡信息,可做如下地址過濾:
#清除所有規則
iptables -F
#允許192.0.0.65訪問設備TCP的80端口
iptables -A INPUT -s 192.0.0.65 -p tcp -dport 80 -j ACCEPT
#允許本機訪問本機,這條規則要加上,要不然設備內部套接字通信的功能都將失效,比如串口命令等
iptables -A INPUT -s 127.0.0.1 -j ACCEPT
#不允許其他包通過
iptables -A INPUT -j DROP