Własna chmura + Fail2Ban
Dopiero dzisiaj zdaję sobie sprawę, że Owncloud natywnie nie zapobiega atakom brute-force. Wygląda jednak na to, że deweloperzy są tego świadomi i zaproponują system captcha w kolejnym wydaniu. W międzyczasie sugeruję skonfigurowanie domowej łatki, aby nasza instancja Owncloud działała z Fail2Ban.
Tworzenie określonego pliku dziennika
1
2
|
touch /var/log/owncloud–fail.log
chown www–data:www–data /var/log/owncloud–fail.log
|
Zmodyfikowany kod źródłowy do rejestrowania błędów połączenia. Edytujemy /owncloud/lib/user/database.php.
W linii 202, w funkcji checkPassword, tuż przed „return false” dodajemy następujący kod
1
2
3
4
5
6
|
$today = new DateTime();
date_timezone_set($today, timezone_open(‘Europe/Paris’));
$IPClient= $_SERVER[‘REMOTE_ADDR’];
$logAuth = fopen(‘/var/log/owncloud-fail.log’, ‘a+’);
fputs($logAuth, date_format($today, ‘Y/m/d H:i:s’) . » Password check failed for: t » . $IPClient . « n »);
fclose($logAuth);
|
Ta modyfikacja dotyczy błędów haseł dla istniejących loginów bazy danych. Jeśli chcesz również rejestrować błędy dla wszystkich logowań, musisz dodać ten sam kod przed ostatnim „return false” w części „else” funkcji. Po prostu modyfikujemy komentarz.
1
2
3
4
5
6
|
$today = new DateTime();
date_timezone_set($today, timezone_open(‘Europe/Paris’));
$IPClient= $_SERVER[‘REMOTE_ADDR’];
$logAuth = fopen(‘/var/log/owncloud-fail.log’, ‘a+’);
fputs($logAuth, date_format($today, ‘Y/m/d H:i:s’) . » Invalid username: t » . $IPClient . « n »);
fclose($logAuth);
|
Edycja: Od wersji 6 Owncloud plik znajduje się w /var/www/owncloud/lib/private/user/database.php. W if (wiersz $) jest 2 zwróć fałsz zamiast jedynki. Wypełnij oba w ten sam sposób.
Przechodzimy teraz do tworzenia więzienia Fail2ban w /etc/fail2ban/filter.d/owncloud.conf
1
2
3
|
# Owncloud jail
[Definition]
failregex = <HOST>$
|
Testujemy, czy wyrażenie regularne dobrze pasuje. (Zrób błąd logowania na przednim interfejsie)
1
|
fail2ban–regex /var/log/owncloud–fail.log /etc/fail2ban/filter.d/owncloud.conf
|
Dodajemy to więzienie do pliku konfiguracyjnego /etc/fail2ban/jail.conf
1
2
3
4
5
6
|
[owncloud]
enabled = true
port = http,https
filter = owncloud
logpath = /var/log/owncloud–fail.log
maxretry = 3
|
Restart fail2ban do wzięcia pod uwagę
1
|
/etc/init.d/fail2ban restart
|
Musisz pamiętać, że wiersze w php będą musiały zostać przepisane za każdym razem, gdy Owncloud jest aktualizowany.