====== 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 [[hardware:jednodeskove-pocitace:espressobin:instalace-armbianu|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:
* [[https://www.cactusvpn.com/tutorials/how-to-set-up-softether-vpn-client-on-linux/|How to set up SoftEther VPN client on Linux]]
===== 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.
{{.:nextcloud-hdd-health-monitor-1.jpg|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ů:
- po spuštění byl vypnutý DHCP server ''dnsmasq'' a později jsem zjistil, že byla vypnutá i služba ''fail2ban''
- 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_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:
* [[https://www.linuxbabe.com/linux-server/how-to-enable-etcrc-local-with-systemd|How to enable /etc/rc.local with systemd]]
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]: Active CPU Load %
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]: Free Memory
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/"
Options None
AllowOverride None
Require all granted
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 =====
* [[https://www.cactusvpn.com/tutorials/how-to-set-up-softether-vpn-client-on-linux/|How to set up SoftEther VPN client on Linux]]
* [[https://www.cyberciti.biz/faq/linux-mount-an-lvm-volume-partition-command/|Linux mount an LVM volume partition command]]
* [[https://www.kernel.org/doc/Documentation/ABI/testing/procfs-diskstats|Linux procfs diskstats]]
* [[https://www.thegeekdiary.com/how-to-add-or-delete-a-samba-user-under-linux/|How to add or delete a Samba user]]
* [[https://kifarunix.com/install-and-configure-snmp-on-debian-10-buster/|Install and configure SNMP on Debian 10]]
* [[https://wiki.debian.org/SNMP|Debian Wiki: SNMP]]
* [[https://debian-handbook.info/browse/stable/sect.monitoring.html#sect.munin|Debian Handbook: Monitoring]]
* [[https://www.linode.com/docs/guides/configure-postfix-to-send-mail-using-gmail-and-google-apps-on-debian-or-ubuntu/|Configure Postfix to use Gmail as a relay]]
* [[https://www.howtoforge.com/tutorial/configure-postfix-to-use-gmail-as-a-mail-relay/|Configure Postfix to use Gmail as a mail relay]]
* [[https://www.linuxbabe.com/linux-server/how-to-enable-etcrc-local-with-systemd|How to enable /etc/rc.local with systemd]]