iptables 无法阻止本地 ssh 连接

iptables 无法阻止本地 ssh 连接

这是我的问题:为什么 iptables 无法阻止 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

而且,令我惊讶的是,这有效!我看到了一个新的 shell 会话,就好像没有防火墙一样。作为健全性检查,我然后尝试 ping localhost,这会导致以下错误消息:

ping: sendmsg: Operation not permitted

这似乎表明防火墙实际上正在运行。最后我尝试使用 IP 地址进行 SSH

ssh 127.0.0.1

正如我所预料的,这会挂起。

所以我最好的客人是,当 SSH 将字符串“localhost”作为参数传递时,它会做一些不同的事情 - 这实际上并不涉及环回接口。如果事实确实如此,那么我的问题就变成了“ssh 到底在做什么?”

答案1

最有可能的是,解析为未被(使用)过滤的localhostIPv6 地址 ( ) 。::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.

相关内容