文章目录
- 参考资料
- 配置结构
- 状态命令
- 规则命令
- 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 的那些事
配置结构
- 两个目录:
1. /etc/firewalld/
2. /usr/lib/firewalld/
- 使用时的规则:当需要一个文件时firewalld会首先到第一个目录中去查找,如果可以找到,那么就直接使用,否则会继续到第二个目录中查找。
- 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
开机自动启动firewallsystemctl disable firewalld.service
关闭开机自动启动firewallsystemctl status firewalld
、firewall-cmd --state
查看防火墙状态firewall-cmd --get-active-zones
获取活动的区域,默认publicfirewall-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/tcpfirewall-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 httpsfirewall-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