私の質問は次のとおりです。 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アドレスで解決される可能性があります()。::1
iptables
ip6tables
出力:
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.