Block IP cho site chạy trên VPS, domain dùng cloudflare

minandmax

Junior
Joined
May 23, 2011
Messages
270
Reactions
114
MR
0.008
Block IP cho site chạy trên VPS VULTR cài CenOS, domain dùng cloudflare

Sau nhiều tháng tìm hiểu, thử đủ mọi cách tìm được trên google cũng như tham khảo ý kiến trên các diễn đàn tin học nhưng đều thất bại.
Hôm nay mình đã tìm giải pháp và xin viết lên đây cho những ai đang cần để tham khảo.

Vì site chạy trên VPS nên không dùng được cách chặn IP theo kiểu .htaccess (cách này dùng tốt với share host).
Vì domain dùng cloudflare nên không dùng được cách chặn IP bằng CSF Firewall.
Vậy dùng cách gì? Dùng firewall của cloudflare.

Bước 1: Lấy dải địa chỉ IP cần chặn (ví dụ VN, chọn VN vì dễ test nhất)
http://www.ip2location.com/blockvisitorsbycountry.aspx

Step 1: Choose IPv4 or IPv6
Chọn IPv4 hoặc IPv6

Step 2: Select the countries from the list you want to block
Chọn VN

Step 3: Choose the output format
CIDR

Click Download sẽ được file .txt chứa dải IP của VN (mở file này bằng notepad++ cho dễ đọc)

Bước 2: Đăng nhập Cloudflare -> Firewall -> Access Rules

Access Rules của Cloudflare có:
+ Block: Không cho phép vào site
+ Whitelist: Cho phép vào site
+ Challenge: Cho phép vào site nhưng có Capcha

Các bạn dễ dàng nhìn thấy chú thích: "Enter an IP, IP range, or two letter country code"


Vậy muốn block VN thì ta chỉ cần nhập VN, chọn Block và click nút ADD là xong. Bạn thử đi, sẽ không được vì Cloudflare chỉ chấp nhận Challenge khi ta nhập VN.
Vậy chỉ còn cách duy nhất và cũng thủ công nhất là lấy từng dải IP ở trên (516 dải) nhập vào, chon Block và click nút ADD.

10 dải IP đầu tiên:

1.52.0.0/14
5.198.248.176/28
14.0.16.0/20
14.160.0.0/11
14.224.0.0/11
23.235.218.160/29
27.0.12.0/22
27.2.0.0/15
27.64.0.0/12
27.118.16.0/20

Thử nhập vào dải thứ nhất: 1.52.0.0/14
Ồ không được rồi, bào lỗi "An IP range (CIDR) must be a /16 or /24"

Mấy tháng trước mình cũng dừng lại ở bước này đây (nếu là các bạn học bên cntt thì chắc sẽ biết ngay phải làm gì, mình ngoài nghề nên chịu chết). Và cách đây ít hôm không biết có quả gì rơi trúng đầu không mà đã nảy ra ý tưởng: sao không biến dải 1.52.0.0/14 về thành các dải /16 hoặc /24

Bài toán đặt ra là thế, Google thôi: CIDR to IP range
http://www.ipaddressguide.com/cidr

Nhập 1.52.0.0/14 và Caculator được:
CIDR Range 1.52.0.0/14
Netmask 255.252.0.0
Wildcard Bits 0.3.255.255
First IP 1.52.0.0
Last IP 1.55.255.255
Total Host 262144

Bây giờ nhập tiếp 1.52.0.0/16 và Caculator được:
CIDR Range 1.52.0.0/16
Netmask 255.255.0.0
Wildcard Bits 0.0.255.255
First IP 1.52.0.0
Last IP 1.52.255.255
Total Host 65536

Bây giờ nhập tiếp 1.53.0.0/16 và Caculator được:
CIDR Range 1.53.0.0/16
Netmask 255.255.0.0
Wildcard Bits 0.0.255.255
First IP 1.53.0.0
Last IP 1.53.255.255
Total Host 65536

Bây giờ nhập tiếp 1.54.0.0/16 và Caculator được:
CIDR Range 1.54.0.0/16
Netmask 255.255.0.0
Wildcard Bits 0.0.255.255
First IP 1.54.0.0
Last IP 1.54.255.255
Total Host 65536

Bây giờ nhập tiếp 1.55.0.0/16 và Caculator được:
CIDR Range 1.55.0.0/16
Netmask 255.255.0.0
Wildcard Bits 0.0.255.255
First IP 1.55.0.0
Last IP 1.55.255.255
Total Host 65536

Các bạn so sánh First IPLast IP của dải đầu tiên với 4 dải bên dưới sẽ thấy dải
1.52.0.0/14 = 1.52.0.0/16 + 1.53.0.0/16 + 1.54.0.0/16 + 1.55.0.0/16

Vậy đã giải được bài toán biến dải /14 thành các dải /16
Để ý thêm một chút các bạn sẽ tìm ra cách biến từ 1.52.0.0/14 thành các dải /16 như sau:
16 - 14 = 2
(2 ^ 2) - 1 = 3 => 52+3=55 => 1.55.0.0/16 là dải cuối cùng
1.52.0.0/14 = 1.52.0.0/16 + 1.53.0.0/16 + 1.54.0.0/16 + 1.55.0.0/16

Ví dụ khác: biến dải 14.160.0.0/11 thành các dải /16
16 - 11 = 5
(2 ^ 5) - 1 = 31 => 160+31=191 => 14.191.0.0/16 là dải cuối cùng
14.160.0.0/11 = 14.160.0.0/16 + 14.161.0.0/16 + 14.162.0.0/16 + 14.163.0.0/16 + ... + 14.191.0.0/16

Với các dải nhỏ hơn /16 thì biến đổi về các dải /16. Với các dải lớn hơn /16 nhưng nhỏ hơn /24 thì biến đổi về các dải /24. Với các dải là /16 hoặc /24 thì không cần biến đổi.


516 dải IP VN biến đổi về các dải /16 và /24 thì sẽ thành bao nhiêu dải?
Một gợi ý nhỏ là chỉ nên biến đổi các dải nhỏ hơn /16 về các dải /16 như vậy là cũng chặn được trên 90% rồi.

Trên đây là cách làm của mình và hiện tại mình cũng chỉ mò được mỗi cách này thôi. Bạn nào có cao kiến hơn xin comment bên dưới để mọi người cùng học tập.
Chúc các bạn thành công!
 
Last edited:
VPS thì bạn muốn làm gì cũng được mà, toàn quyền thì sao lại không chạy được .htaccess ? VPS mình vẫn chặn theo htaccess ok mà.

Với cả hình như cloudflare thích hợp bác nào dùng site tiếng anh, target là mỹ + châu âu. Chơi kiểu tiếng tàu jav bị ảnh hưởng seo....
 
VPS thì bạn muốn làm gì cũng được mà, toàn quyền thì sao lại không chạy được .htaccess ? VPS mình vẫn chặn theo htaccess ok mà.

Với cả hình như cloudflare thích hợp bác nào dùng site tiếng anh, target là mỹ + châu âu. Chơi kiểu tiếng tàu jav bị ảnh hưởng seo....

Mình viết thiếu mất đoạn quan trọng:
Block IP cho site chạy trên VPS VULTR cài CenOS, domain dùng cloudflare
 

Announcements

Today's birthdays

Forum statistics

Threads
418,773
Messages
7,076,173
Members
170,863
Latest member
duy1326

Most viewed of week

Most viewed of week

Back
Top Bottom