Firewall-cmd命令的使用仅仅是在redhat认证考试的时候用到过,之前使用linux的第一步都是systemctl stop firewalld。
前言
firewall-cmd中设置rich-rule有一定的指令生效优先级,不是根据加入rich-rule的顺序判断,drop/reject优先级较高,引用了priority概念,priority越低,生效优先级越高,但是Redhat7不支持该参数,使用时会报错,INVALID_RULE: bad attribute 'priority',查询文档,V0.7.7版本后才支持。
一、firewall-cmd是什么?
是用于管理防火墙的命令,提供了支持网络/防火墙区域(zone)定义网络链接以及接口安全等级的动态防火墙管理工具,相较于iptables更易设置,更易读。
二、常用概念
1.区域(zone)
我这里只使用过public和trusted,这两个很好理解,public默认全部禁止,仅保留dhcpv6-client、ssh服务,其他所有端口访问,连接都会被拒绝;trusted默认全部允许,和关闭防火墙没有什么区别。
默认zone为public。
# 查看zone命令
firewall-cmd --list-all
# 切换zone命令
firewall-cmd --set-default-zone=trusted
2.其他命令
# 禁止所有网段访问9200
firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="0.0.0.0/0" port="9200" port protocol="tcp" reject'
# 设置一个网段的ip可以访问9200
firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address="192.168.113.0/24" port protocol="tcp" port="9200" accept"
# 设置http对外开放
firewall-cmd --permanent --add-service=http
# 设置区间端口
firewall-cmd --zone=public --add-port=4400-4600/tcp --permanent
# 重载防火墙规则,只有指令中包含--permanent才生效
firewall-cmd --reload
# 查看rich-rule
firewall-cmd --zone=public --list-rich-rules
# 删除rich-rule
firewall-cmd --zone=public --permanent --remove-rich-rule="rule family="ipv4" source address="192.168.113.0/24" port port="9200" protocol="tcp" accept"
三、实现思路
由于要禁止其他网段访问服务的9200端口,所以设置本地zone为trusted后,新增一个rich-rule禁止所有ip访问9200端口,策略priority设置为100;再次新增一个rich-rule允许192.168.113.0/24网段ip访问9200,策略priority设置为10,预想此时应该仅有192.168.113.0/24的客户端可以访问9200。
# V0.7.7升级以后支持
firewall-cmd --permanent --add-rich-rule="rule priority="100" family="ipv4" port protocol="tcp" port="9200" reject"
firewall-cmd --permanent --add-rich-rule="rule priority="10" family="ipv4" source address="192.168.113.0/24" port protocol="tcp" port="9200" accept"
firewall-cmd --reload