Есть и другой подход: "что не запрещено - разрешено". При таком подходе правило добавляется только при блокировке пользователя. Так как блокированных пользователей всегда меньше, такой подход удобнее. Еще + при этом подходе - если я считаю ULOG'ом, и пользователь блокирован, ему не мазолят глаза те копейки трафика которые посчитаются в любом случае, если нет правила блокировки, стоящего до привила подсчета трафика.
Обрабатывать блокирующие/разрешающие правила можно настраивать 2 переменными в rfw.cfg
Прошу голосовать, высказываться.
P.S. Сейчас, во время загрузки, у меня блокирующие правила добавляются скриптиком.
UTM5BlockUsersAfterStart:
Код: Выделить всё
#! /bin/bash
#
TMPFile=/tmp/UTM5BlockUsersAfterStart.tmp
BlockChain=AllUsers
RedirectIP=10.0.1.1
cat /dev/null > $TMPFile
mysql UTM5 -u user -ppassword -e "SELECT inet_ntoa(ig.ip&0xffffffff), inet_ntoa(ig.mask&0xffffffff) from accounts a,service_links sl,iptraffic_service_links il,ip_groups ig where int_status=0 and sl.account_id=a.id and sl.id=il.id and il.ip_group_id=ig.ip_group_id and sl.is_deleted=0 and il.is_deleted=0 and ig.is_deleted=0" | grep -v \- | grep -v inet_ntoa > $TMPFile
iptables -F $BlockChain
iptables -F $BlockChain -t nat
OIFS=$IFS; IFS=" " # В качестве разделителя полей
# используется символ "TAB"
while read IP MASK
do
iptables -I $BlockChain 1 -s $IP\/$MASK -j DROP
#Любимая страичка пользователей
iptables -I $BlockChain 1 -t nat -s $IP\/$MASK -p tcp --dport 80 -j DNAT --to-destination $RedirectIP
done <$TMPFile # перенаправление ввода.
IFS=$OIFS # Восстановление предыдущего состояния переменной $IFS.
rm -f $TMPFile
Фрагмент немного поправленного старт скрипта utm_rfw:
Код: Выделить всё
start)
if [ -x $exec_dir/$utm_exec ];
then
$exec_dir/$utm_exec start&
/var/scripts/UTM5BlockUsersAfterStart&
else
echo $exec_dir/$utm_exec no such file