iptables는 로컬 SSH 연결을 차단할 수 없습니다

iptables는 로컬 SSH 연결을 차단할 수 없습니다

내 질문은 다음과 같습니다. iptables가 localhost에 대한 SSH 연결을 차단할 수 없는 이유는 무엇입니까?

자세한 설명은 다음과 같습니다.

iptables를 실험하면서 제가 알고 싶었던 다음과 같은 궁금증을 발견했습니다. 모든 정책을 DROP으로 설정했지만 여전히 SSH를 통해 로컬로 시스템에 액세스할 수 있습니다.

이것이 내가 하는 일이다.

먼저 iptables모든 POLICY 값을 DROP으로 설정했습니다.

cat <<HEREDOC | sudo iptables-restore

*filter
:INPUT DROP
:FORWARD DROP
:OUTPUT DROP
COMMIT

*mangle
:PREROUTING DROP
:INPUT DROP
:FORWARD DROP
:OUTPUT DROP
:POSTROUTING DROP
COMMIT

*nat
:PREROUTING DROP
:POSTROUTING DROP
:OUTPUT DROP
:INPUT DROP
COMMIT

*raw
:PREROUTING DROP
:OUTPUT DROP
COMMIT
HEREDOC

그런 다음 SSH를 통해 연결을 시도합니다.

ssh localhost

그리고 놀랍게도 이것이 효과가 있었습니다! 방화벽이 없는 것처럼 새 셸 세션이 표시됩니다. 그런 다음 온전한 상태를 확인하기 위해 localhost에 ping을 시도했는데 다음과 같은 오류 메시지가 나타났습니다.

ping: sendmsg: Operation not permitted

이는 방화벽이 실제로 실행되고 있음을 나타내는 것 같습니다. 마지막으로 IP 주소를 사용하여 SSHing을 시도했습니다.

ssh 127.0.0.1

예상대로 이게 멈췄어요.

따라서 내 추측으로는 SSH가 문자열 "localhost"를 매개변수로 전달할 때 뭔가 다른 작업을 수행한다는 것입니다. 이는 실제로 루프백 인터페이스를 포함하지 않습니다. 이것이 사실이라면 내 질문은 "대체 SSH가 무엇을 하고 있는 걸까요?"가 됩니다.

답변1

localhost아마도 필터링되지(사용되지) 않은 IPv6 주소 로 확인될 가능성이 높습니다 ().::1iptablesip6tables

산출:

strace -e connect ssh localhost

어떤 IP 주소와 사용할 프로토콜을 알려줄 것입니다.

답변2

xhienne이 제안한 대로 ::1에 연결될 수 있습니다. 당신은 시도 할 수 있습니다ssh -vv 로컬호스트SSH의 전체 디버그 출력을 확인하세요.

    # ssh -vvv localhost
OpenSSH_5.3p1, OpenSSL 1.0.0-fips 29 Mar 2010
debug1: Reading configuration data /etc/ssh/ssh_config
debug1: Applying options for *
debug2: ssh_connect: needpriv 0
debug1: Connecting to localhost [::1] port 22.

관련 정보