В статье FreeBSD: борьба с bruteforce — IPFW+Sshit уже упоминалось о добавлении динамической таблицы правил для IPFW.
Т.к. там все описано довольно кратко – в этой статье более подробно будет описана работа с таблицами в IPFW.
Добавим в файл конфигурации IPFW правило блокировки по данным из таблицы:
$cmd 00020 deny all from “table(1)” to any via $pif
где:
#префикс для команд
cmd=”ipfw -q add”
#задаем карту интернет-сети
pif=”em0″
И перезагружаем фаервол для применения новых правил:
# /etc/rc.d/ipfw restart
net.inet.ip.fw.enable: 1 -> 0
net.inet6.ip6.fw.enable: 1 -> 0
Firewall rules loaded.
Firewall logging enabled.
Добавить определенный адрес можно командой:
# ipfw table 1 add 194.0.200.1
Можно заблокировать целую подсеть:
# ipfw table 1 add 194.0.200.0/24
Посмотреть список заблокированных IP можно так:
# ipfw table 1 list
194.0.200.0/24 0
194.0.200.1/32 0
Для удаления IP из таблицы IPFW:
# ipfw table 1 delete 194.0.200.0/24
И проверим:
# ipfw table 1 list
194.0.200.1/32 0
Подсеть из блока убрали, уберем 1 IP такой же командой:
# ipfw table 1 delete 194.0.200.1
Что бы не удалять адреса по одному, а сразу очистить всю таблицу – выполняем:
# ipfw table 1 flush
И напоследок – удобный скрипт для добавления целого списка IP-адресов из файла blockip.txt:
# cat blockip.sh
#!/bin/sh
ipfw table 1 flush
cat /home/setevoy/blockip.txt | while read ip; do
ipfw table 1 add $ip
done
Файл создавался под root, что бы выполнять его от другого пользователя – сменим владельца:
# chgrp setevoy blockip.sh
Не забудем установить права на выполнение скрипта:
# chmod ug+x blockip.sh
ug значит “добавить права для User и Group“ – только пользователю root и пользователям группы setevoy, т.е. себе.
Теперь имеем:
-rwxr-xr– 1 root wheel 107 Jul 21 10:11 blockip.sh
IP адреса в файл blockip.txt добавляем каждый с новой строки, можно использовать подсети:
# cat blockip.txt
194.0.200.1
194.0.200.2
194.0.200.0/24
# ipfw table 1 list
194.0.200.0/24 0
194.0.200.1/32 0
194.0.200.2/32 0