Khám Phá Cách Chặn GeoIP Trên Ubuntu 20.04: Bí Quyết Đơn Giản Nhưng Hiệu Quả Để Bảo Vệ Máy Chủ Của Bạn
Chuyển Đổi Từ MaxMind đến db-ip: Làm Thế Nào Để Tối Ưu Hóa Quá Trình Chặn GeoIP Trên Ubuntu 20.04
Bài viết này hướng dẫn bạn chặn GeoIP trên Ubuntu 16.04LTS và 18.04LTS, và giờ đây nó cũng hoạt động trên Ubuntu 20.04LTS.
Trong phiên bản mới này, script xt_geoip_build, một phần của gói xtables-addons, đã chuyển từ việc sử dụng cơ sở dữ liệu GeoIP của MaxMind sang db-ip. Điều này làm cho quá trình trở nên đơn giản hơn, bởi vì bạn không cần phải đăng ký tài khoản MaxMind hoặc tải xuống và chuyển đổi cơ sở dữ liệu MaxMind nữa.
Dưới đây là các bước cụ thể:
1. Cài đặt các gói cần thiết
sudo apt-get update; sudo apt-get -y upgrade
sudo apt-get install curl unzip perl
sudo apt-get install xtables-addons-common
sudo apt-get install libtext-csv-xs-perl libmoosex-types-netaddr-ip-perl
2. Tạo thư mục cho dữ liệu GeoIP:
sudo mkdir /usr/share/xt_geoip
3. Tạo một script để làm tất cả công việc (/usr/local/bin/geo-update.sh
):
#!/bin/bash
MON=$(date +"%m")
YR=$(date +"%Y")
wget https://download.db-ip.com/free/dbip-country-lite-${YR}-${MON}.csv.gz -O /usr/share/xt_geoip/dbip-country-lite.csv.gz
gunzip /usr/share/xt_geoip/dbip-country-lite.csv.gz
/usr/lib/xtables-addons/xt_geoip_build -D /usr/share/xt_geoip/ -S /usr/share/xt_geoip/
rm /usr/share/xt_geoip/dbip-country-lite.csv
Khi bạn chạy script này, nó sẽ thêm dữ liệu GeoIP vào cơ sở dữ liệu, chuẩn bị cho lần bạn sử dụng đầu tiên. Để cơ sở dữ liệu luôn được cập nhật, bạn nên tạo một công việc cron, nó sẽ tự động chạy script này theo một lịch trình định kỳ.
4. Kiểm tra xem mọi thứ đã hoạt động chưa bằng cách chạy các lệnh sau:
modprobe xt_geoip
lsmod | grep ^xt_geoip
Kết quả output nên giống như sau:
xt_geoip 20480 0
x_tables 32768 4 xt_geoip,iptable_filter,ip_tables,xt_tcpudp
5. Thêm một rule:
iptables -A INPUT -m geoip -p tcp --dport 25 --src-cc RU,CN -j DROP
Quy tắc này sẽ chặn tất cả lưu lượng từ RU và CN đến cổng 25. Lưu ý rằng quy tắc này sẽ không được lưu lại sau khi khởi động lại.
6. Để quy tắc vẫn còn hiệu lực sau khi bạn khởi động lại máy, bạn cần thêm quy tắc đó vào các tệp sau:
/etc/ufw/before.rules
/etc/ufw/before6.rules
Đơn giản chỉ cần chèn quy tắc trước dòng có chứa từ "COMMIT" ở cuối tệp. Ví dụ, để thêm quy tắc ACCEPT mà chúng ta đã nói ở trên, bạn chỉ cần thêm dòng sau vào tệp:
-A ufw-before-input -m geoip -p tcp --dport 22 --src-cc US -j ACCEPT
Nếu bạn dự định áp dụng các quy tắc quốc gia giống nhau cho nhiều cổng, thì nó sẽ trông như thế này:
-A ufw-before-input -m geoip -p tcp -m multiport --dports 22,993,587 --src-cc US -j ACCEPT
Nếu bạn muốn chặn tất cả lưu lượng từ một quốc gia nhất định không quan tâm đến cổng nào đang được truy cập, bạn có thể bỏ qua phần --dport
trong quy tắc iptables. Ví dụ, nếu bạn muốn chặn tất cả lưu lượng từ Nga (RU) và Trung Quốc (CN), bạn có thể sử dụng quy tắc sau:
iptables -A INPUT -m geoip --src-cc RU,CN -j DROP
Lưu ý rằng quy tắc này sẽ chặn tất cả lưu lượng từ các quốc gia được chỉ định, bao gồm cả lưu lượng web, email, SSH, và bất kỳ dịch vụ nào khác mà bạn có thể đang chạy trên máy chủ của mình. Hãy chắc chắn rằng bạn hiểu rõ hậu quả của việc chặn lưu lượng như vậy trước khi áp dụng quy tắc này.