Giới thiệu
Khi thiết lập một server, thường có các phần của trang web bạn muốn hạn chế quyền truy cập. Các ứng dụng web thường cung cấp các phương thức xác thực và ủy quyền của riêng, nhưng chính server web có thể được sử dụng để hạn chế quyền truy cập nếu các phương thức này không đủ hoặc không khả dụng. Tuy nhiên, việc xác thực server web cũng đại diện cho sự tấn công bề mặt (attack surface) hoặc tấn công vector, thông qua những gì mà mọi người có thể cố gắng truy cập lại. Bất kỳ service nào tiếp xúc với Internet đều là mục tiêu tiềm năng của việc tấn công này. Nếu bạn xem lại nhật kí lưu lượng truy cập của web server, bạn sẽ thấy sự lặp lại thường xuyên, việc nỗ lực đăng nhập vào hệ thống đại diện cho các cuộc tấn công của user và bots là như nhau. Trước khi thiết lập VPN, bạn có thể triển khai một công cụ được gọi là Fail2ban. Fail2ban có thể giảm thiểu đáng kể các cuộc tấn công brute force bằng cách tạo các quy tắc tự động thay đổi cấu hình tường lửa của bạn để cấm các IP cụ thể sau một số lần đăng nhập không thành công. Điều này sẽ cho phép server của bạn tự chống lại trước những nỗ lực truy cập này mà không cần sự can thiệp của bạn. Qua bài hướng dẫn này chúng tôi sẽ chỉ cho bạn cách cài đặt fail2ban
trên Ubuntu 20.04 và cấu hình chúng để giám sát log Nginx của bạn tìm các nỗ lực xâm nhập. Yêu cầu
- Môi trường máy chủ Ubuntu 20.04 và một user non-root với quyền
sudo
- Cài đặt Nginx vào hệ thống của bạn
Bước 1: Cài đặt và cấu hình Fail2ban
Fail2ban có sẵn trong kho phần mềm của Ubuntu. Bắt đầu chạy lệnh với user không phải root để cập nhật danh sách các gói và cài đặt Fail2ban:
Fail2ban sẽ tự động thiết lập background service sau khi được cài đặt. Tuy nhiên nó sẽ tắt theo mặc định, vì một số cài đặt mặc định của nó có thể gây ra các hiệu ứng không mong muốn. Bạn có thể kiểm chứng bằng cách sử dụng lệnh systemctl
:
Bạn có thể bật Fail2ban ngay bây giờ, nhưng đầu tiên, bạn sẽ xem xét một số tính năng của nó. Fail2ban giữ các tệp cấu hình của nó trong thư mục / etc / fail2ban
. Đây là file mặc định được gọi là jail.conf
. Đi đến thư mục đó và in 20 dòng đầu tiên của file đó bằng cách sử dụng head -20
:
Chúng ta thấy, một số dòng đầu tiên của file này là commented out - Chúng bắt đầu với các kí tự #
chỉ ra rằng chúng sẽ được đọc dưới dạng tài liệu thay vì dưới dạng cài đặt. Bạn cũng thấy rằng những nhận xét này đang hướng dẫn bạn không được trực tiếp sửa đổi file này. Thay vào đó có hai tuỳ chọn: tạo các cấu hình riêng lẻ cho Fail2ban trong nhiều file trong thư mục jail.d /
hoặc tạo và thu thập tất cả các cài đặt local của bạn trong một file jail.local
. File jail.conf
sẽ được cập nhật định kỳ vì chính Fail2ban được cập nhật và sẽ được sử dụng làm nguồn cài đặt mặc định mà bạn chưa tạo bất kỳ overrides nào. Trong hướng dẫn này, bạn sẽ tạo jail.local
. Bạn có thể copy jail.conf
:
Bây giờ bạn có thể bắt đầu thực hiện các thay đổi cấu hình. Mở file trong nano
hoặc trình soạn thảo văn bản mà bạn thích:
Thay đổi mặc định Bạn sẽ bắt đầu bằng cách đánh giá các giá trị mặc định trong tệp. Bạn sẽ tìm thấy [DEFAULT]
trong file. Các mục này được đặt chính sách chung và có thể được overrides trên mỗi ứng dụng cơ bản. Nếu bạn sử dụng nano
, bạn có thể tìm kiếm trong file bằng cách nhấn Ctrl + W
, nhập tìm kiếm, sau đó nhấn enter
. Một trong những mục đầu tiên bạn cần xem xét là danh sách khách hàng không theo chính sách Fail2ban. Được cài đặt bởi ignoreip
. Đôi khi bạn nên thêm địa chỉ IP hoặc mạng vào danh sách các trường hợp ngoại lệ để tránh tự khóa mình. Điều này sẽ xảy ra ít vấn đề hơn SSH khi đăng nhập với web server. Vì nếu bạn có thể duy trì quyền truy cập shell, bạn có thể đảo ngược lệnh cấm. Bạn có thể bỏ ghi chú dòng này và 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ó:
Ngoài ra có một mục có thể bạn muốn điều chỉnh bantime
. Bởi nó sẽ kiểm soát có sau bao nhiêu giây có một thành viên vi phạm. Thiết lập tốt nhất là cài đặt một khoảng thời gian đủ dài để làm để làm gián đoạn các nổ lực tự động đồng thời đủ ngắn để user có thể sửa lỗi. Bạn có thể tăng hoặc giảm giá trị này:
Hai mục tiếp theo sẽ xác định phạm vi dòng nhật kí sử dụng nhằm xác định client vi phạm. findtime
chỉ định một lượng thời gian tính bằng giây và maxretry
cho biết số lần thử được chấp nhận trong thời gian đó. Nếu client cố gắng thực hiện nhiều hơn maxretry
trong khoảng thời gian được thiết lập bởi findtime
, họ sẽ bị chặn:
Thiết lập thông báo mail ( không bắt buộc) Bạn có thể tùy chọn bật thông báo qua email để nhận thư bất cứ khi nào có lệnh cấm. Trước tiên, bạn sẽ phải thiết lập MTA trên server của mình để nó có thể gửi email. Để tìm hiểu cách sử dụng Postfix cho tác vụ này tham khảo cách cài đặt và cấu hình Postfix trên ubuntu 22.04. Sau khi bạn đã thiết lập MTA của mình, bạn 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 thiết lập chỉ thị
mta`. Nếu bạn thiết lập Postfix, giống như hướng dẫn ở trên, hãy thay đổi giá trị này thành “mail”:
Cung cấp địa chỉ email sẽ nhận thư trong trường destemail
. sender
tùy chọn cấu hình địa chỉ mà mail sẽ được gửi, cần phải tương thích với cấu hình Postfix của bạn:
action
tham số 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à cập nhật cấu hình tường lửa của bạn để từ chối lưu lượng truy cập từ host vi phạm cho đến khi hết thời gian cấm.
Có các tập lệnh action_
khác được cung cấp theo mặc định bạn có thể thay thế bằng $ (action_)
ở trên:
Cả hai action_mw
và action_mwl
sẽ xử lý việc gửi email bằng cấu hình bạn đã cung cấp. Bước tiếp theo, bạn sẽ chuyển sang cấu hình dành riêng cho Nginx
Bước 2: Cấu hình Fail2Ban để theo dõi nhật ký Nginx
Bây giờ bạn đã có một số cài đặt Fail2ban chung, bạn có thể kích hoạt Nginx-specific theo dõi nhật ký server web của bạn để biết các mẫu cụ thể. Mỗi Mỗi jail trong file cấu hình được đánh dấu bằng tiêu đề chứa tên jail trong dấu ngoặc vuông, nhưng [DEFAULT]
phần cho biết cấu hình của một jail cụ thể. Theo mặc định, chỉ có [ssh]
jail được kích hoạt. Để bật theo dõi nhật ký cho các lần đăng nhập Nginx, kích hoạt jail [nginx-http-auth
. Thêm enabled = true
chỉ thị trong phần này:
Khi bạn hoàn thành việc sửa đổi, lưu và đóng file. Nếu bạn sử dụng nano
nhấn Ctrl+X
sau khi được nhắc nhấn y
và ENTER. Tiếp theo, bạn sẽ xem xét cấu hình bộ lọc cho nginx-http-auth
.
Bước 3: Xem lại bộ lọc cho Nginx Jails
Bạn có thể nhận thấy rằng khối [nginx-http-auth]
trong jail.local
không chứa bất kỳ quy tắc nào dành riêng cho Nginx. Các quy tắc này không tự động được mã hóa cứng bên trong Fail2ban, trên thực tế tiêu đề [nginx-http-auth]
tương ứng trực tiếp với tên file bên trong Fail2ban’s, filter.d
bộ lọc đóng gói sẵn của Fail2ban’s filter. Nếu bạn liệt kê nội dung của thư mục này, bạn có thể thấy các bộ lọc đóng gói có sẵn, nếu bạn cần sử dụng chúng:
Bây giờ, hãy xem nginx-http-auth.conf
:
Những file này chứa những biểu thức chính quy (regular expressions) xác định xem một dòng trong nhật ký có phải là một lần xác thực không thành công hay không. Chúng có thể được sửa đổi trực tiếp khi cần thiết. Trong bước tiếp theo, bạn sẽ kích hoạt và kiểm tra Fail2ban.
Bước 4: Kích hoạt Nginx Jails của bạn
Tại thời điểm này, bạn có thể kích hoạt dịch vụ Fail2ban của mình để nó sẽ tự động chạy từ bây giờ. Đầu tiên, chạy systemctl enable
:
Sau đó, khởi động bằng tay vào lần đầu tiên với systemctl start
:
Bạn có thể xác minh rằng nó đang chạy với systemctl status
Nhận thông tin về Jails đã bật Bạn có thể xem tất cả các jails đã kích hoạt của mình bằng cách sử dụng lệnh fail2ban-client
Bạn sẽ thấy danh sách jails:
Nếu bạn muốn xem chi tiết về các lệnh cấm được thi hành bởi bất kỳ jail nào, Sử dụng lại lệnh fail2ban-client
":
Trong bước hướng dẫn tiếp theo, bạn sẽ phải kiểm tra việc bị cấm để xác minh rằng cấu hình Fail2ban của bạn đang hoạt động.
Bước 5: Thử nghiệm Fail2Ban Policies
Điều quan trọng là phải kiểm tra các chính sách Fail2ban của bạn để đảm bảo chúng chặn lưu lượng truy cập như mong đợi. Để thực hiện việc này, hãy điều hướng đến server của bạn trong trình duyệt web cục bộ. Ở lời nhắc xác thực Nginx, liên tục nhập thông tin đăng nhập không chính xác. Sau vài lần thử, server sẽ hoàn toàn ngừng phản hồi cho bạn, như thể kết nối của bạn bị ngắt:Nếu bạn nhìn vào trạng thái của cấu hình
nginx-http-auth
với fail2ban-client
. Bạn sẽ thấy địa chỉ IP của mình bị cấm trên trang web:
Bạn cũng có thể xem quy tắc mới bằng cách kiểm tra đầu ra iptables
. iptables
là lệnh tương tác với các quy tắc tường lửa và port cấp thấp trên server của bạn. Nếu bạn đã làm theo hướng dẫn của chúng tôi để thiết lập server ban đầu, bạn sẽ sử dụng ufw
để quản lý các quy tắc tường lửa ở cấp cao hơn. chạy iptables -S
sẽ hiển thị cho bạn tất cả các quy tắc tường lửa mà ufw
đã tạo:
Nếu bạn chuyển đầu ra của iptables -S
thành grep
để tìm kiếm trong các quy tắc đó cho chuỗi f2b
. Bạn có thể thấy các quy tắc đã được thêm vào bởi fail2ban:
Dòng chứa REJECT --reject-with icmp-port-
không thể truy cập đã được Fail2ban thêm vào và sẽ phản ánh địa chỉ IP của máy cục bộ của bạn. Khi bạn hài lòng với các rules đang hoạt động, bạn có thể bỏ cấm địa chỉ IP của mình với fail2ban-client
bằng cách nhập:
Bây giờ bạn có thể thử xác thực lại một lần nữa.
Kết luận
Fail2ban cung cấp rất nhiều tính năng linh hoạt để xây dựng các chính sách 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 tệp mà nó phụ thuộc vào trong /etc/fail2ban/filter.d
và thư mục /etc/fail2ban/action.d
. Bạn có thể tìm thấy nhiều phần để điều chỉnh và thay đổi khi nhu cầu của bạn cao hơn. Bảo vệ server của bạn bằng fail2ban
có thể cung cấp cho bạn một hướng cơ sở bảo mật hữu ích.