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
|