Mình chia sẻ lại các bước cấu hình Nginx để chặn truy cập từ một quốc gia nào đó hoàn toàn miễn phí dùng GeoIP module.
Cách này sẽ sử dụng cơ sở dữ liệu IP của MaxMind GeoIP để xác định quốc gia của khách truy cập. Yêu cầu Nginx phải được kích hoạt module nginx-module-geoip thì mới dùng được.
Trong bài mình sử dụng CentOS 7, phiên bản CentOS khác hoặc hệ điều hành khác thao tác cũng tương tự.
Cài đặt Nginx với GeoIP module
Nginx kể từ phiên bản v. 1.9.11 đã hỗ trợ dynamic module nên chúng ta không còn phải compile lại Nginx từ đầu như trước nữa.
– Đảm bảo server kích hoạt EPEL và Nginx repository.
– Cài đặt nginx-module-geoip
yum install nginx-module-geoip
– Thêm dòng sau vào đoạn đầu file /etc/nginx/nginx.conf
load_module "modules/ngx_http_geoip_module.so";
– Kiểm tra Nginx và khởi động lại nếu không có vấn đề gì:
nginx -t service nginx restart
Lấy dữ liệu GeoLite2
– Đăng ký tài khoản MaxMind miễn phí: https://www.maxmind.com/en/geolite2/signup
– Đặt mật khẩu cho tài khoản rồi lấy AccountID và LicenseKey, chọn versions older than 3.1.1.
– Cập nhật thông tin AccountID và LicenseKey trong file /etc/GeoIP.conf
– Cập nhật cơ sở dữ liệu IP GeoLite2 với lệnh:
geoipupdate
Có thể phải chờ 5 – 10 phút mới chạy được lệnh trên. Nếu như không có output nào xuất hiện tức là bạn đã cập nhật xong, dữ liệu sẽ lưu trong thư mục /usr/share/GeoIP/
Khi cần cài đặt trên server khác bạn chỉ cần copy lại AccountID và LicenseKey là được.
Cấu hình Nginx dùng GeoIP
Chỉnh sửa nội dung file /etc/nginx/nginx.conf
, thêm đoạn sau vào block http {}
, trước tất cả các dòng include:
geoip_country /usr/share/GeoIP/GeoIP.dat; map $geoip_country_code $allowed_country { default yes; RU no; AO no; }
Ý nghĩa đoạn code ví dụ trên là cho phép tất cả các nước truy cập, loại trừ Russia và Angola. Xem thêm danh sách country code.
Tiếp theo, chỉnh file cấu hình tên miền muốn chặn để sử dụng biến $allowed_country
đã map, nên sử dụng ngay sau dòng server_name
. Đoạn code chặn như sau:
if ($allowed_country = no) { return 444; }
Kiểm tra Nginx và khởi động lại nếu không có vấn đề gì:
nginx -t service nginx restart
Giờ test thử nếu thành công bạn sẽ thấy thông báo chặn truy cập như sau:
Chúc bạn thành công.
sao em bi loi nay a No match for argument: nginx-module-geoip
Làm hướng dẫn cho Ubuntu với Luân ơi
Ubuntu không xài nên khó rồi
Nay mình thử cấu hình hocvps mà k thành công, Dòng thử bỏ vào từng dòng server_name nhưng k được, có ae nào dùng ok k?
Mình dùng nè.
cho mình hỏi cái dòng server_name mình đặt thử từng chỗ r mà khi truy cập nó báo lỗi 520 là sao nhỉ? Mình có dùng ssl của cloudflare và bật đám mây vàng lun.
Dạo này mấy thằng CN, Ấn nó ddos suốt
Nếu dùng dịch vụ Cloudflare thì đâu cần phải cài đặt thủ công Nginx làm gì cho mất thời gian bạn ơi.
Link hướng dẫn này chi tiết nè: https://www.alphr.com/block-country-cloudflare/
Ngon cơm
mình mới cài thử cập nhật ID vs key vô chạy lệnh : geoipupdate nó báo lỗi ” Received an unexpected HTTP status code of 401 from https://updates.maxmind.com/app/update_secure?db_md5=00000000000000000000000000000000&challenge_md5=XXXXX0e8a6c93&user_id=XXXX&edition_id=GeoLite2-Country:
Invalid account ID or license key”
có ai gặp tình trạng lỗi như mình k
Edit file GeoIP.conf theo dạng ( for versions < 3.1.1. )
#
UserId
is from your MaxMind account.UserId
#
LicenseKey
is from your MaxMind accountLicenseKey
#
ProductIds
is from your MaxMind account.ProductIds GeoLite2-ASN GeoLite2-City GeoLite2-Country
Mình có làm theo hướng dẫn của 1 bạn trên github giống như bạn, nhưng vẫn báo lỗi
Khi tạo Licensekey:
Old versions of our GeoIP Update program use a different license key format. Will this key be used for GeoIP Update?
Chọn: Yes
Chọn tiếp vào :
Generate a license key and config file for use with geoipupdate versions older than 3.1.1.
This key will be stored in an unhashed format.
Rồi Confirm để nó tạo mã cho phiên bản thấp hơn 3.1
Rồi làm theo bước ở trên là được
Lúc đầu mình tích chọn mục đầu, giờ mới tạo cái mục dưới như bạn nói thì vẫn báo lỗi như trên..k bít bị j nữa
Chú ý ở bản > 3.1 của GeoIP.conf
UserId sẽ thay là AccountID
ProductIds sẽ thay là EditionIDs
Lưu ý: Nên tạo Licen mới
cám ơn bạn đã thành công
HocVPS đã hoạt động ngon lành lại chưa anh Luân ? Mới vào lại thì thấy đã support Rocky Linux 8, Ubuntu 18.04 hoặc Ubuntu 20.04 rồi
Bên Nhân Hòa phát triển thấy cũng ổn đó bác
Là Nhân Hoà đang phát triển trên nền tảng của Hocvps hả bác?
Đúng rồi bác. Bác Luân chuyển nhượng lại Hocvps cho Nhân Hoà phát triển
ngon rồi bạn, mình xài hocvps cho các site chính khá ok
Chắc phải test thử rồi, hồi trước xài Hocvps bao nhẹ
Vậy có Bác nào dùng hocvps trên Ubuntu chưa cho xin ít review nào … từ cài hocvps trên CentOS bị mình ko dùng hocvps .. giờ thấy phát triển trên Ubuntu nên muốn quay lại nhưng vẫn còn ngại
Em là chặn china với ấn độ, hai thằng này chẳng được gì mà request vào site em suốt.
Mình cũng chặn TQ. Toàn vào tìm lỗi WP phá Web .