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