Povolení samby ve firewallu PF na FreeBSD
Na FreeBSD používám jako firewall projekt PF. Vyvstal problém, jak správně nastavit firewall na stroji s jaily a Sambou.
Prvním problémem k řešení je umravnit sambu tak, aby neposlouchala na IP,
kterou jsou přiřazené jailům. Ve výchozím stavu samba ochotně naslouchá na
všech dostupných IP. V konfiguračním souboru /usr/local/etc/smb4.conf
nastavíme v sekci [global]
:
bind interfaces only = Yes
interfaces = 192.168.xx.xx/32
Pozor na subnet /32, potřebujeme definovat konkrétní IP a nikoliv síť.
Po restartu service samba_server restart
už sockstat -l
ukazuje binding pouze na konkrétní IP:
root smbd 36586 34 tcp4 192.168.xx.xx:445 *:*
root smbd 36586 35 tcp4 192.168.xx.xx:139 *:*
root nmbd 36581 15 udp4 *:137 *:*
root nmbd 36581 16 udp4 *:138 *:*
root nmbd 36581 17 udp4 192.168.xx.xx:137 *:*
root nmbd 36581 18 udp4 192.168.xx.255:137 *:*
root nmbd 36581 19 udp4 192.168.xx.xx:138 *:*
root nmbd 36581 20 udp4 192.168.xx.255:138 *:*
Z toho současně vidíme, které porty je nutno povolit. Jsou to tcp: 139, 445, udp: 137, 138. Ale pozor, UDP porty poslouchají jednak na konkrétní IP, ale také na broadcast adrese 255.
Většina návodů tohle neřeší, protože radí povolit porty 137, 138, 139, 445 pro tcp i udp a považují to za vyřešené. Pokud na daném stroji nemáme jaily nebo portforward na tyto porty, lze to jistě takto nechat. Pokud však potřebujeme nastavit přístup pouze na konkrétní IP, musíme povolit i broadcast.
Pravidla pro pf (v souboru /etc/pf.conf
potom budou vypadat takto:
# samba
pass in on $iface proto tcp to 192.168.xx.xx port { 139, 445 }
pass in on $iface proto udp to { 192.168.xx.xx, 192.168.xx.255 } port { 137, 138 }
Pokud nepovolíme adresu broadcastu, připojení na sambu stále funguje, ale nefunguje vyhledávání strojů na síti. Pokud to adminovi nevadí, nebo to dokonce považuje za výhodu, může broadcast nepovolit.