Thứ sáu, 14/08/2015 | 00:00 GMT+7

Cách bảo vệ server Apache với Fail2Ban trên Ubuntu 14.04

Khi vận hành một web server , điều quan trọng là phải thực hiện các biện pháp bảo mật để bảo vệ trang web và user của bạn. Bảo vệ các trang web và ứng dụng của bạn bằng các policy firewall và hạn chế quyền truy cập vào các khu vực nhất định bằng xác thực password là một điểm khởi đầu tuyệt vời để bảo mật hệ thống của bạn. Tuy nhiên, bất kỳ dấu nhắc password nào có thể truy cập đều có khả năng thu hút các nỗ lực vũ phu từ user và bot độc hại.

Cài đặt fail2ban có thể giúp giảm bớt vấn đề này. Khi user liên tục không xác thực được dịch vụ (hoặc tham gia vào hoạt động đáng ngờ khác), fail2ban có thể đưa ra lệnh cấm tạm thời đối với địa chỉ IP vi phạm bằng cách tự động sửa đổi policy firewall đang chạy. Mỗi "nhà tù" fail2ban hoạt động bằng cách kiểm tra các bản ghi được viết bởi một dịch vụ để tìm các mẫu biểu thị các lần thử không thành công. Dễ dàng cài đặt fail2ban để theo dõi log Apache bằng cách sử dụng các bộ lọc cấu hình đi kèm.

Trong hướng dẫn này, ta sẽ trình bày cách cài đặt fail2ban và cấu hình nó để giám sát log Apache của bạn để tìm các nỗ lực xâm nhập. Ta sẽ sử dụng server Ubuntu 14.04.

Yêu cầu

Trước khi bắt đầu, bạn phải cài đặt server Ubuntu 14.04 bằng account không phải root. Tài khoản này nên được cấu hình với các quyền sudo để đưa ra các lệnh quản trị. Để tìm hiểu cách cài đặt user có quyền sudo , hãy làm theo hướng dẫn cài đặt server ban đầu của ta cho Ubuntu 14.04 .

Cài đặt Apache và cấu hình xác thực password

Nếu bạn quan tâm đến việc bảo vệ server Apache của bạn bằng fail2ban , bạn có thể đã cài đặt và chạy một server . Nếu không, bạn có thể cài đặt Apache từ repository mặc định của Ubuntu bằng cách sử dụng apt .

Cập nhật index gói local và cài đặt bằng lệnh :

  • sudo apt-get update
  • sudo apt-get install apache2

Dịch vụ fail2ban rất hữu ích để bảo vệ các điểm nhập đăng nhập. Để điều này hữu ích cho cài đặt Apache, xác thực password phải được triển khai cho ít nhất một tập hợp con nội dung trên server . Bạn có thể làm theo hướng dẫn này để cấu hình bảo vệ bằng password cho server Apache của bạn .

Cài đặt Fail2Ban

Sau khi server Apache của bạn đang chạy và xác thực password được bật, bạn có thể tiếp tục và cài đặt fail2ban ( ta bao gồm tìm nạp lại repository khác ở đây trong trường hợp bạn đã cài đặt Apache ở các bước trước):

  • sudo apt-get update
  • sudo apt-get install fail2ban

Thao tác này sẽ cài đặt phần mềm. Theo mặc định, fail2ban được cấu hình để chỉ cấm các lần đăng nhập SSH không thành công. Ta cần kích hoạt một số luật sẽ cấu hình nó để kiểm tra log Apache của ta để tìm các mẫu biểu thị hoạt động độc hại.

Điều chỉnh Cài đặt Chung trong Fail2Ban

Để bắt đầu, ta cần điều chỉnh file cấu hình mà fail2ban sử dụng để xác định log ứng dụng nào cần theo dõi và những hành động cần thực hiện khi tìm thấy các mục nhập vi phạm. /etc/fail2ban/jail.conf được cung cấp là tài nguyên chính được cung cấp cho việc này.

Để thực hiện sửa đổi, ta cần sao chép file này vào /etc/fail2ban/jail.local . Điều này sẽ ngăn các thay đổi của ta không bị overrides nếu bản cập nhật gói cung cấp file mặc định mới:

  • sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local

Mở file mới được sao chép để ta có thể cài đặt theo dõi log Apache của bạn :

  • sudo nano /etc/fail2ban/jail.local

Thay đổi mặc định

Ta nên bắt đầu bằng cách đánh giá các giá trị mặc định được đặt trong file để xem chúng có phù hợp với nhu cầu của ta hay không. Chúng sẽ được tìm thấy trong phần [DEFAULT] trong file . Những mục này cài đặt policy chung và mỗi mục có thể bị overrides trong các nhà tù cụ thể.

Một trong những mục đầu tiên cần xem xét là danh sách khách hàng không phải tuân theo policy fail2ban . Điều này được cài đặt bởi chỉ thị ignoreip . Đôi khi bạn nên thêm địa chỉ IP hoặc mạng của riêng mình vào danh sách các trường hợp ngoại lệ để tránh tự khóa mình. Đây là ít vấn đề hơn với đăng nhập web server mặc dù nếu bạn có thể duy trì quyền truy cập shell, vì bạn luôn có thể đảo ngược lệnh cấm theo cách thủ công. Bạn có thể thêm các địa chỉ IP hoặc mạng bổ sung được phân cách bằng dấu cách vào danh sách hiện có:

/etc/fail2ban/jail.local
[DEFAULT]  . . . ignoreip = 127.0.0.1/8 your_home_IP 

Một mục khác mà bạn có thể cần điều chỉnh là bantime , kiểm soát số giây mà một thành viên vi phạm bị cấm. Lý tưởng nhất là đặt điều này thành một khoảng thời gian đủ dài để làm gián đoạn nỗ lực của kẻ xấu, trong khi đủ ngắn để cho phép user hợp lệ sửa chữa sai lầm. Theo mặc định, điều này được đặt thành 600 giây (10 phút). Tăng hoặc giảm giá trị này khi bạn thấy phù hợp:

/etc/fail2ban/jail.local
[DEFAULT]  . . . bantime = 3600 

Hai mục tiếp theo xác định phạm vi của các dòng log được sử dụng để xác định khách hàng vi phạm. Thời findtime chỉ định một lượng thời gian tính bằng giây và chỉ thị maxretry cho biết số lần thử được chấp nhận trong thời gian đó. Nếu khách hàng thực hiện nhiều hơn maxretry lần thử tối đa trong repository ảng thời gian được đặt bởi thời gian findtime , họ sẽ bị cấm:

/etc/fail2ban/jail.local
[DEFAULT]  . . . findtime = 3600   # These lines combine to ban clients that fail maxretry = 6      # to authenticate 6 times within a half hour. 

Cài đặt thông báo thư (Tùy chọn)

Bạn có thể bật thông báo qua email nếu bạn muốn nhận thư khi nào có lệnh cấm. Để làm như vậy, trước tiên bạn sẽ phải cài đặt MTA trên server của bạn để nó có thể gửi email. Để tìm hiểu cách sử dụng Postfix cho tác vụ này, hãy làm theo hướng dẫn này .

Sau khi cài đặt xong MTA, bạn sẽ phải điều chỉnh một số cài đặt bổ sung trong phần [DEFAULT] của file /etc/fail2ban/jail.local . Bắt đầu bằng cách cài đặt chỉ thị mta . Nếu bạn cài đặt Postfix, giống như hướng dẫn ở trên, hãy thay đổi giá trị này thành “mail”:

/etc/fail2ban/jail.local
[DEFAULT]  . . . mta = mail 

Bạn cần chọn địa chỉ email sẽ được gửi thông báo. Sửa đổi chỉ thị destemail với giá trị này. Lệnh sendername được dùng để sửa đổi trường “Người gửi” trong email thông báo:

/etc/fail2ban/jail.local
[DEFAULT]  . . . destemail = youraccount@email.com sendername = Fail2BanAlerts 

Theo cách nói của fail2ban , “hành động” là quy trình được tuân theo khi client không xác thực quá nhiều lần. Hành động mặc định (được gọi là action_ ) chỉ đơn giản là cấm địa chỉ IP khỏi cổng được đề cập. Tuy nhiên, có hai hành động được thực hiện trước khác được dùng nếu bạn đã cài đặt thư.

Bạn có thể sử dụng hành động action_mw để cấm ứng dụng client và gửi thông báo qua email đến account đã cấu hình của bạn kèm theo báo cáo “whois” về địa chỉ vi phạm. Bạn cũng có thể sử dụng hành động action_mwl , hành động này thực hiện điều tương tự, nhưng cũng bao gồm các dòng log vi phạm đã kích hoạt lệnh cấm:

/etc/fail2ban/jail.local
[DEFAULT]  . . . action = %(action_mwl)s 

Cấu hình Fail2Ban để theo dõi log Apache

Đến đây bạn đã có một số cài đặt fail2ban chung, ta có thể tập trung vào việc kích hoạt các nhà tù dành riêng cho Apache sẽ theo dõi log web server của ta để biết các mẫu hành vi cụ thể.

Mỗi tù trong file cấu hình được đánh dấu bằng tiêu đề chứa tên tù trong dấu ngoặc vuông (mọi phần trừ phần [DEFAULT] cho biết cấu hình của một tù cụ thể). Theo mặc định, chỉ có [ssh] jail được kích hoạt.

Để bật tính năng giám sát log cho các lần đăng nhập Apache, ta sẽ bật trình giam giữ [apache] . Chỉnh sửa chỉ thị enabled trong phần này để nó có nội dung là “true”:

/etc/fail2ban/jail.local
[apache]  enabled  = true port     = http,https filter   = apache-auth logpath  = /var/log/apache*/*error.log maxretry = 6 . . . 

Nếu server Apache của bạn đang ghi vào vị trí log mặc định ( /var/log/apache/error.log ) thì tù đã được cấu hình để tìm đúng vị trí. Nếu bạn đang đăng nhập vào một vị trí khác nhau, thay đổi logpath khi cần thiết. Ngoài ra, cảm thấy tự do để điều chỉnh maxretry chỉ thị hoặc thêm một findtime giá trị cho tù này nếu bạn muốn cài đặt các hạn chế khác nhau cho cụ tù này:

/etc/fail2ban/jail.local
[apache]  enabled  = true port     = http,https filter   = apache-auth logpath  = /var/log/apache/custom_log_location.log maxretry = 3 findtime = 600 . . . 

Nhà tù ở trên sẽ lo việc cấm các lỗi xác thực cơ bản. Ngoài ra còn có một số nhà tù được cấu hình sẵn khác đáng để kích hoạt (nhà tù [apache-multiport] là một nhà tù cũ không cần thiết).

Nhà tù [apache-noscript] được sử dụng để cấm các client đang tìm kiếm script trên trang web để thực thi và khai thác. Nếu bạn không sử dụng PHP hoặc bất kỳ ngôn ngữ nào khác cùng với web server của bạn , bạn có thể kích hoạt tính năng này để cấm những người yêu cầu các loại tài nguyên sau:

/etc/fail2ban/jail.local
[apache-noscript]  enabled  = true . . . 

Nhà tù [apache-overflows] được sử dụng để chặn các khách hàng đang cố gắng yêu cầu các URL dài bất thường và đáng ngờ. Đây thường là những dấu hiệu cho thấy nỗ lực khai thác Apache bằng cách cố gắng kích hoạt lỗi tràn cache . Bạn có thể kích hoạt tính năng này nếu muốn ngăn chặn các loại tấn công sau:

/etc/fail2ban/jail.local
[apache-overflows]  enabled  = true . . . 

Một số kiểm tra bổ sung có thể được thực hiện bằng cách copy paste mục nhập [apache-overflows] và sửa đổi nó một chút. Ví dụ: bạn có thể copy paste phần đó và sửa đổi tên tù và bộ lọc thành apache-badbots để ngăn chặn một số mẫu yêu cầu bot độc hại đã biết:

/etc/fail2ban/jail.local
[apache-overflows]  enabled  = true port     = http,https filter   = apache-overflows logpath  = /var/log/apache*/*error.log maxretry = 2  [apache-badbots]  enabled  = true port     = http,https filter   = apache-badbots logpath  = /var/log/apache*/*error.log maxretry = 2 

Nếu bạn không sử dụng Apache để cung cấp quyền truy cập vào nội dung web trong folder chính của user , bạn có thể copy paste lại, đồng thời thay đổi tên bộ lọc và máy giam thành apache-nohome :

/etc/fail2ban/jail.local
[apache-overflows]  enabled  = true port     = http,https filter   = apache-overflows logpath  = /var/log/apache*/*error.log maxretry = 2  [apache-badbots]  enabled  = true port     = http,https filter   = apache-badbots logpath  = /var/log/apache*/*error.log maxretry = 2  [apache-nohome]  enabled  = true port     = http,https filter   = apache-nohome logpath  = /var/log/apache*/*error.log maxretry = 2 

Cuối cùng, nếu bạn đang sử dụng Apache với PHP, bạn có thể cần kích hoạt nhà tù [php-url-fopen] , ngăn chặn các nỗ lực sử dụng một số hành vi PHP cho mục đích xấu. Bạn có thể sẽ phải thay đổi chỉ thị logpath để trỏ đến vị trí log truy cập chính xác (trên Ubuntu, vị trí mặc định là /var/log/apache2/access.log ). Bạn có thể sử dụng một mẫu tương tự như mẫu phù hợp với log lỗi trong các nhà tù khác:

/etc/fail2ban/jail.local
[php-url-fopen]  enabled = true port    = http,https filter  = php-url-fopen logpath = /var/log/apache*/*access.log 

Khi bạn hoàn tất các sửa đổi cần thiết, hãy lưu file .

Triển khai Apache Jails của bạn

Để áp dụng các thay đổi cấu hình của bạn, bạn cần phải khởi động lại dịch vụ fail2ban . Bạn có thể thực hiện bằng cách gõ:

  • sudo service fail2ban restart

Dịch vụ sẽ khởi động lại, triển khai các policy cấm khác nhau mà bạn đã cấu hình .

Nhận thông tin về Jail đã bật

Bạn có thể xem tất cả các nhà tù đã kích hoạt của bạn bằng cách sử dụng lệnh fail2ban-client :

  • sudo fail2ban-client status

Bạn sẽ thấy danh sách tất cả các nhà tù mà bạn đã kích hoạt:

Output
Status |- Number of jail: 7 `- Jail list: php-url-fopen, apache-overflows, apache-noscript, ssh, apache-badbots, apache-nohome, apache

Bạn có thể thấy rằng fail2ban đã sửa đổi các luật firewall của bạn để tạo ra một khuôn khổ cấm client . Ngay cả khi không có luật firewall trước đây, bây giờ bạn sẽ có một khuôn khổ được kích hoạt cho phép fail2ban cấm khách hàng một cách có chọn lọc bằng cách thêm chúng vào các chuỗi được xây dựng có mục đích:

  • sudo iptables -S
Output
-P INPUT ACCEPT -P FORWARD ACCEPT -P OUTPUT ACCEPT -N fail2ban-apache -N fail2ban-apache-badbots -N fail2ban-apache-nohome -N fail2ban-apache-noscript -N fail2ban-apache-overflows -N fail2ban-php-url-fopen -N fail2ban-ssh -A INPUT -p tcp -m multiport --dports 80,443 -j fail2ban-apache-nohome -A INPUT -p tcp -m multiport --dports 80,443 -j fail2ban-apache-badbots -A INPUT -p tcp -m multiport --dports 80,443 -j fail2ban-php-url-fopen -A INPUT -p tcp -m multiport --dports 80,443 -j fail2ban-apache-overflows -A INPUT -p tcp -m multiport --dports 80,443 -j fail2ban-apache-noscript -A INPUT -p tcp -m multiport --dports 80,443 -j fail2ban-apache -A INPUT -p tcp -m multiport --dports 22 -j fail2ban-ssh -A fail2ban-apache -j RETURN -A fail2ban-apache-badbots -j RETURN -A fail2ban-apache-nohome -j RETURN -A fail2ban-apache-noscript -j RETURN -A fail2ban-apache-overflows -j RETURN -A fail2ban-php-url-fopen -j RETURN -A fail2ban-ssh -j RETURN

Nếu bạn muốn xem chi tiết về các lệnh cấm đang được thực thi bởi bất kỳ nhà tù nào, có thể dễ dàng sử dụng lại fail2ban-client :

  • sudo fail2ban-client status apache
Output
Status for the jail: apache |- filter | |- File list: /var/log/apache2/error.log | |- Currently failed: 0 | `- Total failed: 0 `- action |- Currently banned: 0 | `- IP list: `- Total banned: 0

Thử nghiệm Fail2Ban Policies

Điều quan trọng là phải kiểm tra các policy fail2ban của bạn đảm bảo chúng chặn lưu lượng truy cập như mong đợi. Ví dụ, đối với dấu nhắc xác thực Apache, bạn có thể cung cấp thông tin xác thực không chính xác một số lần. Sau khi bạn đã vượt quá giới hạn, bạn sẽ bị cấm và không thể truy cập trang web. Nếu bạn cài đặt thông báo qua email, bạn sẽ thấy các thông báo về lệnh cấm trong account email bạn đã cung cấp.

Nếu bạn nhìn vào trạng thái với lệnh fail2ban-client , bạn sẽ thấy địa chỉ IP của bạn bị cấm trên trang web:

  • sudo fail2ban-client status apache
Output
Status for the jail: apache |- filter | |- File list: /var/log/apache2/error.log | |- Currently failed: 0 | `- Total failed: 12 `- action |- Currently banned: 1 | `- IP list: 111.111.111.111 `- Total banned: 1

Khi thấy ổn rằng các luật của bạn đang hoạt động, bạn có thể bỏ cấm địa chỉ IP của bạn theo cách thủ công với fail2ban-client bằng lệnh :

  • sudo fail2ban-client set apache unbanip 111.111.111.111

Đến đây bạn có thể thử xác thực lại.

Kết luận

Cài đặt fail2ban để bảo vệ server Apache của bạn khá dễ hiểu trong trường hợp đơn giản nhất. Tuy nhiên, fail2ban cung cấp rất nhiều tính linh hoạt để xây dựng các policy phù hợp với nhu cầu bảo mật cụ thể của bạn. Bằng cách xem xét các biến và mẫu trong file /etc/fail2ban/jail.local và các file mà nó phụ thuộc vào trong folder /etc/fail2ban/filter.d/etc/fail2ban/action.d , bạn có thể tìm nhiều phần để điều chỉnh và thay đổi khi nhu cầu của bạn phát triển. Tìm hiểu những kiến thức cơ bản về cách bảo vệ server của bạn với fail2ban có thể cung cấp cho bạn mức độ bảo mật tuyệt vời với nỗ lực tối thiểu.

Để tìm hiểu thêm về fail2ban , hãy xem một số liên kết sau:


Tags:

Các tin liên quan

Cách cài đặt Apache Kafka trên Ubuntu 14.04
2015-08-12
Cách thiết lập xác thực mật khẩu với Apache trên Ubuntu 14.04
2015-08-10
Cách bảo vệ chống lại DoS và DDoS với mod_evasive cho Apache trên CentOS 7
2015-07-30
Cách cài đặt LAMP (Linux, Apache, MySQL, PHP) trên Fedora 22
2015-07-08
Cách thiết lập mod_rewrite cho Apache trên Ubuntu 14.04
2015-06-27
Cách cài đặt Apache Tomcat 8 trên CentOS 7
2015-06-19
Cách cài đặt Apache Tomcat 8 trên Ubuntu 14.04
2015-06-19
Cách tạo chứng chỉ SSL trên Apache cho Debian 8
2015-06-19
Cách cài đặt Apache Tomcat 7 trên CentOS 7 qua Yum
2015-06-15
Cách cấu hình Apache để sử dụng các trang lỗi tùy chỉnh trên Ubuntu 14.04
2015-06-09