Fedora 29管理防火墙

服务器最重要的事情之一就是端口啦

管理防火墙,我们主要用于打开端口,管理端口

打开和关闭端口

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
3
COMMAND   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
4
Trying 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_spublic空间,这里我们不能使用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
3
Trying 192.168.18.136...
telnet: connect to address 192.168.18.136: Connection refused
telnet: Unable to connect to remote host

怎么会这样?
我们这个端口只是打开了,并没有软件占用这个端口,我们用caddy来占用一下这个端口

1
2
sudo dnf install -y caddy
caddy --port=8467

再在外部执行,结果就变成这个样子了:

1
2
3
Trying 192.168.18.136...
Connected to bogon.
Escape character is '^]'.

查看public空间的服务:

1
firewall-cmd --zone=public --list-services

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