← Blog / Linux & Shell

Hardening serwera Linux — kompletna checklista produkcyjna

Wprowadzenie

Świeżo zainstalowany serwer Linux — niezależnie czy to Debian, Ubuntu czy Rocky Linux — nie jest gotowy na środowisko produkcyjne. Domyślna konfiguracja jest zoptymalizowana pod wygodę użytkownika, nie pod bezpieczeństwo. W tym artykule znajdziesz kompletną checklistę hardeningu, którą stosujemy przy każdym nowym serwerze.


1. Aktualizacja systemu

Pierwsza rzecz po instalacji — pełna aktualizacja pakietów.

# Debian / Ubuntu
apt update && apt upgrade -y && apt autoremove -y

# RHEL / Rocky Linux / AlmaLinux
dnf update -y && dnf autoremove -y

Ustaw automatyczne aktualizacje bezpieczeństwa:

# Debian / Ubuntu
apt install unattended-upgrades -y
dpkg-reconfigure --priority=low unattended-upgrades

# RHEL / Rocky
dnf install dnf-automatic -y
systemctl enable --now dnf-automatic-install.timer

2. Konfiguracja SSH

SSH to najczęściej atakowany punkt wejścia. Poniższe zmiany w /etc/ssh/sshd_config eliminują większość typowych ataków.

nano /etc/ssh/sshd_config

Kluczowe ustawienia:

PermitRootLogin no
PasswordAuthentication no
PubkeyAuthentication yes
Port 2222
AllowUsers deploy admin
MaxAuthTries 3
MaxSessions 5
X11Forwarding no
ClientAliveInterval 300
ClientAliveCountMax 2
PermitEmptyPasswords no

Zrestartuj SSH i przetestuj połączenie przed zamknięciem obecnej sesji:

sshd -t
systemctl restart sshd

3. Firewall (nftables / ufw / firewalld)

Ubuntu / Debian — UFW

apt install ufw -y
ufw default deny incoming
ufw default allow outgoing
ufw allow 2222/tcp
ufw allow 80/tcp
ufw allow 443/tcp
ufw enable
ufw status verbose

RHEL / Rocky — firewalld

systemctl enable --now firewalld
firewall-cmd --set-default-zone=drop
firewall-cmd --permanent --add-port=2222/tcp
firewall-cmd --permanent --add-service=http
firewall-cmd --permanent --add-service=https
firewall-cmd --reload

4. Fail2Ban — ochrona przed brute-force

apt install fail2ban -y
cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local

Konfiguracja dla SSH:

[DEFAULT]
bantime  = 3600
findtime = 600
maxretry = 3
backend  = systemd

[sshd]
enabled  = true
port     = 2222
logpath  = %(sshd_log)s
maxretry = 3
systemctl enable --now fail2ban
fail2ban-client status sshd

5. Polityki haseł i konta użytkowników

userdel games
userdel news
passwd -l root
apt install libpam-pwquality -y
# /etc/security/pwquality.conf
minlen = 14
dcredit = -1
ucredit = -1
lcredit = -1
ocredit = -1
dictcheck = 1
# /etc/login.defs
PASS_MAX_DAYS   90
PASS_MIN_DAYS   7
PASS_WARN_AGE   14

6. SELinux / AppArmor

SELinux (RHEL / Rocky Linux)

sestatus
setenforce 1
sed -i 's/SELINUX=permissive/SELINUX=enforcing/' /etc/selinux/config
ausearch -m avc -ts recent

AppArmor (Ubuntu / Debian)

apt install apparmor apparmor-utils -y
systemctl enable --now apparmor
aa-status
aa-enforce /etc/apparmor.d/usr.sbin.nginx

7. Audyt systemu — auditd

apt install auditd audispd-plugins -y
systemctl enable --now auditd

Reguły audytu (/etc/audit/rules.d/hardening.rules):

-w /etc/passwd -p wa -k identity
-w /etc/shadow -p wa -k identity
-w /etc/sudoers -p wa -k sudoers
-w /etc/ssh/sshd_config -p wa -k ssh_config
-a always,exit -F arch=b64 -S open -F exit=-EACCES -k access_denied

8. Parametry sysctl dla kernela

# /etc/sysctl.d/99-hardening.conf
net.ipv4.ip_forward = 0
net.ipv4.conf.all.rp_filter = 1
net.ipv4.conf.all.accept_redirects = 0
net.ipv4.tcp_syncookies = 1
net.ipv4.conf.all.log_martians = 1
fs.suid_dumpable = 0
kernel.kptr_restrict = 2
kernel.dmesg_restrict = 1
sysctl --system

Checklista — szybkie podsumowanie

#ZadaniePriorytet
1Aktualizacja systemu + auto-updatesKrytyczny
2Wyłącz logowanie root przez SSHKrytyczny
3Uwierzytelnianie tylko kluczem SSHKrytyczny
4Zmień port SSHWysoki
5Skonfiguruj firewall (deny all + whitelist)Krytyczny
6Zainstaluj i skonfiguruj Fail2BanWysoki
7Polityki haseł i wygasanieWysoki
8SELinux/AppArmor w trybie enforceWysoki
9Włącz auditd z regułamiŚredni
10Parametry sysctl dla sieci i kernelaWysoki

Podsumowanie

Hardening to nie jednorazowa akcja — to proces. Powyższe kroki stanowią solidną bazę dla każdego serwera produkcyjnego. W kolejnych artykułach pokażemy jak zautomatyzować ten proces z Ansible i jak monitorować serwer pod kątem anomalii za pomocą Falco i Grafana Loki.