看到有篇相关文章介绍如下,指出三者是在不同的linux系统版本中的防火墙,但这种说法并不完全,会让人误解为他们是互不影响的独立关系。

UFW、firewall、iptables防火墙配置 常见的linux系统防火墙有:UFW、firewall、iptables,其中,UFW是Debian系列的默认防火墙,firewall 是红帽系列7及以上的防火墙(如CentOS7.x),iptables是红帽系列6及以下(如CentOS6.x)的防火墙。

事实上,他们很可能同时安装在同一个系统上,并且相互作用影响!
首先,iptables是最底层、最古老的防火墙系统,所有系统都会存在此防火墙,但一般而言只需保证该防火墙处于完全开放状态即可,其他不用管他,更不需要复杂的配置。而ufw和firewall都是较新linux系统上的替代iptables的工具,当他们同时安装在服务器上时,两者之间就会存在冲突

笔者在ubuntu20.04服务器上,测试端口开放情况,排查了ufw和iptables,发现端口明明已经开放,但仍然无法连接,最后通过firewall-cmd --state发现firewall处于开启状态,用service firewalld stop将其暴力关闭后,端口开放正常。
而关闭firewall之后,再次开启ufw,发现端口又无法连接。
至此得出结论,firewall和ufw可共同影响服务器,任一防火墙开启都会使端口无法连接。

端口是否开放排查思路(以mysql数据库为例):

  1. netstat -anp |grep 3306
    首先查看端口监听情况。以确定对应的服务是否启动成功,及是否允许外部ip访问。若显示如下,则表示正常开启,且允许所有ip访问。(下图的第三列需要保证为0.0.0.0.0或::::,才是允许所有ip访问。若不是这个,需要在软件内部配置处设置,如mysql需要到)
  2. 使用firewall-cmd --state排查firewall状态,若开启,则开放对应端口或暴力关闭防火墙;
  3. 使用ufw status排查ufw状态,若开启,则开放对应端口或暴力关闭防火墙;

一般而言,较新的linux系统(不论是centos还是ubuntu)经过以上三步即可排查完成。还有一些教程是需要配置复杂的iptables,但其实并不需要,一不小心还容易造成未知的底层错误,因此,对于新手不建议修改iptables。