Obsah

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:

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 SoftwareSoftySamba. 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 SoftwareSoftyNCP.

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.

Nextcloud HDD health monitor

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ů:

  1. po spuštění byl vypnutý DHCP server dnsmasq a později jsem zjistil, že byla vypnutá i služba fail2ban
  2. 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
  3. Nextcloud mi přepisoval trusted_domains na 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

Užitečné zdroje