Iptables的五条规则链:
Prerouting 路由前检查
Forward 转发
Postrouting 路由后
Input 访问防火墙本身
Output 防火墙本身访问其他网络
Linux制作路由转发,数据报最少经过prerouting、forward、postrouting 三条规则链
外界访问linux防火墙本身要经过prerouting,input规则链
Linux防火墙本身访问外界要经过postrouting,output规则链
Iptables 默认具有3个规则表
filter:用于设置包过滤 设置input 、forward 、output,无论什么数据报都要经过这三个规则链
nat: 用于设置地址转换 设置 prerouting 、output 、postrouting。Prerouting是做DNAT(目标地址转换)的,例如外界访问内网服务器。Postrouting 是做SNAT(源地址转换)的,例如内网通过防火墙NAT访问internet,现转发后修改源地址。Output 是防火墙本身要访问外网需要做DNAT时用,因为防火墙本身发送数据包不经过postrouting链了,为了实现目标地址转换添加了Output链。(注:nat表里的output链和filter表里的output链不一样。)
mangle:用于设置网络流量整形等应用
Iptables配置文件与策略设置文件
配置文件 /etc/sysconfig/iptables-config
策略设置文件 /etc/sysconfig/iptables
Iptables常用命令:
Iptables-save:将当前系统中的防火墙设置进行保存,直接保存到规则文件中iptables-save > /etc/sysconfig/iptables 等价于 /etc/inid.d/iptables save
Iptables-restore:将使用iptables-save保存的防火墙策略恢复到当前系统
Iptables-restore < ipt.v1.0(备份策略文件)
策略规则语法
Iptables [-t 要操作的表]
<操作命令>
[要操作的链]
[规则号码]
[匹配条件]
[-j 匹配到以后的动作]
针对链的操作有:
-L 列出链中的所有规则 如果不加表名默认显示filter表中的链(INPUT、FORWARD、OUPUT)
-F 清除链中的所有规则
-P 设置链的默认动作 ACCEPT REJECT DROP......
-Z 计数器清零
-N 定义一个新的规则链
-X 删除自定义的规则链
针对规则的操作有:(注意:越复杂的规则就越放在最前面)
-A 追加一个规则 (追加就是放在最后)
-I 插入一个规则
-D 删除一个规则
Iptables实例:
#Iptables -F //默认清空fielter表中的所有规则(暂时的)
#Iptables -t nat -F //清空nat表中的所有规则
#Iptables [-t table] -X [chain] //删除自定义规则链
Iptables [-t table] -A chain rule-specification [options](不指定表,默认操作filter表中的规则链)
#iptables -A INPUT -i lo -j ACCEPT //在filter表INPUT链中添加规则允许来自"lo"网络接口中所有数据包。
#iptable -A INPUT -i eth0 -s 192.168.1.0/24 -j ACCEPT //在filter表INPUT链中追加规则,允许"eth0"接口中来自192.168.1.0/14网段的数据包。即允许此网段访问防火墙本机。
Iptables -A INPUT -p tcp --dport 80 -j ACCEPT //允许访问tcp 80号端口的数据包
书写规则:
网络接口lo的处理
状态监测的处理
协议+端口的处理
实例1:一个安装有iptables防火墙的web服务器
Iptables -A INPUT -i lo -j ACCEPT //允许本地回环
Iptables -A INPUT -p tcp -m multiport 22,80 -j ACCEPT // 允许访问22,80号端口,即开放ssh和http
Iptables -A INPUT -p tcp -m state --state RELATED, ESTABLISHED -j ACCEPT // 对已经建立RELATED, ESTABLISHED状态的连接,允许
Iptables -P INPUT DROP //不符合以上规则的数据包丢弃
实例2: 一个典型iptables配置脚本
#!/bin/sh
Iptables -F //清除链中的所有规则
Iptables -X //删除自定义的规则链
Iptables -Z //计数器清零
Iptables -P INPUT DROP //默认动作丢弃,也就是检查数据包的最后一条规则
Iptables -A INPUT -i lo -j ACCEPT //允许本地回环
Iptables -A INPUT -i eth0 -p tcp --dport 22 -j ACCEPT //允许ssh
Iptables -A INPUT -i eth0 -p tcp --dport 88 -j ACCEPT //允许http
Iptables-save //保存产生/etc/sysconfig/iptables 策略文件
设置linux作为网关服务器(类似于家用路由器)
配置需求
·服务器网卡接口eth0的ip地址为192.168.1.1/24,eth0网络接口与公司内网连接
·服务器的网络接口ppp0是主机的拨号网络接口,具有公网ip地址
·局域网中的所有主机都需要通过linux网关服务器与外部互联网进行通信
关键配置命令:
#iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o ppp0 -j MASQUERADE(伪装的意思) //源地址转换,在POSTROUTING链上做,把源地址换成ppp0端口地址。
SNAT源地址转换典型事例
#iptables -t nat -A POSTROTING -s 192.168.6.0/24 -j SNAT --to 192.168.6.200
//在POSTROUTING做源地址转换把源地址192.168.6.0/24网段改成192.168.6.200
DNAT目标地址转换实例
#iptables -t nat -A PREROUTING -d 192.168.106.200 -p tcp --dport 80 -j DNAT --to 192.168.156.200:80
将访问目标地址为192.168.106.200的80端口的数据包,目标地址转换成192.168.6.200:80端口。