我如何允许来自 IPtables 规则中特定端口的流量

我如何允许来自 IPtables 规则中特定端口的流量

我有 centos7 在 2 个虚拟机中运行。两台虚拟机上都运行防火墙。假设某个应用程序正在使用 5044 端口的计算机 A 上运行。我有另一台名为机器 B 的机器,它试图在 5044 端口上远程登录这台机器。那时telnet是通过异常说

Trying 192.168.115.141...
   telnet: connect to address 192.168.115.141: No route to host

但关闭防火墙后通信工作正常。但我不想禁用防火墙。那么,我如何允许另一台机器 B 与机器 A 进行通信。您知道我需要在 IP 表或防火墙规则列表中定义什么类型的策略吗?

任何帮助将不胜感激。

答案1

Centos 7正在使用firewalld默认情况下。目前它是内核提供的防火墙的更高级别接口iptables。虽然不需要真正了解iptables如何使用firewalld,但充分理解它肯定会有所帮助。控制的主要界面firewalldfirewall-cmd命令。当此命令与它一起使用时,--permanent它将仅影响配置并且没有可见的效果(直到重新加载、服务重新启动或重新引导)。当此选项不存在时,它只会立即产生可见的效果,而不会更改已保存的配置。存在其他界面,例如 GUIfirewall-config

firewalld有很多抽象概念,比如区域。默认情况下,公共区域正在使用中,但许多区域是预定义的(受信任的、工作的、dmz ...),每个区域都有一个使用角色并包括一些预定义的设置(例如:公共区域中默认允许 ssh)。对于仅限制特定源的服务访问,应优先使用备用区域(而不是公共区域)。也许应该选择一个预定义区域,但无论如何,让我们创建一个新区域,将其与源(MachineB 的 IP)绑定并允许 TCP 端口 5044。假设 MachineB 的 IP 是10.0.3.66(其他有效源例如是所有LAN 作为源,在此示例中将改为 LAN 10.0.3.0/24):

# firewall-cmd --permanent --new-zone peervm
# firewall-cmd --permanent --zone peervm --add-source 10.0.3.66
# firewall-cmd --permanent --zone peervm --add-port 5044/tcp

配置中的效果是可见的,例如:

# egrep -r '10.0.3.66|5044' /etc/firewalld
/etc/firewalld/zones/peervm.xml.old:  <source address="10.0.3.66"/>
/etc/firewalld/zones/peervm.xml:  <source address="10.0.3.66"/>
/etc/firewalld/zones/peervm.xml:  <port protocol="tcp" port="5044"/>

使用以下命令激活更改:

# firewall-cmd --reload
success

这将重建基本iptables规则,其效果可见,例如:

# iptables-save |egrep '10.0.3.66|5044'
-A POSTROUTING_ZONES_SOURCE -d 10.0.3.66/32 -g POST_peervm
-A PREROUTING_ZONES_SOURCE -s 10.0.3.66/32 -g PRE_peervm
-A PREROUTING_ZONES_SOURCE -s 10.0.3.66/32 -g PRE_peervm
-A PREROUTING_ZONES_SOURCE -s 10.0.3.66/32 -g PRE_peervm
-A FORWARD_IN_ZONES_SOURCE -s 10.0.3.66/32 -g FWDI_peervm
-A FORWARD_OUT_ZONES_SOURCE -d 10.0.3.66/32 -g FWDO_peervm
-A INPUT_ZONES_SOURCE -s 10.0.3.66/32 -g IN_peervm
-A IN_peervm_allow -p tcp -m tcp --dport 5044 -m conntrack --ctstate NEW -j ACCEPT

使用抽象层可以生成很多像上面这样的样板规则,基本上只用一个iptables规则就可以完成(放入此处未显示的一些标准规则):

# iptables -I INPUT -s 10.0.3.66/32 -p tcp --dport 5044 -j ACCEPT

因此,当熟练使用 时iptables,对于最简单的情况,或者在范围的另一端,对于不容易用 覆盖的非常复杂的情况firewalld,应该考虑使用直接iptables规则和另一组已保存的配置工具,例如在 CentOS 上使用iptables-services代替firewalld

相关内容