Hardening VA NAKIVO

Pokud provozujete starší instalaci Nakiva (<10.5) jako virtual appliance (VA), může pro vás být užitečné si instalaci obrnit svými silami namísto reinstalace na novější verzi a přenosu konfigurace.

Nejprve začneme konfigurace firewallu iptables.

iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -p tcp --dport ssh -j ACCEPT
iptables -A INPUT -p tcp --dport 4443 -j ACCEPT
iptables -A INPUT -p tcp --dport 9446 -j ACCEPT
iptables -A INPUT -p tcp --dport 9448:10000 -j ACCEPT
iptables -A INPUT -j DROP


Po konfiguraci firewallu nainstalujeme IPS fail2ban pomocí příkazu „apt-get install fail2ban“.

root@nakivo:# apt-get install fail2ban
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following additional packages will be installed:
  python3-pyinotify python3-systemd
Suggested packages:
  mailx monit sqlite3 python-pyinotify-doc
The following NEW packages will be installed:
  fail2ban python3-pyinotify python3-systemd
0 upgraded, 3 newly installed, 0 to remove and 7 not upgraded.
Need to get 390 kB of archives.
After this operation, 2,024 kB of additional disk space will be used.
Do you want to continue? [Y/n] y
Get:1 http://us.archive.ubuntu.com/ubuntu bionic/universe amd64 fail2ban all 0.10.2-2 [329 kB]
Get:2 http://us.archive.ubuntu.com/ubuntu bionic/main amd64 python3-pyinotify all 0.9.6-1 [24.7 kB]
Get:3 http://us.archive.ubuntu.com/ubuntu bionic/main amd64 python3-systemd amd64 234-1build1 [36.1 kB]
Fetched 390 kB in 1s (440 kB/s)
Selecting previously unselected package fail2ban.
(Reading database ... 70187 files and directories currently installed.)
Preparing to unpack .../fail2ban_0.10.2-2_all.deb ...
Unpacking fail2ban (0.10.2-2) ...
Selecting previously unselected package python3-pyinotify.
Preparing to unpack .../python3-pyinotify_0.9.6-1_all.deb ...
Unpacking python3-pyinotify (0.9.6-1) ...
Selecting previously unselected package python3-systemd.
Preparing to unpack .../python3-systemd_234-1build1_amd64.deb ...
Unpacking python3-systemd (234-1build1) ...
Setting up fail2ban (0.10.2-2) ...
Created symlink /etc/systemd/system/multi-user.target.wants/fail2ban.service → /lib/systemd/system/fail2ban.service.
Setting up python3-systemd (234-1build1) ...
Setting up python3-pyinotify (0.9.6-1) ...
Processing triggers for systemd (237-3ubuntu10.53) ...
Processing triggers for man-db (2.8.3-2ubuntu0.1) ...
Processing triggers for ureadahead (0.100.0-21) ...

Jako zásadní konfigurace IPS fail2ban je třeba azpnout ochranu SSH v souboru /etc/fail2ban/jail.conf.

Najděte a odkomentujte následující řádky:

[sshd]
enabled = true

Pokud již provozujete novější verzi VA, kde je namísto uživatele root použit uživatel nkvuser, můžete tento bod přeskočit. Jinak vytvořte nového uživatele (např. nakivo nebo nkvuser, my použijeme jméno nakivo) a skupinu admin (je v /etc/sudoers uvedena pro právo spustit příkaz sudo, ale v /etc/group není). Uživateli nakivo nastavte nějaké netriviální heslo!

useradd nakivo
passwd nakivo
groupadd admin
usermod -a -G admin nakivo

Otestujte, že se lze na uživatele nakivo přihásit a provést např. sudo su – (přepnutí na roota). Pokud vše bude fungovat, zamezíme přímému loginu uživatele root přes ssh v souboru /etc/ssh a kromě toho upravte ještě pár řádků dle tohoto vzoru:

PermitRootLogin no
PermitEmptyPasswords no
IgnoreUserKnownHosts yes
IgnoreRhosts yes
Protocol 2

Nyní otestujte, že všechno funguje a pokud ano, můžeme přistoupit k dalšímu utahování šroubů. Začneme zamezením toho, aby si OS sahal libovolně do internetu a donutíme ho jít pouze řízeně přes proxy server (v našem případě jde o stroj s proxyserverem Squid na portu 3128). samozřejmě pokud nějaký proxyserver provozujete:-)

Utilitu pro aktualizace OS donutíme k použití proxyserveru vytvořením souboru /etc/apt/apt.conf.d/proy.conf

Acquire::http::Proxy "http://proxy_ip:3128/";
Acquire::https::Proxy "http://proxy_ip:3128/";

Dále vynutíme použití proxyserveru pro všechny uživatele úpravou souboru /etc/environment

export http_proxy=proxy_ip:3128
export https_proxy=proxy_ip:3128

Nakonec si necháme omezení přístupů na správu appliance (SSH pro správu OS a HTTP přístup na GUI NAKIVO directoru). Vycházím z toho, že máte v LAN nějakou dedikovanou stanici nebo server určené pro správu, kde přísně kontrolujete a logujete, kdo se na ně hlásí, pravidelně je aktualizujete a máte na nich instalovánu patřičnou ochranu (endpoint protection). Editujme tedy soubor /etc/iptables/rules.v4. Původní obsah po počáteční konfiguraci bude vypadat asi nějak takto.

# Generated by iptables-save v1.6.1 on Mon Sep 12 10:19:55 2022
*filter
:INPUT DROP [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [9290916:135749001596]
-A INPUT -p icmp -j ACCEPT
-A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p tcp -m tcp --dport 22 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 4443 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 9446 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 9448:10000 -j ACCEPT
-A INPUT -j DROP
COMMIT
# Completed on Mon Sep 12 10:19:55 2022

Předpokládejme, že máte 2 správcovské stanice na IP 192.168.1.100 a 192.168.1.200. Doplníme

# Generated by iptables-save v1.6.1 on Mon Sep 12 10:19:55 2022
*filter
:INPUT DROP [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [9290916:135749001596]
-A INPUT -p icmp -j ACCEPT
-A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p tcp -m tcp -s 192.168.1.100/32 --dport 22 -j ACCEPT
-A INPUT -p tcp -m tcp -s 192.168.1.200/32 --dport 22 -j ACCEPT
-A INPUT -p tcp -m tcp -s 192.168.1.100/32 --dport 4443 -j ACCEPT
-A INPUT -p tcp -m tcp -s 192.168.1.200/32 --dport 4443 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 9446 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 9448:10000 -j ACCEPT
-A INPUT -j DROP
COMMIT
# Completed on Mon Sep 12 10:19:55 2022

Restartujte firewall nebo raději celý server (to nikdy neškodí:-) a otestujte funkčnost.