使用命令行管理firewall之前,说明有关于防火墙的策略独立性:明确的策略,策略之间无关联。 比如mysql使用3306,firewall添加mysql服务但未添加3306,当查询3306端口状态会显示no; 同理,添加3306端口,但未添加mysql服务,当查询mysql服务是否被firewalld允许时,显示no。在这两种情况下,外网都可以正常访问,也必须能访问,这里的逻辑不存在问题。同样,拿Java程序开发来类比:往hashMap.put进service与port,当get的时候就成了两码事,即便所操作的是关于mysql服务
1.查看防火墙状态
systemctl status firewalld
2.查看开放的服务/端口:
firewall-cmd --list-service firewall-cmd --list-port
3.查询指定的端口是否永久开放
firewall-cmd --permanent --query-port=/tcp
4.查询指定的服务/端口:
firewall-cmd --query-service ssh firewall-cmd --query-port=/tcp
5.添加服务:
firewall-cmd --permanent --add-service=ftp firewall-cmd --permanent --remove-service=ftp
6.添加端口
方式1:
firewall-cmd --permanent --add-port=/tcp firewall-cmd --permanent --add-port=/tcp firewall-cmd --reload
方式2:
cp /usr/lib/firewalld/services/ssh.xml /etc/firewalld/services/ssh.xml vi /etc/firewalld/services/ssh.xml vi /etc/firewalld/zones/public.xml
7.查看存在的zones:
firewall-cmd --get-zones
8.当前使用的zone:
firewall-cmd --get-active-zones
9.zone为public的所有策略:
firewall-cmd --zone=public --list-all
10.设置默认的zone: (public是最合适的,也是firewall默认的)
firewall-cmd --set-default-zone=public