Nastavte si FreeBSD server jako zkušený administrátor
10. února 2019V současné době je poměrně jednoduché si připojit vlastní server do Internetu. Ať už si pořídíte virtuální službu např. u Vultr, DigitalOcean nebo máte vlastní HW, vždy budete potřebovat základní nastavení FreeBSD serveru. V tomto článku najdete základní minimum nutné k běhu serveru.
Předpoklady
Než začneme, budeme potřebovat následující:
- Nainstalované FreeBSD 64 bit poslední verze (viz Handbook).
- Základní znalost UNIXu, práce v příkazové řádce.
- Heslo k uživatelovi
root
. - Statickou IP adresu, IP adresu brány a DNS serverů.
- Nejlépe registrovanou doménu pro hostname.
Poznámky k instalaci
Instalace je pěkně popsaná v Handbooku, tak ji nebudu popisovat. Uvedu jenom pár postřehů.
Na základní systém používám UFS v tradičním rozdělení. Pokud máte větší disk, přiřaďte víc místa pro sekci /tmp
a /var
. Pravidlo pro freebsd-swap
bývalo dvojnásobek paměti RAM. Já se řídím jednonásobkem paměti, ale vždy se snažím mít minimálně 32 GB paměti v počitači. Tady hodně záleží, k čemu server hodláte použít.
Při instalaci zadávám pouze heslo pro uživatele root, dalšího uživatele přidávám až po prvním loginu do systému. DHCP na serveru nepoužívám,
vždy přiděluji IP adresy ručně. U hostname
se řídím pravidlem jmeno_pocitace.domena.neco, kde domena.neco mám zaregistrovanou.
Základní nastavení systému
FreeBSD obsahuje několik souborů, kde můžete významně měnit chování systému. Nejdůležitější konfigurační soubory jsou /etc/rc.conf
,
/etc/sysctl.conf
a /boot/loader.conf
. Většina konfiguračních souborů k operačnímu systému se nachází v adresáři /etc
.
Nastavení sítě
Parametry síťového rozhraní a služeb se nastavují v souboru /etc/rc.conf
. Potřebujete vlastní statickou IP adresu, IP adresu brány do
Internetu a hostname. Příklad ukazuje i minimální konfiguraci souboru hned po instalaci systému.
K nastavení DNS serverů slouží soubor /etc/resolv.conf
. Zde můžete zadat jakoukoliv IP adresu DNS serveru.
Povolení jaderných modulů
K nastavení parametrů při nabíhání systému slouží soubor /boot/loader.conf
. Soubor po instalaci systému je prázdný, zde je uvedena pouze
minimální konfigurace.
Změna uvítacího textu
Při prvním přihlášení vyskočí hodně textu, který je uložen v souboru /etc/motd
. Modifickaci tohoto souboru provedeme následovně:
Přidání nového uživatele
K přidání nového uživatele slouží příkaz adduser
. Text označený tučným písmem je vstup z klávesnice. Na řádcích Enter password a Enter password again se vstup z klávesnice nezobrazuje.
root@server:~ # adduser Username: tonda Full name: Tonda Novak Uid (Leave empty for default): Login group [tonda]: wheel Login group is wheel. Invite tonda into other groups? []: Login class [default]: Shell (sh csh tcsh nologin) [sh]: tcsh Home directory [/home/tonda]: Home directory permissions (Leave empty for default): Use password-based authentication? [yes]: Use an empty password? (yes/no) [no]: Use a random password? (yes/no) [no]: Enter password: Enter password again: Lock out the account after creation? [no]: Username : tonda Password : ***** Full Name : Tonda Novak Uid : 1002 Class : Groups : tonda wheel Home : /home/tonda Home Mode : Shell : /bin/tcsh Locked : no OK? (yes/no): yes adduser: INFO: Successfully added (tonda) to the user database. Add another user? (yes/no): no Goodbye! root@server:~ #
Přídáním uživatele do skupiny “wheel” docílíme, že se můžeme přepnout na uživatele “root” příkazem su -l
.
Upgrade systému
Hned po instalaci provedeme aktualizaci na poslední verzi.
Doporučuju prostudovat stránku FreeBSD Security Information a přihlásit se k odebírání novinek emailem. Tak budete udržovat FreeBSD stále aktuální.
Instalování aplikací z portů
Na FreeBSD jsou dvě možnosti instalace dodatečného software. Buď můžete instalovat binární balíčky nebo můžete použít porty (překlad zdrojového kódu). Instalace pomocí portů je časově náročnější, na druhou stranu si můžete port nakonfigurovat podlé svého. Ještě než začneme používat porty, musíme stáhnout a nainstalovat kolekci portů. Tato operace může trvat delší dobu.
Jakmile skončí aktualizace portů, můžete používat porty obvyklým způsobem. Instalaci editoru Vim provedete následujícím příkazem:
Nyní máte nainstalovaný editor vim. Naučte se minimálně základy práce s editorem, budete to potřebovat.
Konfigurace OpenSSH
OpenSSH je sada nástrojů, které umožňují šifrovanou komunikaci mezi klientem a serverem. Můžeme se přihlašovat k vzdálenému shellu, kopírovat soubory nebo spouštět Xové aplikace.
SSH klíče
Ještě než začneme konfigurovat sshd server, vygenerujeme si na klientovi soukromý a veřejný klíč a nahrajeme veřejný klíč do souboru
.ssh/authorized_keys
v domovském adresáři na serveru.
Parametr -t ed25519 určuje typ klíče, parametr -a 100 specifikuje počet kol derivační fukce klíče použité při generování (vyšší číslo – lepší ochrana proti brute-force útokům).
Po nahrání veřejného klíče na vzdálený server se můžeme přihlašovat ke vzdálenému účtu bez zadávání hesla.
Nastavení sshd
Konfigurační soubor daemona se nachází v /etc/ssh/sshd_config
.
Port 22 je číslo portu, na kterém naslouchá OpenSSH daemon. Je na každém, jestli číslo portu změní. Já nechávám výchozí číslo 22, protože změnu nepovažuju za zvýšení bezpečnosti.
AddressFamily inet k serveru se můžou připojovat jenom IPv4 adresy.
ListenAddress z jaké adresy nebo bloku adres se můžete přihlásit na server.
Ciphers specifikuje dovolené šifry na serveru. Seznam dovolených šifer získáte příkazem $ ssh -Q cipher
.
MACs specifikuje dostupné algoritmy MAC (message authentication code). Opět seznam získáte příkazem $ ssh -Q mac
.
PermitRootLogin no zakáže vzdálené přihlášení uživatele root.
StrictModes yes kontrola práv v domovském adresáři uživatele před přihlášením.
MaxAuthTries 6 maximální počet pokusů při přihlášení na jednu relaci.
PasswordAuthentication no zakáže uživatelům přihlásit se pomocí hesla. Přihlásit se lze pouze pomocí klíče. Útočník tak nemůže
hádat hesla, protože server mu odpoví Permission denied (publickey)
. Toto opatření výrazně zvyšuje bezpečnost, na druhou stranu
musíte pečlivě střežit soukromý klíč. Pokud ho ztratíte, už se na server nepřihlásíte.
AllowUsers tonda jarda povoluje pouze vybrané uživatele, co se mouhou přihlásit k serveru. Uživatele oddělujeme mezerou.
Restartování sshd
Po nakonfigurování uložte sobor a nezavírejte otevřené ssh spojení. Ujistěte se, že máte v souboru /etc/rc.conf
řádek sshd_enable="YES"
. Nyní stačí sshd restartovat.
Otevřete na klientovi nové ssh spojení a ověřte, že se můžete přihlásit k účtu na serveru.
Synchronizace času pomocí OpenNTPD
OpenNTPD není součástí FreeBSD, proto ho musíme nejdřív nainstalovat.
Zkontrolujte, zda neběží původní NTP daemon a službu vypněte.
Nastavení daemona se nachází v souboru /usr/local/etc/ntpd.conf
, který vypadá následovně:
Seznam ntp serverů pro Českou republiku najdete na stránkách projektu pool.ntp.org. Odkomentováním řádku #listen on your_ip_address
a zadáním IP adresy bude OpenNTPD fungovat jako server pro lokální síť.
Volba constraints umožňuje dotazy přes protokol HTTPS na důvěryhodný server a následnou kontrolu položky ‘Date’ v odpovědi. Tento čas se nepoužívá k synchronizaci, ale ke kontrole, jestli NTP servery vrací správný čas. Tím lze zabránit nebo omezit MITM útoky.
Spuštění OpenNTPD při startu systému docílíme přidáním následujících řádku do souboru /etc/rc.conf
.
Ujistěte se, že máte zakomentovaný řádek ntpd_enable="YES"
v souboru /etc/rc.conf
.
Jakmile máme vše správně nastavené, spustíme OpenNTPD daemona.
Nakonec je dobré zkontrolovat časové pásmo příkazem date +"%Z"
. V našem časovém pásmu by měl být výstup CET nebo letní CEST. Na serverech
lze používat i UTC. Nastavení vhodného pásma provedete příkazem tzsetup
.
Konfigurace firewallu PF
FreeBSD obsahuje tři firewally – PF, IPFW a IPFILTER. Níže uvádím pouze konfiguraci pro PF. Příklad je vhodný pro server nebo klienta.
Konfigurační soubor se nachází v /etc/pf.conf
. Seznam všech dostupných služeb najdete v souboru /etc/services
. Při experimentování s pravidly
dávejte pozor, abyste si nezablokovali přihlašování přes ssh.
Vyhodnocování pravidel je formou shora dolů s tím, že na packet je aplikováno poslední vhodné pravidlo. Direktiva quick
zajistí, že
jakmile packet odpovídá pravidlu, tak je na něj okamžitě aplikováno a procházení dalších pravidel je zastaveno.
Po nakonfigurování firewallu přidáme řádky důležité pro spuštění PF s logováním do /etc/rc.conf
.
Nakonec spustíme pf firewall a pflog.
Příkaz pfctl a sledování logů
Program pfctl
slouží k ovládání Packet Firewallu z příkazové řádky. Má široké použití, zde uvedu jenom pár příkladů.
Zkontroluje, zda konfigurační soubor neobsahuje chyby.
Povolení PF.
Vypnutí PF.
Kompletně vymaže tabulky NAT, stavů spojení a pravidel. Nakonec opět načte pravidla z /etc/pf.conf
.
Ke kontrole logovacích souborů slouží program tcpdump
.
Online sledování logů.
Závěr
To je vše. Nyní máte jednoduchý a bezpečný FreeBSD server použitelný téměř na cokoliv. Pokud máte veřejnou IP adresu, připojte stroj do Internetu. Pokud nemáte, zaregistrujte se na Vultru nebo DigitalOceanu. Zaregistrováním dostanete nějaký dolary zdarma, o to je zkoušení zábavnější. A hlavně váš server začne naplno žít.
Zajímavé odkazy
- FreeBSD Handbook – povinné čtění pro každého administrátora
- OpenBSD PF FAQ – jak nakonfigurovat PF firewall
- calomel.org – stránky s velkým množstvím kvalitních návodů
- c0ffee.net – dobré postřehy s nastavováním FreeBSD a OpenBSD serverů