On a linux server with dhcpd that acts as the internet gateway for all clients of the LAN: how can I monitor the internet usage based on IP/MAC address, and deny internet access if a certain bandwidth consumption has been exceeded?
2 Answers
On Linux, you could get this done with some scripting:
- Create firewall rules with
iptables
so that all bandwidth for each client passes through a separate rule. The firewall subsystem in the kernel will count network packets and bytes that a particular rule matched. You can see the counters if you runiptables -vL
. You might want to use the-n
option too, for performance:iptables -vnL
- Write a script that runs from cron and which checks how much data has been used by every client. Then if it's over a particular amount, have the script modify the firewall so that the client can not access the Internet anymore
Note that iptables
' counters get reset when the firewall is cleared (i.e., after reboot, or when you do iptables -F
. As such, you might want to have the script state its conclusions to some database or something.
Your answer is given here on Serverfault for limiting traffic
https://serverfault.com/questions/174010/limit-network-bandwith-for-an-ip
and for monitoring that traffic install iftop
-
2I believe the question was about bandwidth consumption (i.e., number of bytes sent over a large period of time, like a month or so) rather than immediate bandwidth usage. In that case, it's not a duplicate Mar 1, 2016 at 7:22
-
Yes, but I'm wary of using iptables to do this. Your method will produce network errors on the user's end.– UsiMar 1, 2016 at 7:24
-
The top answer gives a way to do this without stopping the connection. Not a duplicate, but it answers the question.– UsiMar 1, 2016 at 7:25
-
-