🔐 Bezpieczeństwo aplikacji webowych na serwerze Linux: Praktyczne porady
🧭 Wprowadzenie
Linux to dominująca platforma serwerowa dla aplikacji webowych. Jego bezpieczeństwo to nie tylko kwestia systemu, ale także sposobu uruchamiania i konfiguracji serwera WWW, aplikacji, uprawnień i zabezpieczeń sieciowych.
Artykuł ten przedstawia praktyczne podejście do hardeningu serwera, czyli maksymalnego ograniczenia wektorów ataku – od konfiguracji systemu po zasady DevSecOps.

🛡️ Podstawy bezpieczeństwa serwera webowego
🔒 Fundamentalne zasady:
- Zasada najmniejszych uprawnień (PoLP)
- Izolacja usług i użytkowników
- Systematyczne aktualizacje
- Monitoring logów i usług
📁 Kluczowe elementy do kontroli:
/etc/ssh/sshd_config/var/log//etc/passwd,/etc/shadow
🌐 Bezpieczna konfiguracja serwerów HTTP
📘 Apache
- Wyłącz niepotrzebne moduły (
a2dismod) - Ukryj wersję serwera:
ServerSignature Off ServerTokens Prod - Ustaw
ModSecurity+OWASP Core Rule Set - Ogranicz dostęp przez
.htaccessiRequire all denied
📘 Nginx
- Ogranicz metody HTTP:
if ($request_method !~ ^(GET|POST)$ ) { return 444; } - Ukryj wersję:
server_tokens off; - Konfiguruj nagłówki bezpieczeństwa:
add_header X-Frame-Options "DENY"; add_header X-Content-Type-Options "nosniff"; add_header Content-Security-Policy "default-src 'self'";
👤 Zarządzanie użytkownikami i uprawnieniami
👨💻 Praktyki:
- Aplikacje działają z własnym użytkownikiem (np.
www-data,nginx) - Ograniczenie katalogów przez
chrootlubsystemdProtectSystem=full - Brak dostępu roota przez SSH:
PermitRootLogin no
🔍 Sprawdzenie uprawnień:
find /var/www -type f -exec chmod 640 {} \;
find /var/www -type d -exec chmod 750 {} \;
🧑💻 Zabezpieczanie aplikacji webowych
PHP
- Wyłącz
allow_url_fopen,register_globals - Włącz
open_basedir:open_basedir = /var/www/html/
Python (Flask/Django)
- Włącz
SECURE_SSL_REDIRECT = True - Stosuj
django.middleware.security.SecurityMiddleware - Oddziel środowisko w
venv
Node.js
- Ogranicz uprawnienia procesu przez
pm2lubsystemd - Waliduj dane wejściowe (
express-validator) - Unikaj dynamicznych
evalirequire
🔐 Wdrożenie HTTPS i HSTS
📜 Certyfikaty TLS:
- Let’s Encrypt z automatyzacją (
certbot) - Wymuś przekierowanie HTTP → HTTPS
HSTS:
add_header Strict-Transport-Security "max-age=63072000; includeSubDomains; preload" always;
🛡️ Ochrona przed XSS, SQLi i CSRF
XSS
- Filtrowanie i escapowanie danych (
htmlspecialchars,DOMPurify) - Włączenie CSP
SQL Injection
- Używaj ORM (np. Django ORM, SQLAlchemy)
- Stosuj zapytania przygotowane (prepared statements)
CSRF
- Tokeny CSRF (
@csrf_protect,express-csrf) - Weryfikacja nagłówków żądań
📊 Monitorowanie, logowanie i wykrywanie incydentów
Narzędzia:
Fail2ban– blokuje brute-forceAuditd– śledzi operacje na plikachLogwatch,Logrotate– analizy i rotacja logówWazuhlubOSSEC– SIEM i alerty
⚙️ Automatyzacja hardeningu
Narzędzia:
- Ansible z playbookami bezpieczeństwa
- Lynis – audyt systemu Linux
- OpenSCAP – zgodność z politykami bezpieczeństwa
Przykład Ansible:
- name: Wyłącz SSH root
lineinfile:
path: /etc/ssh/sshd_config
regexp: '^PermitRootLogin'
line: 'PermitRootLogin no'
🧰 Zalecane narzędzia i frameworki bezpieczeństwa
| Narzędzie | Opis |
|---|---|
| ModSecurity | WAF dla Apache i Nginx |
| Fail2ban | Ochrona przed brute-force |
| Lynis | Audyt bezpieczeństwa systemu |
| Wazuh | SIEM z funkcją HIDS |
| AppArmor/SELinux | Kontrola dostępu na poziomie jądra |
| OpenVAS/Nessus | Skanowanie podatności |
✅ Podsumowanie
Zabezpieczenie aplikacji webowej na serwerze Linux wymaga podejścia warstwowego – od systemu, przez serwer HTTP, aż po kod aplikacji. Regularne aktualizacje, poprawna konfiguracja usług, monitoring oraz automatyzacja zabezpieczeń to filary, które powinien stosować każdy administrator i deweloper.






