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
最後に、アプリケーションがリッスンしているポートのみを開くようにファイアウォールを設定したら、ファイアウォールを照会して同じオープンポートを表示できますnmap
。netstat
Application <-> firewall <-> Scanner
(netstat) (firewall-cmd) (nmap)
----------------------------------------------------
ssh : 22 [O] 22 is open
http: 80 [O] 80 is open