自Centos7起 ,系统防火墙由iptables改为了firewalld。本文聊一聊关于 firewalld 的一些常用操作,如配置文件所在目录、对端口和 IP 的限制、防火墙的开关等。
1.防火墙配置文件
1.1配置文件所在的目录
/usr/lib/firewalld/ #默认的规则 /etc/firewalld/ #自定义规则
1.2指定启用的配置文件
实际上两个路径存有很多份配置文件,由/etc/firewalld/firewalld.conf确定采用那份规则,一般默认使用/etc/firewalld/zones/public.xml,用户添加的自定义规则也写在这里文件里。
在这两个路径下,需要重点关注的文件夹只有两个:services和zones。
1.1 services文件夹
services 存储的是定义好的端口组合。
如ssh.xml定义了 SSH 的端口为 22,那么在防火墙使用的配置文件中添加<service name="ssh"/>
,表示启用了ssh服务,等同于开放了 22 端口。
1.2 zones文件夹
zones 储存的是完整的防火墙规则。
如public.xml ,防火墙启用这份文件后,不在此文件内的服务和端口都被拒绝连接。想要自定义放开什么端口或IP,就将规则写在此文件内。
2. firewalld 相关命令
①一般在终端通过命令行控制防火墙,但使用了宝塔面板的用户,②可以在软件商店 > 系统工具 > 系统防火墙,进行可视化添加/删除/开关管理。
添加和删除规则,③还可以直接去配置文件操作,保存后要重启一次:firewall-cmd --reload,以上这些是比较常见的3种操作方式。
2.1开关防火墙服务
#启动服务 systemctl start firewalld #停止服务 systemctl stop firewalld #开机自启 systemctl enable firewalld #关闭自启 systemctl disable firewalld #重启服务 systemctl restart firewalld #查看状态 systemctl status firewalld 或 firewall-cmd --state
2.2 查看已开放规则
#查看firewalld所有开放的规则 firewall-cmd --list-all #查看已经开放的服务(端口合集) firewall-cmd --list-services #查看已经开放的端口 firewall-cmd --list-port
2.3 增加或删除规则
⭕注意,规则的增删有两点需要额外注意⚠️⚠️:
--permanent #加到命令后面,表示永久有效; firewall-cmd --reload #执行此命令重启防火墙后,永久规则才能生效
⭕端口
#开放单个端口 firewall-cmd --zone=public --add-port=22/tcp --permanent #限制单个端口 firewall-cmd --zone=public --remove-port=22/tcp --permanent #开放一组端口 firewall-cmd --zone=public --add-port=100-500/tcp --permanent #限制一组端口 firewall-cmd --zone=public --remove-port=100-500/tcp --permanent
⭕IP
#限制IP地址访问端口,reject 表示拒绝,设置为 drop 表示直接丢弃 firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address="192.168.0.200" port protocol="tcp" port="80" reject" #解除限制(允许) firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address="192.168.0.200" port protocol="tcp" port="80" accept" #限制IP段访问端口 firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address="10.0.0.0/24" port protocol="tcp" port="80" reject" #解除限制(允许) firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address="10.0.0.0/24" port protocol="tcp" port="80" accept" #允许某个IP的所有连接 firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address="<ip>" accept" #允许某个IP访问ssh服务 firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address="192.168.0.200" service name="ssh" accept" #允许某个IP访问icmp协议 firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address="192.168.0.200" protocol value="icmp" accept"
⭕服务
firewall-cmd --get-services #查看所有预设的服务 firewall-cmd --list-services #查看已放行的服务 firewall-cmd --info-service=ssh #查看某个服务包含的端口,如ssh firewall-cmd --permanent --add-service=<service name> #放行服务 firewall-cmd --permanent --add-service=ssh #如放行 ssh firewall-cmd --permanent --remove-service=<service name> #移除服务
⭕协议
firewall-cmd --permanent --add-protocol=<protocol> # 允许协议 firewall-cmd --permanent --add-protocol=icmp # 例:icmp,即允许ping firewall-cmd --permanent --remove-protocol=<protocol> # 取消协议 firewall-cmd --list-protocols # 查看允许的协议
注意事项
防火墙从上往下匹配规则,一旦匹配成功就会暂停向下匹配,因此要注意规则的顺序避免失效。遇到规则不生效时,建议执行firewall-cmd --list-all查看所有开发的服务/IP和端口,以及注意查看它们的顺序。
宝塔用户如安装并启用了系统防火墙插件,端口的放行就要在系统防火墙插件里操作,不要再去面板后台的安全选项里放行,避免出现规则的冲突。
暂无评论
要发表评论,您必须先 登录