Hogyan orvosoljuk a "dovecot: master: Error: socket() failed: Address family not supported by protocol" típusú hibákat

botond küldte be 2023. 02. 25., szo – 08:03 időpontban

Tartalom

 

Bevezető

Az ISPConfig frissítése után nem indult újra minden szolgáltatás. Jelen esetben a Dovecot POP3/IMAP levelező kiszolgáló, valamint még a Postfix is dobált warningokat. Ezeket a hibákat ugyan korábban már javítottuk, de az ISPConfig frissítése során ismét felülíródtak a beállításaink. Ebben a hibaelhárítóban egyrészt javítjuk magát a szolgáltatás működésképtelenségét okozó "Address family not supported by protocol" típusú hibákat, valamint elvégezzük a tartós beállításukat is, hogy azok a további ISPConfig frissítések után is megmaradjanak.

Ezt a leírást az erre a célra bérelt VPS szerveremen hajtom végre, így tehát az itt leírt részek élő környezetben kerülnek bemutatásra.

 

 

A hibajelenség

Az ISPConfig frissítő script a Postfix szolgáltatások konfigurálása során "Address family not supported by protocol" hibát jelzett, amitől a Postfix ugyan warningokkal, de elindult, a Dovecot azonban már nem:

ISPConfig frissítése közben fellépő "Address family not supported by protocol" hiba

[...]
Reconfigure Services? (yes,no,selected) [yes]:

Configuring Postfix
postalias: warning: inet_protocols: disabling IPv6 name/address support: Address family not supported by protocol
postmap: warning: inet_protocols: disabling IPv6 name/address support: Address family not supported by protocol
postmap: warning: inet_protocols: disabling IPv6 name/address support: Address family not supported by protocol
[...]

ISPConfig frissítése közben fellépő Dovecot hiba

[...]
Restarting services ...
Job for dovecot.service failed because the control process exited with error code.
See "systemctl status dovecot.service" and "journalctl -xe" for details.
Update finished.

Ilyenkor nem működik a levelezőrendszerünk, így nem tudunk belépni az email fiókjainkba sem, mert a Dovecot POP3/IMAP kiszolgálónk nem fut.

Ha a Monit szolgáltatásfigyelő felületén megnézzük (amennyiben telepítettük a szerverünkre), itt is látjuk a problémát: Nem működik a Dovecot, és ennek következtében a postfix sem tud megfelelően működni, mivel a levéltovábbító szolgáltatás függ a levelezőkiszolgáló működésétől is. Ilyen esetekben a Monit leállítja a hibásan működő szolgáltatás monitorozását, így a probléma innen nézve is egyből észrevehető:

Monit - Postfix és Dovecot nincs monitorozva

Ha pedig a systemctl paranccsal ránézünk a dovecot szolgáltatásra, akkor láthatjuk a konkrét hibaüzenetet is:

sudo systemctl status dovecot

Dovecot szolgáltatás állapotának ellenőrzése - A szolgáltatás egyáltalán nem működik

 dovecot.service - Dovecot IMAP/POP3 email server
     Loaded: loaded (/lib/systemd/system/dovecot.service; enabled; vendor preset: enabled)
     Active: failed (Result: exit-code) since Fri 2023-02-24 21:07:07 CET; 18min ago
       Docs: man:dovecot(1)
             http://wiki2.dovecot.org/
    Process: 4016353 ExecStart=/usr/sbin/dovecot -F (code=exited, status=89)
   Main PID: 4016353 (code=exited, status=89)
        CPU: 110ms

Feb 24 21:07:07 vps dovecot[4016353]: master: Error: service(imap-login): listen([::], 143) failed: Address family not supported by protocol
Feb 24 21:07:07 vps dovecot[4016353]: Error: socket() failed: Address family not supported by protocol
Feb 24 21:07:07 vps dovecot[4016353]: Error: service(imap-login): listen([::], 993) failed: Address family not supported by protocol
Feb 24 21:07:07 vps dovecot[4016353]: Fatal: Failed to start listeners
Feb 24 21:07:07 vps dovecot[4016353]: master: Error: socket() failed: Address family not supported by protocol
Feb 24 21:07:07 vps dovecot[4016353]: master: Error: service(imap-login): listen([::], 993) failed: Address family not supported by protocol
Feb 24 21:07:07 vps dovecot[4016353]: master: Fatal: Failed to start listeners
Feb 24 21:07:07 vps systemd[1]: dovecot.service: Main process exited, code=exited, status=89/n/a
Feb 24 21:07:07 vps systemd[1]: dovecot.service: Failed with result 'exit-code'.
Feb 24 21:07:07 vps systemd[1]: Failed to start Dovecot IMAP/POP3 email server.

 

 

A hiba oka

A hiba abból adódik, hogy a rendszerünkben le van tiltva az IPv6 hálózat kezelése, amiből eredően különböző programok és szolgáltatások hibásan, vagy sehogy sem működnek, mert a beállításaik alapján az IPv4 és az IPv6 hálózaton is várnák a bejövő kapcsolódásokat. Egyesek csak dobnak egy "Address family not supported by protocol" típusú hibát vagy figyelmeztetést, amitől még futnak tovább, más programok, szolgáltatások viszont el sem indulnak. Az első táborba tartozik például a Postfix, ami csak kiírja ezt a hibát, majd letiltja a saját IPv6 használatát és végül elindul, míg a másik táborba pedig a Dovecot tartozik, ami ilyenkor el sem indul. Ezeket a programokat ilyenkor be kell konfigurálni, hogy egyáltalán ne használják az IPv6 hálózatot.

 

A megoldás

Az "Address family not supported by protocol" típusú hibák javításához a konfigurációs fájlok környékén kell szétnéznünk.

Dovecot konfigurálása

Elsőként javítsuk a Dovecot konfigurációt, mivel ez a szolgáltatás egyáltalán nem indul el, ezért ez a fontosabb. Nézzünk bele a konfigurációs fájljába, hogy ott mi a helyzet:

nano /etc/dovecot/dovecot.conf

Ennek a legelején láthatunk is három sort:

# Do not change this file, as changes will be overwritten by any ISPConfig update.
# Put your custom settings in /usr/local/ispconfig/server/conf-custom/install/dovecot_custom.conf.master.
# To start using those changes, do a force upgrade and let it reconfigure your services. (ispconfig_update.sh --force)

Itt az első sorban azt írja, hogy ne módosítsunk bele ebbe a fájlba, mert az ISPConfig a következő frissítésekor ez a fájl felül lesz írva.

Persze ebből a rövid kis szövegből nem derül ki hogy pontosan ki fogja ezt a fájlt felül írni és mivel, ezért ezt már csak én teszem hozzá, hogy az ISPConfig az általa kezelt és felügyelt szolgáltatások megfelelő beállításait tartalmazó konfigurációs fájljait a saját rendszerében (többnyire az adatbázisában) tárolja, egy "skeleton" struktúrában. Majd amikor lefut egy ISPConfig frissítés, akkor ebből az eltárolt struktúrából tölti vissza ezeket a fájlokat. Ezért is szoktam írni máshol is, hogy semmiképpen ne nyúljunk bele a konfigurációs fájlokba, mert azokat az ISPConfig felül fogja írni. Így ha például elvégzünk a kezelőfelületén egy beállítás módosítást, akkor újraépíti a konfigurációs fájlt a megfelelő beállításokkal, felülírja a korábbit, majd újraindítja az adott szolgáltatást.
Azonban vannak olyan részek, aminek az egyedi beállítását az ISPConfig nem teszi lehetővé a saját webes felületén, erre viszont más módon biztosít megoldást, ahol lehetőséget nyújt a saját beállításaink megadására. Itt most éppen egy ilyennel találkozunk, ezzel folytatja is a kis kommentezett szöveg 2. sorában:

A második sorban írja le, hogy ha vannak egyedi beállításaink, akkor azokat hol tudjuk érvényre juttatni. Valamint az utolsó sorban pedig tájékoztat, hogy ezeknek az érvénybe léptetését az ISPConfig újbóli frissítésével végezhetjük el a --force kapcsoló megadásával.

Az ISPConfig frissítő scriptjének megadott --force kapcsoló nem bír semmilyen különleges tulajdonsággal, csupán annyit csinál, hogy akkor is végigfuttatja a frissítést, ha már a kezelőpanelünk a legfrissebb verzióval rendelkezik. a kapcsoló nélkül ugyanis ilyenkor a frissítő script kilép, mondván, hogy nincs szükség a frissítésre.

A működési elv tehát a következő: Bele kell tenni az egyedi beállításainkat a fent említett fájlba, majd a frissítéskor a "hivatalos" konfig fájlt felülírja a skeletonban eltárolt változattal, és összefésüli a mi egyedi beállításainkat tartalmazó fájllal. Ezek alapján tehát elég csak a módosítani kívánt beállításokat beletenni ebbe a fájlba, ami jelen esetben egy sor, amivel éppen kezdődik is a konfigurációs rész:

listen = *,[::]

Ez a beállítás szabályozza, hogy a Dovecot az IPv4-es hálózaton is (*), és az IPv6-os hálózaton is ([::]) várja a kapcsolódásokat. Azonban mivel a rendszerünkben le van tiltva az IPv6 hálózat, ezért a Dovecot nem indul el, mivel ahogy fentebb is már említettem, ez a program azok közé tartozik amely nem indul el, ha a beállításainak megfelelően valami nem felel meg a szerverkörnyezetben.

Ezt a beállítást kell tehát módosítani az alábbira ahhoz, hogy a hálózati konfigurációnknak (letiltott IPv6) megfelelően a Dovecot csak az IPv4 hálózatot használja:

listen = *
Figyelem!
Akik úgy érkeztek ide (például keresőkből), hogy nem rendelkeznek ISPConfig kezelőpanellel, tehát nem ez módosította ezt a fájlt, hanem más rendszerű szerverkörnyezetet használnak, csak éppen most tiltották le az IPv6 hálózatukat, és amiatt jött elő ez a hiba, azok nyugodtan végezzék el a módosítást ebben a fájlban (ilyenkor természetesen a fent mutatott három soros ISPConfig leírásnak sem szabad ottlennie). Illetve ha más kezelőpanelt használnak ami hasonló módon felülírja ezt a fájlt, akkor azok kövessék a saját rendszerükben leírt instrukciókat, hogy hol kell ezt a módosítást elvégezni.
Mivel ebben a leírásban az ISPConfig-os szerverkörnyezettel foglalkozunk, ezért értelemszerűen én itt ennek megfelelően haladok tovább.

 

ISPConfig-os szerverkörnyezetben tehát - a tartós beállítás érdekében - az egyedi beállításunk elvégzéséhez hozzuk létre a megfelelő fájlt:

nano /usr/local/ispconfig/server/conf-custom/install/dovecot_custom.conf.master

És tegyük bele az alábbi sort:

listen = *

De ínyencek akár egy parancsból is elvégezhetik:

echo "listen = *" > /usr/local/ispconfig/server/conf-custom/install/dovecot_custom.conf.master

Ha már van ilyen fájlunk, amiben vannak már egyedi beállítások, akkor hozzáfűzéssel írjunk a fájlba, hogy a többi beállítás ne vesszen el:

echo "listen = *" >> /usr/local/ispconfig/server/conf-custom/install/dovecot_custom.conf.master

(Például ha előttünk más felügyelte a rendszert, és így nem tudunk ennek a fájlnak a létezéséről)

 

 

Postfix konfigurálása

Ahogy fentebb már említettem, a Postfix ugyan elmegy ezzel a beállítással is, de egyrészt ha már nekiálltunk, akkor legyünk precízek, és itt is végezzük el a beállítást, valamint ha nem végezzük el, akkor pedig a /var/log/mail.log fájlunk fog teleszemetelődni a "disabling IPv6 name/address support: Address family not supported by protocol" hibaüzenetekkel. 

Hogy csak a legutóbbiakat lássuk nálam:

A mail.log naplófájl tele van a "disabling IPv6 name/address support: Address family not supported by protocol" hibaüzenetekkel

Mint említettem, a levélküldés ettől még működik, mivel ezek egészen pontosan "csak" warning-ok, viszont ha bármi hibát fel kell derítenünk, akkor roppant zavaró, ha a naplófájljaink tele vannak olyan felesleges hibaüzenetekkel, amiket könnyedén elkerülhetünk.

A Postfix konfigurációját a /etc/postfix/main.cf fájlban találjuk:

nano /etc/postfix/main.cf

És itt keressük meg az alábbi sort:

inet_protocols = all

És ezt kellene az alábbira módosítani:

inet_protocols = ipv4

Azonban itt is van egy kis csavar a dologban, mert ha ezt átírjuk, akkor a következő ISPConfig frissítés Postfix hiba nélkül lefut, azonban a frissítő script ezt is felülírja. Így tehát az utána következő frissítés során már megint warningokat fog kiírni. Itt viszont nincs a konfiguráció elején semmilyen komment, amiben le lenne írva, hogy milyen néven fogja keresni az ISPConfig a Postfix egyedi konfigurációit a frissítés során. Ezt az információt az ISPConfig telepítőcsomagjából tudhatjuk meg.

Természetesen itt is aki nem ISPConfig környezetet használ, hanem csak úgy idetalált, és olvassa ezt a leírást, neki elég ebben a fájlban elvégezni a módosítást, mert nem fog felülíródni ez a fájl.

Ezt a részt most itt nem kell végrehajtani, csak mutatom, hogyan nézhetjük meg, hogy milyen fájlnévre van szükségünk ahhoz, hogy az ISPConfig beolvassa belőle az egyedi beállításainkat, ha esetleg más szolgáltatásokhoz szükségünk lenne egyedi beállításokra:

cd /tmp

A legfrissebb ISPConfig letöltőlinket az ISPConfig oldalán szerezhetjük be:

Ezen leírás készítésekor a 3.2.9-es változat a legfrissebb, tehát (a /tmp könyvtárban maradva) ezt töltöm le és csomagolom ki:

wget https://ispconfig.org/downloads/ISPConfig-3.2.9.tar.gz
tar -xzf ISPConfig-3.2.9.tar.gz
cd ispconfig3_install/

Miután beléptem a telepítő csomag főkönyvtárába, azon belül van még egy install/ könytár és azon belül egy tpl/ könyvtár. Ebbe belépek:

cd install/tpl

Ebben a könyvtárban van sok konfigurációs fájl, minden szolgáltatáshoz, amikbe ha belenézünk, akkor mindegyikben le van írva, hogy mire való Itt nekünk most a postfix konfig fájl kell. Ehhez listázok egyet, rászűrve a postfix-re:

ls -al | grep postfix

És itt kiad több postfix fájlt is:

A postfix egyedi konfigurációs fájl megkeresése az ISPConfig telepítőcsomagban

Meg is van, innen tehát nekünk a "postfix_custom.conf.master" fájlra van szükségünk. Nézzünk is bele:

A postfix_custom.conf.master fájl megtekintése

Itt már meg is van a keresett kis kommentünk is, amiben leírja, hogy mit kell tenni ezzel a fájllal:

# You can use this file for custom Postfix settings. The used settings will overrule the settings set by ISPConfig.
# Use with caution!
# Put this file in /usr/local/ispconfig/server/conf-custom/install/ and make your changes there.

Innentől tehát már a napnál is világosabb hogy mi a teendőnk, innentől folytassuk a műveletet, amennyiben a fenti "nyomozást" kihagytuk:

Másoljuk át ezt a fájlt a "helyére":

Aki nem végezte el ezt az iménti telepítőcsomag letöltős és kicsomagolós részt, az hozzon létre egy üres fájlt a cél útvonalon a "postfix_custom.conf.master" névvel, és azzal folytassa tovább. Akár a fenti három komment sort be is másolhatja a fájlba, hogy minden a helyén legyen.
cp postfix_custom.conf.master /usr/local/ispconfig/server/conf-custom/install/

Majd nyissuk meg a fájlt szerkesztésre:

nano /usr/local/ispconfig/server/conf-custom/install/postfix_custom.conf.master

És tegyük bele az alábbi sort:

inet_protocols = ipv4

A postfix_custom.conf.master fájl szerkesztése a cél helyen

Majd mentsük le.

 

 

ISPConfig frissítése

Nem maradt más hátra, mint hogy frissítsük az ISPConfig panelünket a --force kapcsolóval:

ispconfig_update.sh --force

A frissítéskor láthatjuk, hogy beolvasta a két egyedi konfigurációs fájlt:

/usr/local/ispconfig/server/conf-custom/install/dovecot_custom.conf.master
/usr/local/ispconfig/server/conf-custom/install/postfix_custom.conf.master

Ezután az első frissítésnél még megjelennek a Postfix hibaüzenetek:

Postfix hibaüzenetek még megjelennek az ISPConfig első frissítése során

Ami talán egy telepítő hiba lehet, de ettől függetlenül már nem keletkeznek újabb hibaüzenetek a mail.log naplófájlban, tehát az egyedi beállítás működik.

Valamint ha ismét lefuttatjuk a frissítést, akkor már a hiba sem jelenik meg:

Postfix hibaüzenetek már nem jelennek meg az ISPConfig további frissítései során

Valami hiba lehet a telepítőben, de a lényeg, hogy működik már az első frissítés után is, csak így néz ki jól ha már a hibát se írja ki.

Természetesen előfordulhat, hogy másnál már egyből hibátlan kimenetet ad, ezt csak azért tettem ide be, hogy ha máshol is így viselkedik a frissítő script, nem kell megijedni, mert az egyedi beállításunk működik.

 

Ellenőrzés

Végül, ha van Monit szolgáltatásfigyelő rendszerünk, akkor még ennek adjuk ki a parancsot, hogy monitorozzon minden szolgáltatást, mivel korábban a két hibás szolgáltatás monitorozása leállt:

monit monitor all

Ezután frissítsünk a Monit felületére:

Monit - Korábban hibás szolgáltatások monitorozásának az inicializálása

Ekkor láthatjuk, hogy inicializálódik a két szolgáltatás figyelése
Majd később amikor lejár egy Monit ciklus, vagy nyomunk egy F5-öt a böngészőben, akkor már minden rendben:

Monit - Minden rendben

Ezután még ellenőrizzük a levelek küldését és fogadását, valamint a biztonság kedvéért benézhetünk a /var/log/mail.log fájlba is, hogy látunk-e még benne "Address family not supported by protocol" hibaüzeneteket.

 

 

Konklúzió

Ezzel tehát tartósan elhárítottuk a Dovecot "Address family not supported by protocol" hibáit, mert az ISPConfig frissítése után már a saját beállításainkat tartalmazó egyedi fájlok kerültek felhasználásra. Azonban ne feledkezzünk meg róla, hogy ha a későbbiek során bármilyen további beállítást kell módosítanunk a Dovecot  vagy a Postfix konfigurációiban, akkor azokat szintén ezekben az egyedi fájlokban tegyük meg!