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