Bender oc

Bender – LAMP (Linux, Apache, Mysql, Php)

Serwisy http i jego odpowiednik z szyfrowaniem https są najczęściej wykorzystywanymi serwisami w internecie przez użytkowników końcowych. Dzisiaj przedstawię instalację i konfigurację apache na debianie.

0. Linux

1. Instalacja

1.1. Apache

# aptitude install apache2

1.2. Mysql

 # aptitude install mysql-server mysql-client

Podczas instalacji zostaniemy poproszeni o ustawienie hasła root’a dla serwera MySQL.  To NIE jest hasło root’a do serwera.

1.3. PHP5

 # aptitude install php5 php5-mysql libapache2-mod-php5

2. Konfiguracja tego wszystkiego

2.1. Apache

2.1.0. FYI

Aby każda modyfikacja była zaaplikowana należy przeładować konfigurację serwera

# service apache2 reload

2.1.1. Wyłączenie statusu serwera

# a2dismod status

2.1.2. Wyłączenie autoindeksowania katalogów

Moduł obsługuje generowanie listy plików w katalogu jak nie ma strony do wyświetlenia. W przypadku wyłączenia tego modułu dostajemy błąd 404 – Not Found.

# a2dismod autoindex

2.1.3. Wyłączenie cgi(d)

Jak nie korzystamy z cgi to dobrą zasadą będzie wyłączenie jego

# a2dismod cgid
# a2dismod cgi

2.1.4. Zmienienie stron standardowych

Standardowe strony w apache’u to:

index.html index.cgi index.pl index.php index.xhtml index.htm

Jeżeli nie wykorzystujemy któryś z aplikacji webowych warto by było usunięcie ich z listy stron standardowych.

Możemy to zrobić po przez modyfikację pliku:

/etc/apache2/mods-enabled/dir.conf

2.1.5. Włączenie Rewrite

Moduł ten pozwala na zmianę brzydkich linków .php z ? & na ładniejsze oraz na zmienianiu zapytań. Często jest wykorzystywany przez serwisy webowe (np. WordPress).

# a2enmod rewrite

2.1.6. Włączenie modu headers

Mod ten umożliwia modyfikowanie nagłówków http. Może on być wymagany w przypadku niektórych opcji.

# a2enmod headers

2.1.7. Modyfikacja konfiguracji security

Znajduje się ona w

/etc/apache2/conf.d/security

2.1.8. Minimalizacja wyświetlanych danych po przez zmianę tokena

Standardowy token zawiera dość dużo danych np.

Apache/2.2.22 (Debian) Server at bender.nerull7.info Port 80

Wystarczy zmienić opcję ServerToken na:

ServerToken Prod

aby ukryć wersję apache’a i serwera. Np. wynik końcowy

Apache Server at bender.nerull7.info Port 80

Możemy pójść krok dalej i ukryć wszystko po przez ustawienie:

ServerSignature Off

2.1.9. Blokowanie XSS’a

Ta opcja wymaga modu headers. Należy odkomentować poniższą linię:

Header set X-XSS-Protection: "1; mode=block"

2.1.10. Zabezpieczenie przed clickjacking’iem

Albo inaczej umieszczaniem naszej strony w jakiejś ramce. Ta opcja wymaga modu headers. Należy odkomentować poniższą linię:

Header set X-Frame-Options: "sameorigin"

2.1.11. Zablokowanie dostępu do root’a

Dobrym zachowaniem będzie zablokowanie dostępu do root’a systemowego i nadawanie uprawnień do odpowiednich katalogów w miarę potrzeby. Aby zablokować dostęp do root’a należy odkomentować następujące linie:

<Directory />
 AllowOverride None
 Order Deny,Allow
 Deny from all
</Directory>

Apache będzie miał dostęp do /var/www ponieważ uprawnienia do niego zostały nadpisane dla danego folderu w innym pliku konfiguracyjnym.

2.2. PHP

Konfiguracja php znajduje się w pliku dla apache’a:

/etc/php5/apache2/php.ini

2.2.1. Ukrycie php’a

PHP standardowo w nagłówku dodaje informację o sobie jak otwieramy jakąś stronę wygenerowaną przez php. Np.

X-Powered-By: PHP/5.4.4-14+deb7u9

Aby ten nagłówek wyłączyć wystarczy przestawić opcję expose_php na:

expose_php = Off

2.2.2. Maksymalny rozmiar przesyłanych plików

Standardowo php ma ustawiony limit dla wielkości POST’a 8MB i wielkości jednego przesyłanego pliku 2MB. To ograniczenie może być za małe dla usług typu owncloud. Możemy to przestawić po przez zmianę parametrów:

post_max_size = 1024M
upload_max_filesize = 512M

2.2.3. Maksymalna ilość przesyłanych plików jednym POST’em

Jak z jakiegoś powodu potrzebujesz przesyłać na raz więcej niż 20 plików należy przestawić opcję:

max_file_uploads = 20

2.3. MySQL

Tutaj nie mam żadnych pomysłów/zastrzeżeń co do konfiguracji standardowej na debianie, więc radzę zostawić konfigurację MySQL’a w spokoju.

3. OpenSSL

Początkowo zamierzałem użyć GnuTLS’a lecz niestety nie da się ustawić wszystkich funkcji dobrych praktyk ssl.

3.1. Instalacja

Włączamy moduł po przez polecenie

# a2enmod ssl

3.2. Konfiguracja

Włączamy default’ową stronę tls po przez polecenie:

# a2enmod ssl
# a2ensite default-ssl

Modyfikujemy plik

/etc/apache2/mods-enabled/ssl.conf

Z poniższymi parametrami:

SSLHonorCipherOrder On
SSLProtocol all -SSLv2 -SSLv3
SSLCipherSuite ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA256:DHE-RSA-AES256-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA:DHE-RSA-AES256-GCM-SHA:ECDHE-RSA-AES256-SHA384:DHE-RSA-AES256-SHA384:ECDHE-RSA-AES256-SHA256:DHE-RSA-AES256-SHA256:ECDHE-RSA-AES256-SHA:DHE-RSA-AES256-SHA:ECDHE-RSA-AES128-GCM-SHA384:DHE-RSA-AES128-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA:DHE-RSA-AES128-GCM-SHA:ECDHE-RSA-AES128-SHA384:DHE-RSA-AES128-SHA384:ECDHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:DHE-RSA-AES128-SHA:!aNULL:!eNULL:!EXPORT:!DES:!MD5:!PSK:!RC4

Powyższe ustawienia zapewniają Forward Secrecy ale nie będą działały na IE na Win XP. Jeżeli z jakiegoś niewytłumaczalnego powodu potrzebujemy obsługę Windowsa XP należy włączyć szyfrowanie RC4 lub 3DES…

Modyfikujemy plik

/etc/apache2/sites-enabled/default-ssl

podajemy w nim miejsce gdzie jest certyfikat i klucz serwera

SSLCertificateFile /etc/apache2/mysitename.crt
SSLCertificateKeyFile /etc/apache2/mysitename.key

Jeżeli nie mamy certyfikatu możemy go samemu wygenerować co prawda będziemy mieli błędy certyfikatu w przeglądarce.

# openssl req -x509 -nodes -days 365 -newkey rsa:4096 -keyout mysitename.key -out mysitename.crt

3.3. HTTP Strict Transport Security

Aby zabezpieczyć użytkowników przed atakiem sslstrip należy ustawić w nagłówku informację iż powinni naszą stronę odwiedzać tylko przy pomocy SSL’a.

UWAGA: Jeżeli włączysz tą opcję i nie będziesz miał HTTPS’a skonfigurowanego zablokujesz dostęp do swojej strony na czas podany w max-age. W tym przypadku jest to 1 rok!

Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains"

3.4. Przekierowanie na SSL

Przeglądarki standardowo odwiedzają strony po http aby przestawić ich na https należy im podać informację, że strona została permanentnie przeniesiona. Najłatwiej jest to zrobić w ten sposób:

Tworzymy plik w /etc/apache2/sites-available o nazwie redirect2ssl.conf (w zasadzie może być inna nazwa). Z zawartością:

<VirtualHost *:80>
 ServerName mysite.example.com
 Redirect permanent / https://mysite.example.com/
</VirtualHost>

Gdzie zamieniamy mysite.example.com na adres naszej strony. Teraz pozostało nam wyłączenie standardowej konfiguracji strony http apache’a i włączenie naszej reguły.

# a2dissite 000-default.conf
# a2ensite redirect2ssl.conf

Teraz wystarczy zrestartować serwer i po sprawie

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *