Garik 51 Опубликовано: 2006-06-11 14:18:32 Share Опубликовано: 2006-06-11 14:18:32 В усмерть достали любители не платить вовремя, в связи с чем, за ночь наваял простенький скрипт на пхп. Скрипт проверяет состояние счетов, составляет список айпи пользователей, у которых остаток 0 или менее и добавляет в айпитейблс соответствующее правило (я закрываю ДИСИ++, чат, IRC, jabber). Скрипт запускаю кроном раз в 10 минут. Если юзер оплатил, порты открываются. Я не программер, потому не пинать Пишу за тем, чтобы услышать идеи/советы по оптимизации скрипта. К примеру на данный момент при запуске скрипта генерятся правила iptables -D по всем айпи, а потом снова iptables -I по неплательщикам, дабы избежать дублирования правил и удалить правила для тех, кто заплатил(догадываюсь, что это можно сделать как-то грамотнее удаляя/добавляя лишь конкретные айпи, подскажите плз). Также хотелось бы узнать юзает ли кто-либо подобные скрипты(на bash, perl, etc.) для решения вопроса. Если не жалко поделитесь #!/usr/bin/php #php script for stargazer by Garik <?php $iptables="/sbin/iptables"; $server="192.168.1.1"; $dirname = "/var/stargazer/users/"; $dh = opendir($dirname); while (gettype($file=readdir($dh)) != boolean) { if (( is_dir("$dirname/$file")) & ($file!="..") & ($file!=".")) $users[]="$file"; }; closedir($dh); foreach ($users as $user) { #bablo $file = "$dirname$user/stat"; ($fp = fopen("$file", 'r')) or die ("log file read error"); while ( ! feof( $fp)) { $line=fgets( $fp, 1024); if (ereg ("Cash=",$line)!=false) { $balans=sprintf("%.2f",trim(substr($line,5,15))); }; }; #ip $file = "$dirname$user/conf"; ($fp = fopen("$file", 'r')) or die ("log file read error"); while ( ! feof( $fp)) { $line=fgets($fp, 1024); if (ereg ("IP=",$line)!=false) {$ip=trim(substr($line,3,15)); }; }; $iplist[]="$ip"; if ($balans<="-0") {$color="RED"; $badboys[]="$ip";} #sozdaem massiv neplatelshikov else {$color="#FFF0D9"; $goodboys[]="$ip";} #sozdaem massiv zaplativshih }; #FLUSH iptables ban rulles foreach ($iplist as $usersip) { system ("$iptables -D INPUT -s $usersip -p tcp -m multiport --dports 65500,6667,5222,5223 -j DROP\n"); }; #BAN foreach ($badboys as $badboy) { system ("$iptables -I INPUT 1 -s $badboy -p tcp -m multiport --dports 65500,6667,5222,5223 -j DROP\n"); }; #UNBAN foreach ($goodboys as $goodboy) { #system ("$iptables -I INPUT 1 -s $goodboy -d $server -p tcp --dport 6666 -j ACCEPT\n"); }; ?> Ссылка на сообщение Поделиться на других сайтах
egor2fsys 5 Опубліковано: 2006-06-11 17:35:26 Share Опубліковано: 2006-06-11 17:35:26 наверно все таки не в том разделе создал комодеры - перенесите в раздел СТГ пожалуйста. Ссылка на сообщение Поделиться на других сайтах
XoRe 0 Опубліковано: 2006-06-12 12:53:43 Share Опубліковано: 2006-06-12 12:53:43 Можно сделать так - фаерволл изначально запрещает всем в локалке доступ к себе и, естественно, наружу. А потом отдельно прописать доступ всем админским компами серверам. И подредактировать OnConnect так, чтоб он открывал доступ наружу и к самому серверу. Можно сделать так, чтоб какие-то порты были открыты и без запуска onconnect. А остальное только с ним. ПОлучается так: включил ключик - имеешь ирку, аську и прочие сервисы. Выключил - не имеешь. Если у человека 0, то он их иметь не будет и так. Никакого скрипта ещё не надо. Лично у нас без OnConnect доступны ввв, джаббер, пинг (коды 0 и 8) до сервера. Остальное (почта) доступно после включения. Ссылка на сообщение Поделиться на других сайтах
Garik 51 Опубліковано: 2006-06-13 22:31:21 Автор Share Опубліковано: 2006-06-13 22:31:21 Лично у нас без OnConnect доступны ввв, джаббер, пинг (коды 0 и 8) до сервера. Остальное (почта) доступно после включения. Собственно, я потому и написал этот скрипт, так как не хотел вынуждать пользователей запускать ключик, для доступа к некоторым сервисам. В тоже время хотелось слегка "подтолкнуть" их к своевременной оплате. Задуманное удалось, результатом доволен. Хочу лишь немного оптимизировать скриптик. Ссылка на сообщение Поделиться на других сайтах
p0int 0 Опубліковано: 2006-06-14 09:54:57 Share Опубліковано: 2006-06-14 09:54:57 есть прога типа арпфлуда что то там в файлик заносишь ипы и маки и усе чел уже в сети не работает Ссылка на сообщение Поделиться на других сайтах
XoRe 0 Опубліковано: 2006-06-15 06:24:22 Share Опубліковано: 2006-06-15 06:24:22 2p0int: название в студию плиз Ссылка на сообщение Поделиться на других сайтах
vop 370 Опубліковано: 2006-06-15 14:17:02 Share Опубліковано: 2006-06-15 14:17:02 А что, STG разве не блокирует неплательщиков? Я думал, что блокирует. Ну по поводу самого скрипта. Совершенно зря ты все делаешь в корневой цепочке INPUT. Это iptables, а не ipchains. Лучше сделать селектор в INPUT, FORWARD, из которого вызывать отдельную цепочку. Тогда будет и проще работать, и меньше нагрузки на фильтр, и управлять проще. Например, если есть список тех, кому разрешено работать, то при изменении статуса платежа какого-либо клиента, простой скрипт сносит цепочку нафик, и тупо строит заново, возвращая разрешенных клиентов, и запрещая всех остальных. У меня, например, для этих целей служит такой скрит на шелле: #!/bin/sh ############################################################################## # TopolA MS, Copyright © 2006, Oleg Vlasenko ############################################################################## # User configuration data CLI_NET="172.16.0.0/24" # SYS_ADR1="172.16.1.25" # SYS_ADR2="172.16.1.26" # SYS_ADR3="172.16.1.27" ############################################################################## # Filenames of allow list RESLISTDIR=/usr/local/accnt/conf ALLOWLIST=$RESLISTDIR"/internet.allow" ############################################################################## # Bocking chain name ACT_CHAIN="active" ############################################################################## # Set iptables variable IPT=${IPT:-`which iptables`} if [ $? != 0 ]; then echo Can not find iptables command exit 1 fi ############################################################################## # Check if we have "allow list" file. if [ ! -f ${ALLOWLIST} ]; then exit 0 fi ############################################################################## # Let's check if chain "active" exists. If so, flush it, else create a new one $IPT -F $ACT_CHAIN >/dev/null 2>&1 if [ $? = 1 ]; then $IPT -N $ACT_CHAIN $IPT -I FORWARD -s ${CLI_NET} -j $ACT_CHAIN fi ############################################################################## # System addresses - should work always # $IPT -A $ACT_CHAIN -s $SYS_ADR1 -j RETURN # $IPT -A $ACT_CHAIN -s $SYS_ADR2 -j RETURN # $IPT -A $ACT_CHAIN -s $SYS_ADR3 -j RETURN # Add allowed addresses from accnt /bin/cat $ALLOWLIST | while read Res; do $IPT -A $ACT_CHAIN -s $Res -j RETURN done # Rest of customer IP should be rejected $IPT -A $ACT_CHAIN -j REJECT --reject-with icmp-host-unreachable ############################################################################## Файл internet.allow содержит список IP клиентов, которым разрешено работать. Скрипт запускается регулярно из крона раз минут в 5. Список создает специальная тулзовина. В принципе, не сложно написать такую тулзовну и под старгейзер. Ссылка на сообщение Поделиться на других сайтах
p0int 0 Опубліковано: 2006-06-15 14:18:36 Share Опубліковано: 2006-06-15 14:18:36 2p0int: название в студию плиз ip-sentinel в асп входит как родной пакет на федору незнаю Ссылка на сообщение Поделиться на других сайтах
Ork Yason 8 Опубліковано: 2006-06-16 08:15:21 Share Опубліковано: 2006-06-16 08:15:21 так так так... гугль говорит что сия программа предотвращает попытки подмены маков... т.е. для того чтобы не дать работать кому либо нужно задать не верную комбинацию АЙПи-МАК клиена? я правильно понял? Ссылка на сообщение Поделиться на других сайтах
p0int 0 Опубліковано: 2006-06-16 15:33:43 Share Опубліковано: 2006-06-16 15:33:43 совсем не обазательно можно прописать мак пользователя и какой бі он айпи не ставил в сеть его не пустит ну или айпи конкретній заблокировать так же можно блокировать подсети я по ошибке 1 раз сетку прову положил мин на 5 Ссылка на сообщение Поделиться на других сайтах
Fargust 0 Опубліковано: 2006-06-16 17:05:26 Share Опубліковано: 2006-06-16 17:05:26 Здравствуйте, натолкните меня на истинный путь: Я хочу что бы по истичению бессплатных мегабайт (FreeMB) этот скрипт вырубал юзеров отзарубежа и оставлял только Украину... Примеры моих конфигов: #!/bin/bash #Мратора admin=192.168.1.2 #Адеса роутер server0=192.168.1.100 server1=10.3.0.19 # Интерфейс смотрящий на клиентов iface_cli=eth1 # Интерфейс смотрящий во внешний мир iface_world=eth0 #орт conf_port=5555 user_port=5555 IPFILE=/etc/stargazer/IPFILE.txt # Разреаем форва пакетов между интерфейсами # Эта штукаобяз # по умолчаниюре # Если мы птрахуемсяе не бкде echo "1" > /proc/sys/net/ipv4/ip_forward IPTABLES="/sbin/iptables" # Оча файрвола $IPTABLES -t filter -F $IPTABLES -t filter -X $IPTABLES -t nat -F $IPTABLES -t nat -X # Политика по умолчаниюем всё запрещено $IPTABLES -t filter -P INPUT DROP $IPTABLES -t filter -P FORWARD DROP $IPTABLES -t filter -P OUTPUT DROP # Разрешаем пингам ходить всюду и всега $IPTABLES -t filter -A INPUT -p icmp -j ACCEPT $IPTABLES -t filter -A FORWARD -p icmp -j ACCEPT $IPTABLES -t filter -A OUTPUT -p icmp -j ACCEPT # Разрешаем всё на локальном интерфейс $IPTABLES -t filter -A INPUT -d 127.0.0.1 -j ACCEPT $IPTABLES -t filter -A OUTPUT -s 127.0.0.1 -j ACCEPT # Разрешь серверу общаться со внешним миром $IPTABLES -t filter -A INPUT -i $iface_world -j ACCEPT $IPTABLES -t filter -A OUTPUT -o $iface_world -j ACCEPT # $IPTABLES -t filter -A INPUT -i $iface_cli -j ACCEPT $IPTABLES -t filter -A OUTPUT -o $iface_cli -j ACCEPT # DNS. Замечу, ДНС работает и по TCP и по UDP $IPTABLES -t filter -A INPUT -p tcp --sport 53 -j ACCEPT $IPTABLES -t filter -A FORWARD -p tcp --sport 53 -j ACCEPT $IPTABLES -t filter -A FORWARD -p tcp --dport 53 -j ACCEPT $IPTABLES -t filter -A OUTPUT -p tcp --dport 53 -j ACCEPT $IPTABLES -t filter -A INPUT -p udp --sport 53 -j ACCEPT $IPTABLES -t filter -A FORWARD -p udp --sport 53 -j ACCEPT $IPTABLES -t filter -A FORWARD -p udp --dport 53 -j ACCEPT $IPTABLES -t filter -A OUTPUT -p udp --dport 53 -j ACCEPT # SSH $IPTABLES -t filter -A INPUT -p tcp -s $admin -d $server0 --dport 22 -j ACCEPT $IPTABLES -t filter -A OUTPUT -p tcp -d $admin -s $server0 --sport 22 -j ACCEPT # Stargazer configurator $IPTABLES -t filter -A INPUT -p tcp -s 192.168.1.2 -d $server0 --dport $conf_port -j ACCEPT $IPTABLES -t filter -A OUTPUT -p tcp -d 192.168.1.2 -s $server0 --sport $conf_port -j ACCEPT # UDP stargazer InetAccess $IPTABLES -t filter -A INPUT -p udp -s 192.168.1.0/24 --sport $user_port -d $server0 --dport $user_port -j ACCEPT $IPTABLES -t filter -A OUTPUT -p udp -d 192.168.1.0/24 --dport $user_port -s $server0 -j ACCEPT #Маскарад $IPTABLES -t nat -A POSTROUTING -o $iface_world -j MASQUERADE #UA_IX $IPTABLES -X UA_IX $IPTABLES -X UA_IX_S $IPTABLES -N UA_IX $IPTABLES -N UA_IX_S ################# grep "^" $IPFILE | while read ip; do if [ $ip <> NULL ] then $IPTABLES -A UA_IX -d $ip -j RETURN fi done $IPTABLES -A UA_IX -j REJECT ################ grep "^" $IPFILE | while read ip; do if [ $ip <> NULL ] then $IPTABLES -A UA_IX_S -d $ip -j RETURN fi done $IPTABLES -A UA_IX_S -j REJECT ############ $IPTABLES -I INPUT 1 -i eth0 -j UA_IX_S $IPTABLES -I OUTPUT 1 -o eth0 -j UA_IX #$IPTABLES -I FORWARD 1 -s 192.168.1.20 -j UA_IX Я пытался сам сделать, но получалось только выключить мир, а включить обратно уже нет... Ссылка на сообщение Поделиться на других сайтах
XoRe 0 Опубліковано: 2006-06-16 23:31:01 Share Опубліковано: 2006-06-16 23:31:01 К сожалению, ip-sentinel работает только на linux. На FreeBSD не хотит даже компилиться. Хотя я особенно не мудрствовал там. Может напиьник сможет помочь ) Ссылка на сообщение Поделиться на других сайтах
p0int 0 Опубліковано: 2006-06-17 05:21:31 Share Опубліковано: 2006-06-17 05:21:31 это да она только на линукс Ссылка на сообщение Поделиться на других сайтах
Ork Yason 8 Опубліковано: 2006-06-17 09:40:09 Share Опубліковано: 2006-06-17 09:40:09 уф шото я запутался в документации мне нужно заблокировать айпи я в файле ips.cfg написал: 192.168.1.100 и фсе... это верно? сюдя по доке так, но компьютер так и висит в сети... или нужно дождаться его перезагрузки? Ссылка на сообщение Поделиться на других сайтах
mr.Scamp 41 Опубліковано: 2006-06-17 16:08:55 Share Опубліковано: 2006-06-17 16:08:55 arp -S помогает даже на FreeBSD. Но намного проще поставить сетевое оборудование и по SNMP/RMON управлять ALC по макам или отключать порты неплательщикам. Ссылка на сообщение Поделиться на других сайтах
p0int 0 Опубліковано: 2006-06-17 19:47:57 Share Опубліковано: 2006-06-17 19:47:57 не спорю проще но дороже посему и изгаляемся а по поводу айпи работает не сразу а по истечении времени или после перезагрузки Ссылка на сообщение Поделиться на других сайтах
XoRe 0 Опубліковано: 2006-06-24 13:51:29 Share Опубліковано: 2006-06-24 13:51:29 arp -s на фряхе действует мощно. Во всяком случае простому юзеру локалку обрубает сразу. Управляемые свичи поставить не проще, но эфективнее. Ссылка на сообщение Поделиться на других сайтах
p0int 0 Опубліковано: 2006-06-24 16:31:33 Share Опубліковано: 2006-06-24 16:31:33 это кому оно обрезает локалку юзеру чето я такого не заметил максимум что оно обрезает это доступ на сервак а в нутри сегмента юзер гуляет свободно без всяких проблем и качает через нетбиос все что ему надо проверено на своей шкуре что касаеться фри могу ошибаться но в линуксе это по барабану Ссылка на сообщение Поделиться на других сайтах
XoRe 0 Опубліковано: 2006-06-25 05:16:34 Share Опубліковано: 2006-06-25 05:16:34 Во фре нужно использовать параметр pub. arp -s ip mac pub Тогда он будет рассылать этот мак-адрес по айпишнику всем запросившим. Фишка в том, что когда винда инициализирует подключение, она рассылает пакеты "а нету ли тут кого с моим ип адресом?". А сервер ей в ответ "есть!". И виндовс ругается на эту тему и не хочет инициализировать интерфейс. Точнее инициализирует, но работать через него не хотит. Как обстоят дела с arp в линуксе, я не знаю ) Ещё могу добавить, что можно забивать мак-адреса не нулями, а генерируемыми случайными адресами. Это поможет справиться с теми, кто захочет поменять мак-адрес. Есессно, это не панацея и тут много способов чего-нибудь сделать. Такое решение работает очень условно. Поэтому управляемые свичи эффективнее и надежнее. Т.е. позволяют безусловно отрубать народ. Но если свичей нет, то можно попользоваться и этим. Для пользователей на винде это более менее работает. Для пользователей других ОС это тоже работает, если нет знаний на эту тему ) Ссылка на сообщение Поделиться на других сайтах
vop 370 Опубліковано: 2006-06-25 16:32:43 Share Опубліковано: 2006-06-25 16:32:43 Как обстоят дела с arp в линуксе, я не знаю ) Ну под линуксом, в принципе, тот же arp -s IP MAC pub Но в любом случае, это не панацея. Панацея одна - отключение порта на свиче. Любым способом, включая монтера Ссылка на сообщение Поделиться на других сайтах
Рекомендованные сообщения
Создайте аккаунт или войдите в него для комментирования
Вы должны быть пользователем, чтобы оставить комментарий
Создать аккаунт
Зарегистрируйтесь для получения аккаунта. Это просто!
Зарегистрировать аккаунтВхід
Уже зарегистрированы? Войдите здесь.
Войти сейчас