나는 두 개의 인터페이스 lo와 eth0을 가진 Linux 시스템을 가지고 있고 일부 TCP 포트를 차단하는 몇 가지 iptables 규칙을 가지고 있습니다.
자체 포트를 스캔하는 프로브 서비스를 구현하여 자체 방화벽 규칙을 테스트할 수 있습니까? 아이디어는 외부 인터페이스 eth0에서 포트 스캔을 수행하되 내부적으로 수행하는 것입니다.
원시 소켓을 사용하여 C++에서 몇 가지 기본 구현을 수행했지만 결국 패킷은 항상 lo 인터페이스로 흐르고 eth0에는 아무것도 표시되지 않습니다.
대상이 소스 주소와 동일하기 때문에 커널이 바로가기를 실행하는 것 같습니다. 이 문제에 대한 아이디어가 있습니까?
답변1
당신은 그것을 사용할 수 있습니다회로망 네임스페이스, 한 쌍을 사용하여 시스템에 연결합니다.와이즈상호 작용. 이렇게 하면 호스트와 추가 네트워크 네임스페이스라는 두 개의 네트워크 스택이 실제로 있게 됩니다. 스캔할 호스트를 생성하는 것은 매우 저렴합니다(가상 머신보다 훨씬 많으며 네트워크만 분리되어 있음). 이를 관리하는 가장 간단한 명령은 다음과 같습니다.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를 스캔할 수 있습니다.루오. 물론 이는 모두 방화벽 규칙에 따라 다릅니다(IP, 인터페이스 이름, 둘 다 또는 기타 사항을 조정해야 함).