iptables 封包過瀘規則
需求
Kernel 2.4.x
參考文件
- pinfo iptables
- netfilter
- Linux 伺服器安全防護 (O'REILLY, ISBN: 986-7794-18-4)
- Linux iptables Pocket reference (O'REILLY, ISBN: 986-7794-39-7)
- Linux Firewalls (New Riders, ISBN: 0735710996)
Linux 在做封包過瀘時,是由 kernel 的 netfilter 在實際做封包的過瀘,並非由 iptables 來做,而 iptables
最主要的功能,是用來設定 netfilter 的規則,iptables 可以用來設計防火牆或封包傳送的規則,也可以顯示目前核心 (kernel)
的 netfilter 過瀘狀態。
netfilter 攔截網路封包,分別有五個地方,這五個地方分別為 PREROUTING、POSTROUTING、INPUT、OUTPUT及
FORWRD。這五個 chains 分別為網路封包旅程時會依其狀態而經過。
以下為這五個 chains 的攔截點圖:
上圖可以很清楚看到這五個 chains 的位置,而封包在經過網路介面時,會判別該封包是會往那裡去,然而也是我們在做 iptables 設置時要搞清楚的地方。
- POSTROUTING
封包即將離開網路介面的時候
- FORWARD
封包在轉送的時候,如(從 A 到 B 網段)
iptables 三種過瀘規則
- filter
這是預設的規則,如果都不指定類別 (table),那麼就會使用 filter 來當做預設的規則,filter 用來過瀘封包的來源 (埠)、目的
(埠) 和其它的類別,filter 可以使用處理 INPUT, OUTPUT,
FORWARD 等 chains.
- nat
nat 可以修改封包的來原和目的,最大的用途是做 NAT 封包偽裝, nat 可以處理 PREROUTING,
POSTROUTING, OUTPUT 等 chains.
- mangle
mangle 可以用來修改封包內特定的欄位,比如 TTL 值,mangle 可以處理 PREROUTING,
POSTROUTING, FORWARD, INPUT,
OUTPUT 等 chains.
iptables 通用指令
iptables -P {Policy} -t {Table} {Command} -j {ACCEPT|DROP|REJECT|LOG}
範列:一台什麼服務都沒有,單純是 Client 的機器 (Desktop)
思考:
提供服務:無
提供 forwarding:無
自己是否可任意上網:是
應用:不同意 INPUT、不同意 FORWARD、同意任何 OUTPUT
#清除所有規則
iptables -F
#把計數器規零
iptables -Z
#清除自訂 chain
iptables -X
##指定預設 policy
#封包可以 OUTPUT
iptables -P OUTPUT ACCEPT
#封包不可以 INPUT
iptables -P INPUT DROP
#封包不可以 FORWARD
iptables -P FORWARD DROP
#允許本機 lo 介面可以使用
iptables -A INPUT -i lo -j ACCEPT
##指定特定規則
#已連線的封包可以連入
iptables -A INPUT -i eth0 -m state --state ESTABLISHED,RELATED -j
ACCEPT
|
範列:一台單純只提供 HTTP 服務的主機 (HTTP Server)
思考:
提供服務:是 (HTTP:80)
提供 forwarding:否
主機是否可任意連線:是
應用:同意特定的 INPUT、不同意 FORWARD、同意任何 OUTPUT
#清除所有規則
iptables -F
#把計數器規零
iptables -Z
#清除自訂 chain
iptables -X
##指定預設 policy
#封包可以 OUTPUT
iptables -P OUTPUT ACCEPT
#封包不可以 INPUT
iptables -P INPUT DROP
#封包不可以 FORWARD
iptables -P FORWARD DROP
#允許本機 lo 介面可以使用
iptables -A INPUT -i lo -j ACCEPT
##指定特定規則
#已連線的封包可以連入
iptables -A INPUT -i eth0 -m state --state ESTABLISHED,RELATED -j
ACCEPT
#允許別台電腦可以使用本機 HTTP (80) 服務
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
|
範列:一台只提供 NAT 服務的主機,內部網段為 192.168.1.0/24 (eth1)、出去的網段為
11.22.33.44 (eth0)
思考:
提供服務:否
提供 forwarding:是
主機可任意連線:是
應用:不同意 INPUT、同意 FORWARD、同意任何 OUTPUT
#開啟核心 forwarding
echo "1" > /proc/sys/net/ipv4/ip_forward
#載入模組
modprobe ip_nat_ftp 2> /dev/null
modprobe ip_nat_irc 2> /dev/null
modprobe ip_conntrack 2> /dev/null
modprobe ip_conntrack_ftp 2> /dev/null
modprobe ip_conntrack_irc 2> /dev/null
#清除所有規則
iptables -F
#把計數器規零
iptables -Z
#清除自訂 chain
iptables -X
#清除所有 nat 規則
iptables -F -t nat
iptables -Z -t nat
iptables -X -t nat
##指定預設 policy
#封包可以 OUTPUT
iptables -P OUTPUT ACCEPT
#封包不可以 INPUT
iptables -P INPUT DROP
#封包不可以 FORWARD
iptables -P FORWARD ACCEPT
#允許本機 lo 介面可以使用
iptables -A INPUT -i lo -j ACCEPT
##指定特定規則
#已連線的封包可以連入
iptables -A INPUT -i eth0 -m state --state ESTABLISHED,RELATED -j
ACCEPT
#執行封包偽裝
iptables -A POSTROUTING -t nat -o ech0 -s 192.168.1.0/24 -j MASQUERADE
|
範列:記錄企圖使用 ssh (22) 進入的封包
思考:
記錄 HTTP 封包資訊:是 ssh (22)
提供服務:是 (HTTP: 80)
提供 forwarding:否
主機可主動對外連線:是
應用:不同意 INPUT、不同意 FORWARD、同意 OUTPUT
#清除所有規則
iptables -F
#把計數器規零
iptables -Z
#清除自訂 chain
iptables -X
##指定預設 policy
#封包可以 OUTPUT
iptables -P OUTPUT ACCEPT
#封包不可以 INPUT
iptables -P INPUT DROP
#封包不可以 FORWARD
iptables -P FORWARD DROP
#允許本機 lo 介面可以使用
iptables -A INPUT -i lo -j ACCEPT
##指定特定規則
#已連線的封包可以連入
iptables -A INPUT -i eth0 -m state --state ESTABLISHED,RELATED -j
ACCEPT
#記錄 ssh (22) 封包
iptables -A INPUT -t tcp --dport 22 -j LOG --log-prefix "SSH
LOG: "
#允許別台電腦可以使用本機 HTTP (80) 服務
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
|
範列:HTTP Server 其實是位於防火牆內的一台機器, 使用 port mapping 每次連到
11.22.33.44 的 80 port 時就轉到內部 192.168.1.5 的 80
思考:
提供服務:否
提供 forwarding:是 (Port mapping 到內部)
主機可主動對外連線:是
應用:不同意 INPUT、同意 FORWARD、同意 OUTPUT、NAT 應用
參考:http://www.study-area.org/tips/NAT-HOWTO/NAT-HOWTO-chn-10.html
/sbin/iptables -t nat -A PREROUTING -d 11.22.33.44
-p tcp --dport 80 -j DNAT --to 192.168.1.5
/sbin/iptables -t nat -A POSTROUTING -d 192.168.1.5 -s 192.168.1.0/24
-p tcp --dport 80 -j SNAT --to 192.168.1.1 |
Last modified: 04/13/2005
|