iptables 端口映射

简介:

保存iptables防火墙规则的方法如下:

解决方法:

iptables命令建立的规则临时保存在内存中。如果系统在永久保存这些规则之前重启,所有设置的规则都将丢失。如果要想使iptables设置的规则在下次重启系统之后仍然生效则需要永久保存这些规则,以root身份执行:

/sbin/service iptables save

该操作将执行iptables初始化脚本,该脚本会运行/sbin/iptables-save程序并更新当前的iptables配置文件/etc/sysconfig/iptables。

而原来的配置文件将保存为iptables.save。

下次系统系统启动时,iptables初始化脚本将使用/sbin/iptables-restore命令重新读取/etc/sysconfig/iptables文件的内容。

因此比较好的方法是在将一条新的iptables规则提交到/etc/sysconfig/iptables文件之前先检查该规则。并且也可以将其他版本系统中的iptables配置文件应用于这里。这样就有助于分发该配置文件到多台Linux主机上。

注意:如果把/etc/sysconfig/iptables文件进行分发之后,每台系统都要执行/sbin/service iptables restart命令来使规则生效

经过测试:/etc/rc.d/init.d/iptables save  也可以更新并保存/etc/sysconfig/iptables


iptables 端口映射 实现步骤如下:

一、环境和要实现功能

PC1的网络设置如下:

eth0 192.168.0.29 内网

eth1 219.239.11.22 外网

PC2的网络设置则为:192.168.0.21 内网

我们要实现的功能就是将PC1的8080端口映射到PC2的80端口,也即访问

http://219.239.11.22:8080

即可访问到PC2上的WEB服务。

  二、实现步骤

1、 首先应该做的是/etc/sysctl.conf配置文件的 net.ipv4.ip_forward = 1 默认是0

这样允许iptalbes FORWARD。

2、 在/etc/rc.d/init.d目录下有iptables 文件,使用格式如下

Usage: ./iptables {start|stop|restart|condrestart|status|panic|save}

相当与service iptables {….}

把iptables 服务停止,清除以前的规则,存盘

到/etc/rc.d/init.d目录下,运行

./iptables stop

iptalbes -F

iptalbes -X

iptalbes -Z

./iptables save

3、 重新配置规则

iptables -t nat -A PREROUTING -d 219.239.11.22 -p tcp -m tcp --dport 8080 -j DNAT --to-destination 192.168.0.21:80

iptables -t nat -A POSTROUTING -d 192.168.0.21 -p tcp -m tcp --dport 80 -j SNAT --to-source 192.168.0.29

iptables -A FORWARD -o eth0 -d 192.168.0.21 -p tcp –dport 80 -j ACCEPT

iptables -A FORWARD -i eth0 -s 192.168.0.21 -p tcp –sport 80 -j ACCEPT

DNAT SNAT 的请参考帮助,这里不再陈述。

4、 新的规则存盘

./iptables save

规则存盘后在/etc/sysconfig/iptables这个文件里面,若你对这个文件很熟悉

直接修改这里的内容也等于命令行方式输入规则。

5、 启动iptables 服务

./iptables start

在/proc/net/ip_conntrack文件里有包的流向,如下面

tcp 6 53 TIME_WAIT src=../../221.122.59.2 dst=219.239.11.22 sport=7958 dport=8080 packets=9 bytes=1753

src=../../172.18.10.205 dst=172.18.10.212 sport=80 dport=7958 packets=9 bytes=5777 [ASSURED] use=1


项目上线,有两台服务器,A在公网。linux rhel5.4,运行php开发的一个打折购物网:尚品折扣,数据库部署到内网中,每次导入数据都要ssh到公网,然后再转到内网。一次采集了一些服装品牌的数据,比如,艾格的服装资讯,优衣库的打折,朵以的产品介绍

下面是实现过程:

允许数据包转发:

#echo 1 > /proc/sys/net/ipv4/ip_forward   

转发TCP 8081到xx.xx.xx.xx:

#iptables -t nat -I PREROUTING -p tcp –dport 80 -j DNAT –to xx.xx.xx.xx   

使转发数据包实现“双向通路”,给数据包设置一个正确的返回通道:

#iptables -t nat -I POSTROUTING -p tcp –dport 8080 -j MASQUERADE   

表示将规则保存到/etc/sysconfig/iptables文件

#service iptables save   

重启iptables使刚才添加的规则生效

#service iptables restart   

如果执行上述命令,依然不能转发,可能由于iptables服务没有停止,命令无法写入iptables文件,应先执行service iptables stop,再执行上述命令,最后service iptables start再启动服务

由于Linux防火墙默认是关闭3306端口。因此,若要能够访问3306端口,可以用两种方式,一个是关闭防火墙,另一个就是让防火墙开放3306端口。

开放3306端口的解决步骤如下:

1、修改/etc/sysconfig/iptables文件,增加如下一行:

-A RH-Firewall-1-INPUT -m state –state NEW -m tcp -p tcp –dport 3306 -j ACCEPT

2、重启防火墙,这里有两种方式重启防火墙

a) 重启后生效

开启: chkconfig iptables on

关闭: chkconfig iptables off

b) 即时生效,重启后失效

开启: service iptables start

关闭: service iptables stop

数据库映射成功。


iptables 端口映射设置如下:

设我们有一台计算机,有两块网卡,

eth0连外网,ip为1.2.3.4;

eth1连内网,ip为192.168.0.1.

现在需要把发往地址1.2.3.4的81端口的ip包转发到ip地址192.168.0.2的8180端口,设置如下:

1. iptables -t nat -A PREROUTING -d 1.2.3.4 -p tcp -m tcp --dport 81 -j DNAT --to-destination192.168.0.2:8180

2. iptables -t nat -A POSTROUTING -s 192.168.0.0/255.255.0.0 -d 192.168.0.2 -p tcp -m tcp --dport 8180 -j SNAT --to-source 192.168.0.1

真实的传输过程如下所示:

假设某客户机的ip地址为6.7.8.9,它使用本机的1080端口连接1.2.3.4的81端口,发出的ip包源地址为6.7.8.9,源端口为1080,目的地址为1.2.3.4,目的端口为81.

主机1.2.3.4接收到这个包后,根据nat表的第一条规则,将该ip包的目的地址更该为192.168.0.2,目的端口更该为8180,同时在连接跟踪表中创建一个条目,(可从/proc/net/ip_conntrack文件中看到),然后发送到路由模块,通过查路由表,确定该ip包应发送到eth1接口.在向eth1接口发送该ip包之前,根据nat表的第二条规则,如果该ip包来自同一子网,则将该ip包的源地址更该为192.168.0.1,同时更新该连接跟踪表中的相应条目,然后送到eth1接口发出.

此时连接跟踪表中有一项:

连接进入: src=6.7.8.9 dst=1.2.3.4 sport=1080 dport=81

连接返回: src=192.168.0.2 dst=6.7.8.9 sport=8180 dport=1080

是否使用: use=1

而从192.168.0.2发回的ip包,源端口为8180,目的地址为6.7.8.9,目的端口为1080,主机1.2.3.4的TCP/IP栈接收到该ip包后,由核心查找连接跟踪表中的连接返回栏目中是否有同样源和目的地址和端口的匹配项,找到后,根据条目中的记录将ip包的源地址由192.168.0.2更该为1.2.3.4, 源端口由8180更该为81,保持目的端口号1080不变.这样服务器的返回包就可以正确的返回发起连接的客户机,通讯就这样开始.

还有一点, 在filter表中还应该允许从eth0连接192.168.0.2地址的8180端口:

iptables -A INPUT -d 192.168.0.2 -p tcp -m tcp --dport 8180 -i eth0 -j ACCEPT










本文转自 chengxuyonghu 51CTO博客,原文链接:http://blog.51cto.com/6226001001/1559797,如需转载请自行联系原作者
目录
相关文章
|
网络协议
Iptables配置
查看iptables加载的模块 lsmod | egrep "nat|filter" iptable_filter 12810 0 ip_tables 27240 1 i...
833 0
|
网络协议 网络安全 网络架构
|
网络协议 网络安全 开发工具
|
网络协议 安全 Linux