4个表:filter,mangle,nat,raw

3个链:PREROUTING,PREROUTING,PREROUTING

iptabls基本操作示例

查看规则

查看规则集

iptables --list -n

加一个-n以数字形式显示IP和端口,而不是默认的服务名称

修改规则

配置默认规则,不允许数据进入

iptables -P INPUT DROP

允许转发

iptables -P FORWARD ACCEPT

不允许数据流出

iptables -P OUTPUT DROP

添加规则

允许源IP地址为192.168.0.0/24网段的包流进(包括所有的协议,这里也可以指定单个IP)

iptables -A INPUT -s 192.168.0.0/24 -j ACCEPT

允许所有的IP到192.168.0.22的访问

iptables -A INPUT -d 192.168.0.22 -j ACCEPT

开放本机80端口

iptables -A INPUT -p tcp --dport 80 -j ACCEPT

开放本机的ICMP协议

iptables -A INPUT -p icmp --icmp-type echo-request -j ACCEPT

删除规则

删除允许源地址进入的规则

iptables -D INPUT -s 192.168.0.21 -j ACCEPT

iptables服务命令 启动服务

/etc/init.d/iptables start

或者

service iptables start

停止服务

/etc/init.d/iptables stop

或者

service iptables stop

重启服务

/etc/init.d/iptables restart

或者

service iptables restart

空当前的所有规则和计数

清空所有的防火墙规则

iptables -F

删除用户自定义的空链

iptables -X

清空计数

iptables -Z

清空指定链 INPUT 上面的所有规则

iptables -F INPUT

删除指定的链,这个链必须没有被其它任何规则引用,而且这条上必须没有任何规则。

iptables -X INPUT

如果没有指定链名,则会删除该表中所有非内置的链。

把指定链,或者表中的所有链上的所有计数器清零。

iptables -Z INPUT

保存规则

保存设置,将规则保存在/etc/sysconfig/iptables文件里

方法1

/etc/init.d/iptables save

或者

service iptables save

iptables防火墙的配置文件存放于:/etc/sysconfig/iptables

方法2

修改/etc/sysconfig/iptables-config 将里面的IPTABLES_SAVE_ON_STOP=”no”, 这一句的”no”改为”yes”这样每次服务在停止之前会自动将现有的规则保存在 /etc/sysconfig/iptables 这个文件中去。

iptables实用案例

iptables常见操作案例

开启Web服务端口

iptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -A OUTPUT -p tcp --sport 80 -j ACCEPT

开启邮件服务的25、110端口

iptables -A INPUT -p tcp --dport 110 -j ACCEPT
iptables -A INPUT -p tcp --dport 25 -j ACCEPT

开启FTP服务的21端口

iptables -A INPUT -p tcp --dport 21 -j ACCEPT
iptables -A INPUT -p tcp --dport 20 -j ACCEPT

开启DNS服务的53端口,假设本机开启了DNS服务

iptables -A INPUT -p tcp --dport 53 -j ACCEPT

允许icmp服务进出

iptables -A INPUT -p icmp -j ACCEPT
iptables -A OUTPUT -p icmp -j ACCEP

假设OUTPUT默认为DROP的话)

允许loopback,不然会导致DNS无法正常关闭等问题,假设默认INPUT DROP,需要开放

IPTABLES -A INPUT -i lo -p all -j ACCEPT

假设默认OUTPUT DROP,需要开放

IPTABLES -A OUTPUT -o lo -p all -j ACCEPT

减少不安全的端口连接

iptables -A OUTPUT -p tcp --sport 31337 -j DROP
iptables -A OUTPUT -p tcp --dport 31337 -j DROP

说明:有些特洛伊木马会扫描端口31337到31340(即黑客语言中的 elite 端口)上的服务。既然合法服务都不使用这些非标准端口来通信,阻塞这些端口能够有效地减少你的网络上可能被感染的机器和它们的远程主服务器进行独立通信的机会。此外,其他端口也一样,像:31335、27444、27665、20034 NetBus、9704、137-139(smb),2049(NFS)端口也应被禁止。

只允许192.168.0.3的机器进行SSH连接

iptables -A INPUT -s 192.168.0.3 -p tcp --dport 22 -j ACCEPT

如果允许或限制一段IP地址可用192.168.0.0/24表示192.168.0.1-255端的所有IP, 24表示子网掩码数。

iptables -A INPUT -s 192.168.0.0/24 -p tcp --dport 22 -j ACCEPT

注意:指定某个主机或者某个网段进行SSH连接,需要把iptables配置文件中的-A INPUT -p tcp -m tcp --dport 22 -j ACCEPT删除,因为它表示所有地址都可以登陆.

如果只允许除了192.168.0.3的主机外都能进行SSH连接

iptables -A INPUT -s ! 192.168.0.3 -p tcp --dport 22 -j ACCEPT

开启转发功能,在做NAT网络配置时,FORWARD默认规则是DROP时,必须开启数据包转发功能

iptables -A FORWARD -i eth0 -o eth1 -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A FORWARD -i eth1 -o eh0 -j ACCEPT

丢弃坏的TCP包

iptables -A FORWARD -p TCP ! --syn -m state --state NEW -j DROP

处理IP碎片数量,防止DDOS攻击,允许每秒100个

iptables -A FORWARD -f -m limit --limit 100/s --limit-burst 100 -j ACCEPT

设置ICMP包过滤, 允许每秒1个包, 限制触发条件是10个包

iptables -A FORWARD -p icmp -m limit --limit 1/s --limit-burst 10 -j ACCEPT

DROP非法连接

iptables -A INPUT   -m state --state INVALID -j DROP
iptables -A OUTPUT  -m state --state INVALID -j DROP
iptables -A FORWARD -m state --state INVALID -j DROP

允许所有已经建立的和相关的连接

iptables-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables-A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
/etc/rc.d/init.d/iptables save

假设默认为ACCEPT,防止外网用内网IP欺骗

iptables -t nat -A PREROUTING -i eth0 -s 10.0.0.0/8 -j DROP
iptables -t nat -A PREROUTING -i eth0 -s 172.16.0.0/12 -j DROP
iptables -t nat -A PREROUTING -i eth0 -s 192.168.0.0/16 -j DROP

禁止与211.101.46.253的所有连接

iptables -t nat -A PREROUTING -d 211.101.46.253 -j DROP

禁用FTP(21)端口

iptables -t nat -A PREROUTING -p tcp --dport 21 -j DROP

只禁用211.101.46.253地址的FTP连接,其他连接可以进行。

iptables -t nat -A PREROUTING -p tcp --dport 21 -d 211.101.46.253 -j DROP

查看iptable和行号

iptables -nL --line-number

保存当前防火墙配置

service iptables save

手动编辑防火墙策略

vi /etc/sysconfig/iptables

开放本地和Ping

iptables -A INPUT -i lo -j ACCEPT  
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT 
iptables -A INPUT -p icmp -j ACCEPT

配置内网白名单

iptables -A INPUT -s 10.0.0.0/8 -j ACCEPT
iptables -A INPUT -s 172.16.0.0/12 -j ACCEPT
iptables -A INPUT -s 192.168.0.0/16 -j ACCEPT

配置外网白名单

iptables -A INPUT -s 180.168.36.198 -j ACCEPT 
iptables -A INPUT -s 180.168.34.218 -j ACCEPT 
iptables -A INPUT -s 222.73.202.251 -j ACCEPT

控制端口

iptables -A INPUT -p tcp --dport 80 -j ACCEPT 
iptables -A INPUT -p tcp --dport 22 -j ACCEPT

拒绝其它

iptables -A INPUT -j DROP
iptables -A FORWARD -j DROP

开放出口

iptables -A OUTPUT -j ACCEPT

允许本地回环接口(即运行本机访问本机)

iptables -A INPUT -s 127.0.0.1 -d 127.0.0.1 -j ACCEPT

允许已建立的或相关连的通行

iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

允许所有本机向外的访问

iptables -A OUTPUT -j ACCEPT

允许访问22端口

iptables -A INPUT -p tcp --dport 22 -j ACCEPT

允许访问80端口

iptables -A INPUT -p tcp --dport 80 -j ACCEPT

允许ftp服务的21端口

iptables -A INPUT -p tcp --dport 21 -j ACCEPT    #允许FTP服务的21端口
iptables -A INPUT -p tcp --dport 20 -j ACCEPT    #允许FTP服务的20端口
iptables -A INPUT -j reject       #禁止其他未允许的规则访问
iptables -A FORWARD -j REJECT     #禁止其他未允许的规则访问

屏蔽IP

屏蔽单个IP的命令

iptables -I INPUT -s 123.45.6.7 -j DROP

封整个段即从123.0.0.1到123.255.255.254的命令

iptables -I INPUT -s 123.0.0.0/8 -j DROP

封IP段即从123.45.0.1到123.45.255.254的命令

iptables -I INPUT -s 124.45.0.0/16 -j DROP

封IP段即从123.45.6.1到123.45.6.254的命令是

iptables -I INPUT -s 123.45.6.0/24 -j DROP

查看已添加的iptables规则

iptables -L -n -v

删除已添加的iptables规则

#将所有iptables以序号标记显示,执行:

iptables -L -n --line-numbers

比如要删除INPUT里序号为8的规则,执行:

iptables -D INPUT 8

配置允许ssh端口连接

iptables -A INPUT -s 192.168.1.0/24 -p tcp --dport 22 -j ACCEPT

22为你的ssh端口, -s 192.168.1.0/24表示允许这个网段的机器来连接,其它网段的ip地址是登陆不了你的机器的。 -j ACCEPT表示接受这样的请求

允许本地回环地址可以正常使用

iptables -A INPUT -i lo -j ACCEPT

本地回环地址就是那个127.0.0.1,是本机上使用的,它进与出都设置为允许

iptables -A OUTPUT -o lo -j ACCEPT

设置默认的规则

配置默认的不让进

iptables -P INPUT DROP

默认的不允许转发

iptables -P FORWARD DROP

默认的可以出去

iptables -P OUTPUT ACCEPT

配置白名单

允许机房内网机器可以访问

iptables -A INPUT -p all -s 192.168.1.0/24 -j ACCEPT

允许机房内网机器可以访问

iptables -A INPUT -p all -s 192.168.140.0/24 -j ACCEPT

允许183.121.3.7访问本机的3380端口

iptables -A INPUT -p tcp -s 183.121.3.7 --dport 3380 -j ACCEPT

开启相应的服务端口

开启80端口,因为web对外都是这个端口

iptables -A INPUT -p tcp --dport 80 -j ACCEPT

允许被ping

iptables -A INPUT -p icmp --icmp-type 8 -j ACCEPT

已经建立的连接得让它进来

iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

保存规则到配置文件中,任何改动之前先备份,请保持这一优秀的习惯

cp /etc/sysconfig/iptables /etc/sysconfig/iptables.bak

iptables-save > /etc/sysconfig/iptables

检查结果:

cat /etc/sysconfig/iptables

四个表名raw,nat,filter,mangle 五个规则链名 INPUT、OUTPUT、FORWARD、PREROUTING、POSTROUTING filter表包含INPUT、OUTPUT、FORWARD三个规则链

规则带编号

iptables -L INPUT

查看,这个列表看起来更详细

iptables -L -nv

添加一条规则

iptables -A INPUT -s 192.168.1.5 -j DROP

将所有iptables以序号标记显示,执行:

iptables -L -n --line-numbers

比如要删除INPUT里序号为8的规则,执行:

iptables -D INPUT 8

开放指定的端口

允许本地回环接口(即运行本机访问本机)

iptables -A INPUT -s 127.0.0.1 -d 127.0.0.1 -j ACCEPT

允许已建立的或相关连的通行

iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

允许所有本机向外的访问

iptables -A OUTPUT -j ACCEPT

允许访问22端口

iptables -A INPUT -p tcp --dport 22 -j ACCEPT

允许访问80端口

iptables -A INPUT -p tcp --dport 80 -j ACCEPT

允许ftp服务的21端口

iptables -A INPUT -p tcp --dport 21 -j ACCEPT

允许FTP服务的20端口

iptables -A INPUT -p tcp --dport 20 -j ACCEPT

禁止其他未允许的规则访问

iptables -A INPUT -j reject

不允许转发

iptables -A FORWARD -j REJECT

屏蔽恶意主机(比如,192.168.0.8)

iptables -A INPUT -p tcp -m tcp -s 192.168.0.8 -j DROP

屏蔽单个IP的命令

iptables -I INPUT -s 123.45.6.7 -j DROP

封整个段即从123.0.0.1到123.255.255.254的命令

iptables -I INPUT -s 123.0.0.0/8 -j DROP

封IP段即从123.45.0.1到123.45.255.254的命令

iptables -I INPUT -s 124.45.0.0/16 -j DROP

查看已添加的规则

iptables -L -n -v

NAT网络转发规则

内网所有IP:172.16.93.0/24转为10.0.0.1

iptables -t nat -A POSTROUTING -s 172.16.93.0/24  -j SNAT --to-source 10.0.0.1

内网IP192.168.1.100转为10.0.0.1

iptables -t nat -A POSTROUTING -s 192.168.1.100  -j SNAT --to-source 10.0.0.1

假设eth0的IP经常变化,做NAT的方法

iptables -t nat -A POSTROUTING -s 10.8.0.0/255.255.255.0 -o eth0 -j MASQUERADE

ADSL拔号,IP经常变化,做NAT的方法

iptables -t nat -A POSTROUTING -j MASQUERADE -o pppXXX

公网210.14.67.7让内网192.168.188.0/24上网

iptables -t nat -A POSTROUTING -s 192.168.188.0/24 -j SNAT --to-source 210.14.67.127

端口映射,本机的 2222 端口映射到内网 虚拟机的22 端口

iptables -t nat -A PREROUTING -d 210.14.67.127 -p tcp --dport 2222  -j DNAT --to-dest 192.168.188.115:22

配置NAT表防火墙,查看本机关于NAT的设置情况

iptables -t nat -L

-t 参数指定,必须是 raw, nat,filter,mangle 中的一个

带行号查看NAT表

iptables -L -t nat  --line-numbers

删除NAT表POSTROUTING链第一条规则

iptables -t nat -D POSTROUTING 1