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

Cách Fail2Ban hoạt động để bảo vệ các dịch vụ trên server Linux

Bất kỳ dịch vụ nào tiếp xúc với internet đều dễ bị tấn công từ các bên độc hại. Nếu dịch vụ của bạn yêu cầu xác thực, user bất hợp lệ và bot sẽ cố gắng đột nhập vào hệ thống của bạn bằng cách liên tục cố gắng xác thực bằng các thông tin đăng nhập khác nhau.

Một ví dụ phổ biến của điều này là với SSH, đây sẽ là chủ đề của các cuộc tấn công bot cố gắng cưỡng bức các tên account phổ biến. May mắn là các dịch vụ như fail2ban đã được tạo ra để giúp ta giảm thiểu các cuộc tấn công này.

Fail2ban hoạt động bằng cách tự động thay đổi các luật của firewall để cấm các địa chỉ đã cố gắng đăng nhập không thành công trong một số lần nhất định. Trong hướng dẫn trước, ta đã thảo luận về cách cài đặt và chạy fail2ban trên Ubuntu 14.04 .

Trong hướng dẫn này, ta sẽ thảo luận sâu hơn về cách fail2ban thực sự hoạt động và cách bạn có thể sử dụng kiến thức này để sửa đổi hoặc mở rộng hành vi của dịch vụ này.

Khái niệm cơ bản

Ý tưởng cơ bản đằng sau fail2ban là theo dõi log của các dịch vụ phổ biến để phát hiện các mẫu lỗi xác thực.

Khi fail2ban được cấu hình để theo dõi log của một dịch vụ, nó sẽ xem xét một bộ lọc đã được cấu hình cụ thể cho dịch vụ đó. Bộ lọc được thiết kế để xác định các lỗi xác thực cho dịch vụ cụ thể đó thông qua việc sử dụng các cụm từ thông dụng phức tạp. Nó định nghĩa các mẫu biểu thức chính quy này thành một biến được gọi là failregex .

May mắn là fail2ban bao gồm các file bộ lọc cho các dịch vụ phổ biến. Khi một dòng trong file log của dịch vụ trùng với failregex trong bộ lọc của nó, hành động đã xác định sẽ được thực thi cho dịch vụ đó. action là một biến có thể được cấu hình để làm nhiều việc khác nhau, tùy thuộc vào sở thích của người quản trị.

Hành động mặc định là cấm server lưu trữ / địa chỉ IP vi phạm bằng cách sửa đổi các luật firewall iptables . Bạn có thể mở rộng hành động này để gửi email tới administrator kèm theo báo cáo whois của kẻ tấn công hoặc các dòng log đã kích hoạt hành động.

Bạn cũng có thể sửa đổi mục tiêu hành động thành một cái gì đó khác với iptables thông thường. Điều này có thể phức tạp hoặc đơn giản tùy bạn thực hiện và có nhiều tùy chọn file cấu hình firewall và thông báo khác nhau.

Theo mặc định, hành động sẽ được thực hiện khi phát hiện ba lỗi xác thực trong 10 phút và thời gian cấm mặc định là 10 phút. Mặc định cho số lỗi xác thực cần thiết để kích hoạt lệnh cấm được overrides trong phần SSH của file cấu hình mặc định để cho phép 6 lỗi trước khi lệnh cấm diễn ra. Điều này hoàn toàn có thể được cấu hình bởi administrator .

Khi sử dụng mục tiêu iptables mặc định cho lưu lượng SSH, fail2ban tạo một chuỗi mới khi dịch vụ được bắt đầu. Nó thêm một luật mới vào chuỗi INPUT để gửi tất cả lưu lượng TCP được hướng đến cổng 22 đến chuỗi mới. Trong chuỗi mới, nó chèn một luật duy nhất quay trở lại chuỗi INPUT.

Điều này chỉ làm cho lưu lượng truy cập chuyển sang chuỗi mới và sau đó nhảy trở lại ngay.Điều này không ảnh hưởng đến giao thông khi bắt đầu. Tuy nhiên, khi một IP đạt đến ngưỡng xác thực không thành công, một luật sẽ được thêm vào đầu chuỗi mới để loại bỏ lưu lượng truy cập từ IP vi phạm. Điều này quan tâm đến lệnh cấm thực tế. Khi thời gian cấm đã hết, luật iptables sẽ bị xóa. Chuỗi và các luật liên quan bị xóa khi dịch vụ fail2ban thoát.

Khám phá cài đặt dịch vụ Fail2ban

Fail2ban được cấu hình thông qua nhiều file khác nhau nằm trong một hệ thống phân cấp trong folder /etc/fail2ban/ .

Tệp fail2ban.conf cấu hình một số cài đặt hoạt động cơ bản như cách daemon ghi lại thông tin và file socket và pid mà nó sẽ sử dụng. Tuy nhiên, cấu hình chính diễn ra trong các file xác định "nhà tù".

Theo mặc định, fail2ban gửi kèm theo file jail.conf . Tuy nhiên, điều này có thể bị overrides trong các bản cập nhật, vì vậy user được khuyến khích sao chép file này vào file jail.local và thực hiện các điều chỉnh ở đó.

Nếu bạn đã có file jail.local , hãy mở file ngay bây giờ để làm theo:

sudo nano /etc/fail2ban/jail.local 

Nếu bạn chưa có file jail.local hoặc file bạn đã mở bị trống, hãy sao chép file jail.conf rồi mở file mới:

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

Ta sẽ xem xét các tùy chọn có sẵn tại đây và xem cách file này tương tác với các file cấu hình khác trên hệ thống.

Phần mặc định

Phần đầu tiên của file sẽ xác định các giá trị mặc định cho policy fail2ban. Các tùy chọn này có thể được overrides trong phần cấu hình của từng dịch vụ riêng lẻ.

Với các comment bị xóa, toàn bộ phần mặc định trông giống như sau:

[DEFAULT]  ignoreip = 127.0.0.1/8 bantime = 600 findtime = 600 maxretry = 3 backend = auto usedns = warn destemail = root@localhost sendername = Fail2Ban banaction = iptables-multiport mta = sendmail protocol = tcp chain = INPUT action_ = %(banaction)s[name=%(__name__)s, port="%(port)s", protocol="%(protocol)s", chain="%(chain)s"] action_mw = %(banaction)s[name=%(__name__)s, port="%(port)s", protocol="%(protocol)s", chain="%(chain)s"]           %(mta)s-whois[name=%(__name__)s, dest="%(destemail)s", protocol="%(protocol)s", chain="%(chain)s", sendername="%(sendername)s"] action_mwl = %(banaction)s[name=%(__name__)s, port="%(port)s", protocol="%(protocol)s", chain="%(chain)s"]            %(mta)s-whois-lines[name=%(__name__)s, dest="%(destemail)s", logpath=%(logpath)s, chain="%(chain)s", sendername="%(sendername)s"] action = %(action_)s 

Hãy xem xét một số điều này thực sự nghĩa là gì:

  • ignoreip : Tham số này xác định địa chỉ IP mà hệ thống cấm sẽ bỏ qua. Theo mặc định, điều này chỉ được đặt để bỏ qua lưu lượng truy cập đến từ chính máy, đây là một cài đặt khá tốt cần có.
  • bantime : Tham số này đặt độ dài của lệnh cấm, tính bằng giây. Giá trị mặc định là 600 giây hoặc 10 phút.
  • findtime : Tham số này đặt cửa sổ mà fail2ban sẽ chú ý đến khi tìm kiếm các lần xác thực không thành công lặp lại. Mặc định được đặt thành 600 giây (10 phút trở lại), nghĩa là phần mềm sẽ đếm số lần thử không thành công trong 10 phút qua.
  • maxretry: bộ này số lần thất bại đó sẽ được dung thứ trong findtime cửa sổ trước khi lệnh cấm được cài đặt .
  • backend : Mục nhập này chỉ định cách fail2ban sẽ giám sát các file log . Cài đặt auto nghĩa là fail2ban sẽ thử pyinotify , sau đó là gamin và sau đó là thuật toán thăm dò dựa trên những gì có sẵn.
  • usedns : Điều này xác định xem DNS ngược có được sử dụng để giúp thực hiện lệnh cấm hay không. Đặt điều này thành “no” sẽ cấm chính các IP thay vì tên server . Cài đặt "cảnh báo" sẽ cố gắng sử dụng DNS ngược để tra cứu tên server và cấm theo cách đó, nhưng sẽ ghi lại hoạt động để xem xét.
  • destemail : Đây là địa chỉ sẽ được gửi thư thông báo nếu bạn đã cấu hình hành động của bạn để gửi thông báo qua thư.
  • tên người gửi : Tên này sẽ được sử dụng trong trường email từ cho các email thông báo đã tạo
  • Banaction : Điều này đặt hành động sẽ được sử dụng khi đạt đến ngưỡng. Thực tế có tên của một file nằm trong /etc/fail2ban/action.d/ được gọi là iptables-multiport.conf . Điều này xử lý thao tác iptables thực tế để cấm địa chỉ IP. Ta sẽ xem xét điều này sau.
  • mta : Đây là tác nhân chuyển thư sẽ được sử dụng để gửi email thông báo.
  • giao thức : Đây là loại lưu lượng sẽ bị loại bỏ khi lệnh cấm IP được thực hiện. Đây cũng là loại truy cập được gửi đến chuỗi iptables mới.
  • chain : Đây là chuỗi sẽ được cấu hình với luật nhảy để gửi lưu lượng đến kênh fail2ban.

Phần còn lại của các tham số xác định các hành động khác nhau có thể được chỉ định. Chúng truyền vào một số tham số mà ta đã xác định ở trên bằng cách sử dụng nội suy chuỗi như sau:

<pre>
% (<span class = “highlight”> var_name </span>) s
</pre>

Dòng trên sẽ được thay thế bằng nội dung của var_name . Sử dụng điều này, ta có thể biết rằng biến action được đặt thành định nghĩa action_ theo mặc định (chỉ cấm, không có cảnh báo thư).

Đến lượt nó, điều này được cấu hình bằng cách gọi hành động iptables-multiport với danh sách các tham số (tên dịch vụ, cổng, giao thức và chuỗi) cần thiết để thực hiện lệnh cấm. __name__ được thay thế bằng tên của dịch vụ như được chỉ định bởi các tiêu đề phần bên dưới.

Các phần cụ thể của dịch vụ

Bên dưới phần mặc định, có các phần dành cho các dịch vụ cụ thể được dùng để overrides cài đặt mặc định. Điều này tuân theo một quy ước chỉ sửa đổi các tham số khác với giá trị bình thường (quy ước trên cấu hình).

Mỗi tiêu đề phần được chỉ định như thế này:

<pre>
[<span class = “highlight”> service_name </span>]
</pre>

Bất kỳ phần nào có dòng này sẽ được đọc và bật:

enabled = true 

Trong mỗi phần, các tham số được cấu hình , bao gồm file bộ lọc sẽ được sử dụng để phân tích cú pháp log (trừ phần mở rộng file ) và vị trí của chính file log .

Hãy nhớ điều này , phần chỉ định các hành động cho dịch vụ SSH trông giống như sau:

[SSH]  enabled     = true port        = ssh filter      = sshd logpath     = /var/log/auth.log maxretry    = 6 

Thao tác này bật phần này và đặt cổng thành cổng “ssh” (cổng 22). Nó yêu cầu fail2ban xem log tại /var/log/auth.log cho phần này và phân tích cú pháp log bằng cách sử dụng các cơ chế lọc được xác định trong folder /etc/fail2ban/filters.d trong một file có tên sshd.conf .

Tất cả các phần thông tin khác mà nó cần được lấy từ các tham số được xác định trong phần [DEFAULT] . Ví dụ: hành động sẽ được đặt thành action_ sẽ cấm địa chỉ IP vi phạm bằng cách sử dụng iptables-multiport banaction, tham chiếu đến một file có tên iptables-multiport.conf được tìm thấy trong /etc/fail2ban/action.d .

Như bạn thấy , các hành động trong phần [DEFAULT] phải chung chung và linh hoạt. Việc sử dụng nhiều thay thế tham số cùng với các tham số cung cấp giá trị mặc định hợp lý sẽ làm cho các định nghĩa dễ bị overrides khi cần thiết.

Kiểm tra file bộ lọc

Để hiểu những gì đang diễn ra trong cấu hình của ta , ta cần hiểu bộ lọc và file hành động, những file này thực hiện phần lớn công việc.

Tệp bộ lọc sẽ xác định các dòng mà fail2ban sẽ tìm kiếm trong file log để xác định các đặc điểm vi phạm. Tệp hành động thực hiện tất cả các hành động được yêu cầu, từ việc xây dựng cấu trúc firewall khi dịch vụ khởi động, thêm và xóa các luật và phá bỏ cấu trúc firewall khi dịch vụ dừng.

Hãy xem file bộ lọc mà dịch vụ SSH của ta đã gọi trong cấu hình ở trên:

sudo nano /etc/fail2ban/filter.d/sshd.conf 

[INCLUDES]  before = common.conf  [Definition]  _daemon = sshd failregex = ^%(__prefix_line)s(?:error: PAM: )?[aA]uthentication (?:failure|error) for .* from <HOST>( via \S+)?\s*$         ^%(__prefix_line)s(?:error: PAM: )?User not known to the underlying authentication module for .* from <HOST>\s*$         ^%(__prefix_line)sFailed \S+ for .*? from <HOST>(?: port \d*)?(?: ssh\d*)?(: (ruser .*|(\S+ ID \S+ \(serial \d+\) CA )?\S+ %(__md5hex)s(, client user ".*", client host ".*")?))?\s*$         ^%(__prefix_line)sROOT LOGIN REFUSED.* FROM <HOST>\s*$         ^%(__prefix_line)s[iI](?:llegal|nvalid) user .* from <HOST>\s*$         ^%(__prefix_line)sUser .+ from <HOST> not allowed because not listed in AllowUsers\s*$         ^%(__prefix_line)sUser .+ from <HOST> not allowed because listed in DenyUsers\s*$         ^%(__prefix_line)sUser .+ from <HOST> not allowed because not in any group\s*$         ^%(__prefix_line)srefused connect from \S+ \(<HOST>\)\s*$         ^%(__prefix_line)sUser .+ from <HOST> not allowed because a group is listed in DenyGroups\s*$         ^%(__prefix_line)sUser .+ from <HOST> not allowed because none of user's groups are listed in AllowGroups\s*$ ignoreregex = 

Điều này trông rất phức tạp. Đó là bởi vì nó khá phức tạp. Hãy chia nhỏ điều này một chút.

Tiêu đề phần [INCLUDES] chỉ định các file bộ lọc khác được đọc trước hoặc sau file này. Trong ví dụ của ta , file common.conf được đọc và đặt trước các dòng khác trong file này. Điều này cài đặt một số tham số mà ta sẽ sử dụng trong cấu hình của bạn .

Tiếp theo, ta có phần [Definition] xác định các luật thực tế cho các đối sánh bộ lọc của ta . Đầu tiên, ta đặt tên của daemon mà ta đang theo dõi bằng cách sử dụng tham số _daemon .

Sau đó, ta xem qua định nghĩa failregex thực tế, định nghĩa này sẽ đặt các mẫu sẽ kích hoạt khi tìm thấy một dòng phù hợp trong file log . Đây là các cụm từ thông dụng phù hợp dựa trên các lỗi và lỗi khác nhau có thể xảy ra khi user không xác thực chính xác.

Các phần của dòng như %(__prefix_line)s sẽ được thay thế bằng giá trị của cài đặt tham số trong file common.conf mà ta đã lấy nguồn. Điều này được sử dụng để trùng với thông tin hàng đầu khác nhau mà hệ điều hành ghi vào file log khi chúng sử dụng các phương pháp tiêu chuẩn. Ví dụ: một số dòng từ /var/log/auth.log có thể trông giống như sau:

<pre>
<span class = “highlight”> Ngày 6 tháng 5 18:18:52 localhost sshd [3534]: </span> pam_unix (sshd: auth): xác thực không thành công; logname = uid = 0 euid = 0 tty = ssh ruser = rhost = 101.79.130.213
<span class = “highlight”> Ngày 6 tháng 5 18:18:54 localhost sshd [3534]: </span> Mật khẩu không hợp lệ cho phil user không hợp lệ từ cổng 101.79.130.213 38354 ssh2
<span class = “highlight”> Ngày 6 tháng 5 18:18:54 localhost sshd [3534]: </span> Đã nhận được ngắt kết nối từ 101.79.130.213: 11: Bye Bye [preauth]
</pre>

Phần có màu đỏ là mẫu chuẩn mà hệ điều hành chèn vào để cung cấp thêm ngữ cảnh. Sau đó, có khá nhiều cách khác nhau mà dịch vụ iptables ghi các nỗ lực thất bại vào log .

Ta thấy hai lỗi riêng biệt trong hai dòng đầu tiên ở trên (lỗi xác thực PAM và lỗi password ). Các biểu thức chính quy được xác định trong bộ lọc được thiết kế để phù hợp với bất kỳ dòng lỗi nào có thể xảy ra. Bạn không cần phải điều chỉnh bất kỳ dòng nào trong số này, nhưng bạn nên lưu ý sự cần thiết phải nắm bắt tất cả các mục log biểu thị lỗi sử dụng trái phép đối với ứng dụng bạn đang cố gắng bảo vệ nếu bạn phải tự tạo file bộ lọc .

Ở dưới cùng, bạn có thể thấy thông số ignoreregex , hiện đang trống. Điều này được dùng để loại trừ các mẫu cụ thể hơn thường phù hợp với điều kiện lỗi trong trường hợp bạn muốn phủ nhận kích hoạt lỗi cho fail2ban trong các trường hợp nhất định. Ta sẽ không điều chỉnh điều này.

Lưu file khi bạn kiểm tra xong.

Kiểm tra file hành động

Bây giờ, ta hãy xem xét file hành động. Tệp này chịu trách nhiệm cài đặt firewall với cấu trúc cho phép dễ dàng sửa đổi để cấm các server độc hại và thêm và xóa các server đó nếu cần.

Như bạn nhớ lại, hành động mà dịch vụ SSH của ta gọi là iptables-multiport . Mở file được liên kết ngay bây giờ:

sudo nano /etc/fail2ban/action.d/iptables-multiport.conf 

Với các comment bị xóa, file này trông giống như sau:

[INCLUDES] before = iptables-blocktype.conf  [Definition] actionstart = iptables -N fail2ban-<name>               iptables -A fail2ban-<name> -j RETURN               iptables -I <chain> -p <protocol> -m multiport --dports <port> -j fail2ban-<name>  actionstop = iptables -D <chain> -p <protocol> -m multiport --dports <port> -j fail2ban-<name>  actioncheck = iptables -n -L <chain> | grep -a 'fail2ban-<name>[ \t]'  actionban = iptables -I fail2ban-<name> 1 -s <ip> -j <blocktype>  actionunban = iptables -D fail2ban-<name> -s <ip> -j <blocktype>  [Init] name = default port = ssh protocol = tcp chain = INPUT 

Tệp bắt đầu bằng cách tìm nguồn cung cấp một file hành động khác có tên iptables-blocktype.conf chỉ định nghĩa tham số blocktype cấu hình hạn chế sẽ được đặt khi client bị cấm. Theo mặc định, blocktype được đặt để từ chối các gói và trả lời các ping được gửi bởi các client bị cấm với thông báo từ chối rằng cổng không thể truy cập được. Ta sẽ sử dụng điều này trong các luật cấm của ta bên dưới.

Tiếp theo, ta đi đến các định nghĩa luật . Các hành động khá thẳng về phía trước. Hành động actionstart động cài đặt firewall iptables khi dịch vụ fail2ban được khởi động. Nó tạo ra một chuỗi mới, thêm một luật vào chuỗi đó để quay lại chuỗi đang gọi, rồi chèn một luật vào đầu chuỗi INPUT để chuyển lưu lượng trùng với giao thức và đích cổng chính xác đến chuỗi mới.

Nó thực hiện điều này bằng cách sử dụng các giá trị mà ta đã chuyển vào với action mà ta đã xác định trong file jail.local của jail.local . name được lấy từ tiêu đề phần cho mỗi dịch vụ, chain , protocolport được lấy từ chính dòng action trong file đó.

Bạn có thể nhớ lại rằng những thứ đó, đến lượt nó, đã được thêm vào dòng hành động bằng cách nội suy các tham số khác được đặt ở các vị trí khác trong file đó. Đến đây, bạn có thể nhận ra rằng fail2ban vượt qua và chuyển đổi nhiều tham số giữa các phần khác nhau của file cấu hình của nó.

Ở đây, tất cả các tham số được đặt bởi file khác được tham chiếu bằng cách bao gồm tên tham số trong dấu ngoặc nhọn:

<pre>
<< span class = “highlight”> param_name </span>>
</pre>

Khi ta di chuyển xuống đồng actionstop định nghĩa, ta có thể thấy rằng các lệnh firewall chỉ đơn giản là thực hiện một sự đảo ngược của actionstart lệnh. Ta phá bỏ cấu trúc firewall mà ta đã tạo khi dừng dịch vụ fail2ban.

Một hành động khác được gọi là actioncheck hành động đảm bảo chuỗi thích hợp đã được tạo trước khi cố gắng thêm các luật cấm.

Tiếp theo, ta đến luật cấm thực tế, được gọi là actionban . Luật này hoạt động bằng cách thêm luật mới vào chuỗi đã tạo của ta . Nguyên tắc phù hợp với địa chỉ IP nguồn của khách hàng vi phạm (tham số này được đọc từ các bản ghi cho phép khi maxretry đạt đến giới hạn) và các viện khối được định nghĩa bởi blocktype tham số mà ta có nguồn root trong [INCLUDE] phần ở đầu file .

Luật actionunban chỉ đơn giản là loại bỏ luật này. Điều này được thực hiện tự động bởi fail2ban khi thời gian cấm đã trôi qua.

Cuối cùng, ta đến phần [Init] . Điều này chỉ cung cấp một số giá trị mặc định trong trường hợp file hành động được gọi mà không chuyển tất cả các giá trị thích hợp.

Cách dịch vụ Fail2ban xử lý file cấu hình để triển khai lệnh cấm

Bây giờ ta đã thấy các chi tiết cụ thể, hãy xem lại quá trình xảy ra khi fail2ban bắt đầu.

Đang tải các file cấu hình ban đầu

Đầu tiên, file fail2ban.conf chính được đọc để xác định các điều kiện mà quy trình chính phải hoạt động theo. Nó tạo ra các file socket, pid và log nếu cần thiết và bắt đầu sử dụng chúng.

Tiếp theo, fail2ban đọc file jail.conf để biết chi tiết cấu hình. Nó theo sau điều này bằng cách đọc, theo thứ tự bảng chữ cái, các file nào được tìm thấy trong folder jail.d kết thúc bằng .conf . Nó thêm các cài đặt có trong các file này vào cấu hình bên trong của nó, ưu tiên các giá trị mới hơn các giá trị được mô tả trong file jail.conf .

Sau đó, nó tìm kiếm file jail.local và lặp lại quá trình này, điều chỉnh các giá trị mới. Cuối cùng, nó tìm kiếm lại folder jail.d , đọc các file theo thứ tự bảng chữ cái kết thúc bằng .local .

Bằng cách này, ta có thể thấy rằng fail2ban có một số lượng lớn các file được dùng để điều khiển hành vi cuối cùng của quy trình. Trong trường hợp của ta , ta chỉ có file jail.conf và file jail.local . Trong file jail.local của ta , ta chỉ cần xác định các giá trị khác với file jail.conf .

Quá trình fail2ban hiện có một tập hợp các lệnh được tải vào bộ nhớ đại diện cho sự kết hợp của tất cả các file mà nó tìm thấy.

Nó kiểm tra từng phần và tìm kiếm một chỉ thị enabled = true . Nếu nó tìm thấy một, nó sẽ sử dụng các tham số được xác định trong phần đó để xây dựng policy và quyết định những hành động được yêu cầu. Bất kỳ tham số nào không được tìm thấy trong phần của dịch vụ sử dụng các tham số được xác định trong phần [DEFAULT] .

Phân tích cú pháp file hành động để xác định hành động bắt đầu

Fail2ban tìm kiếm một chỉ thị action để tìm ra kịch bản hành động nào cần gọi để thực hiện các policy cấm / bỏ cấm. Nếu một trong những không được tìm thấy, nó sẽ trở lại hành động mặc định được xác định ở trên.

Chỉ thị hành động bao gồm tên của (các) file hành động sẽ được đọc, cũng như từ điển key-value chuyển các tham số mà các file đó cần. Các giá trị này thường có dạng thay thế tham số bằng cách tham chiếu đến các cài đặt được cấu hình trong phần của dịch vụ. Khóa “tên” thường được chuyển giá trị của biến __name__ đặc biệt sẽ được đặt thành giá trị của tiêu đề của phần.

Sau đó, Fail2ban sử dụng thông tin này để tìm các file được liên kết trong folder action.d . Đầu tiên, nó tìm kiếm file hành động được liên kết kết thúc bằng .conf và sau đó sửa đổi thông tin được tìm thấy ở đó với cài đặt nào có trong file .local đi kèm cũng được tìm thấy trong folder action.d .

Nó phân tích cú pháp các file đó để xác định các hành động mà nó cần thực hiện ngay bây giờ. Nó đọc actionstart giá trị để xem những hành động cần làm để cài đặt môi trường. Điều này thường bao gồm việc tạo cấu trúc firewall để phù hợp với các luật cấm trong tương lai.

Các hành động được xác định trong file này sử dụng các tham số được truyền cho nó từ chỉ thị action . Nó sẽ sử dụng các giá trị này để tạo động các luật thích hợp. Nếu một biến nhất định không được đặt, nó có thể xem các giá trị mặc định được đặt trong file hành động để điền vào chỗ trống.

Phân tích cú pháp file bộ lọc để xác định luật lọc

Các tham số cho dịch vụ trong file jail.* Cũng bao gồm vị trí của file log cũng như cơ chế bỏ phiếu sẽ được sử dụng để kiểm tra file (điều này được xác định bởi tham số backend ).Nó cũng bao gồm một bộ lọc sẽ được sử dụng để xác định xem một dòng trong log có biểu thị lỗi hay không.

Fail2ban tìm trong folder filter.d để tìm file bộ lọc phù hợp kết thúc bằng .conf . Nó đọc file này để xác định các mẫu được dùng để trùng với các dòng vi phạm. Sau đó, nó tìm kiếm một file bộ lọc phù hợp kết thúc bằng .local để xem có bất kỳ thông số mặc định nào bị overrides hay không.

Nó sử dụng các biểu thức chính quy được xác định trong các file này khi đọc file log của dịch vụ. Nó thử từng dòng failregex được xác định trong các file filter.d so với mọi dòng mới được ghi vào file log của dịch vụ.

Nếu biểu thức chính quy trả về một kết quả phù hợp, nó sẽ kiểm tra dòng so với các biểu thức chính quy được định nghĩa bởi ignoreregex . Nếu điều này cũng khớp, thì fail2ban bỏ qua nó. Nếu dòng trùng với một biểu thức trong failregex nhưng không trùng với một biểu thức trong ignoreregex , một bộ đếm bên trong sẽ được tăng lên cho ứng dụng client đã gây ra dòng và dấu thời gian liên quan được tạo cho sự kiện.

Khi đạt đến cửa sổ thời gian được đặt bởi tham số findtime trong file jail.* (Như được xác định bởi dấu thời gian sự kiện), bộ đếm nội bộ lại giảm xuống và sự kiện không còn được coi là liên quan đến policy cấm.

Nếu, theo thời gian, các lỗi xác thực bổ sung được ghi lại, mỗi lần thử sẽ tăng bộ đếm. Nếu bộ đếm đạt đến giá trị được đặt bởi tham số maxretry trong repository ảng thời gian đã cấu hình , fail2ban đưa ra lệnh cấm bằng cách gọi hành động actioncheck hành động cho dịch vụ như được định nghĩa trong action.d/ cho dịch vụ. Điều này là để xác định xem actionstart hành động cài đặt cấu trúc cần thiết. Sau đó, nó gọi hành động actionban để cấm khách hàng vi phạm. Nó cũng đặt dấu thời gian cho sự kiện này.

Khi khoảng thời gian đã trôi qua mà tham số bantime chỉ định, fail2ban bỏ cấm client bằng cách gọi hành động actionunban .

Khi dịch vụ fail2ban được dừng lại, nó cố gắng để hạ bệ bất kỳ luật firewall mà nó tạo ra bằng cách gọi actionstop hành động. Điều này thường xóa chuỗi chứa các luật fail2ban và xóa các luật khỏi chuỗi INPUT khiến lưu lượng truy cập chuyển đến chuỗi đó.

Kết luận

Hy vọng rằng bây giờ bạn đã hiểu khá sâu về cách fail2ban hoạt động. Bản thân dịch vụ này cực kỳ dễ dàng đối với hầu hết user vì hầu hết các cấu hình khó đã được xử lý cho bạn.

Tuy nhiên, khi bạn đi lệch khỏi cấu hình tiêu chuẩn, sẽ rất hữu ích nếu bạn biết cách fail2ban hoạt động để điều khiển hành vi của nó theo cách có thể dự đoán được.

Để tìm hiểu về cách bảo vệ các dịch vụ khác với fail2ban, hãy xem các liên kết sau:


Tags:

Các tin liên quan

Cách cài đặt Linux, Nginx, MySQL, PHP (LEMP) trên Ubuntu 14.04
2014-04-25
Cách cài đặt Linux, Apache, MySQL, PHP (LAMP) trên Ubuntu 14.04
2014-04-18
Thiết lập server ban đầu với Ubuntu 14.04
2014-04-17
Giới thiệu về công cụ nén tệp trên server Linux
2014-04-15
Cách tải phần mềm và nội dung lên VPS Linux của bạn
2014-04-14
Cách bảo vệ server của bạn chống lại lỗ hổng bảo mật OpenSSL.
2014-04-08
Cách cấu hình mail server bằng Postfix, Dovecot, MySQL và SpamAssassin
2014-04-01
Cách cấu hình mail server bằng Postfix, Dovecot, MySQL và SpamAssassin
2014-04-01
Cách cấu hình công cụ để sử dụng IPv6 trên VPS Linux
2014-04-01
Cách điều chỉnh cấu hình SSH Daemon của bạn trên VPS Linux
2014-03-26