iptables设置映射通过外网端口代理ssh登录内网服务器
一、环境阐述
环境介绍:现有一台搭载数据库的内网服务器,要求是不能访问外网,需要其他可以有公网IP的服务器做端口代理,以SSH方式登录此服务器做系统管理。
环境模拟为两台VM虚拟机(搭载CentOS6.8):
外网服务器:一台虚拟机配置两张网卡,一张网卡eth1为NAT模式,可以访问外网,ip地址为192.168.10.133,开机后可以直接SSH登录系统;另一张eth2为内网的vlan(VMnet2),网段设置为192.168.9.0/24,ip地址为192.168.9.101。
内网服务器:不可直接外网访问,网卡eth1设置为内网vlan(VMnet2),ip地址为192.168.9.134。
两台服务器是可以连通的,并且外网服务器可以通过内网ssh登录内网服务器
二、开启外网服务器的IP路由转发功能
[root@centos6 ~]# echo 1 > /proc/sys/net/ipv4/ip_forward
或者
[root@centos6 ~]# vim /etc/sysctl.conf
修改或添加为net.ipv4.ip_forward = 1
[root@centos6 ~]# sysctl -p
三、在外网服务器上设置iptables的NAT转发功能
[root@centos6 ~]# iptables -t nat -A PREROUTING -p tcp -m tcp --dport 2222 -j DNAT --to-destination 192.168.9.134:22
\#外网服务器上的2222端口代理到内网服务器的22端口。
[root@centos6 ~]# iptables -t nat -A POSTROUTING -d 192.168.9.134/32 -p tcp -m tcp --sport 22 -j SNAT --to-source 192.168.9.101
\#修改转发数据来源为内网网卡IP。
[root@centos6 ~]#iptables -t filter -A INPUT -p tcp -m state --state NEW -m tcp --dport 2222 -j ACCEPT
\#设置接受对2222端口的访问
[root@centos6 ~]# iptables -t nat -A POSTROUTING -o eth2 -j MASQUERADE
\#设置转发出接口为eth2
[root@centos6 ~]# service iptables save
[root@centos6 ~]# service iptables restart
\#保存重启iptables
nat端口转发设置成功后,/etc/sysconfig/iptables文件里要注释掉下面两行!不然nat转发会有问题!一般如上面在nat转发规则设置好并save和restart防火墙之后就会自动在/etc/sysconfig/iptables文件里删除掉下面两行内容了。
[root@centos6 ~]# vim /etc/sysconfig/iptables
..........
\#-A INPUT -j REJECT --reject-with icmp-host-prohibited //这两行最好是注释掉。在一般的白名单设置中,如果这两行不注释,也会造成iptables对端口的设置无效
\#-A FORWARD -j REJECT --reject-with icmp-host-prohibited
[root@centos6 ~]# service iptables restart
外网服务器的iptables规则表
内网服务器的iptables规则表
四、测试登录
用支持ssh软件登录或其他外网主机进行登录
上图第一行提示从外网服务器的内网IP登录系统,说明实验成功。
如有疏漏,欢迎指正,谢谢!