文章目录

  • 参考资料
  • 配置结构
  • 状态命令
  • 规则命令
  • 1. port规则
  • 2. service规则
  • 3. rich-rule规则
  • 1) ip-port
  • 2) ip-service
  • 4. IP地址伪装&端口转发
  • 5. all



小常识:firewalld自身并不具备防火墙的功能,而是和iptables一样需要通过内核的netfilter来实现,也就是说firewalld和 iptables一样,他们的作用都是用于维护规则,而真正使用规则干活的是内核的netfilter,只不过firewalld和iptables的结构以及使用方法不一样罢了。

参考资料

Firewalld结构:重要,了解Firewall的结构,配置文件,原理等
Linux中国:Linux 防火墙:关于 iptables 和 firewalld 的那些事

配置结构

Firewalld结构

  • 两个目录:
1. /etc/firewalld/
2. /usr/lib/firewalld/
  • 使用时的规则:当需要一个文件时firewalld会首先到第一个目录中去查找,如果可以找到,那么就直接使用,否则会继续到第二个目录中查找。
  • centos7怎么删除yum centos7怎么删除防火墙配置_centos

  • service配置文件的命名规则是<服务名>.xml,比如ssh的配置文件是ssh.xml,http的配置文件是http.xml等,他们默认保存在“/usr/lib/firewalld/services/”目录下,常见的服务其中都可以找到。如果我们想修改某个服务的配置,那么可以复制一份到“/etc/firewalld/services/”目录下然后进行修改就可以了,要想恢复默认配置直接将我们自己的配置文件删除就可以了。
  • ssh.xml
  • firewalld.conf,DefaultZone=public,所以命令中的zone=public可以省略。public这个zone只会放行其中所配置的服务,其他的一律不予放行

状态命令

  • yum install firewalld 安装firewalld 防火墙
  • systemctl start firewalld.service 开启服务
  • systemctl stop firewalld.service 关闭防火墙
  • systemctl enable firewalld.service 开机自动启动firewall
  • systemctl disable firewalld.service 关闭开机自动启动firewall
  • systemctl status firewalldfirewall-cmd --state 查看防火墙状态
  • firewall-cmd --get-active-zones 获取活动的区域,默认public
  • firewall-cmd --get-service 获取所有支持的服务

规则命令

  • 默认zone=public,命令中可以省略--zone=public
  • --permanent 使用此参数永久生效,要执行firewall-cmd --reload才生效;不使用此参数立即生效,重启失效。
  • 资料:表示是否将修改后的规则保存下来,如果不加这个参数,那么所做的修改当时会立即生效,但是在firewalld重启之后就会丢失,而加上这个参数后所做的修改就会永久保存下来,不过这时的修改不会立即生效而是需要reload后才可以生效。其实这个也非常容易理解,当不加–permanent修改规则时firewalld会实际修改运行时的规则,而如果加了这个参数firewalld其实是去修改的xml配置文件,和我们直接编辑xml文件一样,所以就需要reload才可以生效。
  • firewall-cmd --reload 在不改变状态的条件下重新加载防火墙,使配置立即生效(每次修改配置都要执行)
  • 添加、移除、列出、查询的基本格式是使用add、remove、list、query

1. port规则

  • firewall-cmd --permanent --add-port=80/tcp 永久开放80端口
  • 批量开放:port=3000-5000
  • firewall-cmd --permanent --remove-port=80/tcp 永久关闭80端口
  • firewall-cmd --list-ports 列出已经开放的端口,加--permanent只显示永久有效的。返回格式:空格隔开 例如 8080-8081/tcp 8388/tcp 80/tcp
  • firewall-cmd --query-port=80/tcp 查询指定端口的开闭状态,加--permanent只显示永久有效的。返回yes | no。

2. service规则

service规则是firewall的一个重点概念,它相对于port的好处是:首先使用服务名配置的语义清晰,不容易出错;其次在对某个服务的端口号进行修改的时候只需要修改相应的service文件就可以了,而不需要再修改防火墙方案 — zone。这其实跟DNS将ip地址和域名关联了起来是一样的道理

  • firewall-cmd --get-service 获取所有支持的服务
  • firewall-cmd --permanent --add-service=ssh 永久开放ssh服务(ssh默认开启)
  • firewall-cmd --permanent --remove-service=ssh 永久关闭ssh服务
  • firewall-cmd --list-services 列出已经开放的服务,加--permanent只显示永久有效的。返回格式空格隔开 例如 dhcpv6-client ssh https
  • firewall-cmd --query-service ssh 查询指定服务的开闭状态,加--permanent只显示永久有效的。返回yes | no。

3. rich-rule规则

  • 可配置ip/ip段。
  • ip段解释eg:10.0.0.0/24表示为从10.0.0.0这个IP开始,24代表子网掩码为255.255.255.0,共包含256个地址,即从10.0.0.0-10.0.0.255共256个IP,即正好限制了这一整段的IP地址,具体的设置规则可参考下表:

1) ip-port

accept允许,reject禁止

  • firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address="192.168.1.103" port protocol="tcp" port="3306-5200" accept" 永久允许某个ip访问某些端口
  • firewall-cmd --permanent --remove-rich-rule="rule family="ipv4" source address="192.168.1.103" port protocol="tcp" port="3306" accept" 永久移除某个ip访问某个端口
  • firewall-cmd --query-rich-rule="rule family="ipv4" source address="192.168.1.103" port protocol="tcp" port="3306" accept" 查询某个ip对某个端口的访问状态,加--permanent只显示永久有效的。返回yes | no。

2) ip-service

accept允许,reject禁止

  • firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address="192.168.1.1/24" service name="ssh" accept" 永久允许某个ip段访问某个服务。
  • firewall-cmd --permanent --remove-rich-rule="rule family="ipv4" source address="192.168.1.1/24" service name="ssh" accept" 永久移除某个ip段访问某个服务。
  • firewall-cmd --query-rich-rule="rule family="ipv4" source address="192.168.1.1/24" service name="ssh" accept" 查询某个ip段对某个服务的访问状态,加--permanent只显示永久有效的。返回yes | no。

4. IP地址伪装&端口转发

将到本机的3306端口的访问转发到192.168.1.1服务器的3306端口

  • firewall-cmd --permanent --add-masquerade 需要先打开IP地址伪装
  • firewall-cmd --permanent --add-forward-port=port=3306:proto=tcp:toaddr=192.168.1.2:toport=13306 配置端口转发

5. all

  • firewall-cmd --list-all 列出所有规则,加--permanent只显示永久有效的
[root@localhost zones]# firewall-cmd --list-all
public (active)
  target: default
  icmp-block-inversion: no
  interfaces: ens33
  sources: 
  services: dhcpv6-client ssh
  ports: 22/tcp
  protocols: 
  masquerade: no
  forward-ports: 
  source-ports: 
  icmp-blocks: 
  rich rules: 
	rule family="ipv4" source address="192.168.0.4/24" service name="http" accept
	rule family="ipv4" source address="192.168.1.103" port port="3306" protocol="tcp" accept
	rule family="ipv4" source address="192.168.1.103" port port="3308" protocol="tcp" accept
  • cat /etc/firewalld/zones/public.xml xml方式查看所有规则 – 对应的zone的xml文件中查看规则
  • iptables -L -n 查看iptables规则,可以检查配置端口是否生效
> iptables -L -n | grep 22          
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0            tcp dpt:22 ctstate NEW,UNTRACKED