当前位置:文档之家› iptables操作手册

iptables操作手册

1iptables与firewalld的关系
RHEL7.0以后,使用firewalld服务取代了iptables服务,但是依然可以使用iptables服务,只是默认不开启了,iptables和firewalld都不是真正的防火墙,它们都只是用来定义防火墙策略的防火墙管理工具,是操作系统上的一种服务,将定义好的规则交给内核中的netfilter(网络过滤器)来读取,从而实现防火墙的功能,firewalld和iptables除了可以可以在inbond和outbond方向做策略限制以外,还能实现snat和dnat功能。

注意:firewalld和iptables同时只能运行一种服务,否则会出现不可预知的情况
2iptables安装
RHEL7.0以后,iptables默认不开启,需要安装iptables服务
安装完成后
3实验场景
3.1源地址转换
需求:
源地址1(172.16.202.15)需要访问公网目的地址(192.168.111.245),源地址2(172.16.202.16)不需要访问公网。

内网两台服务器,分别为源地址1(172.16.202.15)和源地址2(172.16.202.16),公网出口处有一台centos 7.1的双网卡服务器,一个接口接内网(172.16.202.14),一个接口接外网(192.168.111.63)。

源地址1上首先需要保证和iptables服务器能够互通,并且有去往192.168.111.245的路由,路由下一跳需要指向iptables内网接口(172.16.202.14),由iptables服务器做源nat,把源地址(172.16.202.15)nat成公网接口地址(192.168.111.63),从而可以访问目的地址(192.168.111.245)。

一、首先在源地址1服务器上配置去往192.168.111.245的路由
ip route add 192.168.111.245 via 172.16.202.14 //临时添加路由,重启网卡或者系统后,路由会丢失,建议做路由固化路由固化:在/etc/sysconfig/network-scripts目录下,新建一个route配置文件,vi route-eth0,新增一条路由,192.168.111.245/32 via 172.16.202.14,重启网卡即可生效
二、iptables服务器上,配置snat策略
iptables -t nat -A POSTROUTING -s 172.16.202.15/32 -d 192.168.111.245/32 -j SNAT --to 192.168.111.63
注释:
-t table table to manipulate (default: `filter') //
这个选项指定命令要操作的匹配包的表。

如果内核被配置为自动加载模块,这时若模块没有加载,系统将尝试为该表加载适合的模块。

这些表如下:filter,这是默认的表,包含了内建的链INPUT (处理进入的包)、FORWARD(处理通过的包)和OUTPUT(处理本地生成的包)。

nat //这个表被查询时表示遇到了产生新的连接的包,由三个内建的链构成:PREROUTING (修改到来的包)、OUTPUT(修改路由之前本地的包)、POSTROUTING(修改准备出去的包)。

-A chain //在所选择的链末添加规则POSTROUTING //先路由再做nat
-s //源IP地址
-d //目的IP地址
-j SNAT //做源地址转换
--to //转换后的IP地址
此时,从源地址1服务器上去ping 192.168.111.245,结果如下:
提示destination host prohibited,说明路由可达,但是在中间
路径上被防火墙阻止了,源地址1本地服务器上,因为是出接口方向流量,所以默认情况下,不会被阻止,所以只能在iptables服务器上,被防火墙默认规则阻止了,所以只需要在iptables服务器上放开防火墙限制即可
三、iptables服务器上放开防火墙规则
前面提到过,iptables上默认的filter表中,分为三个规则链:INPUT,OUTPUT和FORWARD,其中INPUT负责处理入方向的包,OUTPUT负责处理本地生成出方向的包,FORWARD负责经过经过的数据包,从网络拓扑上可以看出来,源地址1(172.168.202.15)去访问目的地址(192.168.111.245),是经过iptables服务器,所以调用的iptables服务器的FORWARD表,所以只需要在iptables 服务器上FORWARD表中,增加一条规则即可
iptables -I FORWARD -j ACCEPT
如果不确定是调用的哪个规则链,也可以在INPUT和OUTPUT 方向都加上规则链,iptables -I INPUT -j ACCEPT,iptables -I OUTPUT -j ACCEPT
注意:以上二三两个步骤添加的nat规则和防火墙规则,都是临时的,重启iptables服务或重启系统后,nat规则和防火墙规则会丢失,可以使用命令保存:service iptables save,也可以手动修改配置文件,配置文件如下vi /etc/sysconfig/iptables:
四、打开ip_forward
出于安全考虑,Linux系统默认是禁止数据包转发的。

所谓转发即当主机拥有多于一块的网卡时,其中一块收到数据包,根据数据包的目的ip地址将包发往本机另一网卡,该网卡根据路由表继续发送数据包,这个功能需要手动打开。

修改配置文件:vi /etc/sysctl.conf,增加一条:net.ipv4.ip_forward = 1
然后输入sysctl –p,使配置生效
注意:有些centos7.X的版本和centos6.x的版本开启路由转发的配置文件不一样,如果修改/etc/sysctl.conf不生效的话,需要修改下面这个配置文件,同样是在结尾增加一条:net.ipv4.ip_forward = 1
结果验证:
源地址1服务器(172.16.202.15)可以通目的地址(192.168.111.245),源地址2服务器(172.16.202.16)不能通目的地址
源地址1服务器:
源地址2服务器:
如果源地址2服务器(172.16.202.16)也需要和目的地址服务器(192.168.111.245)通信,只需要在iptables服务器上添加一条nat规则即可
iptables -t nat -A POSTROUTING -s 172.16.202.16/32 -d 192.168.111.245/32 -j SNAT --to 192.168.111.63
3.2目的地址转换
需求:
当clientA访问iptables服务器192.168.111.63的666端口时,目的nat 到serverA上,当当clientA访问iptables服务器192.168.111.63的777端口时,目的nat到serverB上(为了演示nat的效果,在server A和server B 上都开启web服务,访问666和777端口时,分别跳转到serverA的80和serverB的80端口上)
一、打开ip.forward功能
打开ip.forward功能请参照3.1章节
二、在iptables的filter表中的Forward链中添加规则:iptables -I
FORWARD -j ACCEPT //参照3.1章节
三、配置DNAT
iptables -t nat -A PREROUTING -p tcp -d 192.168.111.63 --dport 666 -j DNAT --to-destination 172.16.202.15:80 iptables -t nat -A PREROUTING -p tcp -d 192.168.111.63 --dport 777 -j DNAT --to-destination 172.16.202.16:80 注释:
当访问192.168.111.63:666端口时,做DNAT,跳转到172.16.202.15:80端口上
当访问192.168.111.63:777端口时,做DNAT,跳转到172.16.202.16:80端口上
四、ServerA和ServerB分别开启web服务,并且需要关闭iptables或
firewalld服务,或者在在iptables的filter表中的Input链中添加规则:
iptables -I INPUT -j ACCEPT
结果验证:
当访问192.168.111.63:666端口时,跳转到服务器A的80端口上
当访问192.168.111.63:777端口时,跳转到服务器B的80端口上。

相关主题