Ежедневный бекап настроек устройства Mikrotik на FTP сервер

Posted by

В текущей заметке я задокументирую для себя, как получать полную копию всех настроек, т. е. Осуществлять бекап устройства RB951Ui-2HnD (по такому же принципу проделывается и для всех остальных серий фирмы Mikrotik) на развернутый FTP на моей любимой системе (Ubuntu 12.04.5 Server amd64) на которой я чувствую себя более или менее сносно. В первую очередь данный интерес вызван тем, что я просто этого еще не знаю — а это можно задействовать и где нибудь еще кроме текущего места работы (кстати говоря — дома я во всю уже это использую).

Итак разворачиваю на Ubuntu 12.04.5 Server amd64 сервис по организации FTP на который в последствии будет происходит бекап настроек с оборудования Mikrotik.

Текущая информация по системе Ubuntu Precise:

ekzorchik@srv-mon:~$ uname -a && lsb_release -a

Linux srv-mon 3.13.0-32-generic #57~precise1-Ubuntu SMP Tue Jul 15 03:51:20 UTC 2014 x86_64 x86_64 x86_64 GNU/Linux

No LSB modules are available.

Distributor ID: Ubuntu

Description: Ubuntu 12.04.5 LTS

Release: 12.04

Codename: precise

Обновляю систему до актуального состояния текущего релиза:

ekzorchik@srv-mon:~$ sudo apt-get update && sudo apt-get upgrade -y

ekzorchik@srv-mon:~$ sudo apt-get install libcap2

ekzorchik@srv-mon:~$ wget http://launchpadlibrarian.net/173841617/init-system-helpers_1.18_all.deb

ekzorchik@srv-mon:~$ sudo dpkg -i init-system-helpers_1.18_all.deb

Скачиваю пакет vsftpd самой последней стабильной версии (на момент написания данной заметки):

Что самое обидно, а то что когда выходит новая версия пакета ссылка соответственно становится не рабочей:

ekzorchik@srv-mon:~$ wget http://security.ubuntu.com/ubuntu/pool/main/v/vsftpd/vsftpd_3.0.3-2ubuntu1_amd64.deb

—2016-04-16 08:02:28— http://security.ubuntu.com/ubuntu/pool/main/v/vsftpd/vsftpd_3.0.3-2ubuntu1_amd64.deb

Resolving security.ubuntu.com (security.ubuntu.com)… 91.189.92.200, 91.189.88.149, 91.189.92.201, …

Connecting to security.ubuntu.com (security.ubuntu.com)|91.189.92.200|:80… connected.

HTTP request sent, awaiting response… 404 Not Found

2016-04-16 08:02:28 ERROR 404: Not Found.

ekzorchik@srv-mon:~$ wget http://security.ubuntu.com/ubuntu/pool/main/v/vsftpd/vsftpd_3.0.3-3ubuntu2_amd64.deb

ekzorchik@srv-mon:~$ sudo dpkg -i vsftpd_3.0.3-3ubuntu2_amd64.deb

ekzorchik@srv-mon:~$ sudo cp /etc/vsftpd.conf /etc/vsftpd.conf.backup

ekzorchik@srv-mon:~$ sudo nano /etc/vsftpd.conf

listen=YES

#listen_ipv6=YES

#Запрещаем анонимный доступ

anonymous_enable=NO

#Разрешаем вход локальным пользователям:

local_enable=YES

write_enable=YES

dirmessage_enable=YES

use_localtime=YES

#кто закачал файлы тот владелец

local_umask=022

xferlog_enable=YES

connect_from_port_20=YES

#Запираем пользователей в домашних директориях:

chroot_local_user=YES

secure_chroot_dir=/var/run/vsftpd/empty

pam_service_name=vsftpd

rsa_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem

rsa_private_key_file=/etc/ssl/private/ssl-cert-snakeoil.key

allow_writeable_chroot=YES

ekzorchik@srv-mon:~$ sudo service vsftpd restart

Создаю группу в которую буду добавлять пользователей которым можно будет использовать сервис FTP:

ekzorchik@srv-mon:~$ sudo groupadd ftp-mikrotik

Создаю ресурс:

ekzorchik@srv-mon:~$ sudo mkdir -p /var/ftp/ftp-mikrotik

Создаю пользователя:

Т.к. для команды useradd при создании пароля нужно передать его уже подготовленный хэш, то в систему мне потребуется установить:

ekzorchik@srv-mon:~$ sudo apt-get install libstring-mkpasswd-perl -y

Синтаксис: perl -e 'print crypt("password", "salt"),"\n"'

ekzorchik@srv-mon:~$ perl -e 'print crypt("Aa1234567@","mikrotik"),"\n"'

miuMgAgPqVMx2

или же:

ekzorchik@srv-mon:~$ openssl passwd -crypt Aa1234567@

Warning: truncating password to 8 characters

U9V7Ejma/yWzo

ekzorchik@srv-mon:~$ sudo useradd -d /var/ftp/ftp-mikrotik -G ftp-mikrotik -p miuMgAgPqVMx2 -s /bin/false mikrotik

ekzorchik@srv-mon:~$ sudo chgrp -R ftp-mikrotik /var/ftp/ftp-mikrotik/

ekzorchik@srv-mon:~$ sudo chmod -R g+w /var/ftp/ftp-mikrotik/

ekzorchik@srv-mon:~$ sudo chmod 755 /var/ftp

ekzorchik@srv-mon:~$ sudo nano /etc/shells

/bin/false

ekzorchik@srv-mon:~$ sudo nano /etc/pam.d/vsftpd

#auth required pam_shells.so

ekzorchik@srv-mon:~$ sudo service vsftpd restart

Проверяю подключение к ftp ресурсу с другой системы:

aollo@system:~$ ftp 10.7.8.120

Connected to 10.7.8.120.

220 (vsFTPd 3.0.3)

Name (10.7.8.120:aollo): mikrotik

331 Please specify the password.

Password:

530 Login incorrect.

Login failed.

ftp>

хм странно конечно, вот только мне кажется что все дело в пароле на учетную запись, подтверждаю свою правоту: (Ага я не могу через useradd создать учетную запись с действующим паролем)

ekzorchik@srv-mon:~$ sudo bash -c "cat /etc/shadow | grep mikrotik"

mikrotik:miuMgAgPqVMx2:16834:0:99999:7:::

ekzorchik@srv-mon:~$ sudo passwd mikrotik

Enter new UNIX password: Aa1234567

Retype new UNIX password: Aa1234567

passwd: password updated successfully

ekzorchik@srv-mon:~$ sudo bash -c "cat /etc/shadow | grep mikrotik"

mikrotik:$6$0mOm6V2H$63zEfkh8SR1LFQQ/T6i0.e4wp1U2P5llqCpShXA6iUS0QO7owcvNmnSc/DGwNfYRvO13qH7/AlUYbRIcyjLUm0:16834:0:99999:7:::

а вот теперь уже нормально происходит подключение к FTP-ресурсу.

Опытным путем выявил, чтобы создать учетную запись и пароль к ней в одну строку нужно сделать следующее:

ekzorchik@srv-mon:~$ sudo userdel mikrotik

ekzorchik@srv-mon:~$ sudo useradd -d /var/ftp/ftp-mikrotik -G ftp-mikrotik -M -s /bin/bash -p $(echo Aa1234567 | openssl passwd -1 -stdin) mikrotik

Теперь пробую авторизоваться на FTP-ресурсе — и все проходит успешно, что мне и требовалось:

aollo@system:~$ ftp 10.7.8.120

Connected to 10.7.8.120.

220 (vsFTPd 3.0.3)

Name (10.7.8.120:aollo): mikrotik

331 Please specify the password.

Password:

230 Login successful.

Remote system type is UNIX.

Using binary mode to transfer files.

ftp>

ftp> mkdir blablabla

257 «/blablabla» created

ekzorchik@srv-mon:~$ ls -l /var/ftp/ftp-mikrotik/

total 4

drwx—— 2 mikrotik mikrotik 4096 Feb 3 15:11 blablabla

Отлично то что и нужно было.

Теперь перехожу к части когда нужно на Mikrotik настроить задачу по осуществлению резервного копирования на данный FTPсервис:

winbox — IP&DNS — Login:Passwd → System — Script — Add

Name: FTPBackup

Owner: admin

Policy: отмечаю все галочки

Source: (вставляю вот эти строки)

log info "Starting Automatic Backup Script"

:global thisdate [/system clock get date]

:global datetimestring ([:pick $thisdate 0 3] ."-" . [:pick $thisdate 4 6] ."-" . [:pick $thisdate 7 11])

:global backupfilename ([/system identity get name]."_".$datetimestring."_1w")

:local ftpusername "mikrotik"

:local ftpuserpassword "Aa1234567"

:local ftphostname "10.7.8.120"

/system backup save name="$backupfilename"

:delay 5s

/export compact file="$backupfilename"

:log info "Please wait…!!!"

:delay 5s

:log info "Sending Backup Mikrotik to FTP Server…………."

/tool fetch address="$ftphostname" src-path="$backupfilename.backup" user="$ftpusername" password="$ftpuserpassword" port=21 upload=yes mode=ftp dst-path="$backupfilename.backup"

:delay 1

/tool fetch address="$ftphostname" src-path="$backupfilename.rsc" user="$ftpusername" password="$ftpuserpassword" port=21 upload=yes mode=ftp dst-path="$backupfilename.rsc"

:delay 1

/file remove "$backupfilename.backup"

/file remove "$backupfilename.rsc"

:log info "Finished Backup Script…!!!!"

После нажимаю Apply, а затем Run Script — данный скрипт успешно отработает и на поднятый выше FTP сервис складируется резервная копия устройства Mikrotik и файл скрипта где фигурируют используемые команды настройки.

ekzorchik@srv-mon:~$ sudo ls -l /var/ftp/ftp-mikrotik/

[sudo] password for ekzorchik:

total 28

drwx—— 2 mikrotik mikrotik 4096 Feb 3 15:11 blablabla

-rw——- 1 mikrotik mikrotik 20474 Feb 3 15:20 MikroTik_feb-03-2016_1w.backup

-rw——- 1 mikrotik mikrotik 2267 Feb 3 15:20 MikroTik_feb-03-2016_1w.rsc

Теперь нужно создать задание посредством которого данный скрипт будет запускать с заданной периодичностью:

На заметку: сперва нужно проверить что правильно настроен часовой пояс и время на устройстве. (SystemSNTP Client (настроен на ru.pool.ntp.org) и SystemClock корректно выставлен часовой пояс и отображается то время которое у Вас сейчас, как на рабочем месте)

winbox — IP&DNS — Login:Passwd → System — Scheduler — Add

Name: BackupDay

Start Date: (дата первого выполнения (будет выставлена автоматически, при необходимости, дату можно изменить))

Start Time: (время, в которое должно выполниться данное действие. При создании будет выставлено текущее время, заменим его на то, которое нам нужно (в моем случае – 00:10:00).

Interval: как часто запускать данное задание (будет: 1d 00:00:00)

On Event: прописываем название скрипта, в моем случае это FTPBackup

Policy: отмечаю все галочками

После нажимаю Apply и Ok

Если в поле Start Date: ниже не ввести, то будет ошибка:

Error in Start Date — date expected!

Ошибка указания даты: Error in Start Date — date expected!

В данное поле нужно ввести текущую дату в формате Mikrotik, делается это так:

winbox — IP&DNS — Login:Passwd — New Terminal -

[admin@MikroTik] > system clock print

time: 15:38:34

date: feb/03/2016

time-zone-autodetect: yes

time-zone-name: Europe/Moscow

gmt-offset: +03:00

копируем содержимое в параметре date: и копируем в содержимое Start Date: (если планируете задание на следующий день, то ручками просто изменяете дату) и тогда ошибки при сохранении не будет.

Вот пример настроек:

Пример настройки планировщика на задачу

Открываю логи устройства и видим, как формируются сообщения запуска скрипта (На скриншоте выше в строке Next Run видна дата и время когда отработает планировщик)

Лог работы скрипта с уведомлением по каждому этапу

 

А вот и полученные файлы резервного копирования с устройства Mikrotik:

ekzorchik@srv-mon:~$ sudo ls -l /var/ftp/ftp-mikrotik/

total 32

drwx------ 2 mikrotik mikrotik 4096 Feb 3 15:11 blablabla

-rw------- 1 mikrotik mikrotik 21850 Feb 3 16:07 MikroTik_feb-03-2016_1w.backup

-rw------- 1 mikrotik mikrotik 2463 Feb 3 16:07 MikroTik_feb-03-2016_1w.rsc

Ну по хорошему мне нужно в скрипт добавить формирование бекапа с полным указанием времени: dd_mm_yy_hh_mm_ss, потому как у меня скрипт выше отработал и перезатер уже имеющийся.

Вот скрипт которые мне нужен:

log info "Starting Automatic Backup Script"

:global thisdate [/system clock get date]

:global time [/system clock get time]

:global datetimestring ([:pick $thisdate 0 3] ."-" . [:pick $thisdate 4 6] ."-" . [:pick $thisdate 7 11])

:global backupfilename ([/system identity get name]."_".$datetimestring."_$time")

:local ftpusername "mikrotik"

:local ftpuserpassword "Aa1234567"

:local ftphostname "10.7.8.120"

/system backup save name="$backupfilename"

:delay 5s

/export compact file="$backupfilename"

:log info "Please wait…!!!"

:delay 5s

:log info "Sending Backup Mikrotik to FTP Server…………."

/tool fetch address="$ftphostname" src-path="$backupfilename.backup" user="$ftpusername" password="$ftpuserpassword" port=21 upload=yes mode=ftp dst-path="$backupfilename.backup"

:delay 1

/tool fetch address="$ftphostname" src-path="$backupfilename.rsc" user="$ftpusername" password="$ftpuserpassword" port=21 upload=yes mode=ftp dst-path="$backupfilename.rsc"

:delay 1

/file remove "$backupfilename.backup"

/file remove "$backupfilename.rsc"

:log info "Finished Backup Script…!!!!"

А итог получается:

ekzorchik@srv-mon:~$ sudo ls -l /var/ftp/ftp-mikrotik/ -h

total 36K

-rw------- 1 mikrotik mikrotik 24K Feb 3 17:24 MikroTik_feb-03-2016_17:27:36.backup

-rw------- 1 mikrotik mikrotik 2.5K Feb 3 17:24 MikroTik_feb-03-2016_17:27:36.rsc

Итого: Наименование устройства и его полная дата.

Отлично я для себя уяснил тонкости работы и настройки которые мне были интересны, ведь всегда перед тем как отправить боевой сервис в продакшен лучше сперва проверить что можете сделать бекап и восстановиться из него. Нет ничего хуже, чем полная уверенность что у Вас есть резервная копия, а потом оказаться что она битая или вообще не делалась. И если что-то повторяете или читаете понравившуюся Вам заметку не поленитесь повторить все шаги несколько раз, возможно в Вашем случае они будут по другому или что-то пойдет не так. В моем случае все что представлено в этой заметке работоспособно, работает, как дома так и на работе. А пока я прощаюсь, до встречи, с уважением автор блога — ekzorchik.

Leave a Reply

Ваш e-mail не будет опубликован. Обязательные поля помечены *

девять + 2 =