Linux

從 localhost 測試 iptables

  • November 18, 2019

我有一個帶有兩個介面 lo 和 eth0 的 Linux 系統,我有一些 iptables 規則會阻止一些 tcp 埠。

是否可以通過實施探測服務來掃描我自己的埠來測試我自己的防火牆規則?這個想法是埠掃描我的外部介面 eth0 但在內部進行。

我已經在 C++ 中使用原始套接字進行了一些基本實現,但最後數據包總是會轉到介面我在 eth0 上看不到任何東西。

似乎核心正在做捷徑,因為目標地址等於源地址,對這個問題有什麼想法嗎?

您可以使用網路 命名空間,並通過一對veth介面將其連結到您的系統。這樣,您將真正擁有兩個網路堆棧:主機和附加網路命名空間。這將非常便宜(比虛擬機多,僅分離網路)創建一個要掃描的主機。最簡單的管理命令是ip netns(它旨在通過安裝對它們的引用來保持網路命名空間,即使沒有程序使用它們):

ip netns add scanner
ip link add name veth0 type veth peer netns scanner name veth0
ip address add 192.0.2.2/24 dev veth0
ip -n scanner address add 192.0.2.3/24 dev veth0
ip link set veth0 up
ip -n scanner link set lo up #not really needed, but can avoid a few surprising results
ip -n scanner link set veth0 up
ip netns exec scanner /path/to/my/probing_service ...

您現在可以從 192.0.2.3 掃描 192.0.2.2,這不會使用lo。當然,這完全取決於您的防火牆規則(您必須調整 IP、介面名稱、兩者或其他一些東西)。

引用自:https://unix.stackexchange.com/questions/551755