„Ubuntu bástyagép tűzfal (Fossa)” változatai közötti eltérés

Innen: AdminWiki
Ugrás a navigációhoz Ugrás a kereséshez
 
(3 közbenső módosítás ugyanattól a felhasználótól nincs mutatva)
9. sor: 9. sor:


==Az IPv6 tiltása==
==Az IPv6 tiltása==
Tisztán IPv4 környezetben ''opcionálisan'' érdemes teljesen letiltani az IPv6 forgalmat. Ehhez készítsünk egy ''overlay'' kernel paraméter beállító állományt:
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:
<pre>-rw-r--r-- root root /etc/sysctl.d/local.conf
<pre>-rw-r--r-- root root /etc/default/grub


# Disable IPv6 entirely
[...]
net.ipv6.conf.all.disable_ipv6=1
GRUB_CMDLINE_LINUX_DEFAULT="[...] ipv6.disable=1"
net.ipv6.conf.default.disable_ipv6=1
[...]</pre>
net.ipv6.conf.lo.disable_ipv6=1
</pre>
Érvényesítsük a beállításokat:
Érvényesítsük a beállításokat:
<pre>systemctl restart systemd-sysctl</pre>
<pre>update-grub</pre>
Ellenőrzés: az ''ifconfig'' vagy ''ip a'' parancsok kimenete már nem mutat IPv6 címeket. Ez a beállítás a rendszer újraindítása után is megmarad.
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==
==UFW alapbeállítások==
31. sor: 31. sor:
IPV6=no
IPV6=no
[...]</pre>
[...]</pre>
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:
Alapértelmezésben az ''ufw'' inaktív, és az ''iptables'' nem tartalmaz szabályokat:
<pre>ufw status      # inactive
<pre>ufw status      # inactive
40. sor: 42. sor:
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.
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 kapcsoljuk be a csomagszűrést:
Ezután bekapcsolhatjuk a csomagszűrést:
<pre>ufw enable
<pre>ufw enable
ufw status verbose  # Status: active
ufw status verbose  # Status: active
iptables -n -L      # A létrehozott iptables beállítások</pre>
iptables -n -L      # A létrehozott iptables beállítások</pre>
===A kimenő forgalom szigorítása===
===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 DNS lekérés, a traceroute, a levélküldés SMTP-vel (+SMTPs, [https://en.wikipedia.org/wiki/Message_submission_agent MSA]), az időszinkron NTP protokollal, PGP kulcsszerverek elérése ([https://en.wikipedia.org/wiki/Key_server_(cryptographic) HKP]), a web és az FTP forgalmakat engedélyezni. Opcionálisan az SSH is engedélyezett lehet.
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, [https://en.wikipedia.org/wiki/Message_submission_agent MSA]), az időszinkron NTP protokollal, PGP kulcsszerverek elérése ([https://en.wikipedia.org/wiki/Key_server_(cryptographic) 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:
<pre>-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
[...]</pre>
A többi korlátozást az alábbi parancsok egyszeri kiadásával írhatjuk elő:
<pre>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
</pre>
Ellenőrzésképpen kérjünk egy státuszt:
<pre>ufw status numbered</pre>
<pre>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)
</pre>


==Tűzfalnapló átirányítása==
==Tűzfalnapló átirányítása==

A lap jelenlegi, 2020. május 17., 16:20-kori változata

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.

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.