Для того чтоб блокировать/разблокировать пользователей в линуксе можно или заворачивать весь трафик средствами iptables в netams и предоставлять блокировать трафик ему:
iptables -A count -j QUEUE
либо как в статье использовать библиотеку libpcap и воспользоваться следующим скриптом:
## ставим пакет для обрыва TCP/IP соединений aptitude install cutter cat /root/lockuser #!/bin/bash action=$1 # Действие(DENY|ALLOW) oid=$2 ip_user=$3 why=$4 # Причина(QUOTA|LOGIN|...) case "$action" in DENY) /sbin/iptables -A FORWARD -s $ip_user -j DROP /sbin/iptables -A FORWARD -d $ip_user -j DROP #/sbin/shorewall drop $ip_user # если стоит shorewall /usr/sbin/cutter $ip_user # оборвать соединения logger -t NETAMS "Blocked $ip_user by $why..." echo "NETAMS Blocked $ip_user by $why...`LANG=C date`"|mail -s "NETAMS Blocked $ip_user by $why..." root ;; ALLOW) /sbin/iptables -D FORWARD -s $ip_user -j DROP /sbin/iptables -D FORWARD -d $ip_user -j DROP #/sbin/shorewall allow $ip_user # если стоит shorewall logger -t NETAMS "Unblocked $ip_user by $why..." echo "NETAMS Unblocked $ip_user by $why...`LANG=C date`"|mail -s "NETAMS Unblocked $ip_user by $why..." root ;; *) logger -t NETAMS "Unknown option..." echo "NETAMS Unknown option...`LANG=C date`"|mail -s "NETAMS Unknown option..." root ;; esac
для управления netams удобно использовать телнет-клиент netamsctl, для его использования надо создать файл:
cat /etc/.netamsctl.rc login=admin password=pass host=127.0.0.1 port=20001
не забудьте
chmod 600 /etc/.netamsctl.rc && chown root: /etc/.netamsctl.rc !!!
далее можно к примеру командой netamsctl 'show config'|less посмотреть текущий конфиг программы.
Для того чтобы netams мог блокировать при наступлении события пользователей, надо дать команды:
netamsctl 'service processor && access-script "/root/lockuser" && exit' netamsctl 'save'
затем можно задавать квоты, к примеру, следующим скриптом:
#! /bin/bash if [ $# -lt 2 ] ; then echo -e "usage `basename $0` IP QUOTA_MB"; exit 1 fi ip_client=$1 quota=$2 ip_client=`echo $ip_client|awk -F. '{print "ip_"$1"_"$2"_"$3"_"$4}'` netamsctl "service quota 0 && set name $ip_client month ${quota}M in && exit"
квоты НЕ храняться в конфиге, они сохраняются в базу. Посмотреть их можно так:
netamsctl 'show quota'
или через веб-интерфейс.