Iptables and Linux Netfilter Weili Tang July 14

Iptables and Linux 防火牆 Netfilter Wei-li Tang July 14, 2010 1

Outline 為何需要防火牆? n Linux 防火牆 n Netfilter n ¨ Setting n Netfilter Up iptables 2


Linux 防火牆 n Netfilter ¨ Linux n 核心的封包過濾架構 設定 具 ¨ iptables (>= Linux 2. 4) ¨ ipchains (Linux 2. 2) ¨ ipfwadm (Linux 2. 0) 4

Linux 防火牆 n 其他作業系統的防火牆 ¨ Windows n Internet Connection Firewall (ICF) (>= XPSP 1) ¨ BSD Open. BSD PF (Packet Filter) (ported to Free. BSD) n IPFILTER (IPF) n IPFIREWALL (IPFW) (sponsored by Free. BSD) n 5

Netfilter n 功能 ¨ 不只是防火牆 ¨ NAT (IP分享器) ¨ 延伸應用 辨識並處理 P 2 P 流量 (Layer 7 Filter) n 網路限速…等 n Image Ref. : http: //cha. homeip. net/blog/ 6

Netfilter n Packet Flow 7

Netfilter 網路介面 Interface 表 Table n Packet Flow 鏈 Chain 接收封包 IN 送出封包 OUT Raw / Mangle / NAT 表 PREROUTING POSTROUTING 目的地為本機 Filter 表 目的地非本機 INPUT FORWARD 本機程式 Localhost OUTPUT 8


Setting Netfilter Up n 簡單的設定 具 ¨ system-config-securitylevel 10

Setting Netfilter Up n 簡單的設定 具 ¨ ufw (Uncomplicated Firewall) 簡化套件 ¨ Firestarter 圖型防火牆設定套件 11

Setting Netfilter Up 以上都是鄉民在用的 具。 專家只用:iptables 12
![iptables n 基本參數 ¨ -t : 設定表格(預設為 “filter”) ¨ -[A|D|F|I|P] <chain> -A <chain> : iptables n 基本參數 ¨ -t : 設定表格(預設為 “filter”) ¨ -[A|D|F|I|P] <chain> -A <chain> :](http://slidetodoc.com/presentation_image_h2/7eef5e88d3d3f6a7c10aba656d047c5c/image-13.jpg)
iptables n 基本參數 ¨ -t : 設定表格(預設為 “filter”) ¨ -[A|D|F|I|P] <chain> -A <chain> : 增加規則(rule) n -D <chain> <rulenum> : 刪除第<rulenum>條規則 n -F <chain> : 清除所有 <chain> 的規則 n -I <chain> <rulenum> : 在第<rulenum>條插入規則 n -P <chain> <target> : 設定該<chain>的預設規則 n ¨ ¨ -j target = ACCEPT, DROP …etc. : 處理方式 (ACCEPT, DROP, REJECT…) 13

iptables n 特徵參數 ¨ -p : Layer 4 通訊協定 (tcp, udp…etc. ) ¨ -m : match extension ¨ -s : 來源 IP 位址 (source) ¨ --sport : 來源 Port 埠號 ¨ -d : 目的 IP 位址 (destination) ¨ --dport : 目的 Port 埠號 14



iptables n 實戰:Cent. OS 5. 5 ¨ 自創的 Chain: RH-Firewall-1 -INPUT 功能等同 INPUT n 註:自 Fedora 13 改回使用 INPUT n /etc/sysconfig/iptables ¨ 起動/關閉/重新起動 iptables 規則 ¨ 設定檔 n /etc/init. d/iptables <start|stop|restart> 17

iptables n /etc/sysconfig/iptables # Firewall configuration written by system- config-securitylevel # Manual customization of this file is not recommended. *filter # 以下使用 filter 表 (相當 –t filter) : INPUT ACCEPT [0: 0] # INPUT 鏈預設 Policy 為 ACCEPT (相當 –P INPUT ACCEPT) : FORWARD ACCEPT [0: 0] # FORWARD 鏈預設 Policy 為 ACCEPT : OUTPUT ACCEPT [0: 0] # OUTPUT 鏈預設 Policy 為 ACCEPT : RH-Firewall-1 -INPUT - [0: 0] # 建立 RH-Firewall-1 -INPUT 鏈 (自創的鏈無法指定 Policy) -A INPUT -j RH-Firewall-1 -INPUT # INPUT 鏈規則一律參照 RH-Firewall-1 -INPUT 鏈 -A FORWARD -j RH-Firewall-1 -INPUT # FORWARD 鏈規則一律參照 RH-Firewall-1 -INPUT 鏈 -A RH-Firewall-1 -INPUT -i lo -j ACCEPT # 接受 loopback 一切連線 -A RH-Firewall-1 -INPUT -p icmp --icmp-type any -j ACCEPT # 接受所有 icmp 封包 -A RH-Firewall-1 -INPUT -p 41 -j ACCEPT # 接受 IPv 6 -in-IPv 4 通道封包 -A RH-Firewall-1 -INPUT -p 50 -j ACCEPT # 接受 ESP(50) -A RH-Firewall-1 -INPUT -p 51 -j ACCEPT # 接受 AH(51) -A RH-Firewall-1 -INPUT -p udp --dport 5353 -d 224. 0. 0. 251 -j ACCEPT # 接受 MDNS(Avahi) 封包 -A RH-Firewall-1 -INPUT -p udp -m udp --dport 631 -j ACCEPT # 接受網路列印協定(ipp, 631/udp)封包 -A RH-Firewall-1 -INPUT -p tcp -m tcp --dport 631 -j ACCEPT # 接受網路列印協定(ipp, 631/tcp)封包 -A RH-Firewall-1 -INPUT -m state --state ESTABLISHED, RELATED -j ACCEPT # 接受一切已建立與相關連線 -A RH-Firewall-1 -INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT # 接受建立SSH連線 # 在此行加入新規則 -A RH-Firewall-1 -INPUT -j REJECT --reject-with icmp-host-prohibited # 拒絕一切連線並回覆 ICMP COMMIT 18

iptables n Red Hat 系列的 -m state 哲學 ¨ State n 種類 NEW, ESTABLISHED, RELATED, INVALID ¨ TCP/Reliable Protocol State Transition n 逐條接受各種條件「建立」連線 (NEW) n 嗣後一切已建立(ESTABLISHED)/相關(RELATED)連線由一條 規則同意接受 -A RH-Firewall-1 -INPUT -m state --state ESTABLISHED, RELATED -j ACCEPT n 優點:已建立連線的封包可不必在上述條件之後繼續 match 19

iptables n 規則數量對效能的影響 ¨ 約超過100條規則後會漸降低效能 Ref. : József Kadlecsik, György Pásztor “Netfilter Performance Testing”. 20


Appendix n Layer 4 協定代碼 -p 參數 ¨ /etc/protocols ¨ 用於 n Service Port Number 服務的名稱與埠號 --sport 與 --dport 參數 ¨ /etc/services ¨ 用於 22

Reference n IPTABLES(8) ¨ man n -s 8 iptables netfilter. org 鳥哥的 Linux 私房菜 - Linux 防火牆與 NAT 主機 圖書館藏 ¨ Linux iptables 速查手冊 = Linux iptables pocket reference / Gregor N. Purdy原著; 林長毅編譯, 歐萊禮, 2004. ¨ Linux firewalls : attack detection and response with iptables, psad, and fwsnort / by Michael Rash 23

實習 (參考答案) n Press any key or remove the mask. 1. /etc/sshd_config: Port 2222 2. 3. iptables -A RH-Firewall-1 -INPUT -m state --state NEW -m tcp -p tcp --dport 21 -j ACCEPT iptables -A RH-Firewall-1 -INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT iptables -A RH-Firewall-1 -INPUT -m state --state NEW -m tcp -p tcp -s 10. 39. 161 --dport 80 -j REJECT 1. 4. 5. 10. 39. 161 為欲禁止的來源 IP 位址 iptables -A OUTPUT -p tcp --dport 22 -j REJECT 會回覆 ICMP,DROP 則會直接捨棄封包。 24
- Slides: 24