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ụ.
[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.
[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.
[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.
[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.
[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”:
[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 :
. . . [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ờ:
[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:
[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 đề:
[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".
. . . [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:
- Cách bảo vệ server Nginx với Fail2Ban trên Ubuntu 14.04
- Cách bảo vệ server Apache với Fail2Ban trên Ubuntu 14.04
Các tin liên quan
Cách bảo vệ SSH bằng Fail2Ban trên Ubuntu 14.042014-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 Git trên Ubuntu 14.04
2014-04-23
Cách cài đặt Solr trên Ubuntu 14.04
2014-04-23
 

