Перейти до

trend

Маглы
  • Всього повідомлень

    3
  • Приєднався

  • Останній візит

Все, що було написано trend

  1. trend

    Скрипты onConnect/onDisconnect

    жёсткая привязка по мак это ARP arp -s 192.168.1.2 00:1a:6a:00:00:00 в таком случае у абонента с айпи 192.168.1.2 и мак адресом отличным от 00:1a:6a:00:00:00 доступа к серверу не будет, он не будет даже пинговаться в вашем же примере скрипта проверка по маку учавствует только между обменом (цепочка FORWARD) приведу свой пример, база у меня в MySQL вот часть скрипта OnConnect отвечающая на мак MAC=`/usr/bin/mysql -sN -h$DBHOST -u$DBUSER -p$ROOTDBPASS $DBNAME -e "SELECT Userdata0 FROM users WHERE login = '$login'"` /usr/bin/arping -I eth_local $IP -c 1 -w 0 newMAC=`/usr/sbin/arp -a $IP | cut -f 4 -d " "` /usr/sbin/arp -d $IP /usr/sbin/arp -s $IP $newMAC if [ -z "`/bin/echo $MAC | grep $newMAC`" ]; then /etc/stargazer/sgconf set -s 127.0.0.1 -p 4446 -a $STGADM -w $STGPASS -u $login --ud0 $newMAC fi принцип работы: - берём МАС прописаный в карточке юзера - делаем arping чтобы мак "прорезался" на сервере, так сказать засветился - выделяем этот мак - статиески привязываем его (сначала опустошаем потом привязываем это для тех кому мак не нужно привязывать, команда -s попросту не сработает) - если же мак в базе и реальный мак разные тогда в базу заносится новый, сделано для того кто меняет сетевушку, всё равно кто то левый не сможет достучаться до сервера чтобы это сделать собственно вот, а так ещё раз в сутки по крону отрабатывает скрипт macfix #!/bin/sh source /etc/stargazer/sql.conf # lan0 for ((ip=2;ip<255;ip++)); do /usr/sbin/arp -s 192.168.0.${ip} ${firmmac} done; echo "lan0 done" # lan1 for ((ip=2;ip<31;ip++)); do /usr/sbin/arp -s 192.168.1.${ip} ${firmmac} done; echo "lan1 done" # lan2 for ((ip=2;ip<15;ip++)); do /usr/sbin/arp -s 192.168.2.${ip} ${firmmac} done; echo "lan2 done" LOGINS=`/usr/bin/mysql -sN -h$DBHOST -u$DBUSER -p$ROOTDBPASS $DBNAME -e "SELECT login FROM users"` for login in $LOGINS do IP=`/usr/bin/mysql -sN -h$DBHOST -u$DBUSER -p$ROOTDBPASS $DBNAME -e "SELECT IP FROM users WHERE login = '$login'"` MAC=`/usr/bin/mysql -sN -h$DBHOST -u$DBUSER -p$ROOTDBPASS $DBNAME -e "SELECT Userdata0 FROM users WHERE login = '$login'"` LOCKED=`/usr/bin/mysql -sN -h$DBHOST -u$DBUSER -p$ROOTDBPASS $DBNAME -e "SELECT Down FROM users WHERE login = '$login'"` if [ $LOCKED = 0 ]; then /usr/sbin/arp -d $IP /usr/sbin/arp -s $IP $MAC fi done lan4 done" echo "arp table fixed" спасибо за подробный ответ, а можно сделать так, чтобы если мак в базе и реальный мак разные тогда доступ не предоставлялся? как я понял надо взять ваш код (только у меня база в текстовиках пока) MAC=$(grep -i "^Userdata1=" /var/stargazer/users/$LOGIN/conf | cut -f 2 -d"=") /usr/bin/arping -I $iface_cli $IP -c 1 -w 0 newMAC=`/usr/sbin/arp -a $IP | cut -f 4 -d " "` /usr/sbin/arp -d $IP /usr/sbin/arp -s $IP $newMAC здесь мас подключившегося связывается с IP и если мак не равняется с маком в базе, то #как вот тут правильно написать равенство мака в базе и newMAC, подскажите пожалуйста if [ -z "$MAC=$newMAC" ]; then /sbin/iptables -t filter -A FORWARD -s $IP -j ACCEPT
  2. trend

    Скрипты onConnect/onDisconnect

    Нужна жесткая привязка по мак, т.е. разрешить форвард по мак и IP, DHCP нету а, ну тогда надо создать постоянную таблицу arp ?(если честно, еще плаваю в линуксе) Не могли бы вы поделиться кодом OnConnect ?
  3. trend

    Скрипты onConnect/onDisconnect

    При авторизации MAC не проверяется. Но можно сделать дополнительную проверку в OnConnect. Описываем MAC, например, в в одном из полей UserData. При вызове скрипта получаем реальный MAC с помощью arp -n $IP (ну там еще tail'ом и cut'ом немножко поработать), и вычитываем соответствующий UserData из БД (файловой или SQL'ной). Если совпадает - разрешаем юзера в файрволле. Привет всем, помогите с кодом в OnConnect для проверки mac адреса при подключении, уже все перечисленные примеры перепробовал, не получается никак. система fedora 15 вот мой onconnect, шейпер работает прекрасно, а вот проверка по маку не работает #!/bin/bash iface_cli=em1 # Login LOGIN=$1 #user IP IP=$2 #cash CASH=$3 #user ID ID=$4 #Selected dirs to connect DIRS=$5 default_speed=32kbit # =========== shaping by tariff =========== #tariff=$(grep -i "^tariff=" /var/stargazer/users/$LOGIN/conf | cut -f 2 -d"=") #echo "tariff=$tariff" > /var/stargazer/users/$LOGIN/connect.log #case $tariff in # minimum) speedkb=128kbit;; # 128 kbit # middle) speedkb=256kbit;; # 256 kbi # maximum) speedkb=512kbit;; # 512 kbit # *) speedkb=$default_speed;; # default speed #esac # ========= shaping by tariff end ========= # ========= shaping by userdata0 ========== speedR=$(grep -i "^Userdata0=" /var/stargazer/users/$LOGIN/conf | cut -f 2 -d"=") speed=$(echo $speedR | grep "^[0-9]*[0-9]$") MAC=$(grep -i "^Userdata1=" /var/stargazer/users/$LOGIN/conf | cut -f 2 -d"=") if [ -z "$speed" ] then speedkb=$default_speed else speedkb="$speed"kbit fi # ======= shaping by userdata0 end ======== declare -i mark=$ID+10 echo "$mark" > /var/stargazer/users/$LOGIN/shaper_mark echo "$speedkb" > /var/stargazer/users/$LOGIN/shaper_rate iptables -t mangle -A FORWARD -d $IP -j MARK --set-mark $mark tc class add dev $iface_cli parent 1:1 classid 1:$mark htb rate $speedkb burst 40k tc filter add dev $iface_cli parent 1: protocol ip prio 3 handle $mark fw classid 1:$mark if [ -n "$MAC" ] then /sbin/iptables -A FORWARD -s $IP -j ACCEPT /sbin/iptables -A FORWARD -d $IP -j ACCEPT else /sbin/iptables -A FORWARD -s $IP -m mac --mac-source $MAC -j ACCEPT /sbin/iptables -A FORWARD -d $IP -j ACCEPT /sbin/iptables -t filter -A FORWARD -s $IP -j ACCEPT /sbin/iptables -t filter -A FORWARD -d $IP -j ACCEPT /sbin/iptables -t filter -A INPUT -s $IP -j ACCEPT /sbin/iptables -t filter -A OUTPUT -d $IP -j ACCEPT fi fi
×
×
  • Створити нове...