arp saddr ip 192.168.2.1 counter accept
Nftables 방화벽에 규칙을 추가하고 싶습니다 . 다음을 sudo nft -f /etc/nftables2.conf
사용하여 구성 파일을 읽을 때
/etc/nftables2.conf:26:21-15: Error: syntax error, unexpected saddr
arp saddr ip 192.168.2.1 counter accept
^^^^^^
문제의 테이블:
table arp filter {
chain input {
type filter hook input priority 0; policy drop;
arp saddr ip 192.168.2.1 counter accept
}
chain output {
type filter hook input priority 0; policy accept;
}
}
나는 그것을 고칠 수 없습니다. 처음에는 다른 IP를 시도한 다음 saddr ether <MAC of device>
IP 주소 대신 동일한 IP 주소를 시도했지만 결과는 동일했습니다. 최신 Raspberry Pi 운영 체제에서 nftables 버전 0.9.0을 사용하고 있습니다. 누군가 내가 잘못 가고 있는 곳을 지적할 수 있습니까? 조금 길을 잃었어요. 시간 내주셔서 감사합니다.
답변1
귀하의 규칙 세트가 정확합니다. 하지만 너의nftables버전이 좀 많이 구렸네요. 다음은 귀하의 예가 포함된 발표입니다.
안녕하세요!
Netfilter 프로젝트는 다음을 자랑스럽게 선보입니다:
nftables 0.9.1
이 릴리스에는 수정 사항과 새로운 기능이 포함되어 있으며 Linux 커널 >= 5.2에서 사용할 수 있습니다.
[...]
예를 들어 ARP 발신자와 대상 IPv4 주소가 일치합니다.
table arp x { chain y { type filter hook input priority filter; policy accept; arp saddr ip 192.168.2.1 counter packets 1 bytes 46 } }
이는 192.168.2.1 주소에서 발생하는 ARP 패킷에 대한 규칙 카운터를 업데이트합니다.
따라서 커널 >= 5.2가 필요할 수 있지만(확실하지는 않음) nftables >= 0.9.1이 필요합니다.
커널의 경우:https://www.raspberrypi.org/software/operating-systems/Raspberry Pi 운영 체제는 현재 커널 5.10.x와 함께 제공되는 것으로 나타나므로 이는 논란의 여지가 있습니다.
~을 위한nftables버전이긴 하지만일반적으로 권장되지 않음, 다음을 사용해 볼 수 있습니다.구축함 백포트업데이트된 버전 받기nftables, 현재 0.9.6. 이것이 RPi에 적합하지 않다고 판단되면 (Debian) 소스에서 백포트된 패키지를 다시 컴파일해야 합니다.
참고: 위키는 약간 지연되며 항상 완전히 정확하지는 않을 수 있습니다. 물론 일단 기능이 존재하면 매뉴얼 페이지가 일반적으로 더 정확해집니다. 예를 들어:
버스터버전 0.9.0:
arp [ARP 헤더 필드]
비교적구축함 백포트'버전 0.9.6:
arp {htype | ptype | hlen | plen | operation | saddr { ip | ether } | daddr { ip | ether }
간단한 사례(및 추가 어려움)에 대한 솔루션
정말 바꿀 수 없다면nftables이와 같은 간단한 경우에는 다음을 사용할 수 있습니다.원래 하중 표현반대로,ARP 프로토콜에 익숙함, 이 프로토콜은 이더넷 및 IPv4에만 사용되는 것이 아니므로 이더넷을 통한 일반적인 IPv4 사용에서 항상 일정하게 유지되는 몇 가지 공통 부분이 있습니다(예: hlen=6, plen=4).
어쨌든, 나는 속임수를 쓰고 nftables 0.9.0을 사용하여 작업 규칙 세트를 다시 읽고, 이를 원시 페이로드로 표시하고, 10진수 출력을 16진수로 변환했습니다(페이로드 오프셋 및 길이 제외).
table arp filter {
chain input {
type filter hook input priority 0; policy drop;
@nh,112,32 0xc0a80201 counter accept
}
chain output {
type filter hook input priority 0; policy accept;
}
}
Wikipedia의 다음 링크를 사용하면 쉽게 읽을 수 있습니다.
오프셋 112(비트 단위)는 오프셋 14(바이트 단위)입니다. 즉, 보낸 사람 프로토콜 주소입니다
saddr ip
.길이 32비트: IPv4 주소 길이
0xc0a80201은 192.168.2.1을 의미합니다.