Primeiro, tente isso em uma máquina à qual você tenha acesso físico.
Tabelas IP
Primeiro, vamos descobrir as regras das tabelas de IP para bloquear um endereço IP. Para instruções detalhadas, confira este guia Deixe cair todas as conexões de entrada de um determinado IP:
iptables -A INPUT -s A.B.C.D -j DROP
Depois disso, reinicie o iptables como regular. Experimente este comando para verificar se funciona bem para você, familiarize-se com a sintaxe e prossiga ainda mais.
Script Bash
Vamos criar um script Bash para bloquear um IP. Seria algo como isto (aviso: Você pode precisar jogar com permissões de usuário e sudo para fazê-lo funcionar). Crie um novo arquivo, digamos, blockip.sh.
#! /usr/bin/env bash
iptables -A INPUT -s -d DROP
<other stuff you want to do when you block an IP>
<note: the IP address is in variable >
Execute chmod +x blockip.sh
para tornar o script executável. Agora você pode executá-lo como /path/to/file/blockip.sh 1.2.3.4
.
Permissões do Sudo
Se o seu script precisar ter permissões de usuário raiz, você precisará configurar o sudo para fornecer acesso sem senha. Referindo-se a esta pergunta sobre estouro de pilha , execute sudo visudo
e adicione a seguinte linha:
nobody ALL = NOPASSWD: /your/script
Salve o arquivo e saia. Como um aviso de segurança, certifique-se de que somente você possa modificar o arquivo de script, ou então, alguém pode potencialmente executar código prejudicial como usuário root, modificando o script.
Código PHP
Execute esta pequena joia de código sempre que quiser bloquear alguém.
exec("sudo /path/to/file/blockip.sh ".$_SERVER['REMOTE_ADDR']);
Conclusão
Primeiro, teste esse código em uma máquina à qual você tenha acesso físico. Além disso, esteja ciente de que vários usuários por trás de uma LAN compartilham o mesmo IP externo e o bloqueio de um deles resultaria no bloqueio de todos eles. Seja cuidadoso. Upvote se a resposta te ajudou.