Очень простой метод ...
Я написал PHP-скрипт, который записывает нежелательный IP-адрес в текстовый файл в каждой строке (вставьте, где это необходимо)
$banlist = file_get_contents( '/var/www/banlist.txt' );
$remoteip = $_SERVER['REMOTE_ADDR'];
if( strpos( $banlist, $remoteip ) === false ){
file_put_contents( '/var/www/banlist.txt', $remoteip."\n", FILE_APPEND );
}
Затем я создал собственную цепочку iptables и назвал ее « banlist » (называйте как хотите) с помощью команды ...
sudo iptables --new-chain banlist
Также установка iptables-persistent с помощью ...
sudo apt-get install iptables-persistent
Наконец, используя команду ...
sudo crontab -e
Я добавил эту строку в корневой cronjob следующим образом, чтобы запускать каждые 5 минут (по вашему усмотрению), который читает каждый ip, добавляет их в цепочку iptable, которую я создал с целью DROP, а затем очищает текстовый файл ...
*/5 * * * * while read in; do sudo iptables -A banlist -s "$in" -j DROP; done < /var/www/banlist.txt && > /var/www/banlist.txt
Я также добавил эту строку, чтобы правила сохранялись каждые 5 минут ...
*/5 * * * * iptables-save > /etc/iptables/rules.v4 && ip6tables-save > /etc/iptables/rules.v6
Это оно! Сладко и просто, проверьте это, добавив случайный ip (или каждый ip на новой строке) в текстовый файл и ожидая, пока ваш cronjob запустится с выбранным интервалом ... Будьте осторожны, чтобы не забанить себя, протестировав скрипт php из вашей собственной сети ...
Примечание: чтобы очистить все ip в цепочке iptables, вы можете использовать " sudo iptables -F banlist "