Zacznijmy od instalacji Apache2, serwera usługi WWW (http oraz https), podobnie jak Nginx. Dla mnie najważniejszą różnicą jest to, że Nginx znacznie lepiej używa zasobów (jest mniej zasobo-żerny) jeżeli chodzi o serwowanie statycznego kontentu (np html+css+js+obrazki). Natomiast jeżeli chodzi o kontent dynamiczny (np. PHP) sytuacja jest inna, ponieważ Nginx nie potrawi przetwarzać skryptów php wewnątrz swojego procesu, musi je przesyłać do zewnętrzego interpretatora np. php-fpm. Dlatego jeżeli planujecie korzystać z rozwiązań opartych na PHP (np. WordPress, Joomla, Drupala), i zależy wam na możliwości definiowania uprawnień do przekierowań z poziomu np. ftp (za pomocą pliku .htaccess) okazuje się, że Apache2 jest lepszym rozwiązaniem. Wiedząc dlaczego Apache2, a nie jednak lekki Nginx zacznijmy naszą instalację.
- Instalacja pakietów jako uprawniony użytkownik
apt-get install apache2 apache2-doc apache2-utils
2. Aktualizujemy politykę firewall, dodając do niej porty, z których korzysta Apache2
ufw allow 80/tvp
ufw allow 443/tcp
ufw reload
3. Sprawdźmy czy Apache2 działa poprawnie, wejdźmy z poziomu przeglądarki na adres Twojego serwera, naszym oczom powinna ukazać się strona Apache2 z danymi oraz napisem: „It works!”
http://adres_twojego_serwera
4. Usuńmy domyślną stronę, nie jest ona potrzeba, w zależności od konfiguracji strona ta wyświetla się przy błędach 404 lub przy wpisaniu sub-domeny nie istniejącej
a2dissite 000-default.conf
5. Utwórzmy katalogi i konfigurację dla Naszej strony oraz włączmy ją w Apache2
# utwórzmy sobie strukturę, w której będziemy trzymać nasze strony
mkdir -p /var/www/nasza_nazwa/public_html
mkdir /var/www/nasza_nazwa/logs
# utwórzmy plik konfiguracji zgodnie z katalogami przygotowanymi wcześniej
nano /etc/apache2/sites-available/nasza_nazwa.conf
<VirtualHost *:80>
ServerAdmin webmaster@nasza_domena
ServerName nasza_domena
ServerAlias www.nasza_domena
DocumentRoot /var/www/nasza_nazwa/public_html/
ErrorLog /var/www/nasza_nazwa/logs/error.log
CustomLog /var/www/nasza_nazwa/logs/access.log combined
</VirtualHost>
a2ensite nasza_nazwa.conf
systemctl reload apache2
6. Zabezpieczmy trochę naszego Apache2
# Wyłączmy sygnatury serwera, aby atakujący nie znał dokładnej wersji
sed -i -e "s/^ServerSignature OS*.*\$/ServerSignature Off/" '/etc/apache2/conf-available/security.conf'
sed -i -e "s/^ServerTokens OS*.*\$/ServerTokens Prod/" '/etc/apache2/conf-available/security.conf'
# wyłączmy listowanie plików i podążanie za linkami symbolicznymi
nano /etc/apache2/conf-available/security.conf
# należy odnaleźć linię zaczynającą się od :<Directory /var/www/>
# pod nią zamienić Options Indexes FollowSymLinks
# na Options -Indexes
# jeżeli planujemy korzystać z plików .htaccess (to był powód dlaczego wybrałem Apache2)
# zamieniamy następna linię zaczynającą się od: AllowOverride None
# na AllowOverride All
# po zmianie fragment kodu, który zmienialiśmy wygląda tak
<Directory /var/www/>
Options -Indexes
AllowOverride All
Require all granted
</Directory>
7. Instalacja dodatkowego modułu do bezpieczeństwa
apt-get install libapache2-mod-security2
8. Konfiguracja modułu bezpieczeństwa (w sumie pakiet zawiera bardzo dużo różnych reguł, dlatego nie ma potrzeby na magiczne wstrzykiwanie go, moduł przy instalacji robi to sam)
# dla pewności uruchomimy tester czy wszystko jest ok
apache2ctl -t
# jeżeli polecenie zwróci "Sytanx: OK", jeżeli nie popełniliśmy gdzieś błąd i musimy go skorygować
systemctl restart apache2