포트 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