我不太熟悉网络方面的东西,并且很难理解防火墙的工作原理。
我正在开发一个 REST 服务,实际上是在监听端口 8080,我希望能够在端口 80 上发送请求,然后将其重定向到 8080。
为了在 CentOS 6 上做到这一点,我使用了 iptables 和这样的规则:
iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 8080
我迁移到了 CentOS 7,即使 iptables 仍然存在并且仍然有效,但事实上,firewalld 是默认的防火墙软件,这让我认为我应该开始使用该软件...事实上,我无法理解它是如何工作的,以及如何将我的单个 iptables 规则转换为防火墙规则。我知道防火墙“理解”iptables 规则(事实上,我正在将此规则与防火墙一起使用以继续工作),但我想知道怎么做,我也想使此规则永久生效。
谢谢
答案1
用于--add-forward-port
设置端口转发。
从firewall-cmd
手册页中:
--add-forward-port=port=portid[-portid]:proto=protocol[:toport=portid[-portid]][:toaddr=address[/mask]]
[--timeout=timeval]
Add the IPv4 forward port for zone. If zone is omitted, default
zone will be used. This option can be specified multiple times. If
a timeout is supplied, the rule will be active for the specified
amount of time and will be removed automatically afterwards.
timeval is either a number (of seconds) or number followed by one
of characters s (seconds), m (minutes), h (hours), for example 20m
or 1h.
The port can either be a single port number portid or a port range
portid-portid. The protocol can either be tcp, udp, sctp or dccp.
The destination address is a simple IP address.
因此你可以这样做:
firewall-cmd --zone=whatever --add-forward-port=port=80:proto=tcp:toport=8080
如果它达到了你想要的效果,使其永久化。
答案2
iptables 是默认的防火墙工具,您可以在所有 Linux 版本下找到它。firewalld 是一个方便的工具,因此用户可以在不知情的情况下与“iptables 规则”进行交互。使用firewall-cmd ...命令似乎非常简单,因为您可以动态选择预定义的区域和服务(它们会自动转换为特定端口)。您可以重新加载firewalld.service,而无需重新启动或任何不便。
您仍然可以在 CentOS7 上使用 iptables,但您必须禁用firewalld(并更好地屏蔽它):
systemctl stop firewalld
systemctl disable firewalld
systemctl mask firewalld
安装 iptables-services 和 iptables-utils:
yum install -y iptables-services iptables-utils
现在您可以在 CentOS7 上使用 iptables
如果您需要保存配置以便在重启后继续使用:
iptables-save >/etc/sysconfig/iptables
如果你想改变你的 iptables 规则的顺序,你可以编辑它们的文件(例如 /your_file),然后:
iptables-restore </your_file
并恢复规则。
希望对你有帮助