Fedora

如果我在沒有防火牆的情況下執行 Fedora,libvirt dnsmasq 是否會暴露在網路中?

  • September 24, 2019

來自 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))

23/11/12 12:50,Gene Czarcinski 寫道:

Libvirt 正在將使用 bind-interface 更改為使用 bind-dynamic 來修復與安全相關的問題,其中 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.低級)。

從第二台機器測試 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連接而不讀取任何數據。因此,您發送給它的數據無關緊要;例如,它不能利用經典的緩衝區溢出。

引用自:https://unix.stackexchange.com/questions/256061