# centos7 怎么用 firewall-cmd 来限制转发的端口访问? 在 CentOS 7 上,使用 `firewalld` 的 `firewall-cmd` 工具来管理防火墙规则,包括端口转发,是一种非常灵活且强大的方式。但是,`firewalld` 的端口转发功能主要用于将外部流量转发到内部服务器或服务的不同端口或IP上,而不是直接用于限制转发端口的访问。 不过,**你可以通过结合使用端口转发和区域(zones)策略来间接地实现这一目的**。这里我将首先解释如何进行端口转发,然后说明如何设置不同的区域策略来限制访问。 ### 1. 端口转发 首先,确保你的 `firewalld` 服务是启动的: ```bash sudo systemctl start firewalld sudo systemctl enable firewalld ``` 然后,你可以添加一个端口转发规则。比如,你想将到达外部端口 80 的所有流量转发到内部 IP 地址 192.168.1.100 的 8080 端口: ```bash sudo firewall-cmd --permanent --zone=public --add-forward-port=port=80:proto=tcp:toport=8080:toaddr=192.168.1.100 sudo firewall-cmd --reload ``` 这里,`--zone=public` 指定了规则应用的区域(默认为 `public`),但你可以根据需要调整。 ### 2. 限制转发端口的访问 虽然 `firewalld` 不直接支持在转发规则上直接设置访问控制列表(ACL),但你可以通过定义不同的区域,并在这些区域上设置不同的服务/端口规则来间接实现这一目的。 例如,你可以创建一个新的区域(比如 `limited_access`),然后仅允许来自特定 IP 地址或网络的访问: ```bash # 创建一个新区域 sudo firewall-cmd --permanent --new-zone=limited_access # 为新区域设置源地址 sudo firewall-cmd --permanent --zone=limited_access --add-source=192.168.1.0/24 # 将端口转发规则移到新区域(如果你只想限制此区域的访问) # 注意:通常你不会将转发规则直接移动到限制区域,而是根据需要配置访问控制 # 这里的步骤更多是为了说明如何管理不同区域 # 实际上,你可能只是在新区域上拒绝除特定服务外的所有入站连接 sudo firewall-cmd --permanent --zone=limited_access --remove-service=ssh # 举例,移除SSH服务(如果不需要的话) sudo firewall-cmd --permanent --zone=limited_access --add-port=80/tcp # 仅允许80端口 # 重新加载配置 sudo firewall-cmd --reload ``` 然而,请注意,直接将转发规则放入一个限制区域可能不是你想要的行为,因为转发规则通常是在一个“公共”或“外部”区域中设置的,以便将流量从外部路由到内部网络。相反,你可能希望设置源地址过滤或在另一个区域中实施更严格的规则,然后确保只有经过验证或授权的流量才能到达包含转发规则的区域。 ### 总结 虽然 `firewalld` 不直接支持在转发规则上设置 ACL,但你可以通过精细管理不同的区域和服务规则来实现类似的功能。确保你的防火墙策略符合你的安全需求和业务逻辑。 ## 快照 - https://pic.rmb.bdstatic.com/bjh/240910/0547b0acb7b658ca2cbe1a73a380f9904607.png - https://i3.wp.com/pic.rmb.bdstatic.com/bjh/240910/0547b0acb7b658ca2cbe1a73a380f9904607.png