Konfigurace monitorovacích služeb, fail2ban, SoftEther, uspávání disku na Espressobin

Autor: | 14. 6. 2021 | IT, Linux

V předchozím článku jsem popisoval instalaci Armbianu na mikropočítač Espressobin a konfigurace sítě. Ovšem tím nastavení routeru nekončí. Potřeboval jsem zprovoznit další služby a sepsal jsem návody a potíže, se kterými jsem se při nastavování setkal. V článku popisuji konfiguraci těchto služeb:

  • VPN server Sofether
  • fail2ban
  • LVM a připojen již existujícího disku
  • uspávání diskusdílení souborů na síti pomocí Samba
  • instalace Nextcloudu
  • sběr dat o serveru pomocí SNMP démona abych mohl s daty dál pracovat a sledovat vytíženost serveru
  • nastavení nenáročného monitorovacího systému Munin
  • nastavení jednoduchého monitorovacího systému MRTG
  • přesměrování pošty na existující e-mailovou adresu a konfigurace poštovního serveru Postfix tak, aby posílal poštu přes Gmail
  • jednoduchý skript na zálohování databáze Nextcloudu

Instalace VPN serveru SoftEther

Instalaci softether jsem provedl podle již dříve sepsaného článku. Konfigurací se blíže už 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í softetheru jsem krásně vycházel z toho článku: https://www.cactusvpn.com/tutorials/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ů, tak 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 ve většině vycházel z dříve napsaného článku. Do složky /etc/fail2ban/filter.d jsem nakopíroval tyto soubory:
root@espressobin:/etc/fail2ban/filter.d# cat vpnserver.conf 
# Fail2Ban filter for SoftEther authentication failures
# Made by quixrick and jonisc
# Thanks to quixrick from Reddit! https://reddit.com/u/quixrick

[INCLUDES]

# Read common prefixes. If any customizations available -- read them from
# common.local
before = common.conf

#Enable multi line support. Doesn't work with versions < 0.9
[Init]
maxlines = 2 
# The regular expression filter follows
[Definition]

failregex =IP address: .*\n.*User authentication failed.*
ignoreregex=

 
root@espressobin:/etc/fail2ban/filter.d# cat 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 =
root@espressobin:/etc/fail2ban/filter.d# cat ufwban.conf 
[INCLUDES]
before = common.conf

[Definition]
#failregex = .*\[UFW BLOCK\] IN=.* SRC=
failregex = UFW BLOCK.* SRC=
ignoreregex =
A samotnou editaci jsem prováděl ve souboru (nově jsem ho vytvořil) /etc/fail2ban/jail.local.

LVM a připojení existujícího disku

Protože disk už má existující filesystém na LVM, musel jsem LVM inicializovat. K tomu mi pomohly tyto příkazy:
root@espressobin:~# vgscan
  Reading all physical volumes.  This may take a while...
  Found volume group "datovydisk" using metadata type lvm2

root@espressobin:&# vgchange -ay
  1 logical volume(s) in volume group "datovydisk" now active
 

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 po 30 minutách. Podrobnější návod na uspávání disku jsem již připravil zde.  

Sdílení souborů – Samba

Protože se mi na síti občas vyskytnou stroje s Windows, používám na sdílení souborů po síti Sambu. K instalaci jsem použil utilitu armbian-config.
root@espressobin:~# armbian-config
Skrz utilitu jsem k instalaci Samby dostal: Software (System and 3rd party software install) -> Softy (3rd party application installer) -> Samba Co se týče nastavení Samby, tak jsem použil konfigurační soubor z původního serveru. K nastavení Samby proto doporučuji vyhledat jiné články. 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í, ty jsou uložena v cestě /var/lib/samba/private/passdb.tdb. Uživatele do Samby a heslo jsem přidal pomocí příkazu:
# smbpasswd -a jmeno_uzivatele
New SMB password:
Retype new SMB password:
 

Instalace Nextcloud – NCP

K instalaci Nextcloudu jsem opět zvolil utilitu armbian-config, protože tím mám zajištěnu veškerou instalaci – včetně Apache atp.

root@espressobin:~# armbian-config

Skrz utilitu jsem k instalaci Samby dostal: Software (System and 3rd party software install) -> Softy (3rd party application installer) -> NCP

Po instalaci je prvním krokem zadat url serveru do prohlížeče a uložit si hesla na admina (služba na portu 4433) a do nextcloudu. Poté editovat soubor /var/www/nextcloud/config/config.php
a nastavit IP adresu, na 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 bude zkontrolovat v adminovi, jestli není zapnutý nc-hdd-monitor, který způsoboval, že disk se neustále probouzí z režimu spánku.

Další, co je dobré redukovat kvůli probouzení disku, je spouštění udržbu Nextcloudu v cronu. Po instalaci je nastaveno spouštění každých 15 minut. Protože Nextcloud požívám jako automatické zálohování a za den přenesu pár drobných souborů, bude mi stačit frekvence údržby 1x denně. Zvolil jsem čas ve který je pravděpodobné, že disk bude v provozu – tedy v 10h a 12minut.

root@espressobin:~# crontab -e -u www-data

12 10 *  *  * php -f /var/www/nextcloud/cron.php

 

Aby se ve 2 ráno automaticky nespustilo generování náhledů obrázků, které by patrně položilo server výkonově, tak jsem raději zakomentoval v cronu tvorbu náhledů.

root@espressobin:~# cat /etc/cron.d/ncp-previews-auto 
#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, který jsem nastavoval již dříve – 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 spuštění.
  3. Nextcloud mi přepisoval trusted domains na veřejnou IP – což je nežádoucí a naopak interní IP mi z konfiguračního souboru zmizela.

Sepisuji tedy postupně řešení. První body byl docela jednoduchý. Znovu jsem nastavil spouštění dnsmasq a fail2ban po startu systému.

root@espressobin:~# systemctl enable dnsmasq
root@espressobin:~# systemctl enable fail2ban

Se spouštěním souboru /etc/rc.local jsem se trochu potrápil. Nakonec jsem našel tento článek a následoval jednotlivé kroky.

V návodu je napsáno, že mám zapnout /etc/rc.local na Systemd. Ovšem to neprošlo a podle všecho kvůli tomu, že v souboru /usr/lib/systemd/system/rc-local.service schází tato část:

[Install]
WantedBy=multi-user.target

Řešení by tedy mělo být přidat řádek do souboru, reloadovat systemd a aktivovvat rc-local podobně jako dnsmasq.

root@espressobin:~# systemctl daemon-reload
root@espressobin:~# systemctl enable rc-local
root@espressobin:~# systemctl start rc-local

Pro úplnost ještě dodávám, jak vypadá soubor rc-local.service ve zdrojovém článku. Zároveň je ve zdrojovém článku napsáno, že soubor má být vytvořen v cestě: /etc/systemd/system/rc-local.service. Ovšem nejsem si jistý, zda nedojde při aktualizaci systemd k přepsání těchto souborů. Proto jsem to udělal raději na obou místech. Respektive pokud edituji soubor v /usr/lib/systemd/system, tak se při reloadování daemona překopíruje obsah souboru i do /etc.

[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 restartování 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. Ovšem v mém případě je to něco nežádoucího. Chci tam mít jenom IP adresu síťového zařízení ve vnitřní síti. Proto jsem si IP adresu u proměnné trusted_domains nastavil ručně a vypnul jsem tento proces po spouštění mikropočítače:

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 nastavení SNMP je první krok předcházejícím nastavení monitorovacích služeb jako je například MUNIN nebo MRTG. Protože tyto služby čerpají data ze SNMP.
root@espressobin:~# apt install snmp snmpd
root@espressobin: vim /etc/snmp/snmpd.conf

rocommunity public 127.0.0.1 #jednu dobu to nefungovalo a musel jsem dát veřejnou IP
netstat -nlpu|grep 161
snmpwalk -v 1 -c public localhost

Munin

Nejprve jsem nainstaloval tyto knihovny, jinak nefungovalo generování detailů u grafů.
root@espressobin:~# apt install libcgi-fast-perl libapache2-mod-fcgid libcache-perl libcache-perl libwww-perl
root@expressobin:~# a2enmod fcgid
root@espressobin:~# apt-get install munin munin-node munin-plugins-extra
Editovat soubor /etc/munin/munin-node.conf a povolit naslouchání na veřejné IP. Bez tohoto to bohužel nefungovalo. Zároveň jsem nastavil hostname:
allow ^94\.112\.143\.45$
host_name espressobin
Nastavení /etc/munin/munin.conf
root@espressobin:~# vim /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


# a simple host tree
[espressobin]
   address 84.112.112.112

 
root@espressobin:~# munin-node-configure --suggest

ln -s /etc/munin/apache24.conf /etc/apache2/sites-available/munin.conf
                                                                                                                                                             
    #Require local                                                                                                                                                                           
    Require all granted                                                                                                                                                                      
    Options FollowSymLinks SymLinksIfOwnerMatch                                                                                                                                              
    Options None                                                                                                                                                                             
                                                                                                                                                                                 
                                                                                                                                                                                             
                                                                                                                                                               
    #Require local                                                                                                                                                                           
    Require all granted                                                                                                                                                                      
    Options FollowSymLinks SymLinksIfOwnerMatch
..

a2ensite munin
systemctl reload apache2
systemctl restart munin-node
su - munin --shell=/bin/bash /usr/bin/munin-cron

Nastavení pošty – Postfix

apt-get install libsasl2-modules
touch /etc/postfix/sasl_passwd
cat /etc/postfix/sasl_passwd
[smtp.gmail.com]:587 username@gmail.com:password

chmod 600 /etc/postfix/sasl_passwd
postmap /etc/postfix/sasl_passwd
systemctl restart postfix.service
A přidat tyto řádky do souboru /etc/postfix/main.cf
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. Editovat soubor /etc/aliases a přidat řádek:
root: yourexternalemailaddress@gmail.com
Načíst nové aliasy a restartovat postfix.
newaliases
systemctl restart postfix
Otestovat můžeme posláním pošty uživateli root:
root@espressobin:~# sendmail root
Toto je obsah testovacího e-mail.
ctrl^D

Zálohování databáze Nextcloudu

Jeden z dalších kroků je 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

Jeden z dalších kroků je záloha databáze Nextcloudu. Připravil jsem si jednoduchý skript, který jsem umístil do složky /etc/cron.daily:
apt install mrtg

Při instalaci potvrdím, že /etc/mrtg.cfg je čitelný jenom rootem.
root@espressobin:/var/www# mkdir mrtg
root@espressobin:/var/www# chown www-data:www-data /var/www/mrtg/
Našel jsem ve fórech ještě další konfigurační soubory pro mrtg a vytovřil pro ně složku /etc/mrtg a umístil je tam:
root@espressobin:/home/nosek# cat /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
Legend1[localhost.cpu]: Active CPU in % (Load)
Legend2[localhost.cpu]:
Legend3[localhost.cpu]:
Legend4[localhost.cpu]:
LegendI[localhost.cpu]: Active
LegendO[localhost.cpu]:
Options[localhost.cpu]: growright,nopercent
root@espressobin:/home/nosek# cat /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: LegendO[localhost.mem]: Legend1[localhost.mem]: Free memory, not including swap, in bytes Dále vygenerovat konfigurační soubor:
root@espressobin:/var/www# cfgmaker -zero-speed=100000000 --global "Options[_]: growright,bits" public@localhost > /etc/mrtg.cfg
Nastavit aby mrtg damon 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

Následně aktivovat apache:
a2ensite mrtg
systemctl reload apache2
Jako poslední vygenerovat index soubor a počkat minimálně 5 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

Další články