Ubuntu bástyagép tűzfal (Fossa)
A Hálózati házirend szerint valamennyi szervert bastion host-ként kell kialakítani, azaz saját (csomagszűrő) tűzfallal kell rendelkezzen. A gyakorlatban ez a Linux kernel netfilter (iptables) konfigurálását jelenti, amelyet ebben a leírásban az Ubuntu terjesztésben alapértelmezetten telepített UFW (Uncomplicated Firewall) parancssori frontend segítségével valósítunk meg.
- Ez a leírás a majdani publikus eléréshez szükséges, alapvető csomagszűrést valósít meg, egy darab hálózati interface-szel rendelkező szervergépen.
- Ez a leírás csak IPv4-re vonatkozik - IPv6 TODO!
A beállításokat rendszergazda konzolon (sudo -i) célszerű elvégezni.
Tartalomjegyzék
Hálózati segédeszközök
Elsősorban az ifconfig használatához szokott rendszergazdáknak opcionálisan célszerű a net-tools csomag telepítése:
apt install net-tools
Az IPv6 tiltása
Tisztán IPv4 környezetben opcionálisan érdemes teljesen letiltani az IPv6 forgalmat. Ehhez adjunk hozzá egy kernel paramétert a grub-ban átadott boot paraméterekhez:
-rw-r--r-- root root /etc/default/grub [...] GRUB_CMDLINE_LINUX_DEFAULT="[...] ipv6.disable=1" [...]
Érvényesítsük a beállításokat:
update-grub
majd indítsuk újra a gépet.
Ellenőrzés: újraindítás után az ifconfig vagy ip a parancsok kimenete már nem mutat IPv6 címeket.
UFW alapbeállítások
Amennyiben az IPv6-ot fentebb letiltottuk, ezt a beállítást vezessük át a /etc/default/ufw állományban is:
-rw-r--r-- /etc/default/ufw [...] # Set to yes to apply rules to support IPv6 (no means only IPv6 on loopback # accepted). You will need to 'disable' and then 'enable' the firewall for # the changes to take affect. IPV6=no [...]
Ezután állítsunk be egy alap csomagszűrő szabálykészletet.
A bejövő forgalom engedélyezése
Alapértelmezésben az ufw inaktív, és az iptables nem tartalmaz szabályokat:
ufw status # inactive iptables -n -L # mindhárom chain üres
Mivel a /etc/default/ufw állományban előírt ufw policy a bejövő forgalom tiltása, mielőtt aktiválnánk a csomagszűrést, mindenképpen engedélyezzük a kívülről csatlakozást legalább az OpenSSH szolgáltatáshoz:
ufw app info OpenSSH # case-sensitive! - ellenőrizzük a portszámot ufw allow OpenSSH # állítsuk be a szabályt
A fenti parancsban az alkalmazással együtt települő alkalmazásleírásra (/etc/ufw/application.d alatti állomány) hivatkoztunk, így nem kellett közvetlenül portszámokat megadni. A létrehozott tűzfal szabályok megtekinthetőek a /etc/ufw/user.rules állományban.
Ezután bekapcsolhatjuk a csomagszűrést:
ufw enable ufw status verbose # Status: active iptables -n -L # A létrehozott iptables beállítások
A kimenő forgalom szigorítása
Alapértelmezetten a kimenő forgalomra az ACCEPT policy van beállítva, azaz a kimenő forgalmat nem szűrjük. Opcionálisan de javasoltan érdemes lehet kifelé csak a ping és traceroute, a DNS lekérés, a levélküldés SMTP-vel (+SMTPs, MSA), az időszinkron NTP protokollal, PGP kulcsszerverek elérése (HKP), a web és az FTP forgalmakat engedélyezni. Opcionálisan az SSH is engedélyezett lehet.
Az ICMP forgalom megtartására szúrjuk be az alábbi parancssort a /etc/ufw/before.rules állományba:
-rw-r----- root root /etc/ufw/before.rules [...] # ok all icmp for output -A ufw-before-output -p icmp -j ACCEPT # allow dhcp client to work [...]
A többi korlátozást az alábbi parancsok egyszeri kiadásával írhatjuk elő:
ufw allow out domain ufw allow out smtp ufw allow out smtps ufw allow out submission ufw allow out ntp ufw allow out hkp ufw allow out http ufw allow out https ufw allow out ftp ufw default reject outgoing # Minden mást visszadobunk
Ellenőrzésképpen kérjünk egy státuszt:
ufw status numbered
Status: active To Action From -- ------ ---- [ 1] OpenSSH ALLOW IN Anywhere [ 2] 53 ALLOW OUT Anywhere (out) [ 3] 25/tcp ALLOW OUT Anywhere (out) [ 4] 465/tcp ALLOW OUT Anywhere (out) [ 5] 587/tcp ALLOW OUT Anywhere (out) [ 6] 123/udp ALLOW OUT Anywhere (out) [ 7] 11371/tcp ALLOW OUT Anywhere (out) [ 8] 80/tcp ALLOW OUT Anywhere (out) [ 9] 443/tcp ALLOW OUT Anywhere (out) [10] 21/tcp ALLOW OUT Anywhere (out)
Tűzfalnapló átirányítása
Érdemes elkülöníteni a terjedelmes tűzfal naplót a kernel naplójától. Ehhez készítsünk egy overlay állományt a syslog-ng konfigurációjához:
-rw-r--r-- /etc/syslog-ng/conf.d/ufw.conf # Separate UFW logging destination d_ufw { file ("/var/log/ufw.log" owner(root) group(adm)); }; filter f_ufw { match ("[UFW " value ("MESSAGE")); }; log { source (s_src); filter (f_ufw); destination (d_ufw); flags(final); };
A beállítás érvényesítéséhet indítsuk újra a syslog-ng-t:
systemctl restart syslog-ng
Mivel a /etc/logrotate.d már tartalmazza a vonatkozó konfigurációs állományt, az új log rotálásáról külön gondoskodni nem kell.