Linux系统中配置防火墙放行某个端口
当我们在服务器上安装某个应用程序后,会通过某些工具来访问这些应用服务。但是在默认情况下,这些应用服务绑定的端口都会被防火墙进行拦截,从而导致访问失败。当然,最简洁有效的方式就是将防火墙进行关闭,但是这会产生一些安全风险,特别是在正式的生产环境中。因此,最好的方式就是通过修改防火墙的配置来放行指定的端口。
需要提前说明一点,本文中的防火墙指的是firewalld这个实现,而非其他实现。
防火墙的开启与关闭
- 查看状态
对于常见的Linux系统而言,防火墙都是默认开启的。此时我们可以使用如下命令来查看防火墙的状态:
systemctl status firewalld
执行结果如下所示:
- 关闭服务
如果需要进行关闭,则可以执行如下的命令:
systemctl stop firewalld
执行之后再次查看防火墙的状态,结果如下所示:
- 开启服务
如果想再次开启防火墙,可以执行如下的命令:
systemctl start firewalld
执行之后再次查看防火墙的状态,结果如下所示:
- 重启服务
有时候我们会更改防火墙的一些配置,此时就需要重新启动防火墙的服务。启动防火墙服务时会使用到如下所示的命令:
systemctl restart firewalld
执行之后就可以重新启动防火墙服务。
防火墙放行端口配置的修改
- 查看防火墙的运行状态
首先我们应该先确定防火墙所处的运行状态,如果防火墙处于非运行状态,则无需进行端口放行。查看防火墙运行状态的命令如下所示:
firewall-cmd --state
执行结果如下所示:
上面的结果说明防火墙处于运行状态。如果是not running,则说明防火墙处于关闭状态。这个命令与systemctl区别在于,其显示的信息更加简洁。
- 查看防火墙是否拦截某个端口
在配置放行端口之前,我们需要先查看一下防火墙对该端口是否已经放行。需要用到的命令如下所示:
firewall-cmd --query-port=$port/tcp
比如我要查询3306端口是否被放行,之后结果如下所示:
上面的结果为no,说明3306端口未被防火墙放行。只有当结果为yes的时候,才表示该端口会被放行。
- 在防火墙中添加指定的放行端口
添加放行端口需要用到的命令如下所示:
firewall-cmd --add-port=$port/tcp --permanent
上面测试3306端口后发现,该端口会被防火墙拦截,因此我们需要通过修改配置,使得防火墙对该端口进行放行。执行结果如下所示:
此时,再次查看该端口是否被放行:
结果竟然依然显示为no。此时大家是否会有所困惑,刚才明明都提示success了,怎幺还是no呢?其实根本原因在于,我们修改成功之后的配置并未生效。因此,我们需要重新加载防火墙的配置来使得之前修改的配置生效。
- 重新加载防火墙配置
重新加载防火墙配置需要用到如下所示的命令:
firewall-cmd --reload
执行结果如下所示:
此时我们再次查看3306端口是否被放行,执行对应的命令后结果如下所示:
可以看到,此时3306的端口状态已经变为了yes。也就是说,再次通过该端口访问服务器上指定的应用服务时就不会被防火墙进行拦截。