ファイアウォールcmdが自分のローカルコンピュータのアクティブポートを一覧表示できないのはなぜですか?

ファイアウォール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

ファイアウォール 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

関連情報