firewalld是centos7默认的防火墙,相比于iptables重要的优势:
1 支持动态更新;
2 不用重启服务;
同时增加了防火墙的“zone”概念,具体差异没做过多了解,这篇文章只记录firewalld简单学习历程
centos7默认安装的就是firewalld,默认的public中开启dhcpv6-client ssh这两个服务,这也就是当装完centos7后启动nginx 80端口拒绝连接,我们却找不到iptables命令的原因。
启动、关闭、重启firewalld服务命令:
$ systemctl start firewalld
$ systemctl stop firewalld
$ systemctl restart firewalld
$ firewall-cmd --state # 查看firewalld运行情况
其他可查阅systemctl命令。
规则管理命令
$ firewall-cmd --panic-on # 丢弃
$ firewall-cmd --panic-off # 取消丢弃
$ firewall-cmd --query-panic # 查看丢弃状态
$ firewall-cmd --reload # 更新规则,不重启服务
$ firewall-cmd --complete-reload # 更新规则,重启服务
firewalld zone区域是新引入的概念,Firewall 能将不同的网络连接归类到不同的信任级别,Zone 提供了以下几个级别
- drop: 丢弃所有进入的包,而不给出任何响应
- block: 拒绝所有外部发起的连接,允许内部发起的连接
- public: 允许指定的进入连接
- external: 同上,对伪装的进入连接,一般用于路由转发
- dmz: 允许受限制的进入连接
- work: 允许受信任的计算机被限制的进入连接,类似 workgroup
- home: 同上,类似 homegroup
- internal: 同上,范围针对所有互联网用户
- trusted: 信任所有连接
firewalld-cmd 支持动态更新,修改更新操作默认为立刻生效,--permanent
参数配合重新加载实现永久生效
对应zone常用的命令:
$ firewall-cmd --list-all-zone #获取全部zone
$ firewall-cmd --get-active-zone #获取活跃的zone
$ firewall-cmd --get-default-zone #获取默认的zone
$ firewall-cmd --set-default-zone=work #修改默认的zone
$ firewall-cmd --zone=work --change-interface=eno16777736 #修改网卡关联的zone
$ firewall-cmd --zone=public --list-all #查询zone=public配置信息
服务管理
$ firewall-cmd --zone=work --add-service=smtp
$ firewall-cmd --zone=work --remove-service=smtp
$ firewall-cmd --get-service
端口号管理
$ firewall-cmd --zome=dmz --list-ports
$ firewall-cmd --zone=dmz --add-port=8080/tcp
$ firewall-cmd --zome=public --add-port=8080-8090/udp
firewalld
有一个被称为 “direct interface”(直接接口),它可以直接通过 iptables、ip6tables 和 ebtables 的规则。它适用于应用程序,而不是用户。如果您不太熟悉 iptables,那么使用直接接口是很危险的,因为您可能无意中导致防火墙被入侵。firewalld
保持对所增加项目的追踪,所以它还能质询 firewalld
和发现由使用直接端口模式的程序造成的更改。直接端口由增加 --direct
选项到 firewall-cmd
命令来使用。