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 fail2banPo 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-configSkrz 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ů.
- 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.
- 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í.
- 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-extraEditovat 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 espressobinNastavení /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.serviceA 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.crtPřesměrování pošty z roota na existující externí e-mail. Editovat soubor /etc/aliases a přidat řádek:
root: yourexternalemailaddress@gmail.comNačíst nové aliasy a restartovat postfix.
newaliases systemctl restart postfixOtestovat 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 mrtgPř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,nopercentroot@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.cfgNastavit 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.cfgVytvořit soubor /etc/apache2/sites-available/mrtg.conf:
Alias /mrtg "/var/www/mrtg/" <Directory "/var/www/mrtg/"> Options None AllowOverride None Require all grantedNásledně aktivovat apache:
a2ensite mrtg systemctl reload apache2Jako 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
- https://www.cyberciti.biz/faq/linux-mount-an-lvm-volume-partition-command/
- https://www.kernel.org/doc/Documentation/ABI/testing/procfs-diskstats
- https://www.thegeekdiary.com/how-to-add-or-delete-a-samba-user-under-linux/
- https://kifarunix.com/install-and-configure-snmp-on-debian-10-buster/
- https://wiki.debian.org/SNMP
- http://www.linuxhomenetworking.com/wiki/index.php/Quick_HOWTO_:_Ch22_:_Monitoring_Server_Performance
- https://debian-handbook.info/browse/stable/sect.monitoring.html#sect.munin
- https://www.abclinuxu.cz/clanky/munin-sietovy-monitorovaci-framework#!/-1/
- https://www.linuxexpres.cz/praxe/sprava-linuxoveho-serveru-monitorovani-serveru-munin
- https://www.howtoforge.com/tutorial/server-monitoring-with-munin-and-monit-on-debian/
- https://www.linode.com/docs/guides/configure-postfix-to-send-mail-using-gmail-and-google-apps-on-debian-or-ubuntu/
- https://www.howtoforge.com/tutorial/configure-postfix-to-use-gmail-as-a-mail-relay/
- https://blog.bobbyallen.me/2013/02/03/how-to-redirect-local-root-mail-to-an-external-email-address-on-linux/
- https://aacable.wordpress.com/tag/no-ifspeed/
- http://www.debianadmin.com/mrtg-installation-and-configuration-in-debian-based-distributions-2.html
- https://linoxide.com/linux-how-to/install-configure-mrtg-ubuntu/
- https://www.youtube.com/watch?v=-RIDO62Upcc&t=230s
- https://www.debianhelp.co.uk/mrtg.htm
- http://www.mrtg.cz/doc/cfgmaker.en.html#SNMPv3-Arguments
- https://aacable.wordpress.com/2014/07/07/mrtg-monitoring-with-esxi-hosted-guest-return-interface-is-commented-has-no-ifspeed-property/
- https://raymii.org/s/snippets/Munin-Fix-MySQL-Plugin-on-Ubuntu-12.04.html
- https://www.linuxbabe.com/linux-server/how-to-enable-etcrc-local-with-systemd