三张表:

filter表:内建的规则包括:INPUT、OUTPUT和FORWARD

nat表:内建的规则包括:PREROUTING、OUTPUT、POSTROUTING

mangle表:设置特殊的数据包路由标志规则,内建的规则链包括:PREROUTING、INPUT、FORWARD、POSTROUTING和OUTPUT

五条链:

INPUT链:当一个数据包由内核中的路由计算确定为本地的linux系统后,它会通过INPUT链的检查

OUTPUT链:保留给系统自身生成的数据包

FORWARD链:经过linux系统路由的数据包(既连接两个网络时,两个网络之间的数据包必须流经该防火墙)

PREROUTING链:用于修改目的地址(DNAT)

POSTROUTING链:用于修改源地址(SNAT)

几种状态:

NEW:如果主机向远程机器发出一个连接请求,这个数据包的状态就是NEW

ESTABLISHED:在连接建立后(完成TCP三次握手后),主机间通信的状态为ESTABLISHED

RELATED:和现有连接相关的新连接封包,像FTP使用20端口(port模式)

INVALID:无效的数据包,不能被识别属于哪个连接或没有任何状态,这种状态的数据包会被丢弃

基本命令:

iptables -L -n    查看规则(默认包过滤表)

iptables -L -n -t nat   查看nat规则

iptables -F         清除预设表filter中的所有规则链的规则

iptables -x         清除预设表filter中使用者自定义链中的规则

iptables -z         清除所有的chain的计数和流量统计

iptables -P        设置链的默认动作   accept,reject

service iptables save  保存配置

service iptables restart   重启服务


  • 添加input记录: iptables -A INPUT -p tcp --dport 22 -j ACCEPT   

  • 添加output记录: iptables -A OUTPUT -p tcp --sport 22 -j ACCEPT   

  • 最后注意需要再执行一下 /etc/init.d/iptables save,这样这两条语句就保存到刚才那个/etc/sysconfig/iptables 文件中了

基本语法:

iptables [-t 表名] [-AID 链] [规则编号] [-io 网络接口] [-p tcp,udp] [-s 源ip地址] [--sport 端口范围] [-d 目的ip地址] [--dport端口范围] -j [ACCEPT | DROP | REJECT | LOG]

-t 表名包括filter、nat、mangle三张表,默认为filter表

filter表:内建的规则包括:INPUT、OUTPUT和FORWARD

nat表:内建的规则包括:PREROUTING、OUTPUT、POSTROUTING

mangle表:设置特殊的数据包路由标志规则,内建的规则链包括:PREROUTING、INPUT、FORWARD、POSTROUTING和OUTPUT

-A 新增一条规则,该规则增加在原规则的最后面

-I  插入一条规则,如果没有指定该规则的顺序,默认是插入变成第一条规则

-D 删除一条规则,可以输入完整规则,或直接指定规则编号以删除

-R 替换某条规则,必须要指定替换的规则编号,规则被替换并不会改变顺序

链  主要有:INPUT,OUTPUT,FORWARD、PREROUTING、POSTROUTING

规则编号:在插入、删除和替换规则时用,编号是按照规则列表的顺序排列

-i 数据包进入的那个网络接口,如ppp0、eth0或eht1

-o 数据包出去的那个网络接口

-p 协议,主要有:tcp udp icmp和all

-s 来源ip地址或子网地址

--sport 源端口范围

-d 目标ip地址或子网地址

--dport 目标端口范围

-j 后接动作,主要有ACCEPT接受、DROP丢弃、REJECT拒绝和LOG记录等

ACCEPT:接收数据包

DROP:丢弃数据包

REDIRECT:将数据包重新转向到本地或另一台主机的某个端口,通常能实现透明代理或对外开放内网的某些服务

REJECT:拦截该数据封包,并发回封包通知对方

SNAT:源地址转换,即改变数据包的源地址

DNAT:目标地址转换,即改变数据包的目的地址

MASQUERADE:IP伪装,MASQUERADE只能用于ADSL等拨号上网的IP伪装,也就是主机的IP是由ISP分配动态的,如果主机的IP地址是静态固定的,就要使用SNAT

LOG:日志功能,将符号规则的数据包相关信息记录在日志中,以便排错


SNAT:将私网ip地址转换成公网ip地址来上网的方式,即应对内网LAN连接到internet的方式

iptables -t nat -A POSTROUTING -s 源ip -o 外网ip -j  MASQUERADE(伪装)

例(SNAT):iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -j SNAT --to x.x.x.x

DNAT:用于内部主机想要架设可以让internet存取的服务器

iptables -t nat -A PREROUTING -d 本机ip -p tcp --dport 80 -j DNAT --to x.x.x.x:80(内网ip)


常用iptables书写:

1、定义默认策略 

iptables [-t 表名] -P [链名] [动作] 

iptables -t filter -P INPUT DROP

2、查看iptables规则

iptable [-t 表名] -L [链名]

3、清除规则和计数器

iptables [-t 表名] -F | -Z

-F 删除指定表中的所有规则

-Z 将指定表中的数据包计数器和流量计数器清零

4、允许所有已经建立连接或者与之相关的数据通过

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

5、打开“回环”接口

iptables -A INPUT -i lo -j ACCEPT

iptables -A OUTPUT -o lo -j ACCEPT

6、开启多端口

iptables -A INPUT -p tcp -m multiport --dports 22,80 -j ACCEPT

iptables -A INPUT -m state --state NEW -p tcp --dport 8080 -j ACCEPT

7、SNAT

iptables -t nat -A POSTROUTING -s 10.8.8.0/24 -o eth0  -j SNAT --to-source 172.30.1.1-3 (1-3这三个地址)

iptables -t nat -A POSTROUTING -s 172.31.1.0/24 -j SNAT --to-source 10.34.38.125

8、MASQUERADE应用(从服务器的网卡上,自动获取当前ip地址作为NAT)

iptables -t nat -A POSTROUTING -s 10.8.8.0/24 -o eth0 -j MASQUERADE

9、DNAT(将eth0进来访问80的数据包的目的地址改为172.30.1.123)

iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j DNAT --to 172.30.1.123 

10、转发功能,加上时间

iptables -I FORWARD -s 172.17.213.178 -d 172.30.21.0/24 -p tcp --dport 1433 -m time --datestart 2014-07-23T09:00:08 --datestop 2014-07-30T18:00:00 -j ACCEPT

11、查看nat规则

iptables -L -n -t nat   

12、将要访问192.168.2.127这台服务器的协议都作SNAT转换到192.168.2.125上面

iptables -t nat -I POSTROUTING -p icmp -d 192.168.2.127 -j SNAT --to-source 192.168.2.125

iptables -t nat -I POSTROUTING -p tcp --dport 22 -d 192.168.2.0/24 -j SNAT --to-source 192.168.2.125 

13、对单台主机(172.31.1.5)这台主机作SNAT策略

iptables -t nat -I POSTROUTING -s 172.31.1.5 -p tcp --dport 22 -d 192.168.2.0/24 -j SNAT --to-source 192.168.2.125