Cấu Hình Rate limit Với Caddyserver

14 Likes Comment

Ratelimit là một công cụ cho phép người dùng hạn chế số lượng kết nối đồng thời từ 1 IP, 1 URL của websie tại một thời điểm nhất định, trong bài này mình sẽ hướng dẫn triển khai ratelimit trên caddy server để mọi người hạn chế ddos, và flood http được một phần

Trong phần cài đặt ban đầu mình đã cài mặc định một công cụ ratelimit nếu bạn chưa xem hãy đọc tại đây

Bây giờ chúng ta cần phải cấu hình nó thì mặc định phần mềm hỗ trợ những loại query hạn chế như sau:

path.<var>Giá trị hạn chế tính theo patch truy cập
query.<var>Giá trị hạn chế tính theo query ID GET http
header.<var>Giá trị hạn chế tính theo giá trị header
cookie.<var>Giá trị hạn chế tính theo cookie
body.<var>Giá trị hạn chế tính theo body Post Http
remote.hostGiá trị hạn chế tính theo host
remote.portGiá trị hạn chế tính theo Port truy cập
remote.ipGiá trị hạn chế tính theo IP client
remote.host_prefix.<bits>Giá trị hạn chế tính theo host range
remote.ip_prefix.<bits>Giá trị hạn chế tính theo IP range

Mặc định một cấu hình nó sẽ trông như sau trong caddy file

localhost:8080 {
    route /foo {
        rate_limit {query.id} 2r/m

        respond 200
    }
}

chúng ta có thể thay thế nó thành nhưng giá trị chúng ta mong muốn, trong ví dụ cơ bản trên thì có nghĩa là rate limit đã được cài đặt giới hạn theo query id mỗi một ID chỉ được call 2 request trong 1 phút nếu quá sẽ bị chặn

ở đây mình test khi chưa giới hạn, việc call hoàn toàn thoải mái

Giờ mình sẽ giới hạn lại

Như vậy rate limit đã đạt giới hạn đúng 2 request 1 phút theo cấu hình như bên dưới của mình
{
        order coraza_waf first
}

caddy.manhtuong.net {
        coraza_waf {
                include /etc/caddy/waf/config.conf
                include /etc/caddy/waf/whitelist.conf
                include /etc/caddy/waf/coreruleset/crs-setup.conf.example
                include /etc/caddy/waf/coreruleset/rules/*.conf
        }
        route /foo {
                rate_limit {query.id} 2r/m
    }
    root * /home/caddy/web
    php_fastcgi unix//run/php/php7.4-fpm.sock
    file_server
    log {
        output file /home/caddy/caddy.manhtuong.net.log
        }
}

Lưu ý khi dùng query như mình thì nó giới hạn theo query name mỗi một query name sẽ được gọi tối đa 2 request 1 phút, bạn thay query name thì lại dùng bình thường, trong ví dụ trên id=1 thì đang bị chặn nhưng mình vào id=2 thì nó sẽ bình thường.

Bạn có thể thay thế giá trị {query.id} thành các giá trị khác trong bảng phía trên, nếu bạn muốn áp cho toàn trang thì dùng cấu hình bên dưới

{
        order coraza_waf first
}

caddy.manhtuong.net {
        coraza_waf {
                include /etc/caddy/waf/config.conf
                include /etc/caddy/waf/whitelist.conf
                include /etc/caddy/waf/coreruleset/crs-setup.conf.example
                include /etc/caddy/waf/coreruleset/rules/*.conf
        }
        route /foo {
                rate_limit {query.id} 200r/s
    }
    root * /home/caddy/web
    php_fastcgi unix//run/php/php7.4-fpm.sock
    file_server
    log {
        output file /home/caddy/caddy.manhtuong.net.log
        }
}

Nếu bạn muốn giới hạn theo body var thì dùng cấu hình bên dưới, ở đây mình dùng giá trị var chính là http post parameters để làm limit rate

{
        order coraza_waf first
}

caddy.manhtuong.net {
        coraza_waf {
                include /etc/caddy/waf/config.conf
                include /etc/caddy/waf/whitelist.conf
                include /etc/caddy/waf/coreruleset/crs-setup.conf.example
                include /etc/caddy/waf/coreruleset/rules/*.conf
        }
        route /foo {
                rate_limit {body.id} 200r/s
    }

    }
    root * /home/caddy/web
    php_fastcgi unix//run/php/php7.4-fpm.sock
    file_server
    log {
        output file /home/caddy/caddy.manhtuong.net.log
        }
}

Các bạn lưu ý giá trị rate_limit có thể được tính là r/m (request / phút) r/s (request / giây) tùy từng web mà các bạn điều chỉnh cho phú hợp trong ví dụ của mình thì mình để nó là 200 request trong 1 giây nếu quá số lượng đó thì sẽ block trả về lỗi 429 cho user.

0 0 votes
Article Rating

You might like

Avatar

About the Author: Vô Ưu

Xin chào! Tôi là Vouu, người sáng lập blog này. Tôi là một người yêu thích. Tôi có một công việc ban ngày với tư cách là một chuyên viên bơm vá săm xe các loại, và trang web này là một trong những hoạt động yêu thích của tôi, đặc biệt là trong những lúc rảnh rỗi. Hy vọng bạn thích sử dụng trang web này, và nó sẽ mang lại cho bạn nhiều điều bổ ích. Phản hồi từ người đọc sẽ truyền cảm hứng cho tôi để tôi có thể viết được nhiều hơn nữa !. Bạn chỉ cần để lại nhận xét bên dưới nếu bạn thấy bài viết này hữu ích. Chúc bạn ngày mới tốt lành!
Subscribe
Notify of
guest
0 Comments
Most Voted
Newest Oldest
Inline Feedbacks
View all comments
0
Would love your thoughts, please comment.x
()
x