Главная страница


ru.unix.bsd

 
 - RU.UNIX.BSD ------------------------------------------------------------------
 From : Sergey Korolew                       2:6053/1.2     19 May 2004  01:14:08
 To : All
 Subject : Простенькая антиспуффинговая система
 -------------------------------------------------------------------------------- 
 
 
 Отдаю недавно сделанный скрипт. Работает как ip-up и ip-down для mpd
 и ppp. Основные задачи: добавление/удаление антиспуффинговых правил для
 туннельных интерфейсов и работа с ddns.
 
 Исторически сложилось, что vpn у нас работает на mpd, а модемные линки
 на ppp. Соответствующие vpn-пользователи заносятся в зону vpn.int,
 а модемные - в dialup.int, различение идет по названию интерфейса.
 Что еще сказать.. получение ip-адреса для ddns-delete производится через
 вызов host, потому что нет желания патчить mpd для выдачи бОльшего
 числа параметров для ip-down скрипта. По количеству параметров же
 определяется, вызвали нас для up или down.
 
 Правила вставляются следующие:
 ipfw add $RULE skipto $SKIPTO ip from $IPADDR to any in recv $IFACE
 ipfw add $RULE skipto $SKIPTO ip from any to $IPADDR out xmit $IFACE
 ipfw add $RULE deny ip from any to any via $IFACE
 
 В данном примере $RULE=1000 для ng-интерфейсов (1000 - ng0, 1001 - ng1 итд)
 и 1500 для tun-интерфейсов. $SKIPTO=2000.
 
 Использование в mpd.conf:
     set iface up-script /usr/local/sbin/ddns
     set iface down-script /usr/local/sbin/ddns
 
 Использование в ppp.linkup:
 метка:
  !bg /usr/local/sbin/ddns INTERFACE inet MYADDR HISADDR USER
 
 И в ppp.linkdown:
 метка:
  !bg /usr/local/sbin/ddns INTERFACE inet USER
 
 Сам скрипт (завернувшиеся строки я обозначил \ ):
 #!/bin/sh
 
 # add arguments
 # $1 - interface name
 # $2 - "inet"
 # $3 - local-ip
 # $4 - remote-ip
 # $5 - authname
 #
 # delete arguments
 # $1 - interface name
 # $2 - "inet"
 # $3 - authname
 
 KEY="/etc/namedb/Kint.+165+63294.private"
 SERVER="127.0.0.1"
 ZONE="vpn.int"
 RULE="1000"
 SKIPTO="2000"
 LOGFILE="/var/log/nsupdate.log"
 
 IF_NAME=${1%%[0-9]*}
 RULE=$(($RULE+${1##*[^0-9]}))
 if [ "$IF_NAME" = "tun" ]; then
     RULE=$(($RULE+500))
     ZONE="dialup.int"
 fi
 
 /sbin/ipfw -q delete $RULE >/dev/null
 
 HOSTNAME=$5
 if [ "x$HOSTNAME" = "x" ]; then
 
 HOSTNAME=$3
 REVIP=`/usr/bin/host $HOSTNAME.$ZONE | /usr/bin/awk '{if ($3 == "address") \
 {split ($4,ip,"."); print ip[3] "." ip[2] "." ip[1]}}'`.in-addr.arpa.
 
 (
   echo "$(date) Running $0-delete with arguments \"$*\""
   cat <<EOF | /usr/bin/nsupdate -k $KEY
 server $SERVER
 update delete $HOSTNAME.$ZONE.
 send
 update delete $REVIP
 send
 EOF
   RC=$?
   if [ $RC != 0 ]; then
     echo "$(date) Updating $HOSTNAME.$ZONE failed. (RC=$RC)"
   else echo
   fi
 
 ) >>$LOGFILE 2>&1
 
 else
 
 IPADDR=$4
 
 /sbin/ipfw -q add $RULE skipto $SKIPTO ip from $IPADDR to any in recv $1
 /sbin/ipfw -q add $RULE skipto $SKIPTO ip from any to $IPADDR out xmit $1
 /sbin/ipfw -q add $RULE deny ip from any to any via $1
 
 REVIP=`echo $IPADDR | /usr/bin/awk 'split($1,ip,".") {print ip[4] "." ip[3] \
 "." ip[2] "." ip[1]}'`.in-addr.arpa.
 
 (
   echo "$(date) Running $0-add with arguments \"$*\""
   cat <<EOF | /usr/bin/nsupdate -k $KEY
 server $SERVER
 update delete $HOSTNAME.$ZONE.
 update add $HOSTNAME.$ZONE. 60 A $IPADDR
 send
 update delete $REVIP
 update add $REVIP 60 PTR $HOSTNAME.$ZONE.
 send
 EOF
   RC=$?
   if [ $RC != 0 ]; then
     echo "$(date) Updating $HOSTNAME.$ZONE failed. (RC=$RC)"
   else echo
   fi
 
 ) >>$LOGFILE 2>&1
 
 fi
 
 exit $RC
  Всего наилучшего,
   Sergey aka DS
 
 --- GoldED+/W32 snapshot-2001.03.04
  * Origin: Hету. Придумывать лень. (2:6053/1.2)
 
 

Вернуться к списку тем, сортированных по: возрастание даты  уменьшение даты  тема  автор 

 Тема:    Автор:    Дата:  
 Простенькая антиспуффинговая система   Sergey Korolew   19 May 2004 01:14:08 
Архивное /ru.unix.bsd/222040aa8061.html, оценка 2 из 5, голосов 10
Яндекс.Метрика
Valid HTML 4.01 Transitional