firewalld简介
firewalld是firewall daemon,CentOS7以上默认的防火墙管理工具,拥有运行时配置和永久配置选项,也允许服务或应用程序直接添加防火墙规则的接口。firewalld使用zones和services的概念,而iptables使用chains和rules。与iptables相比,firewalld提供了更灵活的方式来管理防火墙。firewalld自身不具备防火墙功能,而是和iptables一样需要通过内核netfilter来实现。
相较于传统的防火墙管理工具,firewalld支持动态更新技术并加入了区域(zone)的概念。简单来说,区域就是firewalld预先准备了好几套防火墙访问控制策略集合(模板),用户可以根据生产场景的不同而选择合适的策略集合,从而实现策略之间的快速切换。基于用户对网络中设备和通信所给与的信任程度,firewalld可用于将网络划分成不同的区域,为每个区域提供不同级别的安全性。
block:限制,任何接收的网络连接都被IPv4的icmp-host-prohibited信息和IPv6的icmp6-adm-prohibited信息所拒绝。
dmz:非军事区,外部受限地访问内部网络,仅接收经过选定的网络连接。
drop:丢弃,任何接收的网络数据包都被丢弃,且没有任何回复,仅能有发送的网络连接。
external:外部,为路由器启用了伪装功能的外部网络,不信任网络内的其它计算机,仅接收经过选定的网络连接。
home:家庭,网络内的其它计算机通常是可信任的,仅接收经过选定的网络连接。
internal:内部,网络内的其它计算机通常是可信任的,仅接收经过选定的网络连接。
public:公共,也是初始默认区域,不信任网络内的其它计算机,仅接收经过选定的网络连接。当网络接口连接加入了NetworkManager,它们就被绑定至默认区域。
trusted:信任,接受所有网络连接。
work:工作,网络内的其它计算机通常是可信任的,仅接收经过选定的网络连接。
# 获取系统所有的zone
[root@host log]# firewall-cmd --get-zones
block dmz drop external home internal public trusted work
# 获取系统当前默认是的zone
[root@host log]# firewall-cmd --get-default-zone
public
# 查看系统当前所有的service
[root@host log]# firewall-cmd --get-services
RH-Satellite-6 amanda-client bacula bacula-client dhcp dhcpv6 dhcpv6-client dns freeipa-ldap freeipa-ldaps freeipa-replication ftp high-availability http https imaps ipp ipp-client ipsec iscsi-target kerberos kpasswd ldap ldaps libvirt libvirt-tls mdns mountd ms-wbt mysql nfs ntp openvpn pmcd pmproxy pmwebapi pmwebapis pop3s postgresql proxy-dhcp radius rpc-bind rsyncd samba samba-client smtp ssh telnet tftp tftp-client transmission-client vdsm vnc-server wbem-https
# 查看系统当前zone下有哪些service
[root@host log]# firewall-cmd --list-services
dhcpv6-client ssh
[root@host log]# firewall-cmd --list-service
dhcpv6-client ssh
firewalld安装
1、 rpm -qa |grep firewalld
2、 yum install firewalld
3、 systemctl start firewalld.service
firewalld常规操作
1、端口管理
2、服务管理
# 查看firewalld状态
systemctl status firewalld.service
# 显示firewalld的状态
[root@host]# firewall-cmd --state
running
# 查看public中所有打开的端口
firewall-cmd --zone=public --list-ports
# 将特定网卡加入默认区域
firewall-cmd --zone=public --add-interface=eth0
firewall-cmd --zone=public --query-interface=eth0
firewall-cmd --zone=pubic --list-all
# 添加开放端口,如果80/tcp 3306/tcp等
# --permanent为永久生效,需要通过--reload或重启系统才会永久生效
# 如无--permanent选项执行后立即生效,但不会写入配置文件,一旦重启系统或reload失效
firewall-cmd --zone=public --add-port=80/tcp --permanent
firewall-cmd --zone=public --add-port=5432/tcp --permanent
firewall-cmd --zone=public --add-port=6379/tcp --permanent
# 更新防火墙规则,添加和删除规则后,需要--reload更新生效
firewall-cmd --reload
# 查看端口释放开放
firewall-cmd --zone=public --query-port=80/tcp
# 删除开放端口
firewall-cmd --zone=public --remove-port=80/tcp --permanent
# 通过富语言放通某个IP或者IP段(常用于应用服务迁移下线后的操作,封闭一段时间流量)
# 富语言:规则允许使用易于理解的命令创建更复杂的防火墙规则
# accept: 所有新的连接请求都被允许
# reject:连接将被拒绝,连接来源将接收到一个拒绝信息,拒绝信息可被设定为另一种值
# drop:所有数据包都会被丢弃,且不会向来源地址发送任何信息
firewall-cmd --permanent --add-rich-rule="rule family=ipv4 source address=172.18.60.0/24 port protocol=tcp port=3306 accept"
firewall-cmd --permanent --add-rich-rule='rule family=ipv4 source address=172.18.68.3 accept'
[root@host log]# firewall-cmd --list-rich-rule # 查看已启用的富语言规则
rule family="ipv4" source address="172.18.60.0/24" port port="3306" protocol="tcp" accept
rule family="ipv4" source address="172.18.68.3" accept
# 查看上述添加各种fw规则后的信息
[root@host log]# firewall-cmd --list-all
public (default, active)
interfaces: eth0
sources: 172.18.60.73/24 172.18.60.0/24
services: dhcpv6-client ssh
ports: 5432/tcp 6379/tcp
masquerade: no
forward-ports:
icmp-blocks:
rich rules:
rule family="ipv4" source address="172.18.60.0/24" port port="3306" protocol="tcp" accept
rule family="ipv4" source address="172.18.68.3" accept
firewalld!!!高危操作(紧急模式panic-on)
# 什么是紧急模式? 拒绝所有的数据包,强制关闭所有网络连接(包括当前的ssh),此时只能重启机器解决了
# 查看是否启用紧急模式
firewall-cmd --query-panic
# 启用紧急模式(!!!慎用)
firewall-cmd --panic-on
# 禁用紧急模式
firewall-cmd --panic-off