iptables
与firewalld
都不是真正的防火墙,它们都只是用来定义防火墙策略的防火墙管理工具而已。或者说,它们只是一种服务。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端口
想把某个端口隐藏起来的时候,就可以在防火墙上阻止那个端口访问,然后再开一个不规则的端口,之后配置防火墙的端口转发,将流量转发过去。
端口转发还可以做流量分发,一个防火墙拖着好多台运行着不同服务的机器,然后用防火墙将不同端口的流量转发至不同机器。
附录
参考链接
本文由 柒 创作,采用 知识共享署名4.0
国际许可协议进行许可。
转载本站文章前请注明出处,文章作者保留所有权限。
最后编辑时间: 2018-06-14 17:05 PM