iptables - 다른 포트에 설정된 상태가 있는 IP 주소에 대해서만 포트에 대한 연결을 허용합니다.

iptables - 다른 포트에 설정된 상태가 있는 IP 주소에 대해서만 포트에 대한 연결을 허용합니다.

포트 y에 '설정됨' 상태가 있는 IP 주소에 대해 포트 x에서의 연결을 허용하고 싶습니다.

iptables만 사용하면 되나요?

답변1

포트 노킹을 사용할 수 있을까요? TCP 연결이 설정되면 포트를 여는 것이 가능할 수 있습니다. http://en.wikipedia.org/wiki/Port_knocking

답변2

대답은 "종류"이다. 패키지를 설치 ipset하고 커널이 ipset지원하는지 확인해야 합니다.

먼저 시간 제한이 있는 "IP 세트"를 생성해야 합니다.

ipset create MySet hash:ip timeout 60

그런 다음 설정된 모든 패킷에 대한 시간 초과를 재설정하는 규칙을 추가합니다.

iptables -A INPUT -p tcp --dport $port1 -m state --state ESTABLISHED -j SET --add-set MySet src

마지막으로, 소스가 녹음된 경우에만 두 번째 포트에 대한 액세스를 허용하고 다른 포트는 삭제하는 일련의 규칙을 추가합니다.

iptables -A INPUT -p tcp --dport $port2 -j Port2_Test
iptables -A Port2_Test -m state --state ESTABLISHED -j ACCEPT
iptables -A Port2_Test -m state --state NEW -m set --match-set MySet src -j ACCEPT
iptables -A Port2_Test -p tcp -j REJECT

편집하다

일치 확장 프로그램을 사용하는 것도 가능하다는 것을 방금 깨달았습니다 recent. 다음과 같이 하세요:

-A INPUT -p tcp --dport $portY -m state --state ESTABLISHED -m recent --name YThenX --set -j ACCEPT

...    

-A INPUT -p tcp --dport $portX -j Port2_Test

...

-A Port2_Test -m state --state ESTABLISHED -j ACCEPT
-A Port2_Test -m state --state NEW -m recent --name YThenX --rcheck --seconds $timeout --reap $timeout -j ACCEPT
-A Port2_Test -p tcp -j REJECT

관련 정보