Owncloud + Fail2Ban
Tôi chỉ nhận ra rằng ngày nay Owncloud không ngăn chặn các cuộc tấn công brute-force. Tuy nhiên, có vẻ như các nhà phát triển đã nhận thức được điều này và sẽ đề xuất một hệ thống captcha trong bản phát hành tiếp theo. Trong thời gian chờ đợi, tôi khuyên bạn nên thiết lập một bản vá tại nhà để phiên bản Owncloud của chúng tôi hoạt động với Fail2Ban.
Tạo một tệp nhật ký cụ thể
1
2
|
touch /var/log/owncloud–fail.log
chown www–data:www–data /var/log/owncloud–fail.log
|
Đã sửa đổi mã nguồn để ghi lỗi kết nối. Chúng tôi chỉnh sửa /owncloud/lib/user/database.php.
Trong dòng 202, trong hàm checkPassword, ngay trước "return false", chúng tôi thêm mã sau
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);
|
Sửa đổi này liên quan đến lỗi mật khẩu đối với thông tin đăng nhập cơ sở dữ liệu hiện có. Nếu bạn cũng muốn ghi lại lỗi cho tất cả các lần đăng nhập, bạn phải thêm cùng một mã trước dấu “trả về sai” cuối cùng trong phần “khác” của hàm. Chúng tôi chỉ sửa đổi nhận xét.
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);
|
Chỉnh sửa: Kể từ phiên bản 6 của Owncloud, tệp được đặt trong /var/www/owncloud/lib/private/user/database.php. Trong if ($ row) là 2 giá trị trả về false thay vì một. Hoàn thành cả hai theo cùng một cách.
Bây giờ chúng ta chuyển sang tạo nhà tù Fail2ban trong /etc/fail2ban/filter.d/owncloud.conf
1
2
3
|
# Owncloud jail
[Definition]
failregex = <HOST>$
|
Chúng tôi kiểm tra rằng regex khớp tốt. (Thực hiện một lỗi đăng nhập trên giao diện phía trước)
1
|
fail2ban–regex /var/log/owncloud–fail.log /etc/fail2ban/filter.d/owncloud.conf
|
Chúng tôi thêm nhà tù này vào conf trong /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
|
Khởi động lại fail2ban để tính đến
1
|
/etc/init.d/fail2ban restart
|
Bạn phải ghi nhớ rằng các dòng trong php sẽ phải được viết lại mỗi khi Owncloud được cập nhật.