程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> PHP基礎知識 >> iptables從入門到精通基礎教程

iptables從入門到精通基礎教程

編輯:PHP基礎知識
 

一.主要知識點:

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 如圖: 1707011866 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  
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved