iptables 封包過瀘規則
时间:2007-01-15 来源:darrenshen
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 設置時要搞清楚的地方。
- PREROUTING
封包進入網路卡介面的時候
- POSTROUTING
封包即將離開網路介面的時候
- FORWARD
封包在轉送的時候,如(從 A 到 B 網段)
- INPUT
到達本機的封包
- OUTPUT
離開本機的封包
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
#清除所有規則 |
範列:一台單純只提供 HTTP 服務的主機 (HTTP Server)
思考:
提供服務:是 (HTTP:80)
提供 forwarding:否
主機是否可任意連線:是
應用:同意特定的 INPUT、不同意 FORWARD、同意任何 OUTPUT
#清除所有規則 |
範列:一台只提供 NAT 服務的主機,內部網段為 192.168.1.0/24 (eth1)、出去的網段為 11.22.33.44 (eth0)
思考:
提供服務:否
提供 forwarding:是
主機可任意連線:是
應用:不同意 INPUT、同意 FORWARD、同意任何 OUTPUT
#開啟核心 forwarding |
範列:記錄企圖使用 ssh (22) 進入的封包
思考:
記錄 HTTP 封包資訊:是 ssh (22)
提供服務:是 (HTTP: 80)
提供 forwarding:否
主機可主動對外連線:是
應用:不同意 INPUT、不同意 FORWARD、同意 OUTPUT
#清除所有規則 |
範列: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 |