Jak zabezpieczyć dostęp do wybranych aplikacji, używając .htaccess?

Trochę o możliwościach konfiguracyjnych apache2 i bezpieczeństwie korzystania z otwartych WiFi.

Opis problemu

Mam w swojej małej spółce różne serwery i aplikacje. Czasami także pracuje nad czymś dla klienta, a czasami muszę po prostu skorzystać z publicznej sieci WiFi, bo uwielbiam pracować rozwalony w hamaku nad Odrą.

Bardzo często pracuje nad aplikacjami, które mają podatności i które naprawiam, albo aplikacjami, które podejrzewam o posiadanie podatności, takich jak SQL Injection czy Remote Code Execution. Dosyć często stawiam te aplikacje na lokalnym serwerze WWW i bardzo bym nie chciał wrócić z pracy w plenerze z prezentem w postaci backdoora. A więc jak w przypadku sexu, czasami potrzeba zabezpieczenia, ponieważ nie chcę żeby ktoś widział, co mam pod spodem. Jak to zrobić?

Rozwiązanie problemu

Otóż jak wiemy, kontrola dostępu, a w tym to, które adresy IP są dozwolone, a które nie, może się odbywać za pomocą pliku .htaccess w przypadku serwera Apache. Tylko jest jeden mały problem. Ta kontrola jest domyślnie wyłączona, a więc ustawienia dostępu z pliku .htaccess nie są brane pod uwagę.

Jak zmienić tą sytuację? Wystarczy wyedytować plik /etc/apache2/apache2.conf i odnaleźć w nim linijki:


<Directory /var/www/>
    Options Indexes FollowSymLinks
    AllowOverride None
    Require all granted
</Directory>

oraz zmienić je na:


<Directory /var/www/>
    Options Indexes FollowSymLinks
    AllowOverride All
    Require all granted
</Directory>

Po zapisaniu zmian restartujemy serwer apache2:


adrian@adrian-K55VM:~$ sudo systemctl restart apache2

I na koniec w katalogu /var/www/html/ tworzymy plik .htaccess:



adrian@adrian-K55VM:~$ sudo touch /var/www/html/.htaccess
adrian@adrian-K55VM:~$ sudo nano /var/www/html/.htaccess

Aby dodać restrykcje dla określonych adresów IP lub adresów w danej podsieci, wpisujemy do tego pliku:



Require ip 10 172.192.168

Ale jeśli chcemy zablokować w całości dostęp z zewnątrz, to wpisujemy:



Require local

W tym przypadku są dopuszczone wszystkie połączenia z localhost i zabronione wszystkie inne połączenia, w tym połączenia z sieci lokalnej. Oczywiście ten plik możemy dopasować, dodając do niego obsługę innych adresów IP, na przykład:



Require ip 10.1.2.3
# OR
Require ip 10.1
# OR
Require ip 10.1.0.0/16
# OR
Require ip 10.1.0.0/255.255.0.0
# OR
Require ip ::1

Jak widać, plik .htaccess dopuszcza wielokrotne użycie dyrektywy Require ip.