iptables從入門到精通

 一.主要知識點:

1. Iptables錶鏈結構
2. 數據包過濾流程
3. Iptables書寫規則
4. Iptables條件匹配
5. Iptables數據包控制
6. Iptables七層過濾
7. Iptables腳本
二.具體的知識點介紹
1. Iptables錶鏈結構
1)默認的4個規則表
*         raw表:確定是否對該數據包進行狀態跟蹤
*         mangle表:爲數據包設置標記
*         nat表:修改數據包中的源、目標IP地址或端口
*         filter表:確定是否放行該數據包(過濾)
2)默認的5種規則鏈
*         INPUT:處理入站數據包
*         OUTPUT:處理出站數據包
*         FORWARD:處理轉發數據包
*         POSTROUTING鏈:在進行路由選擇後處理數據包
*         PREROUTING鏈:在進行路由選擇前處理數據包
2. 數據包過濾流程
規則表間的優先順序
*         依次爲:raw à mangle à nat à filter
規則鏈間的匹配順序
*         入站數據:PREROUTING à INPUT
*         出站數據:OUTPUT à POSTROUTING
*         轉發數據:PREROUTING à FORWARD à POSTROUTING
如圖:
 

3. Iptables書寫規則
iptables命令的語法格式
*         iptables [-t 表名] 管理選項 [鏈名] [條件匹配] [-j 目標動作或跳轉]
幾個注意事項
*         不指定表名時,默認表示filter表
*         不指定鏈名時,默認表示該表內所有鏈
*         除非設置規則鏈的缺省策略,否則需要指定匹配條件
清除規則
*         -D:刪除指定位置或內容的規則
*         -F:清空規則鏈內的所有規則
*         -Z:清空計數器
自定義規則鏈
*         -N:創建一條新的規則鏈
*         -X:刪除自定義的規則鏈
其他
*         -h:查看iptables命令的使用幫助
例如:
[root@localhost ~]# iptables -t filter -A INPUT -p tcp -j ACCEPT
[root@localhost ~]# iptables -I INPUT -p udp -j ACCEPT
[root@localhost ~]# iptables -I INPUT 2 -p icmp -j ACCEPT
[root@localhost ~]# iptables -P INPUT DROP
[root@localhost ~]# iptables -L INPUT --line-numbers
Chain INPUT (policy DROP)
num target     prot opt source               destination
1    ACCEPT     udp -- anywhere             anywhere
2    ACCEPT     icmp -- anywhere             anywhere
3    ACCEPT     tcp -- anywhere             anywhere
 
4. Iptables條件匹配
1)通用條件匹配
協議匹配
*         使用“-p 協議名”的形式
*         協議名可使用在“/etc/protocols”文件中定義的名稱
*         常用的協議包括tcp、udp、icmp等
地址匹配
*         使用“-s 源地址”、 “-d 目標地址”的形式
*         地址可以是單個IP地址、網絡地址(帶掩碼長度)
接口匹配
*         使用“-i 網絡接口名”、 “-o 網絡接口名”的形式,分別對應接收、發送數據包的網絡接口
例如:
[root@localhost ~]# iptables -I INPUT -p icmp -j REJECT
[root@localhost ~]# iptables -A FORWARD -p ! icmp -j ACCEPT
[root@localhost ~]# iptables -A FORWARD -s 192.168.1.11 -j REJECT
[root@localhost ~]# iptables -A INPUT -i eth1 -s 172.16.0.0/12 -j DROP
[root@localhost ~]# iptables -A FORWARD -o eth1 -d 61.35.4.3 -j DROP
2)Iptables隱含條件匹配
端口匹配
*         使用“--sport 源端口”、“--dport 目標端口”的形式
*         採用“端口1:端口2”的形式可以指定一個範圍的端口
TCP標記匹配
*         使用“--tcp-flags 檢查範圍  被設置的標記”的形式
*         如“--tcp-flags SYN,RST,ACK SYN”表示檢查SYN、RST、ACK這3個標記,只有SYN爲1時滿足條件
ICMP類型匹配
*         使用“--icmp-type ICMP類型”的形式
*         ICMP類型可以使用類型字符串或者對應的數值,例如Echo-Request、Echo-Reply
例如:
[root@localhost ~]# iptables -A FORWARD -p tcp --dport 22 -j ACCEPT
[root@localhost ~]# iptables -A OUTPUT -p tcp --sport 20:80 -j ACCEPT
[root@localhost ~]# iptables -I INPUT -i eth1 -p tcp --tcp-flags SYN,RST,ACK SYN -j REJECT
[root@localhost ~]# iptables -A INPUT -i eth0 -p icmp --icmp-type Echo-Request -j DROP
[root@localhost ~]# iptables -A INPUT -p icmp --icmp-type Echo-Reply -j ACCEPT
3)Iptables擴展條件匹配
MAC地址匹配
*         使用“-m mac”結合“--mac-source MAC地址”的形式
多端口匹配
*         使用“-m multiport”結合“--sports 源端口列表”或者“--dports 目標端口列表”的形式
*         多個端口之間使用逗號“,”分隔,連續的端口也可以使用冒號“:”分隔
IP地址範圍匹配
*         使用“-m iprange”結合“--src-range 源IP範圍”或者“--dst-range 目標IP範圍” 的形式
*         以“-”符號連接起始IP地址、結束IP地址
例如:
[root@localhost ~]# iptables -A FORWARD -m mac --mac-source 00:0C:29:27:55:3F -j DROP
[root@localhost ~]# iptables -A INPUT -p tcp -m multiport --dport 20,21,25,110,1250:1280 -j ACCEPT
[root@localhost ~]# iptables -A FORWARD -p tcp -m iprange --src-range 192.168.1.20-192.168.1.99 -j DROP
5. Iptables數據包控制
常見的數據包處理方式
*         ACCEPT:放行數據包
*         DROP:丟棄數據包
*         REJECT:拒絕數據包
*         LOG:記錄日誌信息,並傳遞給下一條規則處理
*         用戶自定義鏈名:傳遞給自定義鏈內的規則進行處理
*         SNAT:修改數據包的源地址信息
*         DNAT:修改數據包的目標地址信息
[root@localhost ~]# iptables -A INPUT -p tcp --dport 22 -m limit --limit   3/minute --limit-burst 8 -j LOG
[root@localhost ~]# iptables -A INPUT -p tcp --dport 22 -j DROP
[root@localhost ~]# iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o eth0 -j SNAT   --to-source 218.29.30.31
[root@localhost ~]# iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o eth0 -j MASQUERADE
[root@localhost ~]#iptables -t nat -A PREROUTING -i eth0 -d 218.29.30.31 -p tcp --dport 80 -j DNAT --to-destination 192.168.1.6(:80)
6. Iptables七層過濾
1). 整體實現過程
*         添加內核補丁,重新編譯內核,並以新內核引導系統
*         添加iptables補丁,重新編譯安裝iptables
*         安裝l7-protocols協議定義包
*         使用iptables命令設置應用層過濾規則
2). 使用的軟件包列表
*         Linux內核源碼包:linux-2.6.28.8.tar.bz2
*         iptables源碼包:iptables-1.4.2.tar.bz2
*         layer7補丁源碼包:netfilter-layer7-v2.21.tar.gz
*         協議定義包:l7-protocols-2009-05-10.tar.gz
3). layer7應用層協議匹配
*         匹配格式:-m layer7 --l7proto 協議名
*         支持以下常見應用層協議的過濾
*          qq:騰訊公司QQ程序的通訊協議
*          msnmessenger:微軟公司MSN程序的通訊協議
*          msn-filetransfer:MSN程序的文件傳輸協議
*          bittorrent:BT下載類軟件使用的通訊協議
*          xunlei:迅雷下載工具使用的通訊協議
*          edonkey:電驢下載工具使用的通訊協議
*         其他各種應用層協議:ftp、http、dns、imap、pop3……
4). 規則示例:過濾使用qq協議的轉發數據包
*          iptables -A FORWARD -m layer7 --l7proto qq -j DROP
 
7. Iptables腳本
防火牆腳本的一般結構
1).設置網段、網卡、IP地址等變量
2).加載包過濾相關的內核模塊
*          FTP相關:ip_nat_ftp、ip_conntrack_ftp
3).確認開啓路由轉發功能
*          方法1:/sbin/sysctl -w net.ipv4.ip_forward=1
*          方法2:echo 1 > /proc/sys/net/ipv4/ip_forward
*          方法3:修改/etc/sysctl.conf,設置 net.ipv4.ip_forward = 1
4).用於添加的具體防火牆規則內容
*          清空原有規則,建立新的規則
例如:
/sbin/modprobe ip_tables
/sbin/modprobe ip_nat_ftp
iptables -F
iptables -X
iptables -Z
#------------------------default rule ------------------------------
iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -P FORWARD DROP
#------------------------limit packet per second------------------------------
/sbin/iptables -A INPUT -f -m limit --limit 100/sec --limit-burst 100 -j ACCEPT
/sbin/iptables -A INPUT -p tcp -m tcp --tcp-flags SYN,RST,ACK SYN -m limit --limit 20/sec --limit-burst 200 -j ACCEPT
/sbin/iptables -A INPUT -p icmp -m limit --limit 12/min --limit-burst 2 -j DROP
#------------------------ssh rule -------------------------------------------
iptables -t filter -A   INPUT -i eth0 -p tcp --dport 22 -j ACCEPT
iptables -t filter -A OUTPUT -o eth0 -p tcp --sport 22 -j ACCEPT
#------------------------www-ftp-mail-dns rule --------------------------------
iptables -t filter -A   INPUT -i   eth0 -p tcp --dport 80     -j ACCEPT
iptables -t filter -A   OUTPUT -o eth0 -p tcp --sport 80     -j ACCEPT
#-------------------------ICMP rule ------------------------------------------
iptables -A INPUT -p icmp --icmp-type echo-request -j ACCEPT
iptables -A INPUT -p icmp --icmp-type echo-reply -j ACCEPT
iptables -A OUTPUT -p icmp --icmp-type echo-request -j ACCEPT
iptables -A OUTPUT -p icmp --icmp-type echo-reply -j ACCEPT
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章