如何使用iptables将http和ssh端口转发到我的内部服务器

我没有路由器,所以我让Linux系统进入路由器有centos 6.4转发公共networkingstream量到我的本地LAN.It有两个NIC卡。 一个用于公共ip(eth1),另一个用于私有ip(eth2)。

我有一个服务器连接到我的本地局域网假设192.168.1.2。

xxxx是公网ip(这个ip在eth1上)。

Linux系统路由器IP假设192.168.1.1(这个IP是在eth2上)

我希望当任何地方的任何networking的人使用这个ie

ssh xx.xx(公共IP)或使用腻子

它会去服务器。

我禁用服务器上的Selinux和iptables防火墙

我在Linux系统路由器上做了一些Iptables修改,但是它自己作为路由器工作,而不是从其他networking和同一networking的主服务器。

iptables -t nat -A PREROUTING -p tcp -d 192.168.1.1 --dport 22 -j DNAT --to-destination 192.168.1.2:22 

但不行。

再次我想转发所有HTTP(80)stream量到我的内部服务器使用iptables从相同的Linux系统路由器。

我需要这个好心的给我解决这个问题。

首先确保在内核中启用了数据包转发

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

您也可以通过在/etc/sysctl.conf添加以下行来使其成为永久的

 net.ipv4.ip_forward = 1 

您必须在Linux机器上充当路由器。 您可以在路由器机器上尝试以下规则。

 iptables -t nat -A PREROUTING -i eth1 -d xxxx -p tcp --dport 22 -j DNAT --to-destination 192.168.1.2:22 

也让我们知道从路由器的NAT规则的输出。

 iptables -t nat -L -n -v 

基于这个惊人的DigitalOcean关于如何转发端口的教程,我决定在这里重新编写它。

我花了很多小时的研究如何工作..我是新来的Linux和开始并不总是很容易..这里是我的服务器的例子,它的端口转发:

防火墙服务器(2个NIC卡) – networking详细信息:

  • 公共IP地址: xx.xx.xx.xx
  • 私人IP地址: yy.yy.yy.yy
  • 公共接口: eth0
  • 私有接口: eth1

内部 (例如ssh,web)服务器(1个NIC卡) – networking详细信息:

  • 私人IP地址: zz.zz.zz.zz
  • 私有接口: eth0

解:

在内核中启用数据包转发:

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

定义variables:

 # Admin IP address (eg public home ip) ADMIN="aa.aa.aa.aa" # IP addresses of servers (eg in cloud): FW_eth0_ip="xx.xx.xx.xx" FW_eth1_ip="yy.yy.yy.yy" WEB_eth0_ip="zz.zz.zz.zz" # Services: SSH="22" HTTP="80" 

Iptables端口转发(使用-m conntrack):

 iptables -t nat -A PREROUTING -i eth0 -s $ADMIN -d $FW_eth0_ip -p tcp --dport $SSH -j DNAT --to-destination $WEB_eth0_ip iptables -A FORWARD -i eth0 -o eth1 -p tcp --syn --dport $SSH -m conntrack --ctstate NEW -j ACCEPT iptables -A FORWARD -i eth0 -o eth1 -p tcp --dport $SSH -m conntrack --ctstate ESTABLISHED -j ACCEPT iptables -A FORWARD -i eth1 -o eth0 -p tcp --sport $SSH -m conntrack --ctstate ESTABLISHED -j ACCEPT iptables -t nat -A POSTROUTING -o eth1 -p tcp --dport $SSH -d $WEB_eth0_ip -j SNAT --to-source $FW_eth1_ip 

几个注意事项:

  • “..- s $ ADMIN -d $ FW_eth0_ip ..”(第1行) – 仅出于安全原因而添加 – 这意味着只有ADMIN IP可以访问SSH(如果不需要,您可以删除它)
  • -m conntrack-m状态相同
  • 我build议将SSH的默认端口更改为另一个端口,如1xxxx(在/ etc / ssh / sshd_config中)
  • 检查TCP和UDP端口号列表
  • 我使用端口15xx1访问防火墙服务器上的SSH,并使用15xxx2内部

终奌站:

 # access firewall server $ ssh [email protected] -p 15xx1 # access internal server $ ssh [email protected] -p 15xx2 

所提到的教程中详细介绍了有关使用规则的更多细节。

这一切都来自我,希望它会帮助你。

首先,在linux网关中启用路由:

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

然后添加以下规则:

 iptables -A PREROUTING -t nat -i eth1 -p tcp --dport 80 -j DNAT --to 192.168.1.2 iptables -A PREROUTING -t nat -i eth1 -p tcp --dport 22 -j DNAT --to 192.168.1.2 iptables -A FORWARD -p tcp -d 192.168.1.2 --dport 80 -m state --state NEW,ESTABLISHED,RELATED-j ACCEPT iptables -A FORWARD -p tcp -d 192.168.1.2 --dport 22 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT 

iptables -L -v检查你的规则,pkts和bytes列会告诉你哪些规则被匹配。