Ubuntu 有一句好话:没有开放端口在默认安装上。其他 Linux 操作系统看起来类似,包括 Fedora。配置防火墙策略可能会很麻烦,因此这是一个很好的默认设置。
Ubuntu 特别免除了 DHCP 客户端(必需)和 mDNS。 (没有防火墙区域来区分,mDNS 最好保持启用状态。Poettering 投入了一些工作来确保 avahi-daemon 的安全性,我认为正是出于这个原因)。
因此我可以关闭 Fedora firewalld
,以允许我使用虚拟机的桥接/路由网络。除了 - 这些 dnsmasq 端口怎么样?他们会暴露在外部网络中吗?
sudo ss -nultp # List TCP and UDP listening sockets
Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port
udp UNCONN 0 0 127.0.0.1:323 0.0.0.0:* users:(("chronyd",pid=1249,fd=5))
udp UNCONN 0 0 0.0.0.0:41662 0.0.0.0:* users:(("avahi-daemon",pid=1216,fd=14))
udp UNCONN 0 0 0.0.0.0:5353 0.0.0.0:* users:(("avahi-daemon",pid=1216,fd=12))
udp UNCONN 0 0 192.168.122.1:53 0.0.0.0:* users:(("dnsmasq",pid=2011,fd=5))
udp UNCONN 0 0 0.0.0.0%virbr0:67 0.0.0.0:* users:(("dnsmasq",pid=2011,fd=3))
udp UNCONN 0 0 0.0.0.0:68 0.0.0.0:* users:(("dhclient",pid=2354,fd=6))
udp UNCONN 0 0 0.0.0.0:68 0.0.0.0:* users:(("dhclient",pid=2184,fd=6))
udp UNCONN 0 0 [::1]:323 [::]:* users:(("chronyd",pid=1249,fd=6))
udp UNCONN 0 0 [fe80::f3a:8415:60b9:e56b]%wlp2s0:546 [::]:* users:(("dhclient",pid=2373,fd=5))
udp UNCONN 0 0 [fe80::7e73:7a0c:e16f:a0d4]%eno1:546 [::]:* users:(("dhclient",pid=2242,fd=5))
udp UNCONN 0 0 [::]:5353 [::]:* users:(("avahi-daemon",pid=1216,fd=13))
udp UNCONN 0 0 [::]:48210 [::]:* users:(("avahi-daemon",pid=1216,fd=15))
tcp LISTEN 0 32 192.168.122.1:53 0.0.0.0:* users:(("dnsmasq",pid=2011,fd=6))
tcp LISTEN 0 5 127.0.0.1:631 0.0.0.0:* users:(("cupsd",pid=4225,fd=6))
tcp LISTEN 0 5 [::1]:631 [::]:* users:(("cupsd",pid=4225,fd=5))
答案1
2012 年 11 月 23 日 12:50,Gene Czarcinski 写道:
Libvirt 正在将使用绑定接口更改为使用绑定动态,以修复与安全相关的问题,其中 dnsmasq 响应端口 53 查询,而该查询未发生在 dnsmasq 实例支持的虚拟网络接口上的地址上。
从看ps -ax|grep dnsmasq
,它是使用了配置文件/var/lib/libvirt/dnsmasq/default.conf
。
## dnsmasq conf file created by libvirt
strict-order
pid-file=/var/run/libvirt/network/default.pid
except-interface=lo
bind-dynamic
interface=virbr0
#...
所以他们确实已经从 转移到bind-dynamic
了bind-interfaces
。另请参阅src/network.c
dnsmasq:
在 --bind-interfaces 中,唯一的访问控制是我们正在侦听的地址。没有什么可以避免通过我们不想接受查询的外部接口到达的内部接口地址的查询,除了在通常情况下内部接口的地址是 RFC1918...
修复方法是使用 --bind-dynamic,它实际上也会检查到达接口。如果您的平台不支持这一点,那就很难了。
请注意,标准 IPv6 API 支持检查到达接口,并且始终执行此操作。
DHCP 套接字(端口 67)最终绑定到特定接口。所以我们不需要担心 DHCP,只需要担心 DNS(端口 53)。
(dnsmasq 只使用一个 DHCP 套接字。它监听所有地址,但是当只有一个接口时,它可以使用 绑定到该接口SO_BINDTODEVICE
。不要让我解释为什么它只使用一个 DHCP 套接字;执行 DHCP 通常很奇怪,并且低级)。
从第二台机器测试 dnsmasq:
$ ip route add 192.168.124.1 via $FEDORA_IP
$ sudo nmap -A -F 192.168.124.1
Starting Nmap 6.47 ( http://nmap.org ) at 2016-01-18 16:11 GMT
Nmap scan report for 192.168.124.1
Host is up (0.0023s latency).
Not shown: 98 closed ports
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 7.1 (protocol 2.0)
|_ssh-hostkey: ERROR: Script execution failed (use -d to debug)
53/tcp open tcpwrapped
Device type: general purpose
Running: Linux 3.X
OS CPE: cpe:/o:linux:linux_kernel:3
OS details: Linux 3.11 - 3.14
Network Distance: 1 hop
TRACEROUTE (using port 8888/tcp)
HOP RTT ADDRESS
1 0.80 ms 192.168.124.1
OS and Service detection performed. Please report any incorrect results at http://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 23.42 seconds
所以我可以看到一个开放的 TCP 端口。然而它的响应就好像它是“tcpwrapped”一样。这意味着如果您通过与 不同的接口进行连接virbr0
,dnsmasq
则会关闭连接而不读取任何数据。所以你发送给它的数据并不重要;例如,它不能利用经典的缓冲区溢出。