Ubuntu 应该拒绝 ssh 连接,但却接受了(接口 IP 错误)

Ubuntu 应该拒绝 ssh 连接,但却接受了(接口 IP 错误)

执行摘要

我的 Ubuntu VM(主机名 fubar)正在使一个接口的 IP 地址(eth0 169.254.32.15)对可通过另一个接口(eth1 10.3.17.129/23)访问的主机可见。

我想要“ssh[电子邮件保护]“来自 10.3.16.0/23 上的机器无法连接到 fubar。

细节

我的 Ubuntu VM 上的接口:

root@fubar:~# ifconfig
eth0      Link encap:Ethernet  HWaddr 4e:12:0f:0b:48:91  
      inet addr:169.254.32.15  Bcast:169.254.63.255  Mask:255.255.224.0
      inet6 addr: fe80::4c12:fff:fe0b:4891/64 Scope:Link
      UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
      RX packets:0 errors:0 dropped:0 overruns:0 frame:0
      TX packets:8 errors:0 dropped:0 overruns:0 carrier:0
      collisions:0 txqueuelen:1000 
      RX bytes:0 (0.0 B)  TX bytes:648 (648.0 B)

eth1      Link encap:Ethernet  HWaddr 92:fe:57:11:bd:6c  
      inet addr:10.3.17.129  Bcast:10.3.17.255  Mask:255.255.254.0
      inet6 addr: fe80::90fe:57ff:fe11:bd6c/64 Scope:Link
      UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
      RX packets:2471362 errors:0 dropped:0 overruns:0 frame:0
      TX packets:71144 errors:0 dropped:0 overruns:0 carrier:0
      collisions:0 txqueuelen:1000 
      RX bytes:337482223 (337.4 MB)  TX bytes:5136143 (5.1 MB)

lo        Link encap:Local Loopback  
      inet addr:127.0.0.1  Mask:255.0.0.0
      inet6 addr: ::1/128 Scope:Host
      UP LOOPBACK RUNNING  MTU:65536  Metric:1
      RX packets:16 errors:0 dropped:0 overruns:0 frame:0
      TX packets:16 errors:0 dropped:0 overruns:0 carrier:0
      collisions:0 txqueuelen:0 
      RX bytes:1184 (1.1 KB)  TX bytes:1184 (1.1 KB)

root@fubar:~# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         10.3.16.1       0.0.0.0         UG    0      0        0 eth1
10.3.16.0       0.0.0.0         255.255.254.0   U     0      0        0 eth1
169.254.32.0    0.0.0.0         255.255.224.0   U     0      0        0 eth0
root@fubar:~# uname -a
Linux fubar 3.19.0-80-generic #88~14.04.1-Ubuntu SMP Fri Jan 13 14:54:07 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux

root@fubar:~# netstat -an
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address           Foreign Address         State      
tcp        0      0 0.0.0.0:5617            0.0.0.0:*               LISTEN     
tcp        0      0 169.254.32.15:5617      10.3.17.28:50841        ESTABLISHED
tcp        0      0 10.3.17.129:5617        10.3.16.65:38753        ESTABLISHED
tcp6       0      0 :::5617                 :::*                    LISTEN     
udp        0      0 0.0.0.0:9797            0.0.0.0:*                          
udp        0      0 0.0.0.0:68              0.0.0.0:*                          
udp6       0      0 :::1269                 :::*                               

eth1 旨在面向外部。Eth0 通过虚拟网桥连接到另一个虚拟机(仅此而已)。

不理想的行为是,当我从另一台虚拟机 (10.3.17.28) ssh 到 169.254.32.15 时,它成功连接到 fubar(参见上面的 netstat 输出)。我该如何阻止这种情况发生?

接口统计数据显示,此 SSH 的数据包实际上通过 eth1 传输。显然,fubar 使 169.254.32.15 对 10.3.16/23 网络可见,但我不知道为什么。

为什么会发生这种情况?我该如何阻止这种情况发生?

EDIT1:按要求收集 iptables 数据

root@fubar:~# iptables -v -x -n -L 
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
pkts      bytes target     prot opt in     out     source               destination         

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
pkts      bytes target     prot opt in     out     source               destination         

Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes)
pkts      bytes target     prot opt in     out     source               destination         
root@fubar:~# iptables -t nat -v -x -n -L 
Chain PREROUTING (policy ACCEPT 0 packets, 0 bytes)
pkts      bytes target     prot opt in     out     source               destination         

Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
pkts      bytes target     prot opt in     out     source               destination         

Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes)
pkts      bytes target     prot opt in     out     source               destination         

Chain POSTROUTING (policy ACCEPT 0 packets, 0 bytes)
pkts      bytes target     prot opt in     out     source               destination         
root@fubar:~#

答案1

从您的问题可以看出,sshd 正在监听端口 TCP/5617 上的所有接口。因此,我建议您编辑 /etc/ssh/sshd_config。SSHD 可以配置为监听特定 IP 地址,如果这些 IP 地址是静态的,则可以将其硬编码到 /etc/ssh/sshd_config 文件中。如果有一行内容

listenAddress 0.0.0.0

将其更改为以下内容。如果不存在,只需添加以下内容:

listenAddress 10.3.17.129

如果你使用的是 ipv6,你可能还需要更改

ListenAddress ::

ListenAddress fe80::90fe:57ff:fe11:bd6c

但是,如果此服务器配置为 DHCP,并且您更喜欢这种方式,那么我可能会像 Doug 建议的那样使用 iptables。有几种方法可以实现这一点,具体取决于您实际想要阻止的内容。

如果您想阻止来自 10.3.16.0/23 网络的 ssh 进入 eth0 接口(如果您担心深奥的攻击/扫描,请将 REJECT 更改为 DROP,否则 REJECT 会更快失败):

iptables -A INPUT -i eth0 -m tcp -p tcp --dport 5617 -s 10.3.16.0/23 -j REJECT

如果您想阻止来自该网络的所有流量进入该接口:

iptables -A INPUT -i eth0 -s 10.3.16.0/23 -j REJECT

添加所选规则后,请进行测试以确保其具有预期的效果,如果是,请使用以下命令使其永久生效:

service iptables save

该命令可能因您所运行的 Ubuntu 版本而异。

如果不进行更深入的故障排除,我仍然不知道为什么会发生这种情况,我建议检查输出

cat /proc/sys/net/ipv4/ip_forward

并确保它为零,除非您打算让此虚拟机在这些网络之间路由。要解决此问题,请在 /etc/sysctl.d/99-sysctl.conf 的底部添加以下行

net.ipv4.ip_forward=0

相关内容