Роскомнадзор скрипт заливщик для mikrotik

Скрипт проверяет отличия файлов с ip между новой и предыдущей выгрузкой и создает файл для изменений на микротике, заливает и применяет на всех микротиках из базы.

DATECLER Обозначает день недели (понедельник=1). В этот день будет проходить полное пересоздание файла для заливки (раньше было в кроне). Чтобы отключить установить DATECLEAR=0

Version 4
Добавлен заливщик. Чтобы работал нужно чтобы был открыт доступ по фтп для заливки и ссш для применения, также надо чтобы данные (логины, пароли в настройках насов совпадали с сущестующими учетками).
Требуется настроенная авторизация по ключу.

#!/bin/sh
#Version 4
HOME_DIR=$(cd $(dirname $0)&& pwd)
IPLIST=$HOME_DIR/ip_file.list
IPLIST_OLD=$HOME_DIR/ip_file.list.old
IPLIST_ADD=$HOME_DIR/rkn_iplist_add.rsc
DATECLEAR=1

IPLIST_TEXT=($(cat $IPLIST))
#----------------------------------------------
newiplist()
{
echo "/ip firewall address-list remove [/ip firewall address-list find list=RKN_BLK_LIST]" >$IPLIST_ADD
for((i=0;i<${#IPLIST_TEXT[@]};i++))do
echo "/ip firewall address-list add list="RKN_BLK_LIST" address=${IPLIST_TEXT[i]}" >>$IPLIST_ADD
done
cp $IPLIST $IPLIST_OLD
exit
}

if ( ! [ -e "$IPLIST_OLD" ])then
{
newiplist
}
fi

if [ $DATECLEAR -eq  $(date +%w) ]; then
{
newiplist
}
fi
#----------------------------------------------
IPLIST_OLD_TEXT=($(cat $IPLIST_OLD))
if ( ! diff -q $IPLIST $IPLIST_OLD)then
{

if ([ -e "$IPLIST_ADD" ])then
rm $IPLIST_ADD
fi


for((i=0;i<${#IPLIST_OLD_TEXT[@]};i++))do
if ( ! grep -q "${IPLIST_OLD_TEXT[i]}" $IPLIST ); then
{
echo "/ip firewall address-list remove [find list=RKN_BLK_LIST address=${IPLIST_OLD_TEXT[i]}] " >>$IPLIST_ADD
}
fi
done

for((i=0;i<${#IPLIST_TEXT[@]};i++))do
if ( ! grep -q "${IPLIST_TEXT[i]}" $IPLIST_OLD ); then
{
echo "/ip firewall address-list add list="RKN_BLK_LIST" address=${IPLIST_TEXT[i]}" >>$IPLIST_ADD
}
fi
done

cp $IPLIST $IPLIST_OLD
#----------------------------------------------
if ([ -e "$IPLIST_ADD" ])then
{
PATH_CONFIG=/var/www/mikbill/admin/app/etc/config.xml
db_user=$(cat $PATH_CONFIG| grep  username | awk '{ gsub("<username>"," "); print }' | awk '{ gsub("</username>"," "); print }' | awk '{print $1}')
db_password=$(cat $PATH_CONFIG| grep  password | awk '{ gsub("<password>"," "); print }' | awk '{ gsub("</password>"," "); print }' | awk '{print $1}')

IP=`mysql -D mikbill -u $db_user -p$db_password -e "SELECT nasname FROM radnas WHERE usessh=1 and (nastype='mikrotik' or nastype='HotSpot')" 2>/dev/null`
LOGIN=`mysql -D mikbill -u $db_user -p$db_password -e "SELECT naslogin FROM radnas WHERE usessh=1 and (nastype='mikrotik' or nastype='HotSpot')" 2>/dev/null`
PASS=`mysql -D mikbill -u $db_user -p$db_password -e "SELECT naspass FROM radnas WHERE usessh=1 and (nastype='mikrotik' or nastype='HotSpot')" 2>/dev/null`

NUM=0
for i in $IP; do
MASSIVE_IP[$NUM]=$i
let "NUM=NUM+1"
done
NUM=0
for i in $LOGIN; do
MASSIVE_LOGIN[$NUM]=$i
let "NUM=NUM+1"
done
NUM=0
for i in $PASS; do
MASSIVE_PASS[$NUM]=$i
let "NUM=NUM+1"
done

for((i=1;i!=NUM;i++))
do
curl --upload-file $IPLIST_ADD  ftp://${MASSIVE_LOGIN[$i]}:${MASSIVE_PASS[$i]}@${MASSIVE_IP[$i]}/
CMD="/import file=$IPLIST_ADD"
ssh ${MASSIVE_LOGIN[$i]}@${MASSIVE_IP[$i]} "${CMD}" > /dev/null
done
}
fi

}
else
{
echo "Изменений не было"
}
fi

#END SCRIPT


#############################################################################
Version 3
Добавлена переменная DATECLER. Обозначает день недели (понедельник=1). В этот день будет проходить полное пересоздание файла для заливки (раньше было в кроне). Чтобы отключить установить DATECLEAR=0

#!/bin/sh
#Version 3
IPLIST=ip_file.list
IPLIST_OLD=ip_file.list.old
IPLIST_ADD=rkn_iplist_add.rsc
DATECLEAR=1

IPLIST_TEXT=($(cat $IPLIST))
#----------------------------------------------

newiplist()                                                  
{                                                            
echo "/ip firewall address-list remove [/ip firewall address-list find list=RKN_BLK_LIST]" >$IPLIST_ADD
for((i=0;i<${#IPLIST_TEXT[@]};i++))do                        
echo "/ip firewall address-list add list="RKN_BLK_LIST" address=${IPLIST_TEXT[i]}" >>$IPLIST_ADD
done                                                         
cp $IPLIST $IPLIST_OLD                                       
exit
}

if ( ! [ -e "$IPLIST_OLD" ])then
{
newiplist
}
fi

if [ $DATECLEAR -eq  $(date +%w) ]; then.
{
newiplist
}
fi
#----------------------------------------------
IPLIST_OLD_TEXT=($(cat $IPLIST_OLD))
if ( ! diff -q $IPLIST $IPLIST_OLD)then
{
if ([ -e "$IPLIST_ADD" ])then
{
rm $IPLIST_ADD
}
fi

for((i=0;i<${#IPLIST_OLD_TEXT[@]};i++))do
if ( ! grep -q "${IPLIST_OLD_TEXT[i]}" $IPLIST ); then
{
echo "/ip firewall address-list remove [find list=RKN_BLK_LIST address=${IPLIST_OLD_TEXT[i]}] " >>$IPLIST_ADD
}
fi
done

for((i=0;i<${#IPLIST_TEXT[@]};i++))do
if ( ! grep -q "${IPLIST_TEXT[i]}" $IPLIST_OLD ); then
{
echo "/ip firewall address-list add list="RKN_BLK_LIST" address=${IPLIST_TEXT[i]}" >>$IPLIST_ADD
}
fi
done

cp $IPLIST $IPLIST_OLD
}
fi
#END SCRIPT

##########################################################

Version 2
Вместо двух файлов для удаления и для добавления теперь создается один

#!/bin/sh
#Version 2
IPLIST=ip_file.list
IPLIST_OLD=ip_file.list.old
IPLIST_ADD=rkn_iplist_add.rsc

IPLIST_TEXT=($(cat $IPLIST))
#----------------------------------------------
if ( ! [ -e "$IPLIST_OLD" ])then
{
echo "/ip firewall address-list remove [/ip firewall address-list find list=RKN_BLK_LIST]" >$IPLIST_ADD
for((i=0;i<${#IPLIST_TEXT[@]};i++))do
echo "/ip firewall address-list add list="RKN_BLK_LIST" address=${IPLIST_TEXT[i]}" >>$IPLIST_ADD
done
cp $IPLIST $IPLIST_OLD
exit
}
fi
#----------------------------------------------
IPLIST_OLD_TEXT=($(cat $IPLIST_OLD))
if ( ! diff -q $IPLIST $IPLIST_OLD)then
{
if ([ -e "$IPLIST_ADD" ])then
{
rm $IPLIST_ADD
}
fi

for((i=0;i<${#IPLIST_OLD_TEXT[@]};i++))do
if ( ! grep -q "${IPLIST_OLD_TEXT[i]}" $IPLIST ); then
{
echo "/ip firewall address-list remove [find list=RKN_BLK_LIST address=${IPLIST_OLD_TEXT[i]}] " >>$IPLIST_ADD
}
fi
done

for((i=0;i<${#IPLIST_TEXT[@]};i++))do
if ( ! grep -q "${IPLIST_TEXT[i]}" $IPLIST_OLD ); then
{
echo "/ip firewall address-list add list="RKN_BLK_LIST" address=${IPLIST_TEXT[i]}" >>$IPLIST_ADD
}
fi
done

cp $IPLIST $IPLIST_OLD
}
fi
#END SCRIPT

#############################################################

Создает два файла с ip, которые нужно добавить и которые нужно удалить из iplist.

  • nano /var/www/mikbill/admin/app/etc/roskomnadzor/diff_iplist.sh

#!/bin/sh
IPLIST=ip_file.list
IPLIST_OLD=ip_file.list.old
IPLIST_ADD=rkn_iplist_add.rsc
IPLIST_DEL=rkn_iplist_del.rsc

IPLIST_TEXT=($(cat $IPLIST))
###############################################
if ( ! [ -e "$IPLIST_OLD" ])then
{
for((i=0;i<${#IPLIST_TEXT[@]};i++))do
echo "/ip firewall address-list add list="RKN_BLK_LIST" address=${IPLIST_TEXT[i]}" >>$IPLIST_ADD
done
cp $IPLIST $IPLIST_OLD
echo "/ip firewall address-list remove [/ip firewall address-list find list=RKN_BLK_LIST]" >$IPLIST_DEL
exit
}
fi
###############################################
IPLIST_OLD_TEXT=($(cat $IPLIST_OLD))
if ( ! diff -q $IPLIST $IPLIST_OLD)then
{
if ([ -e "$IPLIST_ADD" ])then
{
rm $IPLIST_ADD
}
fi
if ([ -e "$IPLIST_DEL" ])then
{
rm $IPLIST_DEL
}
fi
###############################################
for((i=0;i<${#IPLIST_TEXT[@]};i++))do
if ( ! grep -q "${IPLIST_TEXT[i]}" $IPLIST_OLD ); then
{
echo "/ip firewall address-list add list="RKN_BLK_LIST" address=${IPLIST_TEXT[i]}" >>$IPLIST_ADD
}
fi
done

for((i=0;i<${#IPLIST_OLD_TEXT[@]};i++))do
if ( ! grep -q "${IPLIST_OLD_TEXT[i]}" $IPLIST ); then
{
echo "/ip firewall address-list remove [find list=RKN_BLK_LIST address=${IPLIST_OLD_TEXT[i]}] " >>$IPLIST_DEL
}
fi
done
cp $IPLIST $IPLIST_OLD
}
fi
#END SCRIPT 
  • chmod a+x /var/www/mikbill/admin/app/etc/roskomnadzor/diff_iplist.sh
Раз период, например неделю, можно добавить полную перезаливку. Для этого в крон добавить задачу
#Clean rkn mikrotik file old
00 06 * * 1 root rm -f /var/www/mikbill/admin/app/etc/roskomnadzor/ip_file.list.old
Тогда для следующей загрузки на микротик будет создана задача удаления всего iplist и добавление всех ip из списка.
Или просто если надо обновить весь список удалить файл ip_file.list.old

Комментарии

Популярные сообщения из этого блога

Accel-ppp команды

mikbill расшифровка завершений сессий

Zabbix agent установка и настройка