LIVE: New phishing campaigns targeting mobile users —View latest threats →

Back to Tutorials
Zaawansowany 18 min czytania

Wzmacnianie bezpieczeństwa Linuksa: praktyczna lista kontrolna

Domyślna instalacja Linuksa nie jest gotowa na produkcję. Przejdź krok po kroku przez zabezpieczenie SSH, konfigurację zapory, automatyczne aktualizacje i kontrolę uprawnień użytkowników.

5 lutego 2026

Dlaczego domyślne instalacje są niebezpieczne

Świeżo zainstalowany serwer z Linuksem ma ustawienia domyślne zoptymalizowane pod kątem szerokiej zgodności i łatwości konfiguracji — a nie bezpieczeństwa. Mogą działać usługi, których nie potrzebujesz, SSH akceptuje logowanie hasłem (podatne na ataki siłowe), zapora może być zbyt liberalna lub wyłączona, a konta użytkowników mogą mieć nadmierne uprawnienia. Wzmacnianie zabezpieczeń (hardening) to proces systematycznego zmniejszania powierzchni ataku do faktycznych potrzeb.

Ta lista kontrolna dotyczy rodzin Debian/Ubuntu i RHEL/CentOS, ale jej zasady mają zastosowanie uniwersalne.

Wzmacnianie kont użytkowników i uwierzytelniania

Wyłącz logowanie jako root i używaj sudo

Nigdy nie loguj się bezpośrednio jako root. Utwórz osobnego użytkownika administracyjnego i nadaj mu uprawnienia sudo:

adduser adminuser
usermod -aG sudo adminuser   # Debian/Ubuntu
usermod -aG wheel adminuser  # RHEL/CentOS

Wyłącz logowanie roota przez SSH w pliku /etc/ssh/sshd_config: ustaw PermitRootLogin no.

Wymuszaj silne zasady haseł

Zainstaluj libpam-pwquality (Debian) lub pam_pwquality (RHEL) i skonfiguruj minimalną długość, wymogi złożoności oraz historię haseł w /etc/security/pwquality.conf. Ustaw okres ważności haseł w /etc/login.defs: PASS_MAX_DAYS 90, PASS_MIN_DAYS 1, PASS_WARN_AGE 14.

Blokuj nieużywane konta

passwd -l username   # Lock an account
chage -E 0 username  # Expire immediately

Pierwsze polecenie blokuje konto, drugie natychmiast je unieważnia. Sprawdź konta bez hasła lub z dostępem do powłoki, który nie powinien im przysługiwać (grep -v 'nologin\|false' /etc/passwd).

Zabezpieczanie SSH

SSH to najczęstszy wektor zdalnego dostępu. Wzmocnij konfigurację w /etc/ssh/sshd_config:

Port 2222                     # Non-default port reduces automated scans
PermitRootLogin no
PasswordAuthentication no     # Key-based auth only
PubkeyAuthentication yes
AllowUsers adminuser          # Whitelist specific users
MaxAuthTries 3
ClientAliveInterval 300
ClientAliveCountMax 2
X11Forwarding no
AllowTcpForwarding no         # Unless needed
Protocol 2

Niestandardowy port ogranicza automatyczne skanowanie, logowanie odbywa się wyłącznie kluczem, a dostęp mają tylko wskazani użytkownicy. Po zmianie portu zaktualizuj reguły zapory, zanim zrestartujesz sshd. Poleceniem sshd -t sprawdź konfigurację pod kątem błędów składni.

Do generowania kluczy wybieraj Ed25519 zamiast RSA 2048:

ssh-keygen -t ed25519 -C "admin@server"

Konfiguracja zapory

UFW (Ubuntu/Debian)

ufw default deny incoming
ufw default allow outgoing
ufw allow 2222/tcp   # Your SSH port
ufw allow 443/tcp    # HTTPS if web server
ufw enable
ufw status verbose

firewalld (RHEL/CentOS)

firewall-cmd --set-default-zone=drop
firewall-cmd --permanent --add-port=2222/tcp
firewall-cmd --reload

Na nowoczesnych jądrach używaj bezpośrednio nftables, aby uzyskać maksymalną kontrolę i wydajność. Stosuj zasadę domyślnej odmowy — zezwalaj tylko na to, co jest jawnie potrzebne.

Aktualizacje systemu i zarządzanie pakietami

Utrzymuj system załatany. Niezałatane podatności to — zaraz po atakach na dane logowania — najczęstsza droga początkowego dostępu:

# Debian/Ubuntu — enable unattended security upgrades
apt install unattended-upgrades
dpkg-reconfigure unattended-upgrades

# RHEL/CentOS — enable automatic updates
dnf install dnf-automatic
systemctl enable --now dnf-automatic.timer

Usuń niepotrzebne pakiety: apt purge telnet rsh-server ypserv xinetd. Każdy zainstalowany pakiet to potencjalna podatność.

Wyłączanie zbędnych usług

Wyświetl wszystkie działające usługi i wyłącz te, z których nie korzystasz:

systemctl list-units --type=service --state=running
systemctl disable --now servicename

Typowi kandydaci do usunięcia na serwerze WWW: avahi-daemon, cups, bluetooth, rpcbind. Każdy otwarty port to potencjalny punkt wejścia.

Bezpieczeństwo systemu plików

  • Ustaw bit sticky na katalogach zapisywalnych dla wszystkich: chmod +t /tmp
  • Używaj opcji montowania noexec, nosuid, nodev dla /tmp, /var/tmp i nośników wymiennych w /etc/fstab
  • Przejrzyj pliki z bitem SUID/SGID: find / -perm /6000 -type f 2>/dev/null — usuń bit wszędzie, gdzie nie jest wymagany
  • Ogranicz uprawnienia do /etc/cron*: chmod 700 /etc/cron.d /etc/cron.daily

Wykrywanie włamań i monitoring

  • Fail2ban: automatycznie blokuje adresy IP z powtarzającymi się nieudanymi logowaniami — niezbędny przy każdym SSH dostępnym z internetu
  • auditd: logowanie na poziomie jądra wywołań systemowych, dostępu do plików i poleceń użytkowników — dostarcza bogatych danych do SIEM
  • AIDE (Advanced Intrusion Detection Environment): tworzy kryptograficzną bazę skrótów plików w znanym, dobrym stanie i alarmuje o zmianach
  • Logwatch lub GoAccess: regularne podsumowania logów wysyłane e-mailem

Od razu przesyłaj logi na zdalny serwer syslog lub do SIEM — jeśli atakujący zdobędzie uprawnienia roota, wyczyści logi lokalne.

Wzmacnianie jądra przez sysctl

Dodaj do /etc/sysctl.d/99-hardening.conf:

net.ipv4.ip_forward = 0
net.ipv4.conf.all.accept_redirects = 0
net.ipv4.conf.all.send_redirects = 0
net.ipv4.tcp_syncookies = 1
kernel.randomize_va_space = 2
kernel.dmesg_restrict = 1
fs.protected_hardlinks = 1
fs.protected_symlinks = 1

Zastosuj poleceniem sysctl --system. Te ustawienia wyłączają przekazywanie IP, chronią przed atakami z przekierowaniami ICMP, włączają ochronę SYN cookies i wymuszają ASLR.

#Linux#server security#hardening#SSH#firewall