1. 程式人生 > >iptables總結

iptables總結

dex 狀態 斷開 ati 優化 red 檢測 -s 內存

iptables: 包過濾型防火墻 Firewall: 防火墻,隔離工具;工作於主機或網絡的邊緣,對於進出本主機或網絡的報文根據事先定義好的檢查規則作匹配檢測,對於能夠被規則所匹配到的報文做出相應處理的組件;可分為主機防火墻和網絡防火墻 一. 基礎之4表5鏈 1. 4表 filter: 過濾,當防火墻; nat: 網絡地址轉換,包括地址和端口; mangle:拆解報文,做出修改,封裝報文; raw:關閉nat表上啟用的連接追蹤機制;有追蹤機制(其實就是記憶功能),才能完成NAT轉換 2. 5鏈(內置): PREROUTING INPUT FORWARD OUTPUT POSTROUTING 流入報文經由路徑:PREROUTING --> INPUT 流出報文經由路徑:OUTPUT --> POSTROUTING 轉發報文經由路徑:PREROUTING --> FORWARD --> POSTROUTING 3. 各功能可以實現的位置: filter:INPUT, FORWARD, OUTPUT nat: PREROUTING(DNAT), OUTPUT, POSTROUTING(SNAT) mangle:PREROUTING, INPUT, FORWARD, OUTPUT, POSTROUTING raw:PREROUTING, OUTPUT 4. 路由發生的時刻: 報文進入本機後,用於判斷目標主機; 報文發出之前,判斷經由哪個接口送往下一跳; 5. 小結 iptables:主要是四表五鏈 1) 添加規則時的考量點: (1) 要實現哪種功能,用來判斷添加在哪張表上; (2) 報文流經的路徑,用來判斷添加在哪個鏈上; 2) 鏈:鏈上規則的次序,即為檢查的次序;依據從上到下的順序 (1) 訪問同一應用(比如都訪問22端口),匹配範圍小的放上面; (2) 訪問不同應用,匹配到報文頻率較大的放上面; (3) 盡量將多個規則合並為一個,進行優化; (4) 設置默認策略; 功能的優先級次序:raw --> mangle --> nat --> filter 6. 規則說明: 組成部分:報文的匹配條件,匹配到之後處理動作 1) 匹配條件:根據協議報文特征指定,比如tcp, ip,udp等報文特征 基本匹配條件 擴展匹配條件 2) 處理動作: 內建處理機制,比如drop, reject 自定義處理機制, 用於跳轉到自定義鏈 註意:報文不會經過自定義鏈,只能在內置鏈上通過規則進行引用後生效; 二. iptables命令: 它是一個規則生成器,相關操作有添加、修改、刪除、顯示等; 規則和鏈有計數器: pkts:由規則或鏈所匹配到的報文的個數; bytes:由規則或鏈匹配到的所有報文大小之和; iptables命令: iptables [-t table] {-A|-D} chain rule-specification iptables [-t table] -I chain [rulenum] rule-specification iptables [-t table] -R chain rulenum rule-specification iptables [-t table] -D chain rulenum iptables [-t table] -S [chain [rulenum]] iptables [-t table] {-F|-L|-Z} [chain [rulenum]] [options...] iptables [-t table] -N chain iptables [-t table] -X [chain] iptables [-t table] -P chain target iptables [-t table] -E old-chain-name new-chain-name -t table包括:filter, nat, mangle, raw 1. 鏈管理: -F:flush,清空規則鏈;省略鏈,表示清空指定表上的所有的鏈; -N:new, 創建新的自定義規則鏈; -X:drop, 刪除用戶自定義的空的規則鏈; -Z:zero,清零,置零規則計數器; -P:Policy,為指定鏈設置默認策略;對filter表中的鏈而言,默認策略通常有ACCEPT, DROP, REJECT; -E: rEname,重命令自定義鏈;引用計數不為0的自定義鏈,無法改名,也無法刪除; 2. 規則管理: -A:append,將新規則追加於指定鏈的尾部; -I:insert,將新規則插入至指定鏈的指定位置; -D:delete,刪除指定鏈上的指定規則; 有兩種指定方式: (1) 指定匹配條件; (2) 指定規則編號; -R:replace,替換指定鏈上的指定規則; 3. 查看: -L:list,列出指定鏈上的所有規則,後面還可以跟子參數來顯示更詳細的內容; -n: numberic,以數字格式顯示地址和端口號; -v: verbose,顯示詳細信息; -vv, -vvv --line-numbers:顯示規則編號; -x: exactly, 顯示計數器計數結果的精確值; 4. 匹配條件: 1)基本匹配: [!] -s, --src, --source IP|Netaddr:檢查報文中源IP地址是否符合此處指定的地址範圍,!表示取反; [!] -d, --dst, --destination IP|Netaddr:檢查報文中源IP地址是否符合此處指定的地址範圍; -p, --protocol {tcp|udp|icmp}:檢查報文中的協議,即ip首部中的protocols所標識的協議; -i, --in-interface IFACE:數據報文的流入接口;僅能用於PREROUTING, INPUT及FORWARD鏈上; -o, --out-interface IFACE:數據報文的流出接口;僅能用於FORWARD, OUTPUT及POSTROUTING鏈上; 5. 目標: -j TARGET:jump至指定的TARGET,目標如下 ACCEPT: 接受 DROP: 丟棄 REJECT: 拒絕 RETURN: 返回調用鏈 REDIRECT:端口重定向 LOG: 記錄日誌 MARK:做防火墻標記 DNAT:目標地址轉換 SNAT:源地址轉換 MASQUERADE:地址偽裝 ... 自定義鏈:由自定義鏈上的規則進行匹配檢查 三. 匹配條件之擴展匹配 擴展匹配:包括隱式擴展,顯示擴展,基本格式為-m macth_name --spec_options,例如 -m tcp --dport 22

1. 隱式擴展:對-p protocol指明的協議進行的擴展,可省略-m選項,按協議分類如下;

1) -p tcp --dport PORT[-PORT]:目標端口,可以是單個端口或連續多個端口; --sport PORT[-PORT] --tcp-flags LIST1 LIST2:檢查LIST1所指明的所有標誌位,且這其中,LIST2所表示出的所有標記位必須為1,而余下的必須為0;沒有LIST1中指明的,不作檢查; 6個標誌位: SYN, ACK, FIN, RST, PSH, URG(請求同步,確認號有效,斷開請求,重置連接,推送,緊急指令) 例如: --tcp-flags SYN,ACK,FIN,RST SYN 可以簡寫為--syn,表示檢查tcp連接的第一次請求 2) -p udp --dport --sport 3) -p icmp --icmp-type 可用數字表示其類型: 0:echo-reply 8: echo-request 例如:放行ping的響應報文,就是允許別人ping我 iptables -A OUTPUT -s 172.16.100.9 -p icmp --icmp-type 8 -j ACCEPT iptables -A OUTPUT -d 172.16.100.9 -p icmp --icmp-type 0 -j ACCEPT 2. 顯式擴展: 必須顯式指明使用的擴展模塊(rpm -ql iptables | grep "\.so") CentOS 6: man iptables CentOS 7: man iptables-extensions 1) multiport擴展 以離散方式定義多端口匹配;最多指定15個端口; [!] --source-ports,--sports port[,port|,port:port]...:指明多個離散的源端口,22:25表示連續的端口; [!] --destination-ports,--dports port[,port|,port:port]...:指明多個離散的目標端口; [!] --ports port[,port|,port:port]... :源和目標都行,很少用 ~]# iptables -I INPUT -s 172.16.0.0/16 -d 172.16.100.9 -p tcp -m multiport --dports 22,80 -j ACCEPT ~]# iptables -I OUTPUT -d 172.16.0.0/16 -s 172.16.100.9 -p tcp -m multiport --sports 22,80 -j ACCEPT 2) iprange擴展 指明連續的(但一般是不能擴展為整個網絡)ip地址範圍時使用; [!] --src-range from[-to]:指明連續的源IP地址範圍; [!] --dst-range from[-to]:指明連續的目標IP地址範圍; ~]# iptables -I INPUT -d 172.16.100.9 -p tcp -m multiport --dports 22:23,80 -m iprange --src-range 172.16.100.1-172.16.100.120 -j ACCEPT ~]# iptables -I OUTPUT -s 172.16.100.9 -p tcp -m multiport --sports 22:23,80 -m iprange --dst-range 172.16.100.1-172.16.100.120 -j ACCEPT 3)string擴展 檢查報文中出現的字符串; --algo {bm|kmp},2種比對算法 bm = Boyer-Moore kmp = Knuth-Pratt-Morris [!] --string pattern,從頭到尾進行檢查 ~]# iptables -I OUTPUT -m string --algo bm --string ‘movie‘ -j REJECT (請求可以進,但是不支持響應) 4)time擴展 根據報文到達的時間與指定的時間範圍進行匹配; --datestart --datestop --timestart --timestop --monthdays --weekdays iptables -I INPUT -d 172.16.100.9 -p tcp --dport 80 -m time --timestart 14:00 --timestop 16:00 -j REJECT (UTC格式時間) 5)connlimit擴展 根據每客戶端IP(也可以是地址塊)做並發連接數數量匹配; --connlimit-above n:連接的數量大於n,後面一般跟REJECT iptables -I INPUT -p tcp --dport 22 -m connlimit --conlimit-above 3 -j REJECT --connlimit-upto n: 連接的數量小於等於n,後面一般跟ACCEPT 6)limit擴展 基於收發報文的速率做檢查; 基於令牌桶過濾器來實現速率匹配,理解為發令牌給人去辦事,只有辦完事還了令牌,才能發給下一個人去辦事 --limit rate[/second|/minute|/hour|/day] --limit-burst number(峰值,不是必須的,就是空閑的時候不限速率,先最多給幾個) iptables -A INPUT -d 172.16.100.9 -p icmp --icmp-type 8 -m limit --limit-burst 5 --limit 30/minute -j ACCEPT iptables -A OUTPUT -s 172.16.100.9 -p icmp --icmp-type 0 -j ACCEPT 7)state擴展--重要 根據連接追蹤機制檢查連接的狀態;(在指定時間內,比如6秒,記憶連接記錄,需要用內核內存空間) 調整連接追蹤功能所能夠容納的最大連接數量:/proc/sys/net/nf_conntrack_max 已經追蹤到並記錄下的連接:/proc/net/nf_conntrack 不同協議或連接類型追的時長:/proc/sys/net/netfilter/ 可追蹤的連接狀態: NEW:新發出的請求;連接追蹤模板中不存此連接相關的信息條目,因此,將其識別為第一次發出的請求; ESTABLISHED:NEW狀態之後,連接追蹤模板中為其建立的條目失效之前期間內所進行的通信的狀態; RELATED:相關的連接;如ftp協議的命令連接與數據連接之間的關系; INVALIED:無法識別的連接; 例子1 iptables -I INPUT -d 172.16.100.9 -p tcp --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT iptables -I OUTPUT -s 172.16.100.9 -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT 例子2: PING只響應別人 iptables -A INPUT -d 172.16.100.9 -p icmp --icmp-type 8 -m state --state NEW,ESTABLISHED -j ACCEPT iptables -A OUTPUT -s 172.16.100.9 -p icmp --icmp-type 0 -m state --state ESTABLISHED -j ACCEPT 問題:如何開放被動模式的ftp服務? (1) 裝載ftp追蹤時的專用的模塊: # modprobe nf_conntrack_ftp (2) 放行請求報文: 命令連接:NEW, ESTABLISHED,通過21端口 數據連接:RELATED, ESTABLISHED,隨機端口 # iptables -A INPUT -d LocalIP -p tcp --dport 21 -m state --state NEW,ESTABLISHED -j ACCEPT # iptables -A INPUT -d LocalIP -p tcp -m state --state RELATED,ESTABLISHED -j ACCEPT (3) 放行響應報文: ESTABLISEHD # iptables -A OUTPUT -s LocalIP -p tcp -m state --state ESTABLISHED -j ACCEPT 四. 如何保存及重載規則: 保存規則至指定文件:iptables-save > /PATH/TO/SOMEFILE 從指定文件重載規則:iptables-restore < /PATH/FROM/SOMEFILE CentOS 6: service iptables save 相當於iptables-save > /etc/sysconfig/iptables service iptables restart 相當於iptables-restore < /etc/sysconfig/iptables CentOS 7: 引入了新的iptables前端管理服務工具:firewalld firewalld-cmd firewalld-config 其實centos7中也可以使用iptables,那麽需要先禁用firewalld,方法如下 禁止firewall開機啟動:systemctl disable firewalld.service 關閉firewall: systemctl stop firewalld.service 啟動iptables: service iptables start 關於firewalld:http://www.ibm.com/developerworks/cn/linux/1507_caojh/index.html 五. 回顧和練習: iptables/netfilter netfilter: kernel framework, iptables 四表:filter, nat, mangle, raw 五鏈:PREROUTING, INPUT, FORWARD, OUTPUT, POSTROUTING 子命令: 鏈:-F, -X, -N, -E, -Z, -P, -L 規則:-A, -I, -D, -R -j TARGET: ACCEPT, DROP, REJECT, RETURN, LOG, MARK, DNAT, SNAT, MASQUEARDE, ... 匹配標準: 通用匹配:-s, -d, -p, -i, -o 擴展匹配 隱含擴展: -p tcp: --dport, --sport, --tcp-flags, --syn (--tcp-flags SYN,ACK,FIN,RST SYN) -p udp: --dport, --sport -p icmp: --icmp-type 顯式擴展: -m 練習: 主機防火墻: 放行telnet, ftp, web服務; 放行samba服務; 放行dns服務(查詢和區域傳送); 網絡防火墻: 放行telnet, ftp, web服務; 放行samba服務; 放行dns服務(查詢和區域傳送)

iptables總結