Автоматический бэкап конфигурации



  • Всем добрый день.

    У меня появилось желание бэкапить автоматом конфиг pfSense. Написал скрипт для bash, который удалённо подключается к pfSense и, собственно, нажимает кнопку "Download configuration".

    Возможно, кому-нибудь из вас также пригодится и сохранит время.

    
    #!/bin/bash
    
    user="user"
    pass="password"
    cookies="/home/vi-admin/bin/cookies/pfSense_cookies.txt"
    config="/mnt/nas4free/configs/pfSense/pfSense_$(date +%F_%H-%M-%S).xml"
    ip="https://192.168.1.1/"
    token="/home/vi-admin/bin/cookies/pf_token"
    
    # For pfSense 2.0
    log="/home/vi-admin/bin/log_get_config_pfSense"
    
    wget --no-check-certificate --delete-after --keep-session-cookies --save-cookies $cookies --output-file=$log --post-data="usernamefld=$user&passwordfld=$pass&login=Login" $ip"index.php"
    wget --no-check-certificate --keep-session-cookies --load-cookies $cookies --append-output=$log --post-data="donotbackuprrd=yes&Submit=download"  $ip"diag_backup.php" -O $config
    
    # For pfSense 2.1
    curl -k -s -S -L -c $cookies $ip"index.php" | grep "input type='hidden' name='__csrf_magic'" | echo $(awk '{print substr($0,120,55)}') > $token && csrf_magic=$(cat $token)
    curl -k -s -S -L -b $cookies -d "usernamefld=$user&passwordfld=$pass&login=Login&__csrf_magic=$csrf_magic" $ip"index.php" > /dev/null
    curl -k -s -S -L -b $cookies -d "donotbackuprrd=yes&Submit=download" --output $config $ip"diag_backup.php" > /dev/null
    
    if [ "$( wc -c $config | awk '{ print $1 }' )" == "0" ]
    then
    	rm $config $cookies $token
    else
    	rm $cookies $token
    fi
    
    

    Замечания и уточнения принимаются.



  • который удалённо подключается к pfSense и, собственно, нажимает кнопку "Download configuration".

    Грамотней если бы скрипт присылал письмо на мыло, а в аттаче бэкап конфига.



  • А кто скажет, что поменялось в 2.1, что вгет способ не срабатывает?
    А по замечанию- кому то в мыло надо, кому то на фтп -там уже проще добавить пару строк кода.



  • А сами wget, curl у вас установлены? Может после обновления pfsense до 2.1 стоит эти пакеты переустановить если они были в 2.0.х ?

    http://www.milliondollarserver.com/install-wget-curl-on-pfsense-freebsd/



  • В 2.1 появилась защита в виде csrf

    а я как-то раньше писал похожий скрипт для бэкапа NAS4Free конфига - там похоже реализована защита web-интерфейса. Поэтому и сделал на curl по аналогии



  • @werter:

    А сами wget, curl у вас установлены? Может после обновления pfsense до 2.1 стоит эти пакеты переустановить если они были в 2.0.х ?

    http://www.milliondollarserver.com/install-wget-curl-on-pfsense-freebsd/

    я захожу из другой системы - vMA



  • @pakko:

    В 2.1 появилась защита в виде csrf

    Вроде в 2.0 тоже было. я на данную страницу (бекапа) его отключал в рнр файлах.



  • я только в 2.1 столкнулся. В коде привел пример прежнего скрипта.



  • Может кто-нибудь поможет переписать скрипт под cmd.exe?

    Цель, чтобы сотрудник удаленно будил свой комп не ходя по вкладкам pfSense, а просто запуском батника.

    Для версии 2.0 я использовал что-то вроде этого:

    
    curl.exe -k -L -с cookies.txt -d "usernamefld=wol&passwordfld=123&login=Login" https://192.168.1.1/index.php > WakeOnLAN_Smartpro_log.txt
    
    curl.exe -k -b cookies.txt "https://192.168.1.1/services_wol.php?mac=f0:de:f1:b9:e8:3d&if=lan" >> WakeOnLAN_Smartpro_log.txt
    curl.exe -k -b cookies.txt "https://192.168.1.1/index.php?logout" >> WakeOnLAN_Smartpro_log.txt
    
    DEL cookie.txt
    
    ECHO Waking up the remote computer and starting RealVNC.
    ECHO Wait a minute...
    
    :pinging
    ping -n 1 -w 1 192.168.1.43 | Find /I "TTL=" || goto pinging
    
    start "Remote access via VNC" "c:\Users\user\Desktop\smart.vnc+"
    
    


  • странно.
    я сталкивался. не думаю что у меня бета стояла, я решал так:
    в services_captiveportal_vouchers_edit.php и  services_captiveportal_vouchers.php
    добавлял экранировал строку  $nocsrf = true;
    получалось: #$nocsrf = true;

    сами строки такие (весь скрипт не привожу, думаю понятно будет)

    #get cookies
    wget -qO/dev/null –quiet --keep-session-cookies --save-cookies ./cookies.txt --post-data "login=Login&usernamefld=${pfsense_login}&passwordfld=${pfsense_pass}" --no-check-certificate --timeout=10 https://${pfsense_ip}:${pfsense_port}/diag_backup.php
    #echo  -Download Config
    wget --quiet --keep-session-cookies --load-cookies ./cookies.txt --post-data "Submit=download&donotbackuprrd=yes" --no-check-certificate -O ./pfsense_backup/${pfsense_name}-${pfsense_ip}-$TIMESTAMP.xml --timeout=10 https://${pfsense_ip}:${pfsense_port}/diag_backup.php
    }



  • 2 alexandrnew:
    Мне не хотелось менять/отключать стандартный функционал.

    Для bat-ника сам что-то похожее на рабочий вариант попробовал написать. Вот что получилось:

    
    @echo off
    
    SET user=wol
    SET pass=wolwol
    SET server=https://192.168.1.1/
    SET wol_comp=192.168.1.43
    SET cookies=cookies.txt
    SET tfile1=WakeOnLAN_temp1.tmp
    SET tfile2=WakeOnLAN_temp2.tmp
    SET str=csrfMagicToken
    
    curl.exe -k -L -s -S -c cookies.txt "%server%index.php" | findstr %str% > %tfile1%
    
    set /p a=<%tfile1%
    set csrf_magic=%a:~152,55%
    
    curl.exe -k -L -s -S -o %tfile2% -b %cookies% -d "usernamefld=%user%&passwordfld=%pass%&login=Login&__csrf_magic=%csrf_magic%" "%server%index.php"
    curl.exe -k -L -s -S -o %tfile2% -b %cookies% "%server%services_wol.php?mac=f0:de:f1:b9:e8:3d&if=lan"
    curl.exe -k -L -s -S -o %tfile2% -b %cookies% "%server%index.php?logout"
    
    DEL /F %cookies% %tfile1% %tfile2%
    
    ECHO.
    ECHO Waking up the remote computer and will start RealVNC.
    ECHO Wait a minute...
    
    :pinging
    ping -n 1 -w 1 %wol_comp% | Find /I "TTL=" || goto pinging
    
    start "Remote access via VNC" "c:\Users\Anatol\Desktop\comp1.vnc+"
    
    exit
    
    


  • @pakko:

    Написал скрипт для bash, который удалённо подключается к pfSense и, собственно, нажимает кнопку "Download configuration".

    А есть скрипт или способы сделать бекап конфигурации на самом pfsense, и скопировать созданный на pfsense файл конфигурации, самим pfsensом на удаленный ftp?
    Потом этот скрипт поместить в cron.
    И еще послать емаил о fail или sucsess.

    Мне кажется это более логичным