管理防火墙,我们主要用于打开端口,管理端口
打开和关闭端口
Fedora 29使用的是Firewalld
来管理防火墙的,它的官网上面有详细的使用文档
而我更喜欢使用配置文件来添加服务的方式来管理端口。打开一个端口主要分为以下步骤:
- 拷贝并修改配置文件
- 主要是
名称
和端口
- 主要是
- 添加服务
- 从文件添加服务
- 刷新防火墙规则
- 激活生效的区域
- 刷新防火墙规则
- 验证
端口
是否打开
首先,我们来查看当前系统生效的是哪个区域,cat /etc/firewalld/firewalld.conf | grep "DefaultZone"
,默认状态下是public
。下面我们开始在public
区域添加端口服务。我们的配置文件可以放在这两个路径/etc/firewalld/services
和路径/usr/lib/firewalld/services
,官方推荐放在/usr/lib/firewalld/services
,好处是the admin or user is able to modify the service and that he could go back to the original service easily by loading the defaults of the service.
那好,我们就放在这个目录下面👇:
比如我要添加一个名为OhMyG
的一个服务,它将负责打开8467
端口,首先我们来看看这个端口的占用情况,使用lsof -i :8467
查看。可以看到这个端口是没有在使用的,我们拿端口22
(我此时正通过ssh连接服务器),它显示了如下的结果:1
lsof -i :22
显示结果:1
2
3COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
sshd 1114 root 5u IPv4 24205 0t0 TCP *:ssh (LISTEN)
sshd 1114 root 7u IPv6 24216 0t0 TCP *:ssh (LISTEN)
外部通过telnet
来查看1
telnet 192.168.18.136 22
显示结果:1
2
3
4Trying 192.168.18.136...
Connected to bogon.
Escape character is '^]'.
SSH-2.0-OpenSSH_7.9
拷贝文件
1 | sudo cp /usr/lib/firewalld/services/https.xml /usr/lib/firewalld/services/OhMyG.xml |
我将https.xml
里面的内容拷贝到OhMyG.xml
里面。接下来我们要修改下这个文件:1
sudo vim /usr/lib/firewalld/services/OhMyG.xml
我们来看看这个文件里面的内容:1
2
3
4
5
6<?xml version="1.0" encoding="utf-8"?>
<service>
<short>Secure WWW (HTTPS)</short>
<description>HTTPS is a modified HTTP used to serve Web pages when security is important. Examples are sites that require logins like stores or web mail. This option is not required for viewing pages locally or developing Web pages. You need the httpd package installed for this option to be useful.</description>
<port protocol="tcp" port="443"/>
</service>
修改那些地方
short
你随便起个名字就可以了descriptions
这是你对他的描述protocol
这个是控制方式,出站还是入站,我只是打开端口tcp
没问题port
这就是我们要打开的端口
修改后内容为:1
2
3
4
5
6<?xml version="1.0" encoding="utf-8"?>
<service>
<short>OhMyG</short>
<description>测试,打开端口 8467</description>
<port protocol="tcp" port="8467"/>
</service>
接下来,我们就要将添加服务
了
添加服务
1 | sudo firewall-cmd --zone=public --permanent --new-service-from-file=/usr/lib/firewalld/services/OhMyG.xml --name=OhMyG_s |
上面的命令表示我要永久添加服务OhMyG_s
到public
空间,这里我们不能使用OhMyG
这个服务名了,因为这两个路径中有一个路径存在这个文件,所以我们得换个名字。
执行如下命令
1 sudo ls /etc/firewalld/services/OhMyG_s.xml
这个文件确实已经生成了,我们来看看,这个文件里面的内容和我们之前的文件里面的内容用什么异同。1
sudo more /etc/firewalld/services/OhMyG_s.xml
貌似什么异同,其中查看public
空间的命令为:1
firewall-cmd --zone=public --list-port
- 在运行环境中
添加服务
1
sudo firewall-cmd --permanent --zone=public --add-service=OhMyG_s
我们接下来让防火墙重新载入规则
1
sudo firewall-cmd --reload
接下我们用telnet
来测试测试1
telnet 192.168.18.136 8467
结果为:1
2
3Trying 192.168.18.136...
telnet: connect to address 192.168.18.136: Connection refused
telnet: Unable to connect to remote host
怎么会这样?
我们这个端口只是打开
了,并没有软件占用这个端口,我们用caddy
来占用一下这个端口1
2sudo dnf install -y caddy
caddy --port=8467
再在外部执行,结果就变成这个样子了:1
2
3Trying 192.168.18.136...
Connected to bogon.
Escape character is '^]'.
查看public
空间的服务:1
firewall-cmd --zone=public --list-services

还不错,虚拟机里面跑个,练练手