Transcript Filter 表
Iptables and Linux 防火牆 Netfilter Wei-li Tang July 14, 2010 1 Outline 為何需要防火牆? Linux 防火牆 Netfilter Setting Netfilter Up iptables 2 為何需要防火牆? 限制某些服務的存取來源 防止未經同意與不明的連線傳輸 例如 限制僅來自學校的IP位址可連到我的FTP站。 限制外人只能連到我電腦上的HTTP Server, 但不能連到其他Port。 3 Linux 防火牆 Netfilter Linux 核心的封包過濾架構 設定工具 iptables (>= Linux 2.4) ipchains (Linux 2.2) ipfwadm (Linux 2.0) 4 Linux 防火牆 其他作業系統的防火牆 Windows Internet Connection Firewall (ICF) (>= XPSP1) BSD OpenBSD PF (Packet Filter) (ported to FreeBSD) IPFILTER (IPF) IPFIREWALL (IPFW) (sponsored by FreeBSD) 5 Netfilter 功能 不只是防火牆 (IP分享器) 延伸應用 NAT 辨識並處理 P2P 流量 (Layer 7 Filter) 網路限速…等 Image Ref.: http://cha.homeip.net/blog/ 6 Netfilter Packet Flow 7 Netfilter 網路介面 Interface 表 Table 鏈 Chain Packet Flow 接收封包 IN 送出封包 OUT Raw / Mangle / NAT 表 PREROUTING POSTROUTING 目的地為本機 Filter 表 目的地非本機 INPUT FORWARD 本機程式 Localhost OUTPUT 8 Netfilter Filter 管制連入本機的連線 OUTPUT: 管制自本機連出的連線 FORWARD: 管制連往他處的連線 INPUT: 僅適用於路由器(Router)功能起動時 9 Setting Netfilter Up 簡單的設定工具 system-config-securitylevel 10 Setting Netfilter Up 簡單的設定工具 (Uncomplicated Firewall) 簡化套件 Firestarter 圖型防火牆設定套件 ufw 11 Setting Netfilter Up 以上都是鄉民在用的工具。 專家只用:iptables 12 iptables 基本參數 : 設定表格(預設為 “filter”) -[A|D|F|I|P] <chain> -t -A <chain> : 增加規則(rule) -D <chain> <rulenum> : 刪除第<rulenum>條規則 -F <chain> : 清除所有 <chain> 的規則 -I <chain> <rulenum> : 在第<rulenum>條插入規則 -P <chain> <target> : 設定該<chain>的預設規則 -j target = ACCEPT, DROP …etc. : 處理方式 (ACCEPT, DROP, REJECT…) 13 iptables 特徵參數 : Layer 4 通訊協定 (tcp, udp…etc.) -m : match extension -s : 來源 IP 位址 (source) --sport : 來源 Port 埠號 -d : 目的 IP 位址 (destination) --dport : 目的 Port 埠號 -p 14 iptables 範例 當 INPUT Policy 為 DROP Policy 設定方式 iptables -P INPUT DROP 註: 任何連線連入,若無符合任何條件,即直接捨棄。 加入一條允許連入網頁伺服器的規則 iptables -A INPUT -p tcp --dport 80 -j ACCEPT 指定 Chain (鏈) 通訊協定 埠號 處理方式 15 iptables 比對規則的順序(優先權) 將規則由上而下依序比對 越上面的規則,優先權越高 一旦該連線符合某規則,即停止比對 Netfilter Last Rule 該規則以下的規則將不會影響該連線 善用 Rule 1 Rule 2 Rule 3 ……. ……. iptables -L 檢視現有規則 必要時加上 -n 參數將所有協定與位址以數字表示 16 iptables 實戰:CentOS 5.5 自創的 Chain: RH-Firewall-1-INPUT 功能等同 INPUT 註:自 Fedora 13 改回使用 INPUT 設定檔 /etc/sysconfig/iptables 起動/關閉/重新起動 iptables 規則 /etc/init.d/iptables <start|stop|restart> 17 iptables /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 # 接受 IPv6-in-IPv4 通道封包 -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 Red Hat 系列的 -m state 哲學 State 種類 NEW, ESTABLISHED, RELATED, INVALID TCP/Reliable Protocol State Transition 逐條接受各種條件「建立」連線 (NEW) 嗣後一切已建立(ESTABLISHED)/相關(RELATED)連線由一條 規則同意接受 -A RH-Firewall-1-INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT 優點:已建立連線的封包可不必在上述條件之後繼續 match 19 iptables 規則數量對效能的影響 約超過100條規則後會漸降低效能 Ref.: József Kadlecsik, György Pásztor “Netfilter Performance Testing”. 20 實習 請試著將 SSH Listen Port 從 22 修改為 2222,並於防 火牆設定做相對應的修改。 1. 請試著允許外人連入網頁伺服器 (HTTP)。 請試著禁止特定 IP 位址連入網頁伺服器。 2. 3. 您可以詢問隔壁同學的 IP 位址進行測試。 請試著禁止從本機連到其他網站的 SSH 連線。 4. 5. 註:OpenSSH Daemon 設定檔為 sshd_config. 如果在遠端電腦練習,請特別注意可能的斷線問題。 使用 OUTPUT Chain REJECT 與 DROP 的不同處? 21 Appendix Layer 4 協定代碼 用於 -p 參數 /etc/protocols Service Port Number 服務的名稱與埠號 用於 --sport 與 --dport 參數 /etc/services 22 Reference IPTABLES(8) man -s 8 iptables netfilter.org 鳥哥的 Linux 私房菜 - Linux 防火牆與 NAT 主機 圖書館藏 iptables 速查手冊 = Linux iptables pocket reference / Gregor N. Purdy原著; 林長毅編譯, 歐萊禮, 2004. Linux firewalls : attack detection and response with iptables, psad, and fwsnort / by Michael Rash Linux 23 實習 (參考答案) Press any key or remove the mask. 1. /etc/ssh/sshd_config: Port 2222 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.10.39.161 --dport 80 -j REJECT 2. 3. 4. 5. 10.10.39.161 為欲禁止的來源 IP 位址 iptables -A OUTPUT -p tcp --dport 22 -j REJECT REJECT 會回覆 ICMP,DROP 則會直接捨棄封包。 24