三张表:
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