执行摘要
我的 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