如果我在没有防火墙的情况下运行 Fedora,libvirt dnsmasq 是否会暴露在网络中?

如果我在没有防火墙的情况下运行 Fedora,libvirt dnsmasq 是否会暴露在网络中?

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-dynamicbind-interfaces。另请参阅src/network.cdnsmasq:

在 --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”一样。这意味着如果您通过与 不同的接口进行连接virbr0dnsmasq则会关闭连接而不读取任何数据。所以你发送给它的数据并不重要;例如,它不能利用经典的缓冲区溢出。

相关内容