답변:
INPUT 및 OUTPUT 체인에서 기본 정책을 DROP으로 설정하기 만하면됩니다.
SSH를 허용하려면 다음 명령이 필요합니다.
$ sudo iptables -P INPUT DROP
$ sudo iptables -P OUTPUT DROP
$ sudo iptables -A INPUT -i lo -j ACCEPT
$ sudo iptables -A INPUT -p tcp -m tcp --dport 22 -j ACCEPT
$ sudo iptables -A OUTPUT -o lo -j ACCEPT
$ sudo iptables -A OUTPUT -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT
마지막 두 명령은 일부 응용 프로그램에서 올바르게 작동하기 위해 필요한 루프백 트래픽을 허용합니다. -s source_ip
옵션을 사용하여 특정 IP에서 SSH 액세스를 제한 할 수 있습니다 .
위에 표시된 순서대로 명령을 실행하면 현재 SSH 세션이 중단됩니다. iptables 명령이 즉시 적용되기 때문입니다. 원격으로 실행할 때 컴퓨터에 연결할 수있는 기능을 잃지 않도록 셸 스크립트로 실행해야합니다.
이 같은:
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -j REJECT # or iptables -P INPUT DROP
iptables -A OUTPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -j REJECT # or iptables -P OUTPUT DROP
-i lo
아니라고 생각합니다 -s lo
. 다시 말하지만, ESTABLISHED
주 규칙 에만 필요하며 아마도 거기에도 있어야합니다 --sport 22
. 모두가 왜 그렇게 허용하고 싶어하는가 RELATED
?
RELATED
: 실제로 Ping 응답 및 DNS 응답과 같이 TCP 이외의 항목을 일치시키는 데 유용합니다. 적어도 그것이 항상 가정했던 것입니다.
--state RELATED
마지막 규칙은 불필요합니다.--state ESTABLISHED
충분하다. DNS 트래픽을 허용 할 수도 있고 루프백 인터페이스의 모든 항목을 허용해야합니다. 그렇지 않으면 모든 종류의 동작이 매우 이상하게 작동 할 수 있습니다.