Thứ tư, 07/05/2014 | 00:00 GMT+7

Cách bảo vệ SSH bằng Fail2Ban trên Ubuntu 14.04

Mặc dù kết nối với server của bạn thông qua SSH có thể rất an toàn, nhưng bản thân daemon SSH là một dịch vụ phải được tiếp xúc với internet để hoạt động bình thường. Điều này đi kèm với một số rủi ro cố hữu và tạo ra một vectơ tấn công cho những kẻ tấn công.

Bất kỳ dịch vụ nào được tiếp xúc với mạng đều là mục tiêu tiềm năng theo cách này. Nếu bạn chú ý đến log ứng dụng cho các dịch vụ này, bạn sẽ thường thấy các nỗ lực đăng nhập lặp đi lặp lại, có hệ thống đại diện cho các cuộc tấn công bạo lực của user và bot như nhau.

Một dịch vụ được gọi là fail2ban có thể giảm thiểu vấn đề này bằng cách tạo các luật có thể tự động thay đổi cấu hình firewall iptables của bạn dựa trên số lần đăng nhập không thành công được định nghĩa . Điều này sẽ cho phép server của bạn phản hồi các nỗ lực truy cập bất hợp lệ mà không có sự can thiệp của bạn.

Trong hướng dẫn này, ta sẽ trình bày cách cài đặt và sử dụng fail2ban trên server Ubuntu 14.04.

Cài đặt Fail2Ban trên Ubuntu 14.04

Quá trình cài đặt công cụ này rất đơn giản vì group đóng gói Ubuntu duy trì một gói trong repositories lưu trữ mặc định.

Trước tiên, ta cần cập nhật index gói local của bạn và sau đó ta có thể sử dụng apt để download và cài đặt gói:

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

Như bạn thấy , việc cài đặt là không đáng kể. Bây giờ ta có thể bắt đầu cấu hình tiện ích để sử dụng cho riêng mình.

Cấu hình Fail2Ban với Cài đặt dịch vụ của bạn

Dịch vụ fail2ban giữ các file cấu hình của nó trong folder /etc/fail2ban . Có một file có giá trị mặc định là jail.conf .

Vì file này có thể được sửa đổi bằng cách nâng cấp gói, ta không nên chỉnh sửa file này tại chỗ mà nên sao chép file để ta có thể áp dụng các thay đổi của bạn một cách an toàn. Để hai file này hoạt động cùng nhau thành công, cách tốt nhất là chỉ đưa các cài đặt bạn muốn overrides vào file jail.local . Tất cả các tùy chọn mặc định sẽ được lấy từ file jail.conf .

Mặc dù ta chỉ nên bao gồm các sai lệch so với mặc định trong file jail.local , nhưng việc tạo file jail.local dựa trên file jail.conf hiện có sẽ dễ dàng hơn. Vì vậy, ta sẽ sao chép file đó, với nội dung được chú thích, làm cơ sở cho file jail.local . Bạn có thể thực hiện việc này bằng lệnh :

  • awk '{ printf "# "; print; }' /etc/fail2ban/jail.conf | sudo tee /etc/fail2ban/jail.local

Sau khi file được sao chép, ta có thể mở file jail.conf root để xem cách mọi thứ được cài đặt theo mặc định

  • sudo nano /etc/fail2ban/jail.conf

Trong file này, có một số cài đặt bạn có thể cần điều chỉnh. Cài đặt nằm trong phần [DEFAULT] sẽ được áp dụng cho tất cả các dịch vụ được bật cho fail2ban không bị overrides trong phần riêng của dịch vụ.

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

Các ignoreip cài đặt cấu hình các địa chỉ nguồn mà bỏ qua của fail2ban. Theo mặc định, nó được cấu hình để không cấm bất kỳ lưu lượng nào đến từ máy local . Bạn có thể thêm địa chỉ bổ sung để bỏ qua bằng cách thêm một [DEFAULT] phần với một ignoreip cài đặt theo nó vào jail.local file . Bạn có thể thêm các địa chỉ bổ sung bằng cách nối chúng vào cuối chỉ thị, được phân tách bằng dấu cách.

/etc/fail2ban/jail.conf
[DEFAULT] . . . bantime = 600 . . . 

Tham số bantime đặt khoảng thời gian mà khách hàng sẽ bị cấm khi họ không xác thực chính xác. Điều này được đo bằng giây. Theo mặc định, giá trị này được đặt thành 600 giây hoặc 10 phút.

/etc/fail2ban/jail.conf
[DEFAULT] . . . findtime = 600 maxretry = 3 . . . 

Hai tham số tiếp theo mà bạn muốn chú ý là thời findtime và thời maxretry . Những điều này làm việc cùng nhau để cài đặt các điều kiện mà khách hàng bị phát hiện là user bất hợp lệ nên bị cấm.

Biến maxretry đặt số lần thử mà khách hàng phải xác thực trong repository ảng thời gian được xác định bởi findtime , trước khi bị cấm. Với cài đặt mặc định, dịch vụ fail2ban sẽ cấm một ứng dụng client cố gắng đăng nhập không thành công 3 lần trong vòng 10 phút.

/etc/fail2ban/jail.conf
[DEFAULT] . . . destemail = root@localhost sendername = Fail2Ban mta = sendmail . . . 

Bạn cần đánh giá destemail , sendername , và mta cài đặt nếu bạn muốn thông báo qua email configure. Tham số destemail đặt địa chỉ email sẽ nhận thư cấm. Tên người sendername đặt giá trị của trường "Từ" trong email. Tham số mta cấu hình dịch vụ thư nào sẽ được sử dụng để gửi thư. , hãy thêm chúng vào file jail.local , dưới tiêu đề [DEFAULT] và đặt thành các giá trị thích hợp nếu bạn muốn điều chỉnh chúng.

/etc/fail2ban/jail.conf
[DEFAULT] . . . action = $(action_)s . . . 

Tham số này cấu hình hành động mà fail2ban thực hiện khi nó muốn thực hiện lệnh cấm. Giá trị action_ được xác định trong file ngay trước tham số này. Hành động mặc định là chỉ cần cấu hình firewall để từ chối lưu lượng truy cập từ server vi phạm cho đến khi hết thời gian cấm.

Nếu bạn muốn cấu hình cảnh báo qua email, hãy thêm hoặc bỏ ghi chú mục action vào file jail.local và thay đổi giá trị của nó từ action_ thành action_mw . Nếu bạn muốn email bao gồm các dòng log liên quan, bạn có thể thay đổi nó thành action_mwl . Đảm bảo rằng bạn đã cấu hình cài đặt thư thích hợp nếu bạn chọn sử dụng cảnh báo thư.

Cài đặt nhà tù cá nhân

Cuối cùng, ta đến phần của file cấu hình liên quan đến các dịch vụ riêng lẻ. Chúng được chỉ định bởi các tiêu đề phần, như [ssh] .

Mỗi phần trong số này có thể được bật bằng cách bỏ ghi chú tiêu đề trong jail.local và thay đổi dòng enabled thành “true”:

/etc/fail2ban/jail.local
[jail_to_enable] . . . enabled = true . . . 

Theo mặc định, dịch vụ SSH được bật và tất cả các dịch vụ khác đều bị tắt.

Các phần này hoạt động bằng cách sử dụng các giá trị được đặt trong phần [DEFAULT] làm cơ sở và sửa đổi chúng nếu cần. Nếu bạn muốn overrides bất kỳ giá trị nào, bạn có thể thực hiện bằng cách thêm phần của dịch vụ thích hợp vào jail.local và sửa đổi các giá trị của nó.

Một số cài đặt khác được đặt ở đây là những filter sẽ được sử dụng để quyết định xem một dòng trong một bản ghi cho thấy một xác thực thất bại và logpath mà nói fail2ban nơi các bản ghi cho rằng dịch vụ cụ thể được đặt.

Giá trị filter thực sự là một tham chiếu đến một file nằm trong folder /etc/fail2ban/filter.d , với phần mở rộng .conf của nó đã bị xóa. Các file này chứa các biểu thức chính quy xác định xem một dòng trong log có phải là một lần xác thực không thành công hay không. Ta sẽ không trình bày sâu về các file này trong hướng dẫn này, vì chúng khá phức tạp và các cài đặt được định nghĩa phù hợp với các dòng thích hợp.

Tuy nhiên, bạn có thể biết loại bộ lọc nào có sẵn bằng cách xem xét folder đó:

  • ls /etc/fail2ban/filter.d

Nếu bạn thấy file có vẻ liên quan đến dịch vụ bạn đang sử dụng, bạn nên mở file đó bằng editor . Hầu hết các file đều được comment khá tốt và ít nhất bạn cũng có thể biết được loại tình trạng mà tập lệnh được thiết kế để bảo vệ. Hầu hết các bộ lọc này đều có các phần thích hợp (bị vô hiệu hóa) trong file jail.conf mà ta có thể bật trong file jail.local nếu muốn.

Ví dụ: giả sử rằng ta đang cung cấp một trang web bằng Nginx và nhận ra rằng một phần được bảo vệ bằng password của trang web của ta đang bị tấn công khi đăng nhập. Ta có thể yêu cầu fail2ban sử dụng file nginx-http-auth.conf để kiểm tra điều kiện này trong file /var/log/nginx/error.log .

Điều này thực sự đã được cài đặt trong một phần có tên [nginx-http-auth] trong file /etc/fail2ban/jail.conf của ta . Ta chỉ cần bỏ ghi chú phần đó trong file jail.local và lật tham số enabled để bảo vệ dịch vụ của ta :

/etc/fail2ban/jail.local
. . . [nginx-http-auth]  enabled = true . . . 

Nếu bạn bật điều này, bạn cần khởi động lại dịch vụ fail2ban của bạn đảm bảo các luật của bạn được xây dựng chính xác.

Để tất cả chúng cùng nhau

Đến đây bạn đã hiểu ý tưởng cơ bản đằng sau fail2ban, hãy chạy qua một cài đặt cơ bản.

Ta sẽ cấu hình policy tự động cấm cho SSH và Nginx, giống như ta đã mô tả ở trên. Ta muốn fail2ban gửi email cho ta khi IP bị cấm.

Đầu tiên, hãy cài đặt tất cả các phần mềm có liên quan.

Nếu bạn chưa có nó, bạn cần nginx, vì ta sẽ theo dõi log của nó và bạn cần sendmail để gửi thông báo cho ta . Ta cũng sẽ lấy iptables-persistent để cho phép server tự động cài đặt các luật firewall của ta khi khởi động. Chúng có thể được lấy từ repository mặc định của Ubuntu:

  • sudo apt-get update
  • sudo apt-get install nginx sendmail iptables-persistent

Dừng dịch vụ fail2ban trong giây lát để ta có thể cài đặt firewall cơ sở mà không cần các luật mà nó thêm vào:

  • sudo service fail2ban stop

Cài đặt một firewall cơ sở

Khi điều đó hoàn tất, ta nên triển khai firewall mặc định. Bạn có thể tìm hiểu cách cấu hình firewall iptables trên Ubuntu 14.04 tại đây. Ta sẽ chỉ tạo một firewall cơ bản cho hướng dẫn này.

Ta sẽ yêu cầu nó cho phép các kết nối đã cài đặt , lưu lượng do chính server tạo ra, lưu lượng dành cho SSH và các cổng web server của ta . Ta sẽ bỏ tất cả các lưu lượng truy cập khác. Ta có thể cài đặt firewall cơ bản này bằng lệnh :

  • sudo iptables -A INPUT -i lo -j ACCEPT
  • sudo iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
  • sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT
  • sudo iptables -A INPUT -p tcp -m multiport --dports 80,443 -j ACCEPT
  • sudo iptables -A INPUT -j DROP

Các lệnh này sẽ thực hiện policy trên. Ta có thể xem các luật firewall hiện tại của bạn bằng lệnh :

  • sudo iptables -S
Output
-P INPUT ACCEPT -P FORWARD ACCEPT -P OUTPUT ACCEPT -A INPUT -i lo -j ACCEPT -A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT -A INPUT -p tcp -m tcp --dport 22 -j ACCEPT -A INPUT -p tcp -m tcp --dport 80 -j ACCEPT -A INPUT -j DROP

Bạn có thể lưu các bức firewall để chúng tồn tại sau khi khởi động lại bằng lệnh :

  • sudo dpkg-reconfigure iptables-persistent

Sau đó, bạn có thể khởi động lại fail2ban để thực hiện các luật gói:

  • sudo service fail2ban start

Ta có thể xem các luật firewall hiện tại của bạn bằng lệnh :

  • sudo iptables -S
Output
-P INPUT ACCEPT -P FORWARD ACCEPT -P OUTPUT ACCEPT -N fail2ban-ssh -A INPUT -p tcp -m multiport --dports 22 -j fail2ban-ssh -A INPUT -i lo -j ACCEPT -A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT -A INPUT -p tcp -m tcp --dport 22 -j ACCEPT -A INPUT -p tcp -m tcp --dport 80 -j ACCEPT -A INPUT -j DROP -A fail2ban-ssh -j RETURN

Ta có policy mặc định cho từng chuỗi của bạn và sau đó là năm luật cơ bản mà ta đã cài đặt . Trong màu đỏ, ta cũng có cấu trúc mặc định được cài đặt bởi fail2ban vì nó đã thực hiện các policy cấm SSH theo mặc định. Những điều này có thể hiển thị lúc đầu hoặc không, vì đôi khi fail2ban không thêm cấu trúc cho đến khi lệnh cấm đầu tiên được thực hiện.

Điều chỉnh cấu hình Fail2ban

Bây giờ, ta cần cấu hình fail2ban bằng cách sử dụng các cài đặt mà ta muốn. Mở file jail.local :

  • sudo nano /etc/fail2ban/jail.local

Ta có thể đặt thời gian cấm nghiêm ngặt hơn ở đây. Tìm và bỏ ghi chú tiêu đề [DEFAULT] . Trong tiêu đề mặc định, hãy thay đổi cài đặt bantime để dịch vụ của ta cấm khách hàng trong nửa giờ:

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

Ta cũng cần cấu hình thông tin email cảnh báo của bạn . Đầu tiên, hãy tìm tham số destemail , tham số này cũng phải nằm dưới tiêu đề [DEFAULT] . Nhập địa chỉ email mà bạn muốn sử dụng để thu thập các thư này:

/etc/fail2ban/jail.local
[DEFAULT] . . . destemail = admin@example.com . . . 

Bạn có thể đặt tên người sendername thành tên khác nếu muốn. Tuy nhiên, thật hữu ích khi có một giá trị có thể được lọc dễ dàng bằng dịch vụ thư của bạn, nếu không hộp thư đến thông thường của bạn có thể tràn ngập các cảnh báo nếu có nhiều lần thử từ nhiều nơi khác nhau.

Di chuyển xuống dưới, ta cần điều chỉnh thông số action thành một trong các hành động gửi email cho ta . Các lựa chọn là giữa action_mw đưa ra lệnh cấm và sau đó gửi email cho ta báo cáo “whois” về server vi phạm hoặc action_mwl thực hiện điều trên, nhưng cũng gửi email các dòng log liên quan.

Ta sẽ chọn action_mwl vì các dòng log sẽ giúp ta khắc phục sự cố và thu thập thêm thông tin nếu có vấn đề:

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

Chuyển sang phần SSH của ta , nếu ta muốn điều chỉnh số lượng của những nỗ lực không thành công nên được cho phép trước khi lệnh cấm được cài đặt , bạn có thể chỉnh sửa maxretry nhập cảnh. Nếu bạn đang sử dụng một cổng không phải là “22”, bạn cần điều chỉnh thông số port một cách thích hợp. Như ta đã nói trước đây, dịch vụ này đã được kích hoạt, vì vậy ta không cần phải sửa đổi điều đó.

Tiếp theo, tìm kiếm phần nginx-http-auth . Bỏ ghi chú tiêu đề và thay đổi thông số enabled thành "true".

/etc/fail2ban/jail.local
. . . [nginx-http-auth]  enabled = true . . . 

Đây là tất cả những gì bạn phải làm trong phần này trừ khi web server của bạn đang hoạt động trên các cổng không chuẩn hoặc nếu bạn đã di chuyển đường dẫn log lỗi mặc định.

Khởi động lại Dịch vụ Fail2ban

Khi bạn hoàn tất, hãy lưu file .

Bây giờ, hãy bắt đầu hoặc khởi động lại dịch vụ fail2ban của bạn. Đôi khi, tốt hơn hết bạn nên tắt hoàn toàn dịch vụ và sau đó bắt đầu lại:

  • sudo service fail2ban stop

Bây giờ ta có thể khởi động lại nó bằng lệnh :

  • sudo service fail2ban start

Có thể mất một vài phút để tất cả các luật firewall của bạn được điền vào. Đôi khi, các luật không được thêm vào cho đến khi lệnh cấm đầu tiên của loại hình đó được cài đặt . Tuy nhiên, sau một thời gian, bạn có thể kiểm tra các luật mới bằng lệnh :

  • sudo iptables -S
Output
-P INPUT ACCEPT -P FORWARD ACCEPT -P OUTPUT ACCEPT -N fail2ban-nginx-http-auth -N fail2ban-ssh -A INPUT -p tcp -m multiport --dports 80,443 -j fail2ban-nginx-http-auth -A INPUT -p tcp -m multiport --dports 22 -j fail2ban-ssh -A INPUT -i lo -j ACCEPT -A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT -A INPUT -p tcp -m tcp --dport 22 -j ACCEPT -A INPUT -p tcp -m tcp --dport 80 -j ACCEPT -A INPUT -j DROP -A fail2ban-nginx-http-auth -j RETURN -A fail2ban-ssh -j RETURN

Các dòng màu đỏ là những dòng mà policy fail2ban của ta đã tạo. Hiện tại, họ chỉ hướng lưu lượng truy cập đến các chuỗi mới, gần như trống rỗng và sau đó để lưu lượng truy cập trở lại ngay chuỗi INPUT.

Tuy nhiên, những chuỗi mới này là nơi các luật cấm sẽ được thêm vào.

Thử nghiệm các Chính sách Cấm

Từ một server khác, một server không cần đăng nhập vào server fail2ban của bạn, ta có thể kiểm tra các luật bằng cách cấm server thứ hai của ta .

Sau khi đăng nhập vào server thứ hai của bạn, hãy thử SSH vào server fail2ban. Ví dụ: bạn có thể thử kết nối bằng một tên không tồn tại:

  • ssh blah@fail2ban_server_IP

Nhập các ký tự ngẫu nhiên vào dấu nhắc password . Lặp lại điều này một vài lần. Tại một số điểm, server fail2ban sẽ ngừng phản hồi với thông báo Permission denied . Điều này báo hiệu rằng server thứ hai của bạn đã bị cấm khỏi server fail2ban.

Trên server fail2ban của bạn , bạn có thể xem luật mới bằng cách kiểm tra lại iptables của ta :

  • sudo iptables -S
Output
-P INPUT ACCEPT -P FORWARD ACCEPT -P OUTPUT ACCEPT -N fail2ban-nginx-http-auth -N fail2ban-ssh -A INPUT -p tcp -m multiport --dports 80,443 -j fail2ban-nginx-http-auth -A INPUT -p tcp -m multiport --dports 22 -j fail2ban-ssh -A INPUT -i lo -j ACCEPT -A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT -A INPUT -p tcp -m tcp --dport 22 -j ACCEPT -A INPUT -p tcp -m tcp --dport 80 -j ACCEPT -A INPUT -j DROP -A fail2ban-nginx-http-auth -j RETURN -A fail2ban-ssh -s 203.0.113.14/32 -j REJECT --reject-with icmp-port-unreachable -A fail2ban-ssh -j RETURN

Như bạn thấy trong dòng được đánh dấu, ta có một luật mới trong cấu hình của bạn , luật này từ chối lưu lượng truy cập vào cổng SSH đến từ địa chỉ IP của server thứ hai của ta . Bạn cũng nên nhận được email về lệnh cấm trong account bạn đã cấu hình .

Kết luận

Đến đây bạn có thể cấu hình một số policy cấm cơ bản cho các dịch vụ của bạn . Fail2ban rất dễ cài đặt và là một cách tốt để bảo vệ bất kỳ loại dịch vụ nào sử dụng xác thực.

Nếu bạn muốn tìm hiểu thêm về cách fail2ban hoạt động, bạn có thể xem hướng dẫn của ta về cách hoạt động của các luật và file fail2ban .

Để biết thông tin về cách sử dụng fail2ban để bảo vệ các dịch vụ khác, hãy thử các liên kết sau:


Tags:

Các tin liên quan

Cách bảo vệ SSH bằng Fail2Ban trên Ubuntu 14.04
2014-05-07
Cách cài đặt ISPConfig3 trên server Ubuntu 14.04
2014-05-05
Cách cài đặt và sử dụng Memcache trên Ubuntu 14.04
2014-05-01
Cách thiết lập NFS Mount trên Ubuntu 14.04
2014-04-30
Cách cài đặt và cấu hình Postfix trên Ubuntu 14.04
2014-04-29
Cách cài đặt và cấu hình Postfix trên Ubuntu 14.04
2014-04-29
Cách thêm swap trên Ubuntu 14.04
2014-04-28
Cách cài đặt WordPress trên Ubuntu 14.04
2014-04-24
Cách cài đặt và bảo mật phpMyAdmin trên Ubuntu 14.04
2014-04-23
Cách cài đặt Solr trên Ubuntu 14.04
2014-04-23