내 노트북에서 네트워크 검색을 방지하는 방법을 구현하려고 합니다. 내가 원하는 한 가지는 특정 호스트(예: 내 게이트웨이)에 대한 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_IP
만AF_INET, SOCK_RAW, IPPROTO_ICMP
필터링AF_PACKET
됩니다iptables
.
그들의 방법을 사용할 수 있습니다 strace -e trace=%network
(예:뿌리사용자) 이 명령에 사용됩니다.
에 소개된 바와 같이일반 네트워크의 Netfilter 및 패킷 흐름:
AF_PACKET
대부분의 Netfilter 하위 시스템 이전(수신) 또는 이후(출구) 발생합니다.ebtables(다리),arp 테이블또는iptables그리고 그 등가물nftables표: 방화벽이 우회되었습니다. tcpdump
(또는 nmap
) 들어오는 패킷을 방화벽 앞에서 캡처하기 때문에 읽을 수 있고, nmap
방화벽 뒤에 주입하기 때문에 ARP 패킷을 보낼 수 있습니다.
따라서 표준 설정에서는 이 도구에서 생성되거나 nmap
다른 도구에서 사용되는 모든 패킷을 (또는 )을 사용하여 필터링 AF_PACKET
할 수 없습니다 .arptables
iptables
이 문제를 극복하는 몇 가지 방법이 있습니다.
기존 방식: 브리지 사용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
규칙으로 바꾸십시오. 그들은 라우팅 스택과 (더 나은 용어가 없음) 브리징 스택 사이의 체인이기 때문에 여전히 INPUT
and를 사용할 것입니다 .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
일대일로 두 개를 동시에 실행합니다 .br0
eth0
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(쓰다보니 제가 이해한 내용이나 전반적인 설명이 정확하지 않습니다.) 필터가 없는 간단한 예가 있습니다.