用iptables做IP的静态映射还是跟端口映射做的工作差不多,具体操作如下:
其实静态映射和端口映射差不多是一个意思,只不过IP静态是整个把内部网的服务器转到internet上(或者外部网络上)去,而端口映射只是把内网的某些服务端口映射到外网服务器的某个端口上。
或许有的兄弟会奇怪为什么要做ip静态映射呢?直接设置为外网IP不就完了?其实原因很简单,为了方便统一管理和制定安全策略。假设你的服务器要搬迁、更换,如果只有一台还好说——在这台服务器上更改一下IP地址或者把新的服务器地址改为老服务器地址换上去就行了,如果有好几台服务器呢?你就不得不面对更长的断网时间……使用静态IP映射能够让你更方便的管理多台服务器,同时增加了安全性(等于凭空给服务器作了一个防火墙啊)。假设你想用新的服务器替换老服务器,可以给新的服务器分配另外的外网IP或者用端口映射(与IP静态映射差不多,个人觉得不如IP静态映射来的方便),测试功能完全实现后,直接修改防火墙配置,只是一瞬间,网站就能实现切换,切换完毕后再处理老服务器。搬迁的时候也是,不必给每个服务器都更改IP地址、子网掩码什么的一大堆,全都接到防火墙上,把防火墙上的IP更改一次就完事,真正服务器的ip地址都不用改(反正都是私网地址)。好处目前想到的就这些啦。
其实配置还是很简单的。
我们假设你有两台web服务器,ip地址为192.168.1.1和192.168.1.2,一台交换机,一台linux双网卡服务器(做防火墙和ip静态映射用),一根外线,数个可用的公网IP(假设为1.1.1.1~1.1.1.6),而你想让大家通过访问1.1.1.2访问第一台web服务器,通过访问1.1.1.3访问第二台。将外线接在linux服务器的一块网卡上(比如eth0),设置该网卡地址为1.1.1.1;再用网线连接另外一块网卡(比如eth1)到交换机上,设置ip地址为192.168.1.254。两台web分别接到交换机上,网关设置为192.168.1.254(也就是linux防火墙的内网地址啦)。
#p#
线路已经搭建好了,现在谈谈怎么设置linux服务器。
安装就不用说了吧?建议用比较新的版本就好(新版本的iptables功能更强,对于硬件的支持率也更高,不用你花很多精力在调通设备上),系统装好后设置好IP……怎么设置?以前是通过修改目录/etc/sysconfig/network-scripts/下的ifcfg-eth0和ifcfg-eth1文件实现的。现在可以通过ifconfig或者ip address add命令来实现(这些设置的前提是你的网卡已经被检测到,并且可以正常工作,如果安装网卡遇到问题以后再讨论吧,我用的版本是redhat as4版本)。比如设置eth0,你可以用
ifconfig eth0 1.1.1.1/30 up(我说了你的可用ip范围一般来说是1.1~1.7,这就意味着子网掩码是255.255.255.248,换算过来就是/30了)来给eth0设定IP地址,也可以通过命令
ip address add 1.1.1.1/30 brd + dev eth0
来实现。网关的添加可以通过命令
ip route add default via 网关IP dev eth0
来实现。eth1就不用我说了吧?注意在linux中,整个系统的默认网关(default)只能有一个(当然你可以通过添加路由或者策略路由增加网关,但是系统默认的网关只能有一个),所以不要用上面的命令再给eth1添加默认网关了,否则谁都上不了网。
如果上述命令都成功执行了,恭喜你,基本的东西都已经准备好了,否则不是你的系统安装的时候不完全就是你的网卡没装好……
#p#
现在看看iptables服务,你可以执行iptables -V看看是否iptables已经安装在系统里了(一般来说都会安装了),还可以显示你的版本号——我的是1.3.6版本。
ok,编辑脚本吧。输入
vi FWstart.sh进入编辑界面(下面是文本正文)
#!/bin/sh
#下面两项分别是启动linux的转发功能和防syn攻击的参数。
#没有第一条就不能实现linux的数据包转发
#意思就是把文件/proc/sys/net/ipv4/ip_forward的值设定为1
#第二条我不太了解,但还是加上吧。
- echo "1" > /proc/sys/net/ipv4/ip_forward
- echo "1" > /proc/sys/net/ipv4/tcp_syncookies
#加载iptables启动所需的各种模块,据说很多版本不加也可以,因为具体的参数引用实际上已经调
#用了它们,但是考虑兼容性加上也没什么,如果你去掉了这几行,结果出现了问题,不妨再加上。
- modprobe ip_tables
- modprobe ip_nat_ftp
- modprobe ip_nat_irc
- modprobe ip_conntrack
- modprobe ip_conntrack_ftp
- modprobe ip_conntrack_irc
#清空原有的iptables的表(主要是filter表和nat表)和表中的链
- /sbin/iptables -F
- /sbin/iptables -X
- /sbin/iptables -Z
- /sbin/iptables -F -t nat
- /sbin/iptables -X -t nat
- /sbin/iptables -Z -t nat
#设置filter表中三个链的默认规则,进入(INPUT)发出(OUTPUT)都是允许ACCEPT
#转发(FORWARD)是丢弃DROP,这样才能起到防火墙的作用。
#你也可以设定更细致的INPUT规则,实际上INPUT链是针对保护防火墙自身的,我不多说了,
#我的重点放在FORWARD链,它是负责过滤转发包的。
- /sbin/iptables -P INPUT ACCEPT
- /sbin/iptables -P OUTPUT ACCEPT
- /sbin/iptables -P FORWARD DROP
#现在给网卡添加ip地址,一块网卡上可以拥有很多IP地址,只有这样,外网访问1.1.1.2的时候
#才能重新定向到内网的192.168.1.1上去。
ip address add 1.1.1.2/30 brd + dev eth0
ip address add 1.1.1.3/30 brd + dev eth0
#设置允许对服务器192.168.1.1和192.168.1.2的访问,否则的话外网
#就无法把数据发送到这两台服务器上。当然你可以设置更多的规则,这实际上就是为这两台
#服务器设置的防火墙了。比如如果你想设置只允许访问1.1上的80端口,只要把
#/sbin/iptables -A FORWARD -d 192.168.1.1 -j ACCEPT改为
#/sbin/iptables -A FORWARD -d 192.168.1.1 --dport 80 -j ACCEPT就可以了,
#其他不要改,除非你明白修改后的含义。不过我要提醒你,按照这种设置,你的两台
#服务器基本上就是和单独接入在internet中没什么两样,只是进行了地址转换,
#多了一点点保护而已。建议你还是多学学iptables防火墙的其他内容。
- /sbin/iptables -A FORWARD -s 192.168.1.1 -j ACCEPT
- /sbin/iptables -A FORWARD -d 192.168.1.1 -j ACCEPT
- /sbin/iptables -A FORWARD -s 192.168.1.2 -j ACCEPT
- /sbin/iptables -A FORWARD -d 192.168.1.2 -j ACCEPT
#p#
#下面就是nat表了,这个绝对不要改,除非你很明白它们的作用,
#达到比对filter表的了解还要深刻的程度。
#意义是nat标的三条链默认接受任何数据传输。
/sbin/iptables -t nat -P PREROUTING ACCEPT
/sbin/iptables -t nat -P POSTROUTING ACCEPT
/sbin/iptables -t nat -P OUTPUT ACCEPT
#这是真正实现地址转换的语句,意义为:
#在PREROUTING链中(也就是刚进入linux服务器的数据包),将目的地址为1.1.1.2的数据包
#进行修改,使得其目的地址变为192.168.1.1;
#在POSTROUTING链中(马上要送出linux服务器的数据包),将源地址为192.168.1.1的数据
#包的源地址改为1.1.1.2;
/sbin/iptables -t nat -A PREROUTING -d 1.1.1.2 -j DNAT --to-destination 192.168.1.1
/sbin/iptables -t nat -A POSTROUTING -s 192.168.1.1 -j SNAT --to-source 1.1.1.2
/sbin/iptables -t nat -A PREROUTING -d 1.1.1.3 -j DNAT --to-destination 192.168.1.2
/sbin/iptables -t nat -A POSTROUTING -s 192.168.1.2 -j SNAT --to-source 1.1.1.3
#脚本到此结束。
你的内网服务器192.168.1.1和192.168.1.2应该已经可以通过ip地址1.1.1.2和1.1.1.3访问了
通过文章的详细描述,我们知道了用iptables做IP的静态映射其实和iptables做端口映射差不多,希望对你们有所帮助!
【编辑推荐】
- 如何把iptables外网端口全部映射到内网一台主机上
- 配置Linux 内核并利用iptables 做端口映射
- iptables映射端口具体操作
- 用iptables做地址映射
- linux下清空所有iptables规则
- 如何清空其中一条iptables规则
- 如何清空iptables规则