"hash:ip,port" 유형의 IP 세트를 올바르게 일치시키는 방법은 무엇입니까?

"hash:ip,port" 유형의 IP 세트를 올바르게 일치시키는 방법은 무엇입니까?

현재 설정에는 여러 IPv4 주소가 있는 서버가 있습니다. IPv6 부분은 증상이 동일하므로 지금은 무시하겠습니다.

방화벽 규칙에서 HTTP 트래픽을 일치시키고 싶습니다.쪽으로특정 IP 및 기타 서비스( -j ACCEPT내 테이블 INPUT의 체인을 통과할 수 있도록 허용 filter)

이것은효과적으로체인의 두 번째 규칙은 다음과 같습니다 INPUT.

-A INPUT -m set --match-set public_services dst -j ACCEPT
-A INPUT -j NFLOG --nflog-prefix  "[IPv4:inp/flt] (drop)"
-A INPUT -j DROP
# filter/INPUT chain ends here

하지만 이전에 일부 로깅이 발생했기 때문에 -j DROP트래픽이 예상대로 허용되지 않고 마지막 규칙에 의해 삭제되는 것을 볼 수 있습니다. 로깅에 사용되는 태그는 내 netfilter 규칙 내에서 고유합니다.

내 IP 설정은 다음과 같습니다.

# ipset save public_services
create public_services list:set size 8
add public_services public_services4
add public_services public_services6

IPv4 특정 IP 세트는 다음과 같습니다(실제 IP 주소는 수정됨).

# ipset save public_services4
create public_services4 hash:ip,port family inet hashsize 1024 maxelem 65536 counters
add public_services4 192.168.0.1,tcp:80 packets 0 bytes 0
add public_services4 192.168.0.1,tcp:22 packets 0 bytes 0

INPUT체인의 규칙이 일치하는지 확인하기 위해 카운터를 활성화했습니다 . 그러나 그렇지 않은 것 같습니다. tcp로그 파일(편집된 MAC 및 IP 주소)의 IP, 프로토콜() 및 포트를 비교할 때 다음과 같이 일치하기 때문에 이것이 이상하다고 생각합니다 .

[IPv4:inp/flt] (drop) IN=eth0 OUT= MAC=00:00:00:00:00:00:00:00:00:00:00:00:00:00 SRC=1.2.3.4 DST=192.168.0.1 LEN=40 TOS=00 PREC=0x00 TTL=242 ID=54321 PROTO=TCP SPT=51433 DPT=80 SEQ=2936666534 ACK=0 WINDOW=65535 SYN URGP=0 MARK=0

또한 내 규칙을 각각 IPv4 및 IPv6 특정 규칙으로 추가하여 해당 규칙이 IP 버전에 특정한 IP 세트를 참조하도록 시도했습니다. 이것도 작동하지 않습니다. 먼저 명시적인 규칙을 추가하는 것입니다.

이런 경우 대상 IP, 프로토콜, 포트를 일치시키려고 할 때 내가 뭘 잘못하고 있는 걸까요?


추가 정보:

위에서 언급한 규칙은 항목 26이므로 그 앞에 명시적인 규칙을 삽입하기로 결정했습니다.

-I INPUT 26 -p tcp -d 192.168.0.1 --dport 80 -j ACCEPT

이것은 작동합니다. 그러나 나는 netfilter 규칙에서 변수 부분을 최대한 추상화하여 IP 세트에 넣고 싶습니다.

그래서 저는 (이것을 증명하기 위해) 다음을 덧붙였습니다.저것컬렉션에서는 작동하지 않습니다.) 또 다른 규칙:

-I INPUT 26 -m set --match-set public_services4 dst -j ACCEPT

이것은 작동하지 않습니다. netfilter와 IP에 의해 설정된 카운터에 따르면 이 규칙은 일치하지 않습니다.

패키지 버전 관련:

  • IP 세트: 6.20.1-1
  • iptables:1.4.21-1ubuntu1

답변1

귀하의 ipset은 IP와 포트로 구성되므로 iptables에 IP와 포트가 일치하도록 지시해야 합니다. 대상 포트와 일치시키려면 dst를 사용하고, 그렇지 않으면 src를 사용하십시오.

-A INPUT -m set --match-set public_services dst,dst -j ACCEPT

관련 정보