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:
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:
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ě.
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
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.
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
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ů:
dnsmasq a později jsem zjistil, že byla vypnutá i služba fail2ban/etc/rc.local, ve kterém mám nějaké skripty po startutrusted_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 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
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
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.
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"
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