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