Tường lửa iptables có thể được sử dụng để đạt được điều đó.
Nó có số byte và gói cho mỗi quy tắc lọc. Vì vậy, ý tưởng là tạo một quy tắc lọc cho mỗi IP trên mạng của bạn. Vì số lượng iptables không liên tục (và tràn ở mức 4GB), hãy tạo một công việc định kỳ để đọc và đặt lại bộ đếm định kỳ.
Các bước:
Thêm bảng kế toán cho lưu lượng truy cập trong và ngoài nước
iptables -N acct_in
iptables -N acct_out
Đặt quy tắc mặc định (trả về cho cha mẹ)
iptables -A acct_in -j RETURN
iptables -A acct_out -j RETURN
Đối với mỗi IP khách hàng: Thêm quy tắc đầu vào và đầu ra:
iptables -I acct_in -d 192.168.x.y
iptables -I acct_out -s 192.168.x.y
Cuối cùng nối các chuỗi acct_ * vào chuỗi FORWARD
iptables -A FORWARD -j acct_in
iptables -A FORWARD -j acct_out
Đây phải là thiết lập iptables cơ bản của bạn.
Bạn có thể đọc các giá trị truy cập bằng cách sử dụng
iptables -v -L acct_in # for inbound traffic
iptables -v -L acct_out # for outbound traffic
... và đặt lại bộ đếm bằng cách sử dụng
iptables -Z acct_in
iptables -Z acct_out
Tôi khuyên bạn nên viết một tập lệnh mà bạn chạy dưới dạng cronjob để đọc và đặt lại các giá trị bộ đếm và lưu trữ chúng vào một tệp. Sử dụng -x
cờ để có được các giá trị chính xác có thể dễ xử lý hơn.
Ngoài ra, tôi có thể khuyên bạn nên xem một dự án cũ của tôi: nf_quota . Tôi đã sử dụng nó trong một thời gian dài khi chúng tôi có giới hạn lưu lượng 3 GB / tháng. Nó chạy rất ổn định nhưng mã đã không được cập nhật trong nhiều năm ...
Nó hoạt động như plugin netfilter trong kernel. Nhược điểm là bạn phải tự biên dịch nó.
Ưu điểm là các IP được thêm tự động, thậm chí bạn có thể đặt per-ip hoặc tổng giới hạn và có một công cụ dòng lệnh gọn gàng để đọc số liệu thống kê.
/ chỉnh sửa : Tôi vừa tự kiểm tra mã và nhận thấy rằng nó không biên dịch với các nhân gần đây vì có một số thay đổi trong phần mềm. Vì vậy, tôi khuyên bạn không nên sử dụng dự án này trừ khi bạn biết bạn đang làm gì (bản vá tuy nhiên được chào đón;))