arptable은 nmap과 함께 사용할 수 없습니다

arptable은 nmap과 함께 사용할 수 없습니다

내 노트북에서 네트워크 검색을 방지하는 방법을 구현하려고 합니다. 내가 원하는 한 가지는 특정 호스트(예: 내 게이트웨이)에 대한 arp 요청을 허용하는 것입니다.
arptable을 사용하여 몇 가지 규칙을 추가했는데 (처음에는) 제대로 작동하는 것 같았습니다.

arptables -A OUTPUT -d 192.168.1.30 -j DROP
arptables -A INPUT  -s 192.168.1.30 -j DROP

이는 호스트에 대한 arp 요청을 효과적으로 차단합니다. 내가 실행하면 :

tcpdump -n port not 22 and host 192.168.1.38 (target host)

그리고 다음을 실행하세요:

arp -d 192.168.1.30; ping -c 1 192.168.1.30; arp -n (notebook)

tcpdump는 대상에 들어오는 패킷이 없음을 표시하고 노트북은 arp -n(불완전)을 표시합니다.

그러나 랩톱에서 nmap -sS 192.168.1.30을 실행하면 대상 호스트에 도달합니다.

22:21:12.548519 ARP, Request who-has 192.168.1.30 tell 192.168.1.38, length 46
22:21:12.548655 ARP, Reply 192.168.1.30 is-at xx:xx:xx:xx:xx:xx, length 28
22:21:12.728499 ARP, Request who-has 192.168.1.30 tell 192.168.1.38, length 46
22:21:12.728538 ARP, Reply 192.168.1.30 is-at xx:xx:xx:xx:xx:xx, length 28

그러나 노트북의 arp -n은 여전히 ​​불완전한 것으로 표시되지만 nmap은 호스트를 감지합니다.
나도 사용해봤는데nftables그리고ebtables성공하지 못했습니다.

nmap이 arp 요청을 보내고 호스트를 찾는 것을 중지하는 방법은 무엇입니까?

답변1

OP 설정을 완료하겠습니다. 주소는 192.168.1.38/24 eth0이고 게이트웨이(실제로는 필요하지 않음) 192.168.1.1입니다. 설정에서 실제 이더넷 대신 Wi-Fi를 사용하는 경우 추가 노력 없이는 첫 번째 방법(브리징)을 사용할 수 없습니다(액세스 포인트인 경우 쉬울 수 있지만 AP가 아닌 경우 매우 어렵거나 불가능할 수도 있음).


  • nmap사용하다패킷 소켓(유형 AF_PACKET)을 사용하면 커널의 네트워크 스택을 사용하여 ARP 캐싱 및 구문 분석을 처리하는 대신 ARP 요청을 처리할 수 있습니다. arping동작은 유사합니다(예제를 단순화하는 데 사용됩니다).

  • tcpdump 반품캡처 용 AF_PACKET.

  • 반면에 다른 특수 도구(예: )도 ping사용 여부 AF_INET, SOCK_DGRAM, IPPROTO_IPAF_INET, SOCK_RAW, IPPROTO_ICMP필터링 AF_PACKET됩니다 iptables.

그들의 방법을 사용할 수 있습니다 strace -e trace=%network(예:뿌리사용자) 이 명령에 사용됩니다.

에 소개된 바와 같이일반 네트워크의 Netfilter 및 패킷 흐름:

일반 네트워크의 Netfilter 및 패킷 흐름

AF_PACKET대부분의 Netfilter 하위 시스템 이전(수신) 또는 이후(출구) 발생합니다.ebtables(다리),arp 테이블또는iptables그리고 그 등가물nftables표: 방화벽이 우회되었습니다. tcpdump(또는 nmap) 들어오는 패킷을 방화벽 앞에서 캡처하기 때문에 읽을 수 있고, nmap방화벽 뒤에 주입하기 때문에 ARP 패킷을 보낼 수 있습니다.

따라서 표준 설정에서는 이 도구에서 생성되거나 nmap다른 도구에서 사용되는 모든 패킷을 (또는 )을 사용하여 필터링 AF_PACKET할 수 없습니다 .arptablesiptables

이 문제를 극복하는 몇 가지 방법이 있습니다.

기존 방식: 브리지 사용ebtables

브리지되어 있으므로 대부분의 경우 Wi-Fi와 호환되지 않습니다.

~을 위한ebtables(또는nftables홈 의 bridge경우 이는 일반적으로 문제가 되지 않습니다. 필터링할 수 없는 ARP 또는 IP 패킷이 이더넷 프레임으로 변환되면 네트워크 스택의 다른 계층에 다시 들어갑니다. 이제 네트워크 스택 내에 위치하며 사용을 포함한 모든 시설의 영향을 받습니다 ebtables(또는nftables가족 과 함께 지내십시오 bridge). 따라서 네트워크 브리지를 사용하면 방화벽 우회 문제를 극복할 수 있습니다.

브리지를 생성하고 eth0포트를 브리지로 설정하고 주소와 경로를 이동합니다 br0(물론 이 작업은 사용 중인 적절한 네트워크 도구를 재구성하여 수행해야 하며/또는 일시적인 연결 끊김으로 인해 원격으로 수행해서는 안 됩니다).

ip link add name br0 up type bridge
ip link set dev eth0 master br0
ip addr flush dev eth0
ip addr add 192.168.1.38/24 brd + dev br0
ip route add default via 192.168.1.1 # not needed for this problem

그런 다음 arptables규칙을 ebtables규칙으로 바꾸십시오. 그들은 라우팅 스택과 (더 나은 용어가 없음) 브리징 스택 사이의 체인이기 때문에 여전히 INPUTand를 사용할 것입니다 .OUTPUT

ebtables -A OUTPUT -p ARP --arp-ip-dst 192.168.1.30 -j DROP
ebtables -A INPUT -p ARP --arp-ip-src 192.168.1.30 -j DROP

대략 a와 동등하다nftables규칙 세트는 다음과 nft -f somerulefile.nft같이 로드될 수 있습니다.

add table bridge t    # for idempotence
delete table bridge t # for idempotence

table bridge t {
    chain out {
        type filter hook output priority 0; policy accept;
        arp daddr ip 192.168.1.30 drop
    }

    chain in {
        type filter hook input priority 0; policy accept;
        arp saddr ip 192.168.1.30 drop
    }
}

(영향을 받는 인터페이스를 제한하려면 추가 필터링을 추가해야 할 수도 있습니다.)

이러한 규칙 중 하나를 만든 후 다음 과 같이 tcpdump일대일로 두 개를 동시에 실행합니다 .br0eth0

tcpdump -l -n -e -s0 -i br0 arp &
tcpdump -l -n -e -s0 -i eth0 arp &

방출이 표시되지만 br0더 이상 표시되지 않습니다 eth0. 삽입 시 차단할 수 없는 ARP 패킷이 브리지 계층에 의해 효과적으로 차단되었습니다. 규칙을 제거하면 두 인터페이스 모두에 트래픽이 표시됩니다. 마찬가지로 원격 역방향 테스트의 경우 패킷이 캡처되지만 eth0도착하지 않습니다 br0. 즉 차단됩니다.

새로운 방법:nftables그리고netdev가족그리고 egress후크

: 리눅스 필요커널 >= 5.16egress후크를 제공하며 ,nftables>= 1.0.1그걸 써. ingress커널 4.2부터 사용 가능합니다.

관련된 브리지가 없기 때문에 네트워크 레이아웃을 변경할 필요가 없으며 이는 이더넷이나 Wi-Fi에서도 마찬가지입니다.

특히 이건범죄사용 사례 제시:

netfilter: 종료 후크 소개

다음과 같은 사용자 요구 사항에 맞게 패킷을 분류하기 위해 송신 시 netfilter 사용을 지원합니다.

  • 컨테이너에 대한 아웃바운드 보안 정책(Laura)
  • 로드 밸런서(Laura)에서 노드 내 DSR(Direct Server Return) 트래픽 필터링 및 차단
  • 로컬 ARP 트래픽과 같이 AF_PACKET을 통해 들어오는 로컬 생성 트래픽을 필터링합니다.클러스터링 목적 또는 DHCP를 위해 생성됨
    (Laura, 후속 커밋에 AF_PACKET 파이프라인이 포함됨)

[...]

nftablesnetdev인터페이스 수준에서 작동하는 제품군의 다른 Netfilter 후크(이전 다이어그램에는 설명되지 않음)에 대한 액세스를 제공 ingress합니다 egress. 이러한 후크는 수신 및 송신에 가깝습니다 AF_PACKET(수신/송신 및 캡처/주입과 관련된 구현 세부 사항에 약간의 미묘함이 있으므로 모호하게 유지됨). egress에 주입된 패킷에 영향을 줄 수 있습니다 AF_PACKET.

패밀리 테이블의 베이스 체인은 netdev인터페이스에 연결되어야 합니다. OP의 초기 설정을 사용하여 이전nftables규칙 세트는 netdev다음과 같이 계열의 구문을 사용하여 다시 작성할 수 있습니다.

add table netdev t    # for idempotence
delete table netdev t # for idempotence

table netdev t {
    chain out {
        type filter hook egress device eth0 priority 0; policy accept;
        arp daddr ip 192.168.1.30 drop
    }

    chain in {
        type filter hook ingress device eth0 priority 0; policy accept;
        arp saddr ip 192.168.1.30 drop
    }
}

tcpdump주입된 ARP는 송신 시 포착되지 않습니다. 이전에 삭제되었습니다. 수신 시 캡처는 여전히 먼저 발생합니다. 에 의존하는 도구 AF_PACKET( 로 시작 tcpdump)는 여전히 캡처할 수 있습니다(그러나 방화벽은 즉시 캡처를 삭제합니다).


tc기타: 소켓을 필터링할 수 있는 도구 도 있습니다 AF_PACKET(도구가 해당 옵션을 사용하지 않는 경우).PACKET_QDISC_BYPASS). tc다루기가 더 어렵습니다. 이것은내 답변Q/A(쓰다보니 제가 이해한 내용이나 전반적인 설명이 정확하지 않습니다.) 필터가 없는 간단한 예가 있습니다.

관련 정보