Konfigurace služeb na Espressobinu
Poznámka k datu vzniku: Tento článek vychází z praktické zkušenosti z 14. 6. 2021. Postup odpovídá tehdejším verzím Armbianu, jednotlivých démonů a monitorovacích nástrojů a dnes už nemusí přesně odpovídat aktuálnímu stavu.
V předchozím článku popisuji instalaci Armbianu na mikropočítač Espressobin a konfiguraci sítě. Tím ale nastavení routeru nekončí. Potřeboval jsem zprovoznit další služby a sepsal jsem návody i potíže, se kterými jsem se při nastavování setkal.
V článku popisuji konfiguraci těchto služeb:
- VPN server SoftEther
- fail2ban
- LVM a připojení již existujícího disku
- uspávání disku
- sdílení souborů na síti pomocí Samby
- instalace Nextcloudu
- sběr dat o serveru pomocí SNMP démona
- nastavení monitorovacího systému Munin
- nastavení monitorovacího systému MRTG
- přesměrování pošty na existující e-mailovou adresu a konfigurace Postfixu pro odesílání přes Gmail
- jednoduchý skript na zálohování databáze Nextcloudu
Instalace VPN serveru SoftEther
Instalaci SoftEtheru jsem provedl podle dříve připraveného postupu. Konfigurací se zde blíže nezabývám, protože jsem ji překopíroval z původního nastavení. Jakmile tedy SoftEther jednou nastavíte, lze celou konfiguraci umístěnou v /usr/vpnserver/ kopírovat. Při prvním nastavování mi pomohl tento návod:
Konfigurace fail2ban
Fail2ban slouží k banování IP adres, ze kterých se snaží útočník přihlásit k některé službě, například k SSH. Ve fail2ban se nastaví, že pokud uživatel překročí daný počet neúspěšných pokusů, nebude možné se po určitou dobu přihlásit z dané IP. Je to užitečné zejména při slovníkovém útoku na službu.
apt install fail2ban
Po instalaci démona jsem do složky /etc/fail2ban/filter.d nakopíroval tyto soubory:
# /etc/fail2ban/filter.d/vpnserver.conf # Fail2Ban filter for SoftEther authentication failures # Made by quixrick and jonisc [INCLUDES] before = common.conf [Init] maxlines = 2 [Definition] failregex =IP address: .*\n.*User authentication failed.* ignoreregex=
# /etc/fail2ban/filter.d/nextcloud.conf [INCLUDES] before = common.conf [Definition] _groupsre = (?:(?:,?\s*"\w+":(?:"[^"]+"|\w+))*) failregex = ^\{%( _groupsre)s,?\s*"remoteAddr":""%( _groupsre)s,?\s*"message":"Login failed: datepattern = ,?\s*"time"\s*:\s*"%%Y-%%m-%%d[T ]%%H:%%M:%%S(%%z)?" ignoreregex =
# /etc/fail2ban/filter.d/ufwban.conf [INCLUDES] before = common.conf [Definition] failregex = UFW BLOCK.* SRC= ignoreregex=
Samotnou editaci jsem prováděl v souboru /etc/fail2ban/jail.local, který jsem vytvořil nově.
LVM a připojení existujícího disku
Protože disk už měl existující filesystem na LVM, musel jsem LVM inicializovat. K tomu mi pomohly tyto příkazy:
vgscan
vgchange -ay
Uspávání disku
K Espressobinu mám připojený HDD. Je zbytečné, aby disk běžel pořád, proto je vhodné nastavit uspávání disku. Zvolil jsem uspání po 30 minutách.
Sdílení souborů pomocí Samby
Protože se mi na síti občas vyskytují stroje s Windows, používám na sdílení souborů po síti Sambu. K instalaci jsem použil utilitu armbian-config.
armbian-config
Skrz utilitu jsem se k instalaci Samby dostal přes Software → Softy → Samba. Co se týče nastavení Samby, použil jsem konfigurační soubor z původního serveru. Po zkopírování konfigurace ale nebylo možné se ke sdíleným složkám připojit. Samba vyžadovala heslo a mnou zadávané nefungovalo, i když jsem si byl jistý správností.
Problém byl v tom, že jsem neměl přidaného uživatele do Samby, kterému je nutné nastavit heslo. V konfiguračním souboru /etc/samba/smb.conf se hesla nepřenášejí, ta jsou uložená v /var/lib/samba/private/passdb.tdb. Uživatele do Samby a heslo jsem přidal pomocí příkazu:
smbpasswd -a jmeno_uzivatele
Instalace Nextcloudu
K instalaci Nextcloudu jsem opět zvolil utilitu armbian-config, protože tím mám zajištěnou veškerou instalaci, včetně Apache a dalších závislostí.
armbian-config
Skrz utilitu jsem se k instalaci dostal přes Software → Softy → NCP.
Po instalaci je prvním krokem zadat URL serveru do prohlížeče a uložit si hesla na administrátora služby na portu 4433 a do Nextcloudu. Poté editovat soubor /var/www/nextcloud/config/config.php a nastavit IP adresu, na které bude Nextcloud provozován. Jedná se o proměnnou trusted_domains:
'trusted_domains' => array ( 0 => 'localhost', 1 => '192.168.1.1', ),
Dalším rozumným krokem je zkontrolovat v administraci, jestli není zapnutý nc-hdd-monitor, který způsoboval, že disk se neustále probouzel z režimu spánku.
Další věc, kterou je dobré omezit kvůli probouzení disku, je spouštění údržby Nextcloudu v cronu. Po instalaci bylo nastavené spouštění každých 15 minut. Protože Nextcloud používám jako automatické zálohování a za den přenesu pár drobných souborů, stačí mi frekvence údržby jednou denně. Zvolil jsem čas, ve kterém je pravděpodobné, že disk bude v provozu, tedy v 10:12.
crontab -e -u www-data
12 10 * * * php -f /var/www/nextcloud/cron.php
Aby se ve dvě ráno automaticky nespustilo generování náhledů obrázků, které by patrně položilo server výkonově, zakomentoval jsem v cronu tvorbu náhledů:
#0 2 * * * root /usr/local/bin/nc-previews
Pokud mám již nakonfigurovanou službu fail2ban, není dobré ji explicitně zapínat v Nextcloudu, protože přepíše veškeré nastavení služby fail2ban.
Po restartu jsem zjistil, že instalace Nextcloudu mi způsobila pár problémů:
- po spuštění byl vypnutý DHCP server
dnsmasqa později jsem zjistil, že byla vypnutá i službafail2ban - po naběhnutí systému se zobrazila chyba, že nebylo možné spustit soubor
/etc/rc.local, ve kterém mám nějaké skripty po startu - Nextcloud mi přepisoval
trusted_domainsna veřejnou IP, což je v mém případě nežádoucí; interní IP ze souboru mizela
První bod byl jednoduchý. Znovu jsem nastavil spouštění dnsmasq a fail2ban po startu systému:
systemctl enable dnsmasq systemctl enable fail2ban
Se spouštěním souboru /etc/rc.local jsem se trochu potrápil. Nakonec mi pomohl tento návod:
V návodu je napsané, že mám zapnout /etc/rc.local přes systemd. Ovšem to samo o sobě nestačilo, protože v souboru /usr/lib/systemd/system/rc-local.service chyběla tato část:
[Install] WantedBy=multi-user.target
Řešením tedy bylo přidat řádek do souboru, reloadovat systemd a aktivovat rc-local podobně jako dnsmasq:
systemctl daemon-reload
systemctl enable rc-local
systemctl start rc-local
Pro úplnost zde ještě uvádím podobu souboru rc-local.service podle zdrojového návodu:
[Unit] Description=/etc/rc.local Compatibility ConditionPathExists=/etc/rc.local [Service] Type=forking ExecStart=/etc/rc.local start TimeoutSec=0 StandardOutput=tty RemainAfterExit=yes SysVStartPriority=99 [Install] WantedBy=multi-user.target
Poslední problém byl v tom, že Nextcloud po restartu spouští skript /usr/local/bin/nextcloud-domain.sh, který zapisuje IP adresy zařízení v systému do souboru /var/www/nextcloud/config/config.php k proměnné trusted_domains. V mém případě je to nežádoucí, protože tam chci mít pouze IP adresu zařízení ve vnitřní síti. Proto jsem si IP adresu u trusted_domains nastavil ručně a proces po startu zařízení vypnul.
systemctl status nextcloud-domain
SNMP
SNMP umožňuje průběžný sběr nejrůznějších dat pro potřeby správy sítě a jejich následné vyhodnocování. Standardně využívá port 161 a jeho nastavení je první krok předcházející monitorovacím službám jako Munin nebo MRTG.
apt install snmp snmpd vim /etc/snmp/snmpd.conf
rocommunity public 127.0.0.1 netstat -nlpu | grep 161 snmpwalk -v 1 -c public localhost
Munin
Nejprve jsem nainstaloval tyto knihovny, jinak nefungovalo generování detailů u grafů.
apt install libcgi-fast-perl libapache2-mod-fcgid libcache-perl libwww-perl apt-get install munin munin-node munin-plugins-extra a2enmod fcgid
V /etc/munin/munin-node.conf jsem povolil naslouchání na veřejné IP a zároveň nastavil hostname:
allow ^94\.112\.143\.45$ host_name espressobin
Nastavení /etc/munin/munin.conf:
dbdir /var/lib/munin
htmldir /var/cache/munin/www
logdir /var/log/munin
rundir /var/run/munin
tmpldir /etc/munin/templates
[espressobin]
address 84.112.112.112
Dále následovalo:
munin-node-configure --suggest ln -s /etc/munin/apache24.conf /etc/apache2/sites-available/munin.conf a2ensite munin systemctl reload apache2 systemctl restart munin-node su - munin --shell=/bin/bash /usr/bin/munin-cron
Nastavení pošty pomocí Postfixu
apt-get install libsasl2-modules touch /etc/postfix/sasl_passwd
Do souboru /etc/postfix/sasl_passwd:
[smtp.gmail.com]:587 username@gmail.com:password
Poté:
chmod 600 /etc/postfix/sasl_passwd postmap /etc/postfix/sasl_passwd systemctl restart postfix.service
A do souboru /etc/postfix/main.cf doplnit tyto řádky:
relayhost = [smtp.gmail.com]:587 smtp_use_tls = yes smtp_sasl_auth_enable = yes smtp_sasl_security_options = noanonymous smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd smtp_tls_security_level = encrypt smtp_tls_CAfile = /etc/ssl/certs/ca-certificates.crt
Přesměrování pošty z roota na existující externí e-mail znamenalo editovat soubor /etc/aliases a přidat řádek:
root: yourexternalemailaddress@gmail.com
Načíst nové aliasy a restartovat Postfix:
newaliases systemctl restart postfix
Otestovat lze posláním pošty uživateli root.
Zálohování databáze Nextcloudu
Jeden z dalších kroků byla záloha databáze Nextcloudu. Připravil jsem si jednoduchý skript, který jsem umístil do složky /etc/cron.daily:
#!/bin/bash DIR="/backup" FILE=`date '+%F-nextcloud-sql'` cd "$DIR" mysqldump -u root nextcloud > "$FILE" gzip "$FILE"
Instalace MRTG
apt install mrtg
Při instalaci jsem potvrdil, že /etc/mrtg.cfg je čitelný jen rootem.
mkdir /var/www/mrtg chown www-data:www-data /var/www/mrtg/
Vytvořil jsem i další konfigurační soubory pro MRTG a umístil je do /etc/mrtg.
# /etc/mrtg/cpu.cfg WorkDir: /var/www/mrtg LoadMIBs: /usr/share/snmp/mibs/UCD-SNMP-MIB.txt Target[localhost.cpu]: ssCpuRawUser.0&ssCpuRawUser.0:public@127.0.0.1 + ssCpuRawSystem.0&ssCpuRawSystem.0:public@127.0.0.1 + ssCpuRawNice.0&ssCpuRawNice.0:public@127.0.0.1 RouterUptime[localhost.cpu]: public@127.0.0.1 MaxBytes[localhost.cpu]: 100 Title[localhost.cpu]: CPU Load PageTop[localhost.cpu]: <H1>Active CPU Load %</H1> Unscaled[localhost.cpu]: ymwd ShortLegend[localhost.cpu]: % YLegend[localhost.cpu]: CPU Utilization LegendI[localhost.cpu]: Active Options[localhost.cpu]: growright,nopercent
# /etc/mrtg/mem.cfg LoadMIBs: /usr/share/snmp/mibs/HOST-RESOURCES-MIB.txt Target[localhost.mem]: .1.3.6.1.4.1.2021.4.6.0&.1.3.6.1.4.1.2021.4.6.0:public@localhost PageTop[localhost.mem]: <H1>Free Memory</H1> WorkDir: /var/www/mrtg Options[localhost.mem]: nopercent,growright,gauge,noinfo Title[localhost.mem]: Free Memory MaxBytes[localhost.mem]: 1000000 kMG[localhost.mem]: k,M,G,T,P,X YLegend[localhost.mem]: bytes ShortLegend[localhost.mem]: bytes LegendI[localhost.mem]: Free Memory: Legend1[localhost.mem]: Free memory, not including swap, in bytes
Dále vygenerovat konfigurační soubor:
cfgmaker -zero-speed=100000000 --global "Options[_]: growright,bits" public@localhost > /etc/mrtg.cfg
Nastavit, aby MRTG sbíral data i ze souborů cpu.cfg a mem.cfg, a přidat do souboru /etc/cron.d/mrtg tyto řádky:
*/5 * * * * root env LANG=C /usr/bin/mrtg /etc/mrtg/cpu.cfg */5 * * * * root env LANG=C /usr/bin/mrtg /etc/mrtg/mem.cfg
Vytvořit soubor /etc/apache2/sites-available/mrtg.conf:
Alias /mrtg "/var/www/mrtg/" <Directory "/var/www/mrtg/"> Options None AllowOverride None Require all granted </Directory>
Následně aktivovat Apache:
a2ensite mrtg systemctl reload apache2
Jako poslední vygenerovat index soubor a počkat minimálně pět minut, aby se vygenerovaly první grafy:
indexmaker --output=/var/www/mrtg/index.html --title="Network, memory and CPU Usage" --sort=name --enumerate /etc/mrtg.cfg /etc/mrtg/cpu.cfg /etc/mrtg/mem.cfg
