IPTables 규칙은 들어오는 SSH 연결을 허용합니다.

IPTables 규칙은 들어오는 SSH 연결을 허용합니다.

이 스크립트의 목적은 localhost<->localhost 및 들어오는 SSH 트래픽을 제외하고 VPN을 통한 트래픽만 허용하는 것입니다. 그러나 SSH를 통해 스크립트를 실행하면 연결이 끊어지고 VM을 다시 시작해야 합니다. 내 스크립트에 문제가 있나요?

#!/bin/bash
iptables -F

#Allow over VPN
iptables -A INPUT -i tun+ -j ACCEPT
iptables -A OUTPUT -o tun+ -j ACCEPT

#Localhost
iptables -A INPUT -s 127.0.0.1/8 -j ACCEPT
iptables -A OUTPUT -d 127.0.0.1/8 -j ACCEPT

#VPN
iptables -A INPUT -s 123.123.123.123 -j ACCEPT
iptables -A OUTPUT -d 123.123.123.123 -j ACCEPT

#SSH
iptables -A INPUT -p tcp --dport ssh -j ACCEPT

#Default Deny
iptables -A INPUT -j DROP
iptables -A OUTPUT -j DROP

답변1

귀하의 #SSH규칙은 ssh가 단방향 통신 형태임을 암시하지만 그렇지 않습니다. 데이터가 전송되고 있습니다그리고물러서세요.

클라이언트의 포트 번호를 미리 알 수 없으므로 이를 처리하는 일반적인 방법은 고려되는 연결을 허용하는 것입니다."확립된" 또는 "관련된"설정된 연결로. 이렇게 하려면 다음이 필요합니다.

-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
-A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

DROP규칙 앞 (규칙은 순차적으로 처리되고 이 두 규칙은 대부분의 패킷에 적용되므로 맨 위에 있는 것이 좋습니다).

TCP 연결이 어떻게 ESTABLISHED되는지에 대한 설명여기;기본적으로 서버가 규칙에서 허용하는 패킷으로 응답한다는 사실이 #SSH INPUT이를 가능하게 합니다.

답변2

출력 체인은 다음을 담당합니다.어느패킷이 나갑니다.

스크립트에서는 아웃바운드 패킷이 터널 인터페이스, localhost 및 123.123.123.123의 원격 호스트로만 전송되도록 허용합니다.

위의 대상 중 하나가 아닌 다른 대상으로 패킷을 보내기 위해 SSH 데몬이 필요한 방식으로 서버에 연결하면 트래픽이 허용되지 않습니다.

SSH 데몬에서 SSH 클라이언트로의 아웃바운드 패킷을 허용하려면 다음 규칙을 추가해야 합니다.

iptables -A OUTPUT -p tcp --sport 22 -j ACCEPT

단일 위치에서만 연결하는 경우 위 규칙에 대상 IP 기준을 추가해야 할 수도 있습니다. 이 규칙은 출력 체인의 최종 "다른 항목 제거" 규칙 앞에 나타나야 합니다.

관련 정보