방화벽 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

마지막으로, 애플리케이션이 수신 대기 중인 포트만 열리도록 방화벽을 구성하면 방화벽을 쿼리하여 동일한 열린 포트를 볼 수 있습니다 nmap.netstat

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

관련 정보