iptables -vnL:
iptables -A INPUT -s 192.168.0.4 -p tcp --dport 23 -j REJECT:
iptables -A INPUT -s 192.168.0.4 -p tcp --dport 23 -j DROP:(访问
拒绝,无任何提示)
iptables -F:刷新策略
iptables -t nat -F PREROUTING:
iptables -I INPUT 2 -p tcp --dport 23 -j DROP:插入到第二条策略
iptables -E allowed disallowed:修改规则链名称
iptables -D INPUT 3:删除filter表中的第三条规则
iptables -D INPUT -s 192.168.0.1 -j DROP:按内容删除
iptables -R INPUT 3 -j ACCEPT:将原来编号为3的规则内容替换为-j
ACCEPT
iptables -P INPUT DROP: 设置filter表INPUT链的默认规则 ,当数据包没
有被规则列表里的任何规则匹配到时,按此默认规则处理
iptables -t nat -F:清空nat策略, -F 仅仅是清空链中规则,并不影响 -P 设
置的默认规则
iptables -t nat -nL:查看nat策略
iptables -t nat -L PREROUTING:查看nat表PREROUTING链的规则
iptables -N redhat:添加自定义链名
iptables -D redhat 1:删除自定义链下的策略
iptables -X redhat:删除自定义链
iptables -A INPUT -s !192.168.0.4 -p tcp --dport 23 -j REJECT:只
有4可以连接
-i eth0:匹配从网络接口 eth0 进来
-o eth0:匹配从网络接口 eth0 出去
-s 192.168.0.1:匹配来自 192.168.0.1 的数据包
-s 192.168.1.0/24 匹配来自 192.168.1.0/24 网络的数据包
-d 202.106.0.20:匹配去往 202.106.0.20 的数据包
-d 202.106.0.0/16 匹配去往 202.106.0.0/16 网络的数据包
-d www.abc.com:匹配去往域名 www.abc.com
-p tcp,udp
-p icmp --icmp-type 8(ping)
--sport 1000:匹配源端口是 1000 的数据包
--sport 1000:3000 匹配源端口是 1000-3000 的数据包(含1000 、 3000

--sport :3000:匹配源端口是 3000 以下的数据包(含 3000 )
--sport 1000: 匹配源端口是 1000 以上的数据包(含 1000 )
-s 192.168.0.1 -d www.abc.com -p tcp --dport 80:匹配来自
192.168.0.1 ,去www.abc.com 的 80 端口的 TCP 协议数据包
iptables -A OUTPUT -m owner --uid-owner 500:匹配特定使用者的包
iptables -A OUTPUT -m owner --gid-owner 501:
iptables -A OUTPUT -m owner --pid-owner 50:
iptables -A OUTPUT -m owner --sid-owner 5:是否为某特定联机
(session id)的封包
iptables -A FORWARD -m mac --mac xx:xx:xx:xx:xx:xx -j DROP:阻
断来自某 MAC 地址的数据包,通过本机
iptables -A INPUT -m mac --mac 00:19:D1:63:AC:15 -p tcp --dport
21 -j DROP(禁止访问本机的ftp)
-j ACCEPT DROP REJECT REDIRECT MASQUERADE LOG DNAT SNAT
MIRROR QUEUE RETURN MARK
POSTROUTING:可以在这里定义进行源NAT的规 则,系统在决定了数据包的路
由以后在执行该链中的规则。
SNAT就是改变转发数据包的源地址--to-source:
PREROUTING:(外部访问内部)可以在这里定义进行 目的NAT的规则,因为路由
器进行路由时只检查数据包的目的ip地址,所以为了使数据包得以正确路由,我们必
须 在路由之前就进行目的NAT;
DNAT就是改变转发数据包的目的地址--to-dest:
MASQUERADE:使用拨号方式,公有地址不固定(地址伪装)
DNAT示例:
INBOUND(进入)
Iptables -t nat -A PREROUTING -p tcp --dport 80 -j DNAT --todest
192.168.0.10
OUTBOUD(输出,带有端口重定向)
iptables -t nat -A OUTPUT -p tcp --dport 80 -j DNAT --to--
dest 192.168.0.100:3128
SNAT示例:
Iptables -t nat -A POSTROUTING -j SNAT --to-source
190.14.1.2
MASQUERADE(地址伪装)
Iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -j MASQUERADE --
to-ports 1024-31000:将源地址是192.168.0.0/24的包的地址改写为防火墙的
NIC ip,并指定端口范围
MIRROR 镜射封包,也就是将来源 IP 与目的地 IP 对调后,将封包送回,进行完
此处理动作后,将会中断过滤程序。
QUEUE 中断过滤程序,将封包放入队列,交给其它程序处理。透过自行开发的处
理程序,可以进行其它应用,例如:计算联机费.......等。
RETURN 结束在目前规则炼中的过滤程序,返回主规则炼继续过滤,如果把自订
规则炼看成是一个子程序,那么这个动作,就相当提早结束子程序并返回到主
程序中。
MARK 将封包标上某个代号,以便提供作为后续过滤的条件判断依据,进行完此
处理动作后,将会继续比对其它规则
iptables -t nat -A POSTROUTING -p tcp --dport 22 -j MARK --set-mark
2
iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -j SNAT --tosource
1.1.1.1:1024-3100:将内网 192.168.0.0/24 的原地址修改为
1.1.1.1,指定端口范围 ,用于 NAT
iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -j SNAT --tosource
1.1.1.1-1.1.1.10:同上,只不过修改成一个地址池里的 IP
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j DNAT --todest
192.168.0.1-192.168.0.20:80-100:把从eth0进来的要访问TCP/80 的数
据包目的地址改为地址池中的
基于状态的匹配扩展 (连接跟踪)
每个网络连接包括以下信 息:源地址、目标地址、源端口、目的端口,称为套
接字对(socket pairs);协议类型、连接状态(TCP协议)和超时时间等。防火墙
把这些信息称为状态(stateful)。状态包过 滤防火墙能在内存中维护一个跟踪状态
的表,比简单包过滤防火墙具备更大的安全性,命令格式如下:
iptables -m state --state
»NEW: 该包想要开始一个新的连接(重新连接或连接重定 向)
»RELATED:该 包是属于某个已建立的连接所建立的新连接。举例:FTP的
数据传输连接和控制连 接之间就是RELATED关系。
»ESTABLISHED:该包属于某个已建立的连接。
»INVALID:该 包不匹配于任何连接,通常这些包被DROP。
例如:
(1)在INPUT链添加一条规则,匹配已建立的连接或由已建立的连接所建
立的新连接。即匹配任何的TCP回应包。
   #iptables -A INPUT -m state --state RELATED,ESTABLISHED
(2)在INPUT链链添加一条规则,匹配任何从非eth0接口来的连接请求
包。
#iptables -A INPUT -m state --state NEW -i !eth0
对于ftp连接能够使用下面的连接跟踪:
(1)被动(Passive)ftp连接模式。
被动模式
client server
xxxx |---|----------|---»| 21
yyyy |---|----------|---»| zzzz
FW1 FW2
#iptables -A INPUT -p tcp --sport 1024: --dport 1024: -m
state –-state ESTABLISHED -j ACCEPT
#iptables -A OUTPUT -p tcp --sport 1024: --dport 1024: -m
state -–state ESTABLISHED,RELATED -j ACCEPT
(2)主动(Active)ftp连接模式
主动模式
client server
xxxx |---|----------|--»| 21
yyyy |«--|----------|---| 20
FW1 FW2
#iptables -A INNPUT -m state –-state ESTABLISHED,RELATED
-j ACCEPT
#iptables -A OUTPUT -p tcp –dport 20 -m state --state
ESTABLISHED -j ACCEPT
limit速率匹配扩展
1)指定单位时间内允许通过的数据包个数
# iptables –A INPUT –m limit --limit 300/hour:表示限制每小时允许通
过300个数据包
2)指定触发事件的阀值(默认值是5)
# iptables –A INPUT –m limit --limit-burst 10:表示一次涌入的封包超
过10个将被直接丢弃
3)同时指定速率限制和触发阀值
# iptables –A INPUT –p icmp –m limit –limit 3/m –limit-burst 3
指定TCP匹配扩展
通过使用--tcp-flags 选项可以根据TCP包的标志位进行过滤,第一个参数为要检查
的标志位;第二个参数是标志位为1的标志
# iptables –A INPUT –p tcp --tcp-flags SYN,FIN,ACK SYN
# iptables –p tcp --syn:表示SYN、ACK、FIN的标志都要检查,但是只有设
置了SYN的才匹配
# iptables –A INPUT –p tcp --tcp-flags ALL SYN,ACK:表示ALL(SYN,
ACK,FIN,RST,USG,PSH)的标志都要检查,但是只有设置了SYN和ACK的才
匹配
iptables -A INPUT -p tcp -m multiport --ports 21,22,25,80,110 -j
ACCEPT:多端口匹配
/etc/services:端口查询
服务器策略:
#!/bin/bash
iptables -F
modprobe ip_conntrack_ftp
modprobe ip_nat_ftp
iptables -A INPUT -i lo -j ACCEPT (lo表示本机回环)
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j
ACCEPT
(允许已建立的连接接收数据)
iptables -A INPUT -m state --state NEW -p tcp --dport 53 -j
ACCEPT
iptables -A INPUT -m state --state NEW -p udp --dport 53 -j
ACCEPT
iptables -A INPUT -m state --state NEW -p tcp --dport 21 -j
ACCEPT
iptables -A INPUT -m state --state NEW -p tcp --dport 22 -j
ACCEPT
iptables -A INPUT -m state --state NEW -p tcp --dport 80 -j
ACCEPT
(iptables -A INPUT -p tcp -m multiport --ports 80,53,21,22 -j
ACCEPT)
iptables -A INPUT -m state --state NEW -j REJECT
iptables -P INPUT DROP
网关策略配置:(内网主机地址为10.0.0.9)
iptables -t nat -F:(清空nat策略)
vi /etc/sysctl.conf
net.ipv4.ip_forward = 1
echo "1" » /proc/sys/net/ipv4/ip_forward
modprobe ip_nat_ftp(因ftp除使用21端口外,还要使用关联的22端口,因
此需要加载ftp模块)
iptables -t nat -A POSTROUTING -o eth0 -j SNAT --to-source
192.168.0.10( 内部网络访问外部时使用192.168.0.10,即公网地址)
(adsl 网络:iptables -t nat -A POSTROUTING -o ppp0 -s 192.168.0.0/
24 -j MASQUERADE)
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j DNAT -
-to-dest 10.0.0.9(外部网络可以访问内部的http服务器)
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 81 -j DNAT -
-to-dest 10.0.0.9:80(端口映射)
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 21 -j DNAT -
-to-dest 10.0.0.9(外部网络可以访问内部的ftp服务器)
限制内网用户:
iptables -A FORWARD -s 192.168.1.4 -j DROP
iptables -A FORWARD -m mac --mac 00:19:D1:63:AC:15 -j DROP
iptables -A FORWARD -d www.163.com -j REJECT
#星期一到星期六的8:00-12:30禁止qq通信
iptables -I FORWARD -p udp --dport 53 -m string --string "tencent"
-m time --timestart 8:15 --timestop 12:30 --days
Mon,Tue,Wed,Thu,Fri,Sat -j DROP
iptables -I FORWARD -p udp --dport 53 -m string --string
"TENCENT" -m time --timestart 8:15 --timestop 12:30 --days
Mon,Tue,Wed,Thu,Fri,Sat -j DROP
#星期一到星期六的8:00-12:30禁止qq网页
iptables -I FORWARD -s 192.168.0.0/24 -m string --string "qq.com"
-m time --timestart 8:15 --timestop 12:30 --days
Mon,Tue,Wed,Thu,Fri,Sat -j DROP
#禁止宽频影院,×××,广告网页连接
iptables -I FORWARD -d 192.168.0.0/24 -m string --string "宽频影院"
-j DROP
iptables -I FORWARD -s 192.168.0.0/24 -m string --string "×××" -j
DROP
iptables -I FORWARD -p tcp --sport 80 -m string --string "广告" -j
DROP
#禁止BT连接
iptables -A FORWARD -m ipp2p --edk --kazaa --bit -j DROP
iptables -A FORWARD -p tcp -m ipp2p --ares -j DROP
iptables -A FORWARD -p udp -m ipp2p --kazaa -j DROP
#限制并发连接数
iptables -A FORWARD -p tcp --syn --dport 80 -m connlimit --
connlimit-above 15 --connlimit-mask 24 -j DROP
打开主机的22号端口,允许远程管理
iptables -A INPUT -i eth0 -s 192.168.1.104 -d 192.168.1.111 -p tcp
--dport 22 -j ACCEPT
iptables -A OUTPUT -o eth0 -d 192.168.1.111 -s 192.168.1.104 -p
tcp --sport 22 -j ACCEPT
iptables-save » /etc/iptables.up.rules
iptables-restore « /etc/iptables.up.rules
iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -p tcp -i eth0 --dport 22 -j ACCEPT
iptables -A INPUT -p tcp -i eth0 --dport 80 -j ACCEPT
iptables -A INPUT -j DROP
iptables -A INPUT -m limit --limit 5/min -j LOG --log-prefix "iptables
denied: " --log-level 7: (将被丢弃的报文记录到syslog中) 每分钟通过5个数据包
技巧:
iptables -A OUTPUT -s 192.168.1.100 -p tcp --dport 80 -j REJECT(不可
访问web)
iptables -A OUTPUT -s 192.168.1.100 -d www.163.com -p tcp --dport
80 -j REJECT
iptables -A OUTPUT -m owner --uid-owner 1000 -j REJECT (特定用户)