iptables 双ip转发 iptables转发规则_源地址

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端口。