Caso esse limite seja ultrapassado, bloqueia o HWID (identificação única do hardware) e registra informações sobre o IP, quantidade de pacotes enviados e a data
Instale o iptables-persistent e o pacote mysql-client
sudo apt-get update
sudo apt-get install iptables-persistent mysql-client
Carregue o módulo xt_recent
sudo modprobe xt_recent
Regras do iptables
sudo iptables -N HWID_BLOCK
sudo iptables -A HWID_BLOCK -m recent --name HWID --set --mask 255.255.255.255 --rsource
sudo iptables -A HWID_BLOCK -m recent --name HWID --update --seconds 86400 --mask 255.255.255.255 --rsource -j LOG --log-prefix "HWID blocked: " --log-level 4
sudo iptables -A INPUT -p tcp --dport 29000 -m connlimit --connlimit-above 25 --connlimit-mask 0 -j HWID_BLOCK
sudo iptables-save | sudo tee /etc/iptables/rules.v4
Crie um script para salvar as informações no MySQL. Por exemplo, crie o arquivo /usr/local/bin/save_to_mysql.sh com o seguinte conteúdo
Não se esqueça de criar um banco de dados chamado 'connections'
#!/bin/bash
IP_ADDRESS=$1
PACKETS=$2
DATE=$(date +"%Y-%m-%d %H:%M:%S")
mysql -u <username> -p<password> -e "INSERT INTO connections (ip_address, packets, date) VALUES ('$IP_ADDRESS', '$PACKETS', '$DATE');" <database>
Dê permissão de execução ao script
sudo chmod +x /usr/local/bin/save_to_mysql.sh
Adicione uma regra no iptables para chamar o script quando o limite de conexões for excedido. No exemplo abaixo, assumimos que o script está localizado em /usr/local/bin/save_to_mysql.sh:
sudo iptables -A HWID_BLOCK -m recent --name HWID --update --seconds 0 --mask 255.255.255.255 --rsource -j LOG --log-prefix "HWID blocked: " --log-level 4 --nflog-prefix "iptables-save: " --nflog-group 1 --nflog-range 64 --nflog-threshold 10
sudo iptables -A HWID_BLOCK -m recent --name HWID --update --seconds 0 --mask 255.255.255.255 --rsource -j LOG --log-prefix "HWID blocked: " --log-level 4 --nflog-prefix "iptables-save: " --nflog-group 1 --nflog-range 64 --nflog-threshold 10 --nflog-cprange 128 --nflog