Linux 使用防火墙管理工具实现端口转发
后知后觉 暂无评论
iptablesfirewalld都不是真正的防火墙,它们都只是用来定义防火墙策略的防火墙管理工具而已。或者说,它们只是一种服务。iptables服务会把配置好的防火墙策略交由内核层面的netfilter网络过滤器来处理,而firewalld服务则是把配置好的防火墙策略交由内核层面的nftables包过滤框架来处理。换句话说,当前在Linux系统中其实存在多个防火墙管理工具,旨在方便运维人员管理Linux系统中的防火墙策略,我们只需要配置妥当其中的一个就足够了。虽然这些工具各有优劣,但它们在防火墙策略的配置思路上是保持一致的。只要在这多个防火墙管理工具中任选一款并将其学透,就足以满足日常的工作需求了。

CentOS 6 及之前

CentOS 6 及之前默认使用 iptables 作为默认防火墙管理工具

从一台机到另一台机端口转发

启用网卡转发功能

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

举例:从 192.168.0.132:21521 (新端口)访问 192.168.0.211:1521 端口

a. 同一端口转发 192.168.0.132 上开通 1521 端口访问

# iptables -A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 1521 -j ACCEPT)
# iptables -t nat -I PREROUTING -p tcp --dport 1521 -j DNAT --to 192.168.0.211
# iptables -t nat -I POSTROUTING -p tcp --dport 1521 -j MASQUERADE

b. 不同端口转发 192.168.0.132 上开通 21521 端口访问

# iptables -A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 21521 -j ACCEPT)
# iptables -t nat -A PREROUTING -p tcp -m tcp --dport21521 -j DNAT --to-destination192.168.0.211:1521
# iptables -t nat -A POSTROUTING -s 192.168.0.0/16 -d 192.168.0.211 -p tcp -m tcp --dport 1521 -j SNAT --to-source 192.168.0.132

以上两条等价配置(更简单[指定网卡]):

# iptables -t nat -A PREROUTING -p tcp -i eth0 --dport 31521 -j DNAT --to 192.168.0.211:1521
# iptables -t nat -A POSTROUTING -j MASQUERADE

保存iptables

# service iptables save
# service iptables restart

iptables 做本机端口转发

# iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-ports 8080

估计适当增加其它的参数也可以做不同IP的端口转发。如果需要本机也可以访问,则需要配置 OUTPUT 链。

特别注意:本机访问外网的端口会转发到本地,导致访不到外网,如访问 z.cn ,实际上是访问到本地,建议不做80端口的转发或者指定目的

# iptables -t nat -A OUTPUT -d localhost -p tcp --dport 80 -j REDIRECT --to-ports 8080

原因:外网访问需要经过PREROUTING链,但是 localhost 不经过该链,因此需要用OUTPUT

CentOS 7

CentOS 7 默认使用 firewalld 作为默认防火墙管理工具

端口转发可以将指定地址访问指定的端口时,将流量转发至指定地址的指定端口。转发的目的如果不指定IP的话就默认为本机,如果指定了IP却没指定端口,则默认使用来源端口。
如果配置好端口转发之后不能用,可以检查下面两个问题:
若将80端口转发至8080端口,首先检查本地的80端口和目标的8080端口是否开放监听了
其次检查是否允许伪装IP,没允许的话要开启伪装IP

# firewall-cmd --add-forward-port=port=80:proto=tcp:toport=8080 # 将80端口的流量转发至8080
# firewall-cmd --add-forward-port=port=80:proto=tcp:toaddr=192.168.1.0.1192.168.0.1 # 将80端口的流量转发至
# firewall-cmd --add-forward-port=port=80:proto=tcp:toaddr=192.168.0.1:toport=8080 # 将80端口的流量转发至192.168.0.1的8080端口

想把某个端口隐藏起来的时候,就可以在防火墙上阻止那个端口访问,然后再开一个不规则的端口,之后配置防火墙的端口转发,将流量转发过去。

端口转发还可以做流量分发,一个防火墙拖着好多台运行着不同服务的机器,然后用防火墙将不同端口的流量转发至不同机器。


附录

参考链接

本文撰写于一年前,如出现图片失效或有任何问题,请在下方留言。博主看到后将及时修正,谢谢!
禁用 / 当前已拒绝评论,仅可查看「历史评论」。