billing:howto:ipset_paysystems

Решение для доступа должников на сайты платежных систем

Вернуться на уровень выше

Поставить dig

Для centos:

yum install -y bind-utils
#!/bin/bash
#͑Client DNS
DNS1=8.8.8.8
DNS2=8.8.4.4

DIG=`which dig`
IPSET=`which ipset`
IPSETNAME="paysystems"

HOME_DIR=$(cd $(dirname $0)&& pwd)
SRCDATA=`cat $HOME_DIR/domains.list`
IPLIST="$HOME_DIR/ip.list"
RESULT="$HOME_DIR/paysys.txt"

$DIG +short $SRCDATA @$DNS1 |grep '\([[:digit:]]\{1,3\}\.\)\{3\}[[:digit:]]\{1,3\}' > $RESULT
$DIG +short $SRCDATA @$DNS2 |grep '\([[:digit:]]\{1,3\}\.\)\{3\}[[:digit:]]\{1,3\}' >> $RESULT
cat $IPLIST >> $RESULT

$IPSET -N $IPSETNAME iphash -exist
$IPSET flush $IPSETNAME

for i in `cat $RESULT`;
do
$IPSET add $IPSETNAME $i -exist 2>/dev/null;
done

DNS1 и DNS2 - указываем клиентские DNS-сервера (это важно!)

domains.list - файл с доменами (внести все домены используемые на сайте)

ip.list - файл с IP (тут можно добавлять IP к общему списку)

Пример правила для iptables:

 # NAT для платежных систем
 ipset -N paysystems iphash -exist
 iptables -t nat -A POSTROUTING -m set --match-set paysystems dst -o $out_interface1 -j SNAT --to-source $out_ext_ip1

Добавить в крон:

00 6 * * * root /var/mikbill/scripts/paysystems.sh > /dev/null
#!/bin/bash
#Client DNS
DNS1=192.168.10.1
DNS2=8.8.8.8
# Mikrotik
MT_SSH_PORT="22"
IP_TO_ADDRESS_LIST=1
IP_TO_WALLED_GARDEN_IP_LIST=1

Path_Config=/var/www/mikbill/admin/app/etc/config.xml

SSH_INTERVAL=10
SSH_SUM=10

DIG=`which dig`
IPSETNAME="nomoney_dst_accept"

HOME_DIR=$(cd $(dirname $0)&& pwd)
SRCDATA=`cat $HOME_DIR/domains.list`
IPLIST="$HOME_DIR/ip.list"
UPLOAD=$HOME_DIR/upload_paysys.rsc
ADDRESS_LIST="nomoney_dst_accept"

TMP=$HOME_DIR/tmp

if !([ -e "$IPLIST" ])then
touch $IPLIST
fi

RESULT1=$($DIG +short $SRCDATA @$DNS1 |grep '\([[:digit:]]\{1,3\}\.\)\{3\}[[:digit:]]\{1,3\}')
RESULT2=$($DIG +short $SRCDATA @$DNS2 |grep '\([[:digit:]]\{1,3\}\.\)\{3\}[[:digit:]]\{1,3\}')

RESULT="$RESULT1 $RESULT2 $(cat $IPLIST)"


echo >$UPLOAD

if [ "$IP_TO_ADDRESS_LIST" -ne 0 ]
then
echo "/ip firewall address-list remove [/ip firewall address-list find list=$ADDRESS_LIST]" >>$UPLOAD
fi

if [ "$IP_TO_WALLED_GARDEN_IP_LIST" -ne 0 ]
then
echo "/ip hotspot walled-garden ip remove numbers=[/ip hotspot walled-garden ip find comment=$ADDRESS_LIST]" >>$UPLOAD
fi

echo >$TMP
for i in $RESULT; do
if ! grep -q $i $TMP
then

if [ "$IP_TO_ADDRESS_LIST" -ne 0 ]
then
echo "/ip firewall address-list add list="$ADDRESS_LIST" address=$i" >>$UPLOAD
fi

if [ "$IP_TO_WALLED_GARDEN_IP_LIST" -ne 0 ]
then
echo "/ip hotspot walled-garden ip add comment=$ADDRESS_LIST dst-address=$i" >>$UPLOAD
fi

echo $i >>$TMP
fi
done

SSH_UPLOAD (){
for (( i=0;i!=$SSH_SUM;i++ )); do

scp -P $MT_SSH_PORT $UPLOAD $Mikrotik_Login@$Mikrotik_IP:/
STATUS=$?
if [ $STATUS -ne 0 ]; then
sleep $SSH_INTERVAL
else

CMD="/import file=$(basename $UPLOAD)"
for (( i=0;i!=$SSH_SUM;i++ )); do
ssh -p $MT_SSH_PORT $Mikrotik_Login@$Mikrotik_IP "${CMD}" > /dev/null
STATUS=$?
if [ $STATUS -ne 0 ]; then
sleep $SSH_INTERVAL
fi

done
break
fi

done
}

# Находим все микротики
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}')

SQL=`mysql -D mikbill -u $DB_User -p$DB_Password -e "SELECT nasname, naslogin FROM radnas WHERE usessh=1 and (nastype='mikrotik' or nastype='HotSpot')" 2>/dev/null`
#SQL=${SQL:$17:${#SQL}}

NUM=0
for i in $SQL; do
SQL_Array[$NUM]=$i
let "NUM=NUM+1"
done


for((i=2;i!=NUM;i+=2))
do
Mikrotik_IP=${SQL_Array[$i]}
Mikrotik_Login=${SQL_Array[$i+1]}
SSH_UPLOAD
done

Данные для входа на микротики берутся из настроек NAS админки

Вкл/выкл выгрузку в Firewall Address list (0/1):

IP_TO_ADDRESS_LIST=1

Вкл/выкл выгрузку в Hotspot Walled Garden IP List (0/1):

IP_TO_WALLED_GARDEN_IP_LIST=1

Сделать авторизацию по ключу

Добавить исполнение скрипта в крон

Пример правил NAT на mikrotik

/ip firewall nat 
add action=accept chain=srcnat comment=\
    "To LK" dst-address=\
    192.168.10.2 src-address=172.22.0.0/20
add action=masquerade chain=srcnat comment="Nomoney dst accept" \
    dst-address-list=nomoney_dst_accept src-address=172.22.0.0/20
add action=dst-nat chain=dstnat comment="Nomoney 80 redirect" dst-address-list=\
    !nomoney_dst_accept dst-port=80 protocol=tcp src-address=172.22.0.0/20 \
    to-addresses=192.168.10.2 to-ports=80
add action=dst-nat chain=dstnat comment="Nomoney 443 redirect" \
    dst-address-list=!nomoney_dst_accept dst-port=443 protocol=tcp src-address=\
    172.22.0.0/20 to-addresses=192.168.10.2 to-ports=443
  • billing/howto/ipset_paysystems.txt
  • Последнее изменение: 6 лет назад
  • vilko