IPSET 일치는 하나의 Linux 설치에서는 작동하지 않고 다른 Linux 설치에서는 작동하지 않으며 IPv4만 영향을 받습니다.

IPSET 일치는 하나의 Linux 설치에서는 작동하지 않고 다른 Linux 설치에서는 작동하지 않으며 IPv4만 영향을 받습니다.

두 개의 Ubuntu 16.04 서버가 있습니다. 하나는 로컬 네트워크의 작은 intelatom itx 상자에 있고 다른 하나는 VPS로 호스팅됩니다. 둘 다 지난주에 새로 설치되었습니다. 두 구성 모두 일반적으로 동일하며, 공개적으로 액세스 가능한 VPS를 강화하는 데 더 많은 노력을 기울인다는 점만 다를 뿐입니다. 둘 다 커널을 다시 컴파일하지 않았습니다. 둘 다 일반적으로 동일한 패키지 세트를 설치합니다.

그러나... 그들 중 하나인 VPS는 웹 필터가 ipset과 일치할 수 없다고 주장합니다.

wolferz@unipuma ~ $ sudo shorewall check
Checking using Shorewall 5.1.6.1...
Processing /etc/shorewall/params ...
Processing /etc/shorewall/shorewall.conf...
Loading Modules...
Checking /etc/shorewall/zones...
Checking /etc/shorewall/interfaces...
Determining Hosts in Zones...
Locating Action Files...
Checking /etc/shorewall/policy...
Adding Anti-smurf Rules
Checking TCP Flags filtering...
Checking Kernel Route Filtering...
Checking Martian Logging...
Checking MAC Filtration -- Phase 1...
Checking /etc/shorewall/blrules...
   ERROR: ipset names in Shorewall configuration files require Ipset Match in your kernel and iptables /etc/shorewall/blrules (line 39)

내가 사용하려는 구성은 대규모 IP 세트를 동적으로 블랙리스트 및 화이트리스트에 추가하는 데 사용되는 IPset에 크게 의존합니다. 왜냐하면 netfilter는 자주 변경되거나 많은 규칙 목록(IP당 하나... 종종 수천 개)을 갖는 데 적합하지 않기 때문입니다.

ipset 일치가 없으면 여기서 앞으로 나아갈 방법이 없습니다. Shorewall을 사용하여 netfilter와 ipset을 관리하지만 이는 Shorewall 문제가 아닌 것 같습니다. 감지가 어떤 식으로든 왜곡되지 않는 한... 출력을 확인하는 방법을 모르겠습니다.

다음은 VPS에서 Shorewall이 감지한 커널 넷필터 기능입니다.

wolferz@unipuma ~ $ sudo shorewall version
5.1.6.1

wolferz@unipuma ~ $ sudo shorewall show -f capabilities | grep IPSET
IPSET_MATCH=                <== this is the problem
IPSET_MATCH_COUNTERS=       <== this is not great either
IPSET_MATCH_NOMATCH=        <== this is not great either
IPSET_V5=Yes
OLD_IPSET_MATCH=

wolferz@unipuma ~ $ sudo shorewall6 version
5.1.6.1

wolferz@unipuma ~ $ sudo shorewall6 show -f capabilities | grep IPSET
IPSET_MATCH_COUNTERS=       <== normal for ipv6
IPSET_MATCH_NOMATCH=        <== normal for ipv6
IPSET_MATCH=Yes             <== correct
IPSET_V5=Yes
OLD_IPSET_MATCH=

wolferz@unipuma ~ $ uname --kernel-release
4.4.0-93-generic

wolferz@unipuma ~ $ ipset --version
ipset v6.29, protocol version: 6

wolferz@unipuma ~ $ iptables --version
iptables v1.6.0

wolferz@unipuma ~ $ ip6tables --version
ip6tables v1.6.0

설명이 있지만 IPSET_MATCH=뒤에 아무것도 없는 경우 표시되어야 합니다 IPSET_MATCH=Yes. 로컬 서버가 아닌 VPS에서는 실패합니다. 더 이상하게도 ip6tables는 ipset 일치 지원을 보고하지만 iptables는 그렇지 않습니다.

처음에는 내 로컬 서버에 Shorewall이 없었습니다(비록 그렇게 할 계획이었지만)... 그래서 설치했습니다. 하지만 저는 서둘러서 Shorewall 버전을 제공한 apt에서 설치했습니다 5.0.4. 완전한 IPset 일치 기능이 있다고 보고했을 때 나는 이것이 Shorewall에만 있는 기능일지도 모른다고 생각했습니다 5.1.6.1. 그래서 apt를 사용하여 tarball에서 제거 5.0.4하고 5.1.6.1vps처럼 설치했습니다. 둘 다 동일한 출력을 5.0.4제공합니다 .5.1.6.1

wolferz@khaos ~ $ sudo shorewall version
5.1.6.1

wolferz@khaos ~ $ sudo shorewall show -f capabilities | grep IPSET
IPSET_MATCH_COUNTERS=Yes
IPSET_MATCH_NOMATCH=Yes
IPSET_MATCH=Yes
IPSET_V5=Yes
OLD_IPSET_MATCH=

wolferz@khaos ~ $ sudo shorewall6 version
5.1.6.1

wolferz@khaos ~ $ sudo shorewall6 show -f capabilities | grep IPSET
IPSET_MATCH_COUNTERS=
IPSET_MATCH_NOMATCH=
IPSET_MATCH=Yes
IPSET_V5=Yes
OLD_IPSET_MATCH=

wolferz@khaos ~ $ uname --kernel-release
4.4.0-93-generic

wolferz@unipuma ~ $ ipset --version
ipset v6.29, protocol version: 6

wolferz@unipuma ~ $ iptables --version
iptables v1.6.0

wolferz@unipuma ~ $ ip6tables --version
ip6tables v1.6.0

동일한 배포판, 동일한 버전, 동일한 커널. 좋아요, 그래서 VPS 설치를 위한 템플릿이 변조되었을 수도 있다고 생각했습니다. 설치된 모듈의 차이점을 확인하기로 결정했습니다.

wolferz@unipuma ~ $ sudo ls -R -D /lib/modules/4.4.0-93-generic/kernel/ | grep -P '\.ko$' | sort > unipuma_sorted_modules.list

...다른 호스트에 보내기 위한 scp...

wolferz@khaos ~ $ sudo ls -R -D /lib/modules/4.4.0-93-generic/kernel/ | grep -P '\.ko$' | sort > khaos_sorted_modules.list

wolferz@khaos ~ $ diff --brief --report-identical-files khaos_sorted_modules.list unipuma_sorted_modules.list

Files khaos_sorted_modules.list and unipuma_sorted_modules.list are identical

그런 다음 사용 중인 커널의 실제 구성을 확인했습니다.

wolferz@unipuma ~ $ sudo cat /boot/config-4.4.0-93-generic | grep -P '(?:NETFILTER|IPSET)' | sort > unipuma_kernel_config.list

wolferz@khaos ~ $ sudo cat /boot/config-4.4.0-93-generic | grep -P '(?:NETFILTER|IPSET)' | sort > khaos_kernel_config.list

wolferz@khaos ~ $ diff --brief --report-identical-files khaos_kernel_config.list unipuma_kernel_config.list
Files khaos_kernel_config.list and unipuma_kernel_config.list are identical

그럼요. 나를 혼란스럽게 한다. 같은 코어. 동일한 모듈. 동일한 구성. 다른 능력. 잘?

그리고... 지나가는 생각의 흐름을 끊기 위해... 가상 호스트도 아닙니다. 이 문제가 없는 동일한 버전의 Shorewall(및 이전 버전의 netfilter/iptables/ipset)을 사용하여 CentOS6을 실행하는 세 번째 서버가 있습니다. 위에서 언급한 Ubuntu 16.04 vps와 동일한 가상화(KVM)를 사용하여 동일한 물리적 시스템에서 호스팅됩니다.

...돕다?

답변1

그럼요. 모든 훌륭한 아이디어에 감사드립니다. 이것은 여러분의 도움 없이는 불가능할 것입니다.

내가 알고 있듯이 이 질문은 매우 간단하다. shorewall.conf 파일에는 다음 줄이 있습니다.

IPTABLES=/sbin/ip6tables

문제는...shorewall.conf 파일입니다. shorewall6.conf 파일이 아닙니다. ipv4 구성을 중간쯤 시작했을 때 이를 복사했는데 특정 "6"이 누락된 것 같습니다.

수정된 줄은 다음과 같습니다.

IPTABLES=/sbin/iptables

따라서 이 질문이 다음과 같이 작동하는 이유 iptables는 다음과 같습니다. 그렇죠...3일 후...

관련 정보