====== Решение для доступа должников на сайты платежных систем ====== [[billing:howto|Вернуться на уровень выше]] Поставить dig Для centos: yum install -y bind-utils ==== Скрипт загрузки IP доменов в Ipset ==== #!/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 ==== Скрипт загрузки IP доменов на mikrotik в address-list и Hotspot Walled Garden IP List==== #!/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(""," "); print }' | awk '{ gsub(""," "); print }' | awk '{print $1}') DB_Password=$(cat $Path_Config| grep password | awk '{ gsub(""," "); print }' | awk '{ gsub(""," "); 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