루프백 인터페이스를 사용하지 않고 호스트를 포트 스캔하는 방법은 무엇입니까?

루프백 인터페이스를 사용하지 않고 호스트를 포트 스캔하는 방법은 무엇입니까?

호스트의 방화벽 규칙을 감사하려고 합니다. 일반적으로 nmap이나 유사한 스캐닝 도구를 사용하면 매우 간단합니다. 문제는 호스트 자체에서만 감사를 실행할 수 있다는 것입니다. 일반적으로 nmap을 사용하여 현재 호스트에서 포트 스캔을 실행하는 경우 nmap은 루프백 인터페이스를 사용합니다. 이는 내가 관심 있는 호스트의 방화벽이 루프백 인터페이스의 모든 트래픽을 허용하기 때문에 문제가 됩니다.

[my-host ~][I]% sudo iptables -vL
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination
[...snip...]
2364K  123M ACCEPT     all  --  lo     any     anywhere             anywhere
[...snip...]

따라서 호스트를 스캔하면 모든 포트가 방화벽에서 허용되는 것으로 나타납니다.

[my-host ~][I]% sudo nmap -sA my-host 

Starting Nmap 6.40 ( http://nmap.org ) at 2020-01-28 13:53 MST
Nmap scan report for my-host (172.20.48.30)
Host is up (0.000015s latency). 
rDNS record for 172.20.48.30: my-host
All 1000 scanned ports on my-host (172.20.48.30) are unfiltered

Nmap done: 1 IP address (1 host up) scanned in 0.06 seconds

그래서 스캔이 호스트의 일반 네트워크 인터페이스를 통해 트래픽을 라우팅하도록 하기 위해 사용할 인터페이스를 지정해 보았습니다. 그러나 nmap은 열려 있는 포트를 찾을 수 없습니다.

[my-host ~][I]% sudo nmap -sA my-host -e ens192 -Pn

Starting Nmap 6.40 ( http://nmap.org ) at 2020-01-28 13:54 MST
Nmap done: 1 IP address (0 hosts up) scanned in 0.44 seconds

그러나 나는 이 호스트가 방화벽에서 동일한 네트워크에 있는 다른 호스트의 포트 22 이상을 허용한다는 것을 알고 있습니다. 동일한 네트워크의 다른 호스트에서 스캔하면 다음과 같이 표시됩니다.

[my-other-host ~][I]% sudo nmap -sA my-host -Pn

Starting Nmap 6.40 ( http://nmap.org ) at 2020-01-28 13:55 MST
Nmap scan report for my-host (172.20.48.30)
Host is up (0.00021s latency).
rDNS record for 172.20.48.30: my-host
Not shown: 999 filtered ports
PORT   STATE      SERVICE 
22/tcp unfiltered ssh
MAC Address: 00:50:56:A0:34:4D (VMware)

Nmap done: 1 IP address (1 host up) scanned in 4.51 seconds

그렇다면 내 호스트 자체를 스캔할 때 이러한 결과가 표시되지 않는 이유는 무엇입니까? 이는 라우터 구성(안타깝게도 액세스할 수 없음) 때문인가요, 아니면 어딘가에서 실수를 한 것인가요?

답변1

문제는 로컬 시스템에 대상 IP 주소를 수신하는 네트워크 인터페이스가 있는 경우 Linux 라우팅 테이블은 항상 루프백 인터페이스를 통해 로컬로 트래픽을 라우팅하고 이를 물리적 네트워크에 배치하지 않는다는 것입니다. 로컬 라우팅 테이블을 볼 수 있습니다 ip route show table local. 로컬 라우팅 테이블의 규칙과 일치하는 모든 패킷이 루프백됩니다. 또한 로컬 라우팅 테이블은 자동으로 유지되며(인터페이스 열기/닫기 시 규칙이 추가/제거됨) 수동으로 변경할 수 없습니다. 따라서 바인딩할 인터페이스를 명시적으로 지정하더라도 nmap 스캔 패킷은 항상 루프백 인터페이스에서 끝나게 됩니다(실제로 방화벽을 놓치게 됩니다).

해결 방법은 검색을 실행할 네임스페이스 가상 네트워크를 만드는 것입니다. 네임스페이스 가상 네트워크에는 다른 네임스페이스 네트워크(루트 네트워크 네임스페이스 포함)와 별도로 자체 가상 네트워크 인터페이스와 라우팅 테이블이 있습니다. 이는 네임스페이스를 통해 전송된 패킷이 외부 네트워크에서 오는 것으로 나타나며 로컬 패킷으로 간주되지 않음을 의미합니다.

나는 여행 가이드를 따른다여기네임스페이스 네트워크를 만듭니다. 마지막으로 네트워크를 생성하는 스크립트는 다음과 같습니다.

test_source_ip='5.5.5.5'
test_dest_ip='5.5.5.6'
ip netns add testns
ip netns exec testns ip link set dev lo up
ip link add veth0 type veth peer name veth1
ip link set veth1 netns testns
ip netns exec testns ifconfig veth1 ${test_source_ip}/24 up
ifconfig veth0 ${test_dest_ip}/24 up

testns가상 네임스페이스 네트워크의 이름은 원하는 대로 지정할 수 있습니다.

원본 및 대상 IP는 임의의 IP 주소일 수 있습니다. 즉, 스캔을 실행할 때 모든 원본 IP 주소를 스푸핑할 수 있으며 이는 매우 유용합니다. 그러나 시스템이 통신하려는 실제 IP 주소를 가리지 않도록 주의하십시오.

마지막으로 nmap 스캔을 실행하려면 네임스페이스 네트워크 내에서 실행 중인지 확인해야 합니다. 또한 쌍을 이루는 가상 이더넷 어댑터의 IP 주소(시스템의 실제 IP 주소가 아님)에 대한 루트 네임스페이스를 검색해야 합니다.

ip netns exec testns nmap -sA -n ${test_dest_ip}

실제로 5.5.5.5에서 가져온 것처럼 스캔이 실행되는 것을 볼 수 있습니다.

[vagrant@2d33f851-838c-4 ~]$ sudo ip netns exec testns nmap -sA -n 5.5.5.6 

Starting Nmap 6.40 ( http://nmap.org ) at 2020-02-05 17:41 MST
Nmap scan report for 5.5.5.6
Host is up (0.000066s latency).
Not shown: 997 filtered ports
PORT     STATE      SERVICE
22/tcp   unfiltered ssh
1234/tcp unfiltered hotline
5678/tcp unfiltered rrac
MAC Address: FE:64:90:7E:51:81 (Unknown)

Nmap done: 1 IP address (1 host up) scanned in 5.13 seconds
[vagrant@2d33f851-838c-4 ~]$

관련 정보