Hlavní navigace

Avahi: konfigurace a zabezpečení daemona

23. 3. 2012
Doba čtení: 5 minut

Sdílet

Minule jsme si řekli k čemu avahi-daemon slouží, naznačili si, co se s ním dá dělat a vysvětlili si, na jakých principech stojí. Dneska se podíváme, jak se konfiguruje a řekneme si, na které volby si dát pozor, abychom náhodou neprozrazovali nějaké citlivé informace, u kterých si to nepřejeme.

Konfigurace avahi-daemon

I když Avahi patří pod zeroconf, neznamená to, že by bylo úplně bez konfigurace. Avahi má konfigurační soubor, má jich dokonce víc. Ten hlavní se nachází v /etc/avahi/avahi-daemon.conf a konfiguruje se s ním avahi-daemon. Přesto, že je výchozí stav takový, že Avahi prostě funguje, je lepší vědět, jaké má možnosti a jak se dají ovlivnit. Konfigurační soubor je rozdělen do pěti sekcí, kde každá shromažďuje volby pro určitou oblast.

První sekcí je server a jeho nejdůležitější volby jsou tyto:

[server]
host-name=bimbo
domain-name=local
use-ipv4=yes
use-ipv6=yes
allow-interfaces=eth0
deny-interfaces=eth1
enable-dbus=yes
... 

Host-name a domain-name je ve výchozím stavu zakomentované, ale obojí můžete Avahi vnutit. Váš počítač se tak v síti nemusí hlásit pod svým skutečným hostname, ale můžete mu pro tento účel přidělit i jiné. To samé platí o doméně local. Na dalších řádcích se nastavuje, zda Avahi poběží na IPv4 či IPv6 nebo obojím. Vzhledem k tomu, že systémy s IPv6 mají na každém rozhraní link-local adresu, tak je jistější se spolehnout i na IPv6, které pojede i když na síti selže router s DHCP. Pokud provozujete Avahi na routeru, z bezpečnostních důvodů se vám možná budou hodit volby allow-interfaces a deny-interfaces, což je whitelist a blacklist pro jednotlivá rozhraní. Poslední volba, kterou zmiňuji, je enable-dbus. Povolením umožníte ostatním aplikacím, aby se přes Avahi zpropagovaly v síti a vy tak nemusíte vypisovat konfiguraci pro každou jednotlivou službu. Z této sekce to nejsou všechny volby a zbytek můžete najít v manuálové stránce tohoto konfiguračního souboru.

$ man avahi-daemon.conf 

Další sekce je wide-area, která obsahuje jen jednu volbu.

[wide-area]
enable-wide-area=yes 

Tou je enable-wide-area, a můžete tím Avahi říct, že má hledat i mimo doménu local (nebo libovolnou nakonfigurovanou), ale má k tomu použít normální unicast DNS. To znamená, že přes Avahi pak jede i klasické DNS a další počítače v síti jiné DNS nepotřebují. I když to může znít hezky, ne vždy jsem dostal rychlou a správnou odpověď.

$ avahi-resolve -n google.com
Failed to resolve host name 'google.com': Not found
$ avahi-resolve -n root.cz
root.cz 2001:67c:68::76
$ avahi-resolve -n google.com
google.com      173.194.70.139 

Sekce publish vám umožní nastavit, co o vašem počítači Avahi říká v síti. Avahi dokáže fungovat i jakou pouhý klient a nesdílet žádnou službu, ale stejně tak umí do sítě poslat konfiguraci DNS nebo informace o systému, na kterém běží.

[publish]
disable-publishing=no
disable-user-service-publishing=no
publish-addresses=yes
publish-hinfo=yes
publish-workstation=yes
publish-dns-servers=192.168.50.1, 192.168.50.2
publish-resolv-conf-dns-servers=yes
publish-aaaa-on-ipv4=yes
publish-a-on-ipv6=no 

Pomocí disable-publishing lze zakázat Avahi, aby reagoval na cokoli, co mu přijde a neoznamoval tak žádné informace. To může být někdy moc restriktivní, takže přes disable-user-service-publishing můžeme zakázat jen aplikace, které by se jinak propagovaly samy. Avahi dokáže propagovat i služby, co neběží lokálně, ale zvládne třeba říct, že Google vyhledávání je na adrese „1.2.3.4:80“ a podobně. Tím pádem není potřeba propagovat lokální adresy a toto chování můžeme zakázat přes publish-addresses. Zmínil jsem propagaci informací o lokálním systému, což se dá regulovat pomocí publish-hinfo. Volba publish-workstation nemá valný význam, ale v některých sítích může pomoci při hledání odpovědi na otázku „jaké tu mám vlastně počítače?“.

Zmínil jsem, že přes Avahi je možné nastavit DNSka lokální sítě, pokud je někdo propaguje. To lze realizovat pomocí publish-dns-servers a publish-resolv-conf-dns-servers, kde nastavením první volby můžete propagovat přesně definované IP adresy DNS serverů, s druhou bude Avahi propagovat obsah /etc/resolv.conf. Stroje, které chtějí této služby využít, musí mít běžící avahi-dnsconfd. Se správně nastaveným routerem a Avahi je tedy možné připojit libovolný počítač s Linuxem do internetu, aniž by uživatel musel sahat na konfiguraci. Poslední dva řádky říkají, zda se mají A záznamy propagovat i přes IPv6 a AAAA záznamy přes IPv4.

V některých sítích jsou oddělené adresní rozsahy pro klienty na WiFi a na kabelu, ale zatím se popisovaná komunikace daemonů Avahi týkala jedné podsítě. V případě, že chcete sdílet mDNS komunikaci v rámci více rozhraní, je potřeba mít Avahi na routeru a zapnout tzv. reflector.

[reflector]
enable-reflector=yes
reflect-ipv=no 

Ten bude naslouchat mDNS komunikaci na svých rozhraních a pokud se něco objeví na jednom, přepošle to na ostatní. Podobný problém může nastat i u IPv4 a IPv6, kdy třeba máte jeden stroj na IPv4, druhý na obou protokolech a třetí pouze na IPv6. V takovém případě je možné zapnout volbu reflect-ipv. Potom budou zprávy z mDNS na IPv6 rozeslány přes mDNS na IPv6. Podle manuálu se nedoporučuje tuto volbu zapínat.

Poslední sekcí je rlimit, kde je možné nastavit konkrétní limity pro běžící procesy avahi-daemon. Běžný uživatel na toto nastavení nemusí vůbec sahat a chybnou změnou některé z hodnot je možné způsobit nestabilitu celého daemona.

Propagace vlastní služby

I když se aplikace většinou s Avahi domluví sama přes dbus, může se někdy hodit propagace vlastní služby. Konfigurace je na rozdíl od předchozího konfiguráku v XML a vypadá třeba takto:

<?xml version="1.0" standalone='no'?><!--*-nxml-*-->
<!DOCTYPE service-group SYSTEM "avahi-service.dtd">

<service-group>
  <name replace-wildcards="yes">Transmission on %h</name>

  <service protocol="ipv4">
<type>_http._tcp</type>
<port>9091</port>
  </service>
</service-group> 

Když tento soubor uložíte do /etc/avahi/ser­vices/transmis­sion.service, začne Avahi propagovat lokální webové rozhraní BitTorrent klienta Transmission na portu 9091. Je možné propagovat i službu, která se na lokálním počítači nenachází, například:

<?xml version="1.0" standalone='no'?><!--*-nxml-*-->
<!DOCTYPE service-group SYSTEM "avahi-service.dtd">

<service-group>
  <name replace-wildcards="yes">Root</name>

  <service protocol="ipv4">
<type>_http._tcp</type>
<port>80</port>
<domain-name>local</domain-name>
<host-name>root.cz</host-name>
  </service>
</service-group> 

Taková služba pak v avahi-discover vypadá takto:

CS24_early

O konfiguračních souborech se službami se dozvíte další informace s manuálové stránce avahi.service.

$ man avahi.service 

Shrnutí

Avahi bychom měli nakonfigurované a teď byste měli být schopni zapojit do zeroconf všechny počítače s Linuxem a možná i Mac OS X. Zároveň už by Avahi nemělo posílat to, co si nepřejete. V příštím a posledním díle se podíváme na nějaké reálné použití se vzdáleným desktopem, přehrávačem hudby či VoIP komunikací.

Zdroje

Seriál: Avahi

Byl pro vás článek přínosný?

Autor článku

Adam Štrauch je redaktorem serveru Root.cz a svobodný software nasazuje jak na desktopech tak i na routerech a serverech. Ve svém volném čase se stará o komunitní síť, ve které je již přes 100 členů.