Giới thiệu về công cụ fail2ban và ứng dụng giảm thiểu tấn công DDoS

Thảo luận trong 'Dos/DDOS' bắt đầu bởi kaitoukid, 24/06/16, 03:06 PM.

  1. kaitoukid

    kaitoukid Wh------

    Tham gia: 18/07/14, 02:07 PM
    Bài viết: 33
    Đã được thích: 27
    Điểm thành tích:
    28
    I. Fail2Ban là gì?

    Fail2ban là 1 chương trình được viết bằng python có nhiệm vụ chặn các ip kết nối đến server dựa vào các dấu hiệu nghi ngờ mà ip đó để lại trong file log của hệ thống hoặc dịch vụ. Ví dụ như có quá nhiều lần sử dụng mật khẩu không hợp lệ, truy cập không hợp lệ hoặc các dấu hiệu bất thường khác mà có thể nhận biết được.

    Mỗi luật trong fail2ban (jail) bao gồm 3 thành phần: luật lọc(filter) và luật chặn(action) và file log cần lọc. Fail2ban đếm số lần 1 ip vi phạm luật lọc(filter) trong 1 khoảng thời gian xác định, nếu số lần vi phạm vượt quá 1 ngưỡng cho trước thì ip đó sẽ bị chặn kêt nối đến server bởi luật chặn(action). Các thông số khoảng thời gian quét, ngưỡng giới hạn, thời gian chặn ip hay vị trí file log sẽ được cấu hình riêng cho từng jail.

    II. File cấu hình trong fail2ban

    1. Filter : /etc/fail2ban/filter.d/*

    Như đã nói ở trên filter là điều kiện để xác định 1 ip có vi phạm luật hay không. Mỗi file filter chứa 1 đoạn mã regex có nhiệm vụ lọc ra các ip vị phạm luật trong file log hệ thống.

    failregex = ^%(__prefix_line)s(?:error: PAM: )?[aA]uthentication (?:failure|error) for .* from ( via \S+)?\s*$
    ignoreregex =

    Vi dụ đoạn regex trong file sshd.conf lọc ra các ip ssh đến server với xác thực không hợp lệ trong file log hệ thống: auth.log.

    2. Action: /etc/fail2ban/action.d/*

    Mỗi luật acction được cấu hình bao gồm những lệnh iptables sau:
    • actionstart : Gọi ra khi khởi chạy dịch vụ fail2ban có nhiệm vụ tạo mới 1 bảng trong iptable để dễ quản lý các ip đã chặn theo từng luật jail.
    • actionstop: Gọi ra khi kết thúc dịch vụ fail2ban nhằm xóa bỏ những luật iptables được thêm vào trong qua trình fail2ban chạy.
    • actioncheck: kiểm tra xem 1 ip đã bị chặn với luât jail hay chưa. Tức là kiểm tra trong bảng chain của luật jạil đã có ip đó hay chưa.
    • actionban: lệnh iptables để chặn 1 ip
    • actionunban: lệnh iptables xóa bỏ luật chặn 1 ip sau khi hết thời gian chặn.
    3. Jail: /etc/fail2ban/jail.conf

    File jail.conf là file cấu hình tất cả các luật jail trong fail2ban. Thông số cấu hình cho 1 jail bao gồm:
    • Bantime: thời gian ip bị chặn nếu vi phạm luật jail
    • Findtime: khoảng thời gian quét cho 1 luật jail
    • Maxretry: ngưỡng vị phạm trong khoảng thời gian findtime
    • Banaction: Luật action (tên file action.conf)
    • Port: cổng chặn kết nối đến server
    • Filter: tên file cấu hình luật filter
    • Logpath: đường dẫn đến file log hệ thống,ứng dụng
    • Action: lựa chọn 1 trong 3 chế độ: chỉ chặn ip, chặn ip và gửi mail thông báo, chăn ip, gửi mail thông báo và ghi ra log
    III. Giới thiệu luật mặc định trong fail2ban

    Fail2ban chặn ip dựa vào dấu hiệu để lại trong file log dịch vụ hoặc hệ thống, do fail2ban có thể quản lý việc xác thực, truy cập không hợp lệ của rất nhiều dịch vụ trên hệ thống, miễn là dịch vụ đó có ghi log các ip kết nối đến và có thể nhận biết mối nguy hại từ những dòng log đó là được.

    Fail2ban được cấu hình mặc định hỗ trợ 1 số dịch vụ như: SSH, Các dịch vụ webserver, Apache, Nginx, Lighttpd, Roundcube, SOGo, FTP, Proftpd, Postfix SMTP, Courier SMTP, Dovecot pop3/imap server, MySQL, Bind9, Asterisk, Fail2ban.
    Có thể tăng thời gian bị chặn đối với những ip vi phạm quá nhiều luật của Fai2lban bằng cách đọc chính file log của fail2ban.

    Dưới đây tôi sẽ giới thiệu 1 luật mặc định cơ bản của fail2ban để mọi người dễ hình dung: ssh

    1. SSH: luật ssh được xây dựng nhằm mục đích hạn chế tấn công brute force đến server SSH trên hệ thống.

    a. Filter: sshd.conf

    failregex = ^%(__prefix_line)s(?:error: PAM: )?[aA]uthentication (?:failure|error) for .* from ( via \S+)?\s*$
    ^%(__prefix_line)s(?:error: PAM: )?User not known to the underlying authentication module for .* from \s*$
    ^%(__prefix_line)sFailed \S+ for .*? from (?: 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 \s*$
    ^%(__prefix_line)s[iI](?:llegal|nvalid) user .* from \s*$
    ^%(__prefix_line)sUser .+ from not allowed because not listed in AllowUsers\s*$
    ^%(__prefix_line)sUser .+ from not allowed because listed in DenyUsers\s*$
    ^%(__prefix_line)sUser .+ from not allowed because not in any group\s*$
    ^%(__prefix_line)srefused connect from \S+ \(\)\s*$
    ^%(__prefix_line)sUser .+ from not allowed because a group is listed in DenyGroups\s*$
    ^%(__prefix_line)sUser .+ from not allowed because none of user's groups are listed in AllowGroups\s*$

    ignoreregex =

    Với luật filter ở trên sẽ lọc ra những hoạt động không hợp lệ trên dịch vụ SSH từ file log.

    b. Acction : iptables-multiport.conf

    actionstart = iptables -N fail2ban-
    iptables -A fail2ban- -j RETURN
    iptables -I -p -m multiport --dports -j fail2ban-
    actionstop = iptables -D -p -m multiport --dports -j fail2ban-
    iptables -F fail2ban-
    iptables -X fail2ban-
    actioncheck = iptables -n -L | grep -q 'fail2ban-[ \t]'
    actionban = iptables -I fail2ban- 1 -s -j
    actionunban = iptables -D fail2ban- -s -j
    blocktype = REJECT --reject-with icmp-port-unreachable

    c. Jail: jail.conf

    [ssh] # tên luật

    enabled = true # luật đang được bật
    port = ssh # cổng chặn : ssh (22) có thể cấu hình các cổng khác thêm vào
    filter = sshd # file cấu hình filter sshd.conf
    logpath = /var/log/auth.log # file log hệ thống
    maxretry = 6 # 6 lần thao tác không hợp lệ
    Những tham số không được khai báo sẽ được sử dụng giá trị mặc định:
    bantime = 600 # khoảng thời gian chặn ip
    findtime = 600 # ngưỡng thời gian
    banaction = iptables-multiport # luật action
    protocol = tcp # giao thức

    Và nhiều tham số mặc định khác nữa, các bạn có thể đọc thêm trong file cấu hình jail.conf

    IV. Sử dụng Fail2ban chặn ip có số request đến server vượt quá ngưỡng nhất định

    Bên cạnh việc kiểm soát những truy cập không hợp lệ fail2ban còn được sử dụng để chặn 1 số kiểu tấn công http ddos. Sau đây tôi xin giới thiệu cách cấu hình đơn giản cho fail2ban để chặn ip có số request http đến server vượt quá ngưỡng nhất định, sử dụng file log của webserver.

    Tùy vào tính chất của mỗi website và cấu hình vật lý của server mà có các ngưỡng khác nhau, ở đây tôi sẽ xây dựng luật chặn những ip có số lượng request đến server trong 30 giây lớn hơn 15000 request.
    • Đầu tiên là luật filter, tạo mới 1 file cấu hình /etc/fail2ban/filter.d/http.conf với nội dung:
    [Definition]
    failregex = ^ - -.*$ # mã regex càng đơn giản thì chương trình chạy càng nhanh, cần tối ưu hóa đoạn mã regex để fail2ban hoạt động hiệu quả nhất, cần sửa lại đoạn regex
    ignoreregex = # thêm những trường hợp không kiểm tra luật để hạn chế công việc của fail2ban
    • Action ở đây tôi sử dụng file action mặc định: iptables-multiport.conf
    • Thêm luật jail bằng cách ghi chèn nội dung sau vào file jail.conf:
    [http] # tên của luật

    enabled = true # bật hay tắt luật
    port = http,https,8008 # cổng sẽ bị chặn trong iptables
    filter = http # file cấu hình filter
    logpath = /var/log/nginx/access.log # file log của webserver
    bantime = 2000 # thời gian chặn ip theo giây.
    findtime = 30 # khoảng thời gian quét 30 giây
    maxretry = 15000 # 15000 request /30 giây
    banaction = iptables-multiport # file cấu hình action

    Thực nghiệm trên máy ảo có cấu hình cpu Intel(R) Xeon(R) CPU E5520 2 core - 2.27GHz, ram 4GB, sử dụng tool ddos hping3, cho thấy fail2ban hoạt động bình thường, có thể chặn cùng lúc 2 ip ở ngưỡng 15000request/30s.

    Trên đây là bài giới thiệu của tôi về công cụ fail2ban và ứng dụng trong việc chặn tấn công http ddos. Mọi thắc mắc về bài viết xin vui lòng để lại ở comment bên dưới. Tôi rất vui lòng giải đáp các bạn. Xin cảm ơn.
     
    Last edited by a moderator: 27/06/16, 11:06 AM
    Mời các bạn tham gia Group WhiteHat để thảo luận và cập nhật tin tức an ninh mạng hàng ngày.
    Lưu ý từ WhiteHat: Kiến thức an ninh mạng để phòng chống, không làm điều xấu. Luật pháp liên quan