为什么firewall-cmd无法列出本地电脑上的活动端口?

为什么firewall-cmd无法列出本地电脑上的活动端口?
sudo nmap -p0-65535 127.0.0.1
Starting Nmap 7.40 ( https://nmap.org ) at 2018-02-06 19:03 HKT
Nmap scan report for localhost (127.0.0.1)
Host is up (0.0000050s latency).
Not shown: 65525 closed ports
PORT     STATE SERVICE
22/tcp   open  ssh
25/tcp   open  smtp
80/tcp   open  http
110/tcp  open  pop3
143/tcp  open  imap

使用firewall-cmd 列出端口。

sudo firewall-cmd --zone=public --list-ports

没有列出端口!如何使用firewall-cmd显示与nmap相同的端口?

答案1

这些规则可能是基于服务而不是直接基于端口定义的。运行sudo firewall-cmd --list-all并检查正确区域是否允许列出的服务。您可以在我的示例中看到,ssh,dhcpv6-client是允许的,但它没有显示实际的端口。

# firewall-cmd --list-all
public (active)
  target: default
  icmp-block-inversion: no
  interfaces: ens192
  sources: 
  services: ssh dhcpv6-client
  ports: 
  protocols: 
  masquerade: no
  forward-ports: 
  source-ports: 
  icmp-blocks: 
  rich rules: 

如果您想查看 ssh 的端口,可以查看该服务的规则:

# cat /usr/lib/firewalld/services/ssh.xml

答案2

firewall-cmd --zone public --list-all | awk '/services/ { for (i=2;i<=NF;i++) { print $i;system("grep -o port=.* /usr/lib/firewalld/services/"$i".xml") } }'

使用firewalld-cmd和awk的解决方案如上所示。运行firewall-cmd --zone public --list-all 命令获取服务列表,然后使用awk 拉出服务行。循环遍历此行(空格分隔的单词)上的每个服务,我们执行 grep 命令查找以下位置中的任何端口/usr/lib/firewalld/services/<service name>.xml

请注意,执行 awk 系统函数时存在与命令注入相关的风险。

答案3

运行以下命令以查看永久配置,

添加--permanent,否则您将获得正在运行的配置,并且永久开放的端口将不会显示:

sudo firewall-cmd --list-all --permanent

答案4

编辑:直接回答这个问题,firewall-cmd 无法列出活动端口(由 nmap 报告),因为它不是它的功能(即列出某些应用程序/服务正在侦听或未侦听的端口)。它的功能是阻止或允许特定端口上的流量,因此,它可以列出它阻止或允许(仅)的端口。

阻止/允许的端口与 nmap 看到的打开/关闭的端口不同。

编辑结束

nmap开放端口定义:应用程序(也称为守护程序或服务器或服务)正在侦听主机上的该端口。

此定义假设应用程序和扫描仪之间没有防火墙阻止应用程序正在侦听的端口上的流量。

Application  <->  firewall       <->    Scanner 
(netstat)         (firewall-cmd)        (nmap)
----------------------------------------------------
ssh : 22           no rule              22 is open
http: 80           no rule              80 is open

如果您的防火墙完全开放(没有阻止规则),nmap 将报告侦听所有端口的所有应用程序。但是,如果您查询防火墙,您将一无所获,因为没有规则(即弱保护)。

通过使用以下命令直接向主机询问哪些应用程序正在侦听哪个端口,您可能会看到相同的结果(如 nmap 所报告):

netstat -a

但是,如果您使用阻止所有内容的规则配置防火墙,则您的 nmap 扫描程序将无法看到任何正在侦听的应用程序(在某些端口上)。如果您查询防火墙,您还会看到没有端口打开(不会报告任何内容)。尽管如此,netstat -a还是会报告听力应用程序。

Application  <->  firewall       <->    Scanner 
(netstat)         (firewall-cmd)        (nmap)
----------------------------------------------------
ssh : 22          [X]                   22 is filtered
http: 80          [X]                   80 is filtered

最后,如果您将防火墙配置为仅允许您的应用程序正在监听的端口打开,那么您将通过nmapnetstat并通过查询防火墙看到相同的开放端口...

Application  <->  firewall       <->    Scanner 
(netstat)         (firewall-cmd)        (nmap)
----------------------------------------------------
ssh : 22          [O]                   22 is open
http: 80          [O]                   80 is open

相关内容