ホストのファイアウォールルールを監査しようとしています。通常、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 ~]$