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