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