一、firewalld 简介
功能:firewalld 是一个动态管理防火墙规则的工具,它提供了一个基于命令行和图形界面的管理方式,允许管理员轻松地配置和管理防火墙规则,以保护系统免受网络破坏
区域(Zones):firewalld 引入了区域的概念,每个区域都有预定义的规则集。常见的区域包括 public(用于公共网络,规则较为严格)、private(用于私有网络,规则相对宽松)、trusted(信任区域,允许所有流量通过)等
二、安装与启动
安装:在大多数 Linux 发行版中,可以使用包管理工具来安装 firewalld。例如,在 CentOS/RHEL 系统中,可以使用以下命令安装:yum install firewalld
启动:安装完成后,可以使用以下命令启动 firewalld 服务:systemctl start firewalld。同时,可以使用 systemctl enable firewalld 命令设置开机自启
三、基本命令
查看状态:firewall-cmd --state,用于查看 firewalld 的运行状态,如是否正在运行
查看区域列表:firewall-cmd --get-zones,可以列出系统中所有可用的区域
查看默认区域:firewall-cmd --get-default-zone,查看当前系统使用的默认区域
设置默认区域:firewall-cmd --set-default-zone=<zone>,将指定的区域设置为默认区域,例如 firewall-cmd --set-default-zone=public
四、区域相关操作
将接口添加到区域:firewall-cmd --zone=<zone> --add-interface=<interface>,例如 firewall-cmd --zone=public --add-interface=eth0,将 eth0 接口添加到 public 区域
从区域中移除接口:firewall-cmd --zone=<zone> --remove-interface=<interface>
查看区域中的接口:firewall-cmd --zone=<zone> --query-interface=<interface>,用于查询指定接口是否属于某个区域
五、服务相关操作
允许服务:firewall-cmd --zone=<zone> --add-service=<service>,例如 firewall-cmd --zone=public --add-service=http,允许 public 区域中的设备访问本机的 HTTP 服务
移除服务:firewall-cmd --zone=<zone> --remove-service=<service>
查看允许的服务:firewall-cmd --zone=<zone> --list-services,查看指定区域中允许的服务列表
六、端口相关操作
允许端口:firewall-cmd --zone=<zone> --add-port=<port>/<protocol>,例如 firewall-cmd --zone=public --add-port=8080/tcp,允许 public 区域中的设备通过 TCP 协议访问本机的 8080 端口
移除端口:firewall-cmd --zone=<zone> --remove-port=<port>/<protocol>
查看允许的端口:firewall-cmd --zone=<zone> --list-ports,查看指定区域中允许的端口列表
七、富规则(Rich Rules)
定义富规则:富规则是一种更灵活、更强大的规则定义方式,可以指定更详细的规则条件和动作。例如,firewall-cmd --zone=public --add-rich-rule='rule family="ipv4" source address="192.168.1.0/24" service name="ssh" accept',表示允许 192.168.1.0/24 网段内的设备通过 SSH 访问本机
查看富规则:firewall-cmd --zone=<zone> --list-rich-rules,查看指定区域中的富规则列表
移除富规则:需要使用与添加富规则相同的命令,只是将 add-rich-rule 替换为 remove-rich-rule
八、持久化设置
上述的防火墙规则默认情况下只在当前系统运行期间生效,重启后会丢失。如果要使规则持久化,可以在命令中添加 --permanent 选项。例如,firewall-cmd --zone=public --add-service=http --permanent,这样设置的规则在系统重启后仍然有效
注意:在添加了持久化规则后,需要使用 firewall-cmd --reload 命令重新加载防火墙配置,使新的持久化规则生效
九、图形界面管理
在一些 Linux 桌面环境中,提供了图形化的 firewalld 管理工具,如 firewall-config。可以通过图形界面更加直观地进行防火墙规则的配置,包括区域设置、服务和端口的允许与禁止、富规则的管理等操作
十、IPset 集成
IPset 简介:IPset 是一个用于管理 IP 地址集合的工具,可与 firewalld 结合使用,方便对大量 IP 地址进行统一的规则管理
创建 IPset:使用 ipset create <set_name> hash:ip 命令创建一个 IPset,例如 ipset create blacklist hash:ip 创建了一个名为 blacklist 的 IPset,用于存储黑名单 IP 地址
将 IP 地址添加到 IPset:ipset add <set_name> <ip_address>,如 ipset add blacklist 192.168.1.100 将指定 IP 添加到 blacklist 集合中
在 firewalld 中使用 IPset:通过富规则可以引用 IPset,例如 firewall-cmd --zone=public --add-rich-rule='rule family="ipv4" source ipset="blacklist" reject',这表示拒绝 public 区域中来自 blacklist 集合内 IP 地址的所有连接
十一、端口转发
启用端口转发:首先需要确保系统内核支持 IP 转发,可通过检查 /proc/sys/net/ipv4/ip_forward 文件的值是否为 1 来确认。如果为 0,可以通过执行 echo 1 > /proc/sys/net/ipv4/ip_forward 临时开启,或者在 /etc/sysctl.conf 文件中添加 net.ipv4.ip_forward = 1 并执行 sysctl -p 使其永久生效
设置端口转发规则:使用 firewall-cmd 命令设置端口转发,例如 firewall-cmd --zone=public --add-forward-port=port=80:proto=tcp:toport=8080:toaddr=192.168.1.10 表示将 public 区域中目标端口为 80 的 TCP 流量转发到 192.168.1.10 主机的 8080 端口
十二、日志记录
启用日志记录:可以通过修改 firewalld 的配置文件来启用日志记录。在 /etc/firewalld/firewalld.conf 文件中,将 LogDenied 的值设置为 yes,然后重启 firewalld 服务使设置生效
查看日志:启用日志记录后,相关的防火墙日志会记录在系统日志文件中,通常可以通过 journalctl -xe 命令来查看与 firewalld 相关的日志信息,例如查看拒绝连接的日志记录,可通过过滤相关关键字来查找具体的日志条目
十三、与 SELinux 的关系
SELinux 简介:SELinux(Security-Enhanced Linux)是一个强制访问控制的安全模块,与 firewalld 共同作用来增强系统的安全性
策略配合:当 firewalld 允许某个服务或端口访问时,SELinux 可能仍然会根据其自身策略对该访问进行限制。例如,即使 firewalld 允许了 HTTP 服务通过 80 端口访问,但如果 SELinux 的策略不允许相关进程监听在 80 端口上,那么 HTTP 服务仍然无法正常提供服务。这时需要根据具体情况调整 SELinux 策略,确保与 firewalld 配置相配合,以实现预期的安全和访问控制效果。可以使用 semanage 命令来管理 SELinux 的端口、布尔值等相关配置
十四、故障排除
检查服务状态:使用 systemctl status firewalld 命令检查 firewalld 服务的运行状态,查看是否有错误信息或异常日志
检查规则配置:通过 firewall-cmd --list-all 命令查看当前所有的防火墙规则配置,确保规则设置正确,没有冲突或遗漏
检查网络连接:使用网络工具如 ping、telnet、nmap 等检查网络连接是否正常,以及目标端口是否可达,以确定问题是出在防火墙配置还是其他网络方面
十五、升级与维护
软件升级:定期使用包管理工具更新 firewalld 软件包,以获取最新的功能和安全修复。例如在 CentOS/RHEL 系统中,使用 yum update firewalld 命令进行升级
配置备份:定期备份 firewalld 的配置文件,如 /etc/firewalld/ 目录下的所有文件,以便在出现问题时能够快速恢复到之前的正常配置状态。可以使用 tar 命令将配置文件打包备份,如 tar -czvf firewalld_backup.tar.gz /etc/firewalld/
十六、总结
以上内容进一步扩展了关于 firewalld 防火墙的知识,涵盖了 IPset 集成、端口转发、日志记录等更高级的功能和维护相关的内容,有助于更全面地掌握和管理 firewalld 防火墙