hardware:jednodeskove-pocitace:espressobin:konfigurace-sluzeb

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

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

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 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
  • hardware/jednodeskove-pocitace/espressobin/konfigurace-sluzeb.txt
  • Poslední úprava: 2026/04/22 13:39
  • autor: Petr Nosek