В текущей заметке я задокументирую для себя, как получать полную копию всех настроек, т. е. Осуществлять бекап устройства Mikrotik 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
Теперь нужно создать задание посредством которого данный скрипт будет запускать с заданной периодичностью:
На заметку: сперва нужно проверить что правильно настроен часовой пояс и время на устройстве. (System — SNTP Client (настроен на ru.pool.ntp.org) и System — Clock корректно выставлен часовой пояс и отображается то время которое у Вас сейчас, как на рабочем месте)
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!
В данное поле нужно ввести текущую дату в формате 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.