Provavelmente, localhost
resolve um endereço IPv6 ( ::1
) que não é filtrado por iptables
(use ip6tables
).
A saída de:
strace -e connect ssh localhost
informará qual endereço IP e qual protocolo é usado.
Aqui está a minha pergunta: Por que o iptables não consegue impedir que o SSH se conecte ao localhost?
Segue-se uma descrição mais detalhada.
Durante um processo de experimentação com iptables me deparei com a seguinte curiosidade que gostaria de entender. Mesmo quando eu defino cada política para DROP, ainda consigo acessar a máquina localmente via SSH.
Aqui está o que estou fazendo.
Primeiro, uso iptables
para definir todos os valores POLICY para 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
Então eu tento conectar via SSH:
ssh localhost
E, para minha surpresa, isso funciona! Eu sou apresentado com uma nova sessão de shell como se não houvesse firewall. Como uma verificação de sanidade eu tente pingar localhost, o que resulta na seguinte mensagem de erro:
ping: sendmsg: Operation not permitted
Isso parece sugerir que o firewall está de fato operacional. Finalmente eu tento SSH usando um endereço IP
ssh 127.0.0.1
Isso trava, como eu esperava.
Então, meu melhor convidado é que o SSH está fazendo algo diferente quando ele passa a string "localhost" como um argumento - algo que realmente não envolve a interface de loopback. Se este é de fato o caso, então minha pergunta se torna: "O que exatamente o ssh está fazendo?"
como sugerido por xhienne provavelmente está se conectando a :: 1. você pode tentar ssh -vv localhost e ver a saída de depuração completa de 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.
Tags ssh networking iptables