在Redhat/CentOS中自带的防火墙firewalld其实也很强大,除了日常用到的端口访问规则外,还可以配置更复杂的规则,如端口转发、IP访问控制等。
有两个方法可以实现firewalld的rich规则。
方法一
编辑文件/etc/firewalld/zones/public.xml,添加相应的规则即可:
<?xml version="1.0" encoding="utf-8"?> <zone> <short>Public</short> <description>For use in public areas. You do not trust the other computers on networks to not harm your computer. Only selected incoming connections are accepted.</description> <service name="ssh"/> <service name="dhcpv6-client"/> <service name="cockpit"/> <!-- 允许172.16.0.0/24访问本地nfs服务 --> <rule family="ipv4"> <source address="172.16.0.0/24"/> <service name="nfs"/> <accept/> </rule> <!-- 允许访问本地所有端口的IP源 --> <rule family="ipv4"> <source address="10.10.200.0/24"/> <accept/> </rule> <!-- 允许访问本地指定端口的IP源 --> <rule family="ipv4"> <source address="10.10.100.0/24"/> <port protocol="udp" port="53"/> <accept/> </rule> <!-- 允许访问本地指定端口范围的IP源 --> <rule family="ipv4"> <source address="10.10.200.0/24"/> <port protocol="tcp" port="2048-4096"/> <accept/> </rule> <!-- 禁止访问本服务器的IP源 --> <rule family="ipv4"> <source address="8.8.8.8"/> <reject/> </rule> </zone>
方法二
通过firewall-cmd命令配置访问规则,命令中加上--permanent参数会自动写入public.xml文件。
# 服务访问规则:仅允许172.16.0.0/24访问nfs服务 firewall-cmd --add-rich-rule='rule family=ipv4 source address=172.16.0.0/24 service name=nfs accept' --permanent # 服务访问规则:仅允许每分钟最多2个连接到ftp服务 firewall-cmd --add-rich-rule='rule service name=ftp limit value=2/m accept' --permanent # 端口转发实例:将公网2222端口转发至172.16.16.250:22 firewall-cmd --add-rich-rule='rule family=ipv4 forward-port port=2222 protocol=tcp to-port=22 to-addr=172.16.16.250' --permanent # 访问规则实例:限定ssh/22服务只能从内网10.10.200.200访问 firewall-cmd --add-rich-rule='rule family=ipv4 source address=10.10.200.200/32 service name=ssh accept' --permanent # 访问规则实例:限定udp/161端口只能从内网10.169.138.158访问 firewall-cmd --add-rich-rule='rule family=ipv4 source address=10.10.200.200/32 destination address=10.10.200.201/32 port port=161 protocol=udp accept' --permanent
验证结果
不论是编辑文件,还是执行命令,都需要重新加载firewalld配置:
# 确保firewalld是运行状态 # systemctl status firewalld # 重载firewalld配置 firewall-cmd --reload # 验证结果 firewall-cmd --list-all
原创文章禁止转载:技术学堂 » 配置firewalld端口转发和IP访问控制实例