CentOS7 防火墙FireWall配置结构&基本规则指令

2,363 阅读6分钟

这是我参与8月更文挑战的第4天,活动详情查看:8月更文挑战


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

参考资料

==Firewalld结构==:重要,了解Firewall的结构,配置文件,原理等 Linux中国:Linux 防火墙:关于 iptables 和 firewalld 的那些事 linux就该这么学第8章Iptables与Firewalld防火墙。

配置结构

Firewalld结构

  • 两个目录:
    1. /etc/firewalld/
    2. /usr/lib/firewalld/
    
  • 使用时的规则:当需要一个文件时firewalld会首先到第一个目录中去查找,如果可以找到,那么就直接使用,否则会继续到第二个目录中查找。 阿里云CentOS7.7
  • 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地址伪装&端口转发

还没咋看,资料centos7下Firewall使用详解CentOS7 防火墙(firewall)的操作命令 将到本机的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