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