Thứ ba, 27/03/2018 | 00:00 GMT+7

Cách chặn nỗ lực đăng nhập SSH không mong muốn với PyFilter trên Ubuntu 16.04

Secure Shell (SSH) là một giao thức mạng mật mã để vận hành các dịch vụ mạng một cách an toàn. Nó thường được sử dụng để điều khiển từ xa hệ thống máy tính hoặc để truyền file . Khi SSH được tiếp xúc với internet công cộng, nó sẽ trở thành mối lo ngại về bảo mật. Ví dụ: bạn sẽ thấy các bot đang cố gắng đoán password của bạn thông qua các phương pháp brute force.

PyFilter nhằm mục đích lọc ra tất cả các yêu cầu đăng nhập bất hợp lệ vào server của bạn và chặn chúng nếu quá nhiều được gửi. Nó hoạt động bằng cách đọc các file log và kiểm tra xem một yêu cầu không thành công có đến từ cùng một địa chỉ IP trong một khoảng thời gian user có thể cấu hình hay không. Sau đó, nó thêm các luật vào firewall nếu nó ghi lại quá nhiều lần thử không thành công, từ chối khả năng kết nối với server của bạn.

Trong hướng dẫn này, bạn sẽ cài đặt và cấu hình PyFilter để chặn các yêu cầu SSH. Sau đó, bạn sẽ cài đặt PyFilter làm dịch vụ và tùy chọn cấu hình đồng bộ hóa cấm server chéo, một tính năng cho phép nhiều server chia sẻ danh sách địa chỉ IP bị cấm và cho phép PyFilter ghi lại dữ liệu vị trí về địa chỉ IP. Cuối cùng, bạn sẽ khám phá cách bỏ cấm địa chỉ IP.

Yêu cầu

Để hoàn thành hướng dẫn này, bạn cần :

Bước 1 - Download và cấu hình PyFilter

Ta sẽ download PyFilter bằng cách sao chép repository của nó từ Github. Chuyển sang folder chính của bạn và sao chép repository :

  • cd ~
  • git clone https://github.com/Jason2605/PyFilter.git

Thao tác này sẽ tạo một folder có tên là PyFilter . Di chuyển folder này vào folder /usr/local :

  • sudo mv PyFilter /usr/local/PyFilter

Sau đó thay đổi thành folder /usr/local/PyFilter :

  • cd /usr/local/PyFilter

Tiếp theo, ta cần tạo một file cấu hình. PyFilter đi kèm với một file cấu hình mặc định có tại Config/config.default.json . Ta sẽ sao chép nội dung này và chỉnh sửa version đã sao chép thay vì chỉnh sửa trực tiếp file mặc định. Bằng cách này, nếu có sự cố xảy ra, bạn có file cấu hình mặc định để so sánh.

Sao chép file cấu hình mặc định:

  • sudo cp Config/config.default.json Config/config.json

Bạn có thể sử dụng lệnh less để xem nội dung của file cấu hình:

  • less Config/config.json

Cài đặt mặc định yêu cầu các yêu cầu phải trong vòng 5 giây kể từ lần yêu cầu cuối cùng và điều đó cần phải diễn ra 5 lần, chúng đủ tốt để bắt đầu. Hãy chạy PyFilter và đảm bảo mọi thứ hoạt động.

Bước 2 - Chạy PyFilter

Download PyFilter bao gồm một tập lệnh có tên run.sh mà bạn nên sử dụng để chạy PyFilter.

Đầu tiên, thay đổi các quyền trên tập lệnh để làm cho nó có thể thực thi được.

  • sudo chmod +x run.sh

Sau khi quyền đã được cấp, hãy chạy tập lệnh để khởi động PyFilter:

  • ./run.sh

PyFilter sẽ bắt đầu xem log và bạn sẽ thấy kết quả khi các sự kiện xảy ra:

Output
No file to check within rule: Mysql No file to check within rule: Apache No file to check within rule: Nginx Checking Ssh logs

Theo mặc định, PyFilter cấm các IP thực hiện năm yêu cầu thất bại trở lên xảy ra trong vòng 5 giây kể từ yêu cầu không thành công trước đó. Bạn có thể thay đổi điều này trong file cấu hình PyFilter.

Các kết quả này cũng được ghi vào folder /usr/local/PyFilter/Log .

Khi một IP đã đạt đến giới hạn cho phép cấm, bạn sẽ thấy kết quả tương tự như sau:

Output
2018-03-22 14:18:18 Found IP: 203.0.113.13 from server: your_server_name.

Lưu ý : Nếu bạn vô tình tự khóa mình khỏi Server vì bạn đã tự cấm, bạn có thể làm theo hướng dẫn Cách sử dụng Control panel DigitalOcean để truy cập Server để đăng nhập lại. Sau đó, làm theo các bước trong Bước 6 để xóa IP bị cấm .

Để đóng PyFilter, hãy nhấn CTRL+C

Bây giờ hãy cài đặt PyFilter như một dịch vụ để nó chạy tự động.

Bước 3 - Tạo dịch vụ cho PyFilter

Đến đây bạn biết rằng PyFilter hoạt động, hãy cấu hình nó để chạy như một dịch vụ để nó khởi động mỗi khi ta khởi động lại server .

Trong folder PyFilter , có một tập lệnh tên là install.sh tạo ra một dịch vụ cho PyFilter và cho phép nó chạy khi khởi động hệ thống.

Sửa đổi tập lệnh để bạn có thể thực thi nó:

  • sudo chmod +x install.sh

Sau đó chạy tập lệnh:

  • ./install.sh

Bạn sẽ thấy kết quả này, cho biết quá trình cài đặt đã thành công:

Output
Service created and enabled, check the status of it by using "sudo systemctl status PyFilter"

Vì vậy, hãy làm điều đó đảm bảo mọi thứ đang chạy chính xác:

  • sudo systemctl status PyFilter

Bạn sẽ thấy kết quả này, cho thấy rằng dịch vụ đang active :

Output
● PyFilter.service - PyFilter Loaded: loaded (/etc/systemd/system/PyFilter.service; enabled; vendor preset: enabled) Active: <^>active^> (running) since Wed 2018-03-21 18:55:35 UTC; 12s ago Main PID: 8383 (bash) CGroup: /system.slice/PyFilter.service ├─8383 bash /usr/local/PyFilter/run.sh ├─8384 sudo python3 run.py └─8387 python3 run.py

Nếu bạn thấy lỗi, hãy xem lại các bước cài đặt.

Tiếp theo, hãy xem cách cấu hình PyFilter để chia sẻ địa chỉ IP bị cấm với các server khác.

Bước 4 - Cấu hình PyFilter cho Đồng bộ hóa Cấm nhiều server (Tùy chọn)

Đồng bộ hóa lệnh cấm server chéo cho phép đồng bộ hóa địa chỉ IP bị cấm với tất cả các server khác sử dụng PyFilter để bảo vệ chúng và cấm địa chỉ đó ngay cả khi địa chỉ đó chưa đáp ứng đủ điều kiện bị cấm. Điều này nghĩa là nó có thể đi trước một bước so với các bot tiềm năng nhắm đến vào các hệ thống khác của bạn vì IP đã bị cấm.

Như đã nêu trong yêu cầu , bạn cần cài đặt và cấu hình Redis.

Bạn cũng cần module Python redis , mà bạn có thể cài đặt bằng pip :

  • pip3 install redis

Sau đó, chỉnh sửa file cấu hình của bạn để sử dụng Redis thay vì SQLite. Mở file Config/config.json trong editor của bạn:

  • nano Config/config.json

Xác định vị trí dòng sau:

Config / config.json
"database": "sqlite" 

Thay đổi sqlite thành redis :

Config / config.json
"database": "redis" 

Tiếp theo, thay đổi thông tin kết nối Redis. Tìm phần này của file :

Config / config.json
  "redis": {     "host": "127.0.0.1",     "password": null,     "database": 0,     "sync_bans": {       "active": true,       "name": "your_hostname",       "check_time": 600     }   }, 

Sửa đổi phần này để nó bao gồm chi tiết kết nối cho server Redis của bạn. Sau đó, trong phần sync_bans , hãy đổi name server của bạn. Tên này phải là duy nhất cho từng hệ thống riêng lẻ đang chạy PyFilter sử dụng cùng một server Redis để đồng bộ hóa lệnh cấm trên nhiều server hoạt động chính xác.

Lưu file và thoát khỏi editor . Sau đó, khởi động lại PyFilter để áp dụng các thay đổi này:

  • sudo systemctl restart PyFilter

PyFilter hiện đã được cài đặt và đang chạy.

Bước 5 - Cấu hình PyFilter để Thu thập Dữ liệu Vị trí về Địa chỉ IP (Tùy chọn)

PyFilter có thể truy xuất dữ liệu vị trí về IP bị cấm để cung cấp thông tin thống kê về phần lớn các cuộc tấn công đến từ đâu. Mô-đun tùy chọn này sẽ nối thông tin này vào log của PyFilter.

Để sử dụng tính năng này, trước tiên bạn cần có module Python geoip2 , bạn có thể cài đặt module này bằng pip :

  • pip3 install geoip2

Khi bạn đã cài đặt module này, hãy khởi động lại PyFilter để nó nhận ra module mới:

  • sudo systemctl restart PyFilter

Bây giờ, khi bạn thấy địa chỉ IP bị cấm, bạn sẽ thấy thông tin bổ sung về IP:

Output
2018-03-22 14:18:18 Found IP: 203.0.113.13 from server: your_server_name. The IP was from United Kingdom.

PyFilter hiện đang ghi lại thành công các yêu cầu bắt nguồn từ quốc gia nào.

Cuối cùng, hãy xem cách bỏ cấm địa chỉ.

Bước 6 - Bỏ cấm địa chỉ IP

PyFilter hoàn toàn là một phương tiện cấm địa chỉ IP bằng cách tạo ra các luật iptables. Khi cấm IP, nó sẽ cập nhật các luật firewall và sau đó lưu ảnh chụp nhanh của các luật vào các file /usr/local/PyFilter/Config/blacklist.v4/usr/local/PyFilter/Config/blacklist.v6 .

Dưới đây là ví dụ về một số địa chỉ IPv4 bị cấm trong /usr/local/PyFilter/Config/blacklist.v4 :

/usr/local/PyFilter/Config/blacklist.v4
# Generated by iptables-save v1.6.0 on Thu Mar 22 19:53:04 2018 *filter :INPUT ACCEPT [217:30580] :FORWARD ACCEPT [0:0] :OUTPUT ACCEPT [249:30796] -A INPUT -s 203.0.113.13/32 -j DROP -A INPUT -s 203.0.113.14/32 -j DROP -A INPUT -s 203.0.113.15/32 -j DROP COMMIT # Completed on Thu Mar 22 19:53:04 2018 

Để bỏ cấm địa chỉ IP này, hãy mở file blacklist được liên kết trong editor của bạn:

  • sudo nano /usr/local/PyFilter/Config/blacklist.v4

Xóa các luật iptables được liên kết khỏi file . Trong trường hợp này, ta đã xóa 203.0.113.13 khỏi file :

/usr/local/PyFilter/Config/blacklist.v4
# Generated by iptables-save v1.6.0 on Thu Mar 22 19:53:04 2018 *filter :INPUT ACCEPT [217:30580] :FORWARD ACCEPT [0:0] :OUTPUT ACCEPT [249:30796] -A INPUT -s 203.0.113.14/32 -j DROP -A INPUT -s 203.0.113.15/32 -j DROP COMMIT # Completed on Thu Mar 22 19:53:04 2018 

Sau đó, lưu file và đóng editor . Khởi động lại PyFilter bằng sudo systemctl restart PyFilter và PyFilter sẽ cập nhật các luật firewall của bạn bằng cách sử dụng file này.

Xem Cách liệt kê và xóa luật firewall Iptables để biết thêm về cách quản lý luật với iptables.

Bạn cũng có thể yêu cầu PyFilter bỏ qua các địa chỉ IP nhất định bằng cách thêm chúng vào phần danh sách cho phép trong file /usr/local/PyFilter/Config/config.json .

Kết luận

Đến đây bạn đã cài đặt PyFilter và giám sát các kết nối SSH của bạn .

Để tìm hiểu thêm về từng phần của file cấu hình và cách cấu hình giám sát cho các dịch vụ khác, chẳng hạn như MySQL và Apache, hãy kiểm tra trang web PyFilter. .


Tags:

Các tin liên quan

Cách tự động triển khai ứng dụng Laravel với Trình triển khai trên Ubuntu 16.04
2018-03-23
Cách thiết lập trang web phát triển Jekyll trên Ubuntu 16.04
2018-03-20
Cách cài đặt Ruby on Rails với rbenv trên Ubuntu 16.04
2018-03-15
Cách cài đặt Node.js trên Ubuntu 16.04
2018-03-07
Cách cài đặt và bảo mật Memcached trên Ubuntu 16.04
2018-03-06
Cách cài đặt Buildbot trên Ubuntu 16.04
2018-03-06
Cách quản lý an toàn bí mật với HashiCorp Vault trên Ubuntu 16.04
2018-02-28
Cách bảo mật Roundcube trên Ubuntu 16.04
2018-02-24
Cách cài đặt ứng dụng Webmail của riêng bạn với Roundcube trên Ubuntu 16.04
2018-02-24
Cách thiết lập và sử dụng LXD trên Ubuntu 16.04
2018-02-22