Giới thiệu Khi kết nối với máy chủ của bạn thông qua SSH có thể rất an toàn, chương trình SSH chính nó là một dịch vụ mà phải được tiếp xúc với Internet để hoạt động đúng. Điều này đi kèm với một số rủi ro tiềm tàng và cung cấp một hướng của cuộc tấn công do những kẻ xấu gây nên . Một dịch vụ gọi là Fail2ban có thể giảm thiểu vấn đề này bằng cách tạo ra quy tắc tự động thay đổi cấu hình iptables firewall của bạn dựa trên một số định sẵn của những lần đăng nhập không thành công. Điều này sẽ cho phép các máy chủ của bạn để đối phó với những nỗ lực truy cập bất hợp pháp mà không cần sự can thiệp từ bạn. Trong hướng dẫn này, chúng tôi sẽ trình bày cách cài đặt và sử dụng Fail2ban trên một máy chủ CentOS 7. Cài đặt Fail2ban trên CentOS 7 Khi Fail2ban không có sẵn trong kho CentOS gói chính thức, nó được đóng gói cho các dự án EPEL. EPEL, thường trực cho Gói bổ sung cho Enterprise Linux, có thể được cài đặt với một gói phần mềm phát hành mà có sẵn từ CentOS: Mã: sudo yum install epel-release Bạn sẽ được nhắc nhở để tiếp tục --- bấm y, sau đó ấn Enter: Mã: yum prompt Transaction Summary ============================================================================ Install 1 Package Total download size: 14 k Installed size: 24 k Is this ok [y/d/N]: y Bây giờ chúng ta sẽ có thể cài đặt các gói fail2ban: Mã: sudo yum install fail2ban Một lần nữa, bấm y và Enter khi được nhắc để tiếp tục. Một khi đã cài đặt xong, sử dụng systemctl để kích hoạt dịch vụ fail2ban: Mã: sudo systemctl enable fail2ban Cấu hình cài đặt cục bộ Các dịch vụ Fail2ban giữ các tập tin cấu hình của nó trong thư mục /etc/fail2ban. Ở đó, bạn có thể tìm thấy một tập tin với giá trị mặc định được gọi jail.conf. Kể từ khi tập tin này có thể được ghi đè bởi các gói tin nâng cấp, chúng ta không nên chỉnh sửa nó tại chỗ. Thay vào đó, chúng tôi sẽ viết một tập tin mới được gọi là jail.local. Bất kỳ giá trị quy định tại jail.local sẽ ghi đè các jail.conf. jail.conf chứa một phần [DEFAULT], tiếp theo là phần cho các dịch vụ cá nhân. jail.local có thể ghi đè lên bất kỳ của các giá trị. Ngoài ra, các file trong /etc/fail2ban/jail.d/ có thể được sử dụng để ghi đè lên các thiết lập trong cả hai tập tin. Tập tin được áp dụng theo trình tự sau: Mã: /etc/fail2ban/jail.conf /etc/fail2ban/jail.d/*.conf, alphabetically /etc/fail2ban/jail.local /etc/fail2ban/jail.d/*.local, alphabetically Bất kỳ tập tin có thể chứa một phần [DEFAULT], thực hiện đầu tiên, và cũng có thể chứa phần cho các nhà tù cá nhân. Giá trị cuối cùng đặt cho một tham số đã cho được ưu tiên. Hãy bắt đầu bằng cách viết một phiên bản rất đơn giản của jail.local. Mở một tập tin mới sử dụng nano mới (hay một trình xử lý của bạn lựa chọn): Mã: sudo nano /etc/fail2ban/jail.local Dán các mã sau: Mã: [DEFAULT] # Ban hosts for one hour: bantime = 3600 # Override /etc/fail2ban/jail.d/00-firewalld.conf: banaction = iptables-multiport [sshd] enabled = true Điều này sẽ ghi đè ba thiết lập: Nó đặt một bantime mặc định mới cho tất cả các dịch vụ, đảm bảo chúng tôi đang sử dụng iptables để cấu hình tường lửa, và cho phép các nhà tù sshd. Thoát và lưu tập tin mới (trong nano, nhấn Ctrl-X để thoát ra, y để lưu. và Enter để xác nhận tên tập tin). Bây giờ chúng ta có thể khởi động lại dịch vụ fail2ban sử dụng systemctl: Mã: sudo systemctl restart fail2ban Lệnh systemctl sẽ kết thúc mà không có bất kỳ đầu ra. Để kiểm tra xem các dịch vụ đang chạy, chúng ta có thể sử dụng fail2ban-client: Mã: sudo fail2ban-client status Mã: Output Status |- Number of jail: 1 `- Jail list: sshd Bạn cũng có thể nhận được thông tin chi tiết hơn về một nhà tù cụ thể: Mã: sudo fail2ban-client status sshd Khám phá cài đặt sẵn Các phiên bản của jail.local chúng ta định nghĩa ở trên là một khởi đầu tốt, nhưng bạn có thể muốn điều chỉnh một số thiết lập khác. Mở jail.conf, và chúng tôi sẽ xem xét một số mặc định. Nếu bạn quyết định thay đổi bất kỳ những giá trị này, hãy nhớ rằng chúng nên được sao chép vào phần thích hợp của jail.local và điều chỉnh ở đó, chứ không phải là sửa đổi tại chỗ. Mã: sudo nano /etc/fail2ban/jail.conf Cài đặt mặc định cho tất cả các nhà tù Đầu tiên, di chuyển qua phần [DEFAULT]. Mã: ignoreip = 127.0.0.1/8 Bạn có thể điều chỉnh các địa chỉ nguồn mà Fail2ban bỏ qua bằng cách thêm giá trị cho các tham số ignoreip. Hiện nay, nó được cấu hình không cấm bất kỳ lưu lượng đến từ các máy tính địa phương. Bạn có thể bao gồm địa chỉ bổ sung để bỏ qua bằng cách thêm chúng vào cuối của các tham số, cách nhau bởi một dấu cách. Mã: bantime = 600 Các tham số bantime thiết lập chiều dài của thời gian mà khách hàng sẽ bị cấm khi họ đã thất bại trong việc xác thực một cách chính xác. Điều này được đo bằng giây. Theo mặc định, điều này được thiết lập đến 600 giây, hoặc 10 phút. Mã: findtime = 600 maxretry = 3 Hai thông số tiếp theo mà bạn muốn chú ý đến là findtime và maxretry. Chúng làm việc với nhau để thiết lập các điều kiện mà một khách hàng nên bị cấm. Biến maxretry thiết lập số lần thử một khách hàng có để xác thực trong một cửa sổ thời gian được xác định bởi findtime, trước khi bị cấm. Với các thiết lập mặc định, Fail2ban sẽ cấm một khách hàng cố gắng để đăng nhập 3 lần mà không thành công trong một cửa sổ 10 phút. Mã: destemail = root@localhost sendername = Fail2Ban mta = sendmail Nếu bạn muốn cấu hình các cảnh báo email, bạn có thể cần phải ghi đè lên destemail, sendername, và các thiết lập mta. Tham số destemail thiết lập địa chỉ email sẽ nhận thông điệp cấm.Tham số sendername thiết lập giá trị của "From" trong email. Tham số cấu hình mta cho biết những dịch vụ email sẽ được sử dụng để gửi email. Mã: action = $(action_)s Tham số này cấu hình các hành động mà Fail2ban cần khi nó muốn ra lệnh cấm. Các action_ giá trị được định nghĩa trong tập tin ngay trước thông số này. Hành động mặc định là chỉ cần cấu hình tường lửa để từ chối lưu lượng từ các máy chủ vi phạm cho đến khi thời gian cấm trôi qua. Nếu bạn muốn cấu hình các cảnh báo email, bạn có thể ghi đè lên giá trị này từ action_ sang 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ó sang action_mwl. Bạn sẽ muốn chắc chắn rằng bạn có các thiết lập mail phù hợp cấu hình nếu bạn chọn để sử dụng mail thông báo. Cài đặt cho các nhà tù cá nhân Sau [DEFAULT], chúng ta sẽ gặp phải các phần cấu hình nhà tù cá nhân cho các dịch vụ khác nhau. Chúng thường sẽ bao gồm một cổng bị cấm và một logpath để giám sát cho các nỗ lực truy cập độc hại. Ví dụ, các nhà tù SSH, chúng tôi đã được kích hoạt trong jail.local có các cài đặt sau: Mã: [sshd] port = ssh logpath = %(sshd_log)s Trong trường hợp này, ssh là một biến được xác định trước cho các cổng SSH tiêu chuẩn, và %(sshd_log)s sử dụng một giá trị được xác định ở nơi khác trong cấu hình tiêu chuẩn của Fail2ban (điều này giúp giữ portable jail.conf giữa các hệ điều hành khác nhau). Một thiết lập bạn có thể gặp phải là các bộ lọc sẽ được sử dụng để quyết định xem liệu một dòng trong một nhật ký chỉ ra một xác thực thất bại. Các giá trị lọc thực sự là một tham chiếu đến một tập tin nằm trong thư mục /etc/fail2ban/filter.d, với phần mở rộng conf bị xóa bỏ. Tập tin này có chứa các biểu thức thông thường để xác định liệu một dòng trong nhật ký là xấu. Chúng tôi sẽ không giới thiệu đến tập tin này vào chiều sâu trong hướng dẫn này, bởi vì nó là khá phức tạp và các thiết lập được xác định trước phù hợp với dòng phù hợp tốt. Tuy nhiên, bạn có thể xem những loại của các bộ lọc có sẵn bằng cách vào thư mục đó: Mã: ls /etc/fail2ban/filter.d Nếu bạn nhìn thấy một tập tin có vẻ như liên quan tới một dịch vụ mà bạn đang sử dụng, bạn nên mở nó bằng một trình soạn thảo văn bản. Hầu hết các tập tin được khá tốt nhận xét và bạn sẽ có thể cho biết những gì loại tình trạng kịch bản được thiết kế để bảo vệ chống lại. Hầu hết các bộ lọc này có các phần thích hợp (vô hiệu hóa) trong jail.conf rằng chúng ta có thể kích hoạt trong jail.local nếu muốn. Ví dụ, giả vờ rằng chúng tôi đang phục vụ một trang web sử dụng Nginx và nhận ra rằng một phần mật khẩu bảo vệ các trang web của chúng tôi là nhận được với nỗ lực đăng nhập. Chúng tôi có thể nói với Fail2ban để sử dụng các tập tin nginx-http-auth.conf để kiểm tra các điều kiện này trong tập tin /var/log/nginx/error.log. Đây là thực tế đã được thiết lập trong một phần gọi là [nginx-http-auth] trong tập tin /etc/fail2ban/jail.conf của chúng tôi. Chúng tôi sẽ chỉ cần thêm một tham số kích hoạt cho các nhà tù nginx-http-auth đến jail.local: Mã: [DEFAULT] # Ban hosts for one hour: bantime = 3600 # Override /etc/fail2ban/jail.d/00-firewalld.conf: banaction = iptables-multiport [sshd] enabled = true [nginx-http-auth] enabled = true Và khởi động lại dịch vụ fail2ban: Mã: sudo systemctl restart fail2ban Giám sát Fail2ban Logs và Firewall Configuration Điều quan trọng là phải biết rằng một dịch vụ như Fail2ban đang làm việc như dự định. Bắt đầu bằng cách sử dụng systemctl để kiểm tra tình trạng của các dịch vụ: Mã: sudo systemctl status fail2ban Nếu một cái gì đó có vẻ sai lệch ở đây, bạn có thể khắc phục bằng cách kiểm tra các bản ghi cho các đơn vị fail2ban kể từ khi khởi động lần cuối: Mã: sudo journalctl -b -u fail2ban Tiếp theo, sử dụng fail2ban-client để truy vấn trạng thái tổng thể của fail2ban-máy chủ, hoặc bất kỳ nhà tù cá nhân: Mã: sudo fail2ban-client status sudo fail2ban-client status jail_name Thực hiện theo log Fail2ban cho bản ghi của các hành động gần đây (nhấn Ctrl-C để thoát): Mã: sudo tail -F /var/log/fail2ban.log Liệt kê các quy định hiện hành cấu hình cho iptables: Mã: sudo iptables -L Hiển thị quy tắc iptables trong một định dạng mà phản ánh các lệnh cần thiết để cho phép từng quy tắc: Mã: sudo iptables -S