背景
centos7中默认使用firewall来管理防火墙,因此有必要掌握firewall。
分析
firewall防火墙引入了区域Zone、服务Service等概念。
区域:通常指代网络中的不同部分或区域,例如内部局域网(LAN)、外部互联网、DMZ(非受限区域)等。防火墙可以根据数据包来自或前往的区域进行不同的访问控制和策略设置。
服务:指特定的网络服务或应用程序,例如HTTP、FTP、SSH等。防火墙可以根据服务类型对数据包进行过滤和允许或拒绝的决策。
区域和服务等是为了简化配置操作,让配置更加灵活。一个区域的配置可以预先存储好,在特定场景时可以简单的改变当前使用的区域即可快速切换规则。如果换成传统的iptables,则需要清除已有配置,重新加载新的配置来生效。而服务的引入,可以让我们不再紧盯着端口,还要记住什么端口对应什么服务。服务则不需要记忆端口,对人类更友好。
关于iptables和firewall的区别,请阅读:《一文讲明白iptables和firewall的区别》。
关于防火墙的五表五链的理解,请阅读:《一文轻松理解Linux防火墙的五表五链》
下面是firewall的常用命令以及相关说明。
firewalld服务:
配置文件:/etc/firewalld/firewalld.conf
实时日志:/var/log/firewalld
firewall-cmd命令:
查看版本:firewall-cmd --version
查看帮助:firewall-cmd --help
通用说明:
永久操作:加参数--permanent,写入到/etc/firewalld/zones对应的区域的配置文件。
热生效:firewall-cmd --reload #不断已有连接,且将永久操作写入配置文件
冷生效:firewall-cmd --complete-reload #断开连接,类似重启服务,且将永久操作写入配置文件
保护原则:防火墙的默认策略是拒绝所有的数据包,也被称为“最小授权原则”或“拒绝所有、除非明确允许”的原则。这意味着如果没有特别配置规则来明确允许某些类型的流量通过,防火墙会默认拒绝所有传入或传出的数据包。
动作:allow(允许)、reject拒绝、drop丢弃、forward转发、masqueradeNAT、redirect重定向、balance负载均衡和limit限制。
--add-* 添加规则
--remove 删除规则
--list-* 列出所有规则
--query-* 查询指定规则
默认区域Zone:public
查活跃区:firewall-cmd --get-active-zones # 当前使用的区域,默认为public
设置默认区:firewall-cmd --set-default-zone=public # 立即生效,无需重启
区域配置文件目录:/usr/lib/firewalld/zones/ 和 /etc/firewalld/zones/
/usr/lib/firewalld/zones/ 目录存储预定义的区域,包含所有区域。只有在修改后,将文件拷贝到 /etc/firewalld/zones/ 目录中。实际运行保存区域配置的目录为/etc/firewalld/zones/。如果是使用--direct参数保存的配置,在/etc/firewalld/direct.xml。
对网卡指定区域后,流经此网卡的请求只适应于当前区域的规则,其他区域的规则对此请求无效。当前活跃区域没有命中的网卡的流量,则会流向默认的public区域,如果都没有,则请求会被丢弃,无法通过防火墙。
查看网卡使用的区域:firewall-cmd --get-zone-of-interface=网卡(如eth0)
指定网卡使用的区域:firewall-cmd --add-interface=eth0
预置的区域Zone:
阻塞区域[block.xml] :任何传入的网络数据包都将被阻止。
工作区域[work.xml] :相信网络上的其他计算机,不会损害你的计算机。
家庭区域[home.xml] :相信网络上的其他计算机,不会损害你的计算机。
公共区域[public.xml] :不相信网络上的任何计算机,只有选择接受传入的网络连接。
隔离区域[dmz.xml] :隔离区域也称为非军事区域,内外网络之间增加的一层网络,起到缓冲作用。对于隔离区域,只有选择接受传入的网络连接。
信任区域[trusted.xml] :所有的网络连接都可以接受。
丢弃区域[drop.xml] :任何传入的网络连接都被拒绝。
内部区域[internal.xml] : 信任网络上的其他计算机,不会损害你的计算机。只有选择接受传入的网络连接。
外部区域[external.xml]: 不相信网络上的其他计算机,不会损害你的计算机。只有选择接受传入的网络连接。
指定操作的区域:加--zone=区域名(即.xml前面的名称),不加默认是public
firewalld服务操作:
服务操作(启/停/重启/开启自启/开机不自启):systemctl start/stop/restart/enable/disable firewalld
查询状态:firewall-cmd --state running运行中 / 红色not running未运行
端口操作:
开放端口列表: firewall-cmd --list-ports
添加允许的端口: firewall-cmd --add-port=80/tcp
删除允许的端口: firewall-cmd --remove-port=80/tcp
查询允许的端口: firewall-cmd --query-port=80/tcp
服务操作:
查询允许的服务: firewall-cmd --list-service
添加允许的服务: firewall-cmd --add-service=服务名(smtp、http等)
移除允许的服务: firewall-cmd --remove-service=服务名(smtp、http等)
firewall-cmd --query-service=服务名(smtp、http等)
查看所有复杂规则:firewall-cmd --list-rich-rules
IP封禁:
封禁IP: firewall-cmd --add-rich-rule='rule family="ipv4" source address="IP或IP/24" drop/reject'
解封IP: firewall-cmd --remove-rich-rule='rule family="ipv4" source address="IP或IP/24" drop/reject'
firewall-cmd --add-rich-rule='rule family="ipv4" source address="IP或IP/24" allow'
指定IP和端口封禁:
firewall-cmd --add-rich-rule='rule family="ipv4" source address="IP或IP/24" port port="端口" protocol="tcp" reject/drop'
指定IP和端口解除:
firewall-cmd --remove-rich-rule='rule family="ipv4" source address="IP或IP/24" port port="端口" protocol="tcp" reject'
firewall-cmd --add-rich-rule='rule family="ipv4" source address="IP或IP/24" port port="端口" protocol="tcp" allow'
查询直接规则:firewall-cmd --direct --get-rules ipv4 filter 链名称 # 如DOCKER_USER
添加直接规则:firewall-cmd --permanent --direct --add-rule ipv4 filter 链名称 0 -s IP或IP网段 -j DROP -m comment --comment "非中文注释"
删除直接规则:firewall-cmd --permanent --direct --remove-rule ipv4 filter 链名称 0 -s IP或IP网段 -j DROP -m comment --comment "非中文注释" # 严格按照规则内容删除
仅按IP删除:firewall-cmd --direct --get-rules ipv4 filter DOCKER-USER | grep '\-s IP或IP网段 \-j' | awk '{print "firewall-cmd --permanent --direct --remove-rule ipv4 filter 链名称 R "$0}' | bash
清空直接规则:firewall-cmd --direct --get-rules ipv4 filter 链名称 |grep '\-s'|awk '{print $3}'|xargs -I {} firewall-cmd --permanent --direct --remove-rule ipv4 filter 链名称 0 -s {} -j DROP
目前整理的是我经常用到的,后续会持续补充更新。
总结
firewall的防火墙虽然简化了规则的操作,但是因为引入了区域等概念,再加上对iptables进行了封装,导致firewall的使用的学习成本又变高了。本文就对常用的操作进行了整理,日常使用是没有问题的。
来源: http://www.yu7s.com/article/20240325161605072.html