набор из 5ти скриптов создан по мотивам темы: Статистика и ограничение доступа по ip и mac
т.к. задача была скромнее: определить "почему сейчас интернет работает медленно?",
то результаты я мог проанализировать и в Excel на отдельной машине.
1. заготавливаем необходимые цепочки:
Code:
#!/bin/sh
USERS="/tmp/local/root/usersmac"
iptables -t mangle -N world
iptables -t mangle -I FORWARD -i vlan2 -j world
iptables -t mangle -I FORWARD -o vlan2 -j world
cat $USERS | while read MACCL IPCL
do
iptables -t mangle -A world -s $IPCL -j RETURN
iptables -t mangle -A world -d $IPCL -j RETURN
done
iptables -t mangle -A world -j RETURN
(привожу только world, но можно добавить любые интересные "направления")
2 обрубаем всех, кто не в списке пользователей от услуг подключения
к интернет (так они быстрее прибегут, что бы дополнить список)
Code:
#!/bin/sh
USERS="/tmp/local/root/usersmac"
iptables -F MAC_IP
iptables -N MAC_IP
iptables -I FORWARD 1 ! -o br0 -j MAC_IP
cat $USERS | while read MACL IPCL
do
iptables -A MAC_IP -s $IPCL -m mac --mac-source $MACL -j RETURN
done
iptables -A MAC_IP -j DROP
- с этого момента начинает подсчитываться трафик, но смотреть командой iptables -nvxL -t mangle
не удобно, да и счетчики, как мне показалось "забиваются".
3. скрипт для периодического сброса информации и обнуления счетчиков,
т.к. нужно смотеть в Excel то я скидываю в csv, формат данных можете подстроить под свои нужды:
Code:
#!/bin/sh
wdir=/tmp/local/root/
timeshtamp=$(date +"%Y-%m-%d %H:%M:%S")
datafile=$(date +"%Y%m%d%H%M%S")"iptr.log"
read timeshtampold<$wdir"reporttime"
chain=world
getChainRes()
{
/usr/sbin/iptables -t mangle -nvxL $chain|grep RETURN| grep -v grep|/usr/bin/tail -n 200|while read _pkts _bytes _target _prot _opt _in _out _source _destination; do
echo ${timeshtampold}";"${timeshtamp}";"$chain";"$_bytes";"$_source";"$_destination>>$wdir"log/"$datafile
done
/usr/sbin/iptables -t mangle -Z $chain
}
if [[ `df | grep opt | awk '{print $4}'` -gt 2048 ]]
then
getChainRes;
echo ${timeshtamp}>$wdir"reporttime";
else
echo ${timeshtamp}" disk full">$wdir"reporttime";
fi
сейчас это запускается раз в 5 минут cronом.
4. Передаем накопленные файлы на сервер:
(т.к. заставить scp запускаясь по cron отправлять файлы не получилось,
мне пришлось rsync, а для этого запустить rsync --daemon на сервере)
Code:
#!/bin/sh
/opt/bin/rsync -avz --remove-source-files --password-file=/tmp/local/root/iplog.pw /tmp/local/root/log rsync://rsynccl@192.168.3.104:873/logfiles
Тут замечу, что в --password-file на клиенте записывается только пароль!!!,
в отличие от rsyncd сервера, где список пользователей идет с паролями, я потерял на этом 1час.
5. ну и на сервере, все это закладывается в базу mysql скриптом:
Code:
#!/bin/sh
LOGPATH=/home/admin/log
find $LOGPATH -name '*iptr.log'|while read FILENAME; do
mv $FILENAME $LOGPATH"/route.csv"
mysqlimport -v --local --columns=time0,time1,chain,traff,srs,dst --fields-enclosed-by='' --fields-terminated-by=';' --lines-terminated-by='\n' -u iplog -ppassword iplog $LOGPATH"/route.csv"
rm $LOGPATH"/route.csv"
done
В общем скрипт не претендует на точность,
но теперь, я в курсе, кто виноват за "клин" в интернете.
Все излагал кратко, все, что нужно есть на этом форуме и в сети.
Буду рад услышать критику.
P.S. первым был пойман CIO за открытием по сети 5Gb архива, уже осознал.