Appearance
firewalld防火墙
1. 防火墙常用操作
1.1 查看防火墙状态
systemctl status firewalld
与 firewall-cmd --state
都可以查看防火墙状态
shell
[root@localhost ~]# systemctl status firewalld
● firewalld.service - firewalld - dynamic firewall daemon
Loaded: loaded (/usr/lib/systemd/system/firewalld.service; enabled; vendor preset: enabled)
Active: active (running) since Tue 2024-08-06 13:56:52 CST; 15min ago
Docs: man:firewalld(1)
Main PID: 1064 (firewalld)
Tasks: 3 (limit: 47155)
Memory: 45.9M
CGroup: /system.slice/firewalld.service
└─ 1064 /usr/bin/python3 -s /usr/sbin/firewalld --nofork --nopid
Aug 06 13:56:52 localhost systemd[1]: Starting firewalld - dynamic firewall daemon...
Aug 06 13:56:52 localhost systemd[1]: Started firewalld - dynamic firewall daemon.
[root@localhost ~]#
shell
[root@localhost ~]# firewall-cmd --state
running
[root@localhost ~]#
1.2 查看开放的端口和服务
查看所有开放的端口和服务 firewall-cmd --list-all
shell
[root@localhost ~]# firewall-cmd --list-all
public (active)
target: default
icmp-block-inversion: no
interfaces: ens33
sources:
services: dhcpv6-client mdns ssh
ports:
protocols:
forward: yes
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:
[root@localhost ~]#
查询指定端口是否开放 firewall-cmd --query-port=22/tcp
shell
[root@localhost ~]# firewall-cmd --query-port=22/tcp
no
[root@localhost ~]#
查询指定服务是否开放 firewall-cmd --query-service=ssh
shell
[root@localhost ~]# firewall-cmd --query-service=ssh
yes
[root@localhost ~]#
注意
注意查询的服务必须先定义好
系统内置定义的服务路径为:/usr/lib/firewalld/services/
用户自己定义的服务路径为:/etc/firewalld/services/
如需修改内置服务端口,可将/usr/lib/firewalld/services/
对应服务文件拷贝到/etc/firewalld/services/
并修改端口
查看服务详情 firewall-cmd --info-service=ssh
shell
[root@localhost ~]# firewall-cmd --info-service=ssh
ssh
ports: 22/tcp
protocols:
source-ports:
modules:
destination:
includes:
helpers:
[root@localhost ~]#
1.3 添加端口/服务操作
注意
要说明的是 --permanent
选项表示永久操作,策略不会立即生效,需要重新加载策略或重启生效
不加此选项策略会立即生效,但是关机重启或重新加载策略,策略失效
重新加载防火墙策略 firewall-cmd --reload
shell
[root@localhost ~]# firewall-cmd --reload
success
[root@localhost ~]#
新增一个服务/端口 ,执行结果如下,可以发现重载后,临时策略将失效,永久策略必须重载生效
firewall-cmd --add-port=3306/tcp
firewall-cmd --add-service=ssh
firewall-cmd --permanent --add-port=3306/tcp
firewall-cmd --permanent --add-service=ssh
shell
# 临时开放端口
[root@localhost ~]# firewall-cmd --add-port=3306/tcp
success
[root@localhost ~]# firewall-cmd --list-port
3306/tcp
[root@localhost ~]#
# 永久开放端口
[root@localhost ~]# firewall-cmd --permanent --add-port=80/tcp
success
[root@localhost ~]#
[root@localhost ~]# firewall-cmd --list-port
3306/tcp
[root@localhost ~]# firewall-cmd --reload
success
[root@localhost ~]# firewall-cmd --list-port
80/tcp
[root@localhost ~]#
移除一个服务/端口,注意自己的需求,是仅临时移除,还是需要永久移除
firewall-cmd --remove-port=3306/tcp
firewall-cmd --remove-service=ssh
firewall-cmd --permanent --remove-port=3306/tcp
firewall-cmd --permanent --remove-service=ssh
shell
[root@localhost ~]# firewall-cmd --add-port=3306/tcp
success
[root@localhost ~]# firewall-cmd --list-port
80/tcp 3306/tcp
[root@localhost ~]# firewall-cmd --remove-port=3306/tcp
success
[root@localhost ~]# firewall-cmd --list-port
80/tcp
[root@localhost ~]# firewall-cmd --remove-port=80/tcp
success
[root@localhost ~]# firewall-cmd --list-port
[root@localhost ~]# firewall-cmd --reload
success
[root@localhost ~]# firewall-cmd --list-port
80/tcp
[root@localhost ~]# firewall-cmd --permanent --remove-port=80/tcp
success
[root@localhost ~]# firewall-cmd --list-port
80/tcp
[root@localhost ~]# firewall-cmd --reload
success
[root@localhost ~]# firewall-cmd --list-port
[root@localhost ~]#
1.4 命令小结
shell
# 查看防火墙状态
systemctl status firewalld
# 查看防火墙状态
firewall-cmd --state
# 查看所有开放的端口和服务
firewall-cmd --list-all
# 查询指定端口是否开放
firewall-cmd --query-port=3306/tcp
# 查询指定服务是否开放
# 注意查询的服务必须先定义好
# 系统内置定义的服务路径为:/usr/lib/firewalld/services/
# 用户自己定义的服务路径为:/etc/firewalld/services/ 优先级高于上面的
# 如需修改内置服务端口,可将/usr/lib/firewalld/services/拷贝到/etc/firewalld/services/ 并修改端口
firewall-cmd --query-service=ssh
# 查看服务详情
firewall-cmd --info-service=ssh
# 新增一个服务/端口 --permanent表示永久操作,关机重启也会生效,否则关机重启策略失效
firewall-cmd --permanent --add-port=3306/tcp
firewall-cmd --permanent --add-service=ssh
# 移除服务/端口
firewall-cmd --permanent --remove-port=3306/tcp
firewall-cmd --permanent --remove-service=ssh
# --permanent参数会使策略不会立即生效 --reload重新加载策略生效
firewall-cmd --reload
# 这个 timeout 选项是一个以秒(s)、分(m)或小时(h)为单位的时间值
# 指示防火墙在一个指定的时间之后恢复修改
firewall-cmd --zone=public --add-service=ssh --timeout=5m
精细化操作会被区域操作覆盖
添加允许指定ip访问指定端口,如果需要永久生效,添加 --permanent
参数即可
注意 添加
--permanent
时,规则不会立刻生效,需要执行firewall-cmd --reload
生效
sh
# 添加允许指定ip访问指定端口
firewall-cmd --add-rich-rule='rule family="ipv4" source address="192.168.177.1" port protocol="tcp" port="5822" accept'
# 添加禁止指定ip访问指定端口
firewall-cmd --add-rich-rule='rule family="ipv4" source address="192.168.177.1" port protocol="tcp" port="5822" reject'
# 删除规则
firewall-cmd --remove-rich-rule='rule family="ipv4" source address="192.168.177.1" port protocol="tcp" port="5822" accept'
firewall-cmd --remove-rich-rule='rule family="ipv4" source address="192.168.177.1" port protocol="tcp" port="5822" reject'
# 查看规则
firewall-cmd --zone=public --list-rich-rules
2 区域的简单了解
- 阻塞区域(block):任何传入的网络数据包都将被阻止。
- 工作区域(work):相信网络上的其他计算机,不会损害你的计算机。
- 家庭区域(home):相信网络上的其他计算机,不会损害你的计算机。
- 公共区域(public):不相信网络上的任何计算机,只有选择接受传入的网络连接。
- 隔离区域(DMZ):隔离区域也称为非军事区域,内外网络之间增加的一层网络,起到缓冲作用。对于隔离区域,只有选择接受传入的网络连接。
- 信任区域(trusted):所有的网络连接都可以接受。
- 丢弃区域(drop):任何传入的网络连接都被拒绝。
- 内部区域(internal):信任网络上的其他计算机,不会损害你的计算机。只有选择接受传入的网络连接。
- 外部区域(external):不相信网络上的其他计算机,不会损害你的计算机。只有选择接受传入的网络连接
提示
- 注:
firewalld
的默认区域是public
。 firewalld
默认提供了九个zone配置文件:block.xml
、dmz.xml
、drop.xml
、external.xml
、home.xml
、internal.xml
、public.xml
、trusted.xml
、work.xml
,他们都保存在/usr/lib /firewalld/zones/
目录下。
常用区域选项
--get-default-zone
:打印当前连接的默认区域
shell
[root@more ~]# firewall-cmd --get-default-zone
public
[root@more ~]#
--set-default-zone=<区域名称>
:设置默认的区域
shell
[root@more ~]# firewall-cmd --get-default-zone
public
[root@more ~]# firewall-cmd --set-default-zone=home
success
[root@more ~]# firewall-cmd --get-default-zone
home
[root@more ~]#
此时想要查询开放的端口/服务默认查询的是home
区域的,已经无法查询到开放的端口了
shell
[root@more ~]# firewall-cmd --list-port
[root@more ~]# firewall-cmd --zone=public --list-port
80/tcp 443/tcp 822/tcp
[root@more ~]#