Reborn

And from the ashes the Phoenix rose reborn
  • Начало
  • About

Backup with rsnapshot and ssh

Владимир | 10/22/2010

Disclaimer: Описаните техники в този документ могат да ви помогнат но не е задължително да са напълно вярни и изчерпателни. Не поемам отговорност за каквито и да било реални или нереални, вреди, ползи, пропуски, паднали къщи или каквото и да е произтичащи от ползването или неползването на този документ.
История

  • 08.11.2007 – Първа версия

Мотивация
По темата за архивирането на данни има няколко мнения и всички те са вярни в определена степен и светлина. Най често споменаваните са:

  • Архивирайте често и редовно
  • Архивирайте когато е нужно и имайте свестен план за възстановяване
  • Real men don’t do backups! They let the internet mirror it!

Е за радост или съжаление аз съм от хората които са по първият начин. Държа данните ми да са на сигурно място. И за целта трябва да имам стратегия. Днес ще ви разкажа как този сайт се архивира. Какво се използва и как е навързано.
Трябва да се отбележи че системата не е от най-добрите но е достатъчно добра че да работи и да не ми създава проблеми.
Цел
Целта ни днес е да реализираме напълно автоматизирана система за архивиране на данните. Допълнителни цели са скорост, минимален обем на прехвърляните данни, лесно възстановяване на данните от архива, сигурност.
Съставките
Като цяло нищо странно или екзотично. Дебиан базирана система (и хостът и машината която архивира), rsnapshot, ssh, rsync, diff, cp, du, perl.
Основата на системата се върти около rsync, rsnapshot е обвивка която предлага доста възможности но всичко е постижимо с нормален rsync. Допълнително са ни необходими cron и известно количество познания за начина на работа и методите за сигурност около SSH.
Най-голямо внимание трябва да се обърне на подсигуряването на системата, тоест настройката на ssh
Настройване на rsnapshot
Това като цяло е най-лесната част от цялото занимание. Избрал съм rsnapshot поради факта че информацията се предава посредством rsync тоест само разликите, използва схема за ротиране на архивните копия и може би едно от най-важните неща – използва твърди връзки между непроменените файлове от различните стартове на архивирането и по този начин пести място.
След инсталацията му трябва да се редактира конфигурационният му файл в който трябва да се дефинират времеви периоди (не са точно времеви, но за това след малко), точки за архивиране и някои команди.
/etc/rsnapshot.conf

# дефинираме къде ще съхраняваме архивите
snapshot_root   /home/webbackup/
# дефиниране на някои команди които ще са ни необходими
cmd_cp          /bin/cp
cmd_rm          /bin/rm
cmd_rsync       /usr/bin/rsync
# за съжаление тук не могат да се добавят допълнителни опции
cmd_ssh         /usr/bin/ssh
cmd_logger      /usr/bin/logger
cmd_du          /usr/bin/du
cmd_rsnapshot_diff      /usr/bin/rsnapshot-diff
# дефинираме си период (по-точно име и брой архиви)
interval        whgeto  10
# малко логове и т.н.
verbose         2
loglevel        3
logfile         /var/log/rsnapshot.log
lockfile        /var/run/rsnapshot.pid
# някои от данните не искаме да ги синхронизираме
exclude log/*
exclude phptmp/*
# и най накрая точките които ще архивираме
backup  root @ getoto.net:/var/www/       getoto.net/web/
backup  root @ getoto.net:/var/lib/mysql/ getoto.net/sql/

След като вече сме дефинирали какво и как да архивираме е време да си настроим периодична задачка която реално извършва архивирането. Това се постига чрез добавяне на запис в системата на cron.

0 */6   * * *   webbackup    /usr/bin/rsnapshot whgeto

Това се превежда като … на всеки 6 часа изпълнявай като потребител webbackup командата …
С това настройката на rsnapshot завършва. Но сега следва да си подсигурим достъпа до машината и да го ограничим до използването само на строго определени команди.

Настройване на SSH
След като системата ни е настроена да извършва регулярно архивиране на нашите данни е време да подсигурим достъпа. Искаме да получим следната ситуация. Вход без парола (с ключ), възможен само от определен адрес, който да може да изпълнява само строго определени команди.

Цялото това нещо се постига по следният начин:

  • Генериране на ключ който ще се използва за операциите – самият ключ е без парола. Избираме ключа да не е особенно голям за да пестим време, а и освен това ще е бъде доста ограничен.
    ssh-keygen -t rsa -b 1024 -f ~/keys/backup && chmod 600 ~/keys/backup

    По този начин в папка ~/keys ще си генерираме РСА ключ с големина 1024 байта и ще променим правата му така че само ние да можем да го четем и променяме. Последната стъпка е много важна тъй като ако правата не са коректни ключа няма да бъде използван.

  • Добавяме публичната част от ключа в списъка с упълномощените ключове на машината която ще архивираме. Напълно достатъчно е публичната част от ключа да бъде копирана във файла /root/.ssh/authorized_keys
  • Влизаме един път със този ключ в целевият сървър (машина която ще архивираме). Целта на това е ръчно да приемем подписа на целевата машина като валиден. Ако тази стъпка се пропусне цялата операция по архивирането ще пропадне.
  • Редактираме файлът ~/.ssh/config – това е файл в който могат да се конфигурират множество аспекти на поведението на клиенат ssh на базата на това с кой хост се опитваме да се свържем. В моят случай файлът е със следното съдържание:
    # За кой хост говорим
    Host getoto.net
      # ще използваме само IPv4 (v6 не поддържаме)
      AddressFamily inet
      # ще използваме пакетен режим (неинтерактивен)
      BatchMode yes
      # ще използваме този файл за ключ
      IdentityFile /home/webbackup/keys/backup
      # и изискваме задължително версия 2
      Protocol 2

    По този начин принуждаваме ssh клиента да използва нашият ключ (специално създаден) когато се свързва към машината.
    С това приключва конфигурацията на хоста който извършва архивирането.

  • Редактиране на файлът /root/.ssh/authorized_keys – тук се извършва ограничаването на възможностите на нашият ключ. В този файл ще ограничим ключът ни за архивиране да може да се използва от едно място и да може да изпълнява само определени команди.
    /root/.ssh/authorized_keys

    command="/root/.ssh/authprogs.pl",from="11.22.33.44" ssh-rsa AAAAB3NzaC1 ...

    По този начин ограничаваме ключът да може да се използва само от машина с адрес 11.22.33.44 и единствената команда която може да изпълни (без да може да изпълни нещо друго) е /root/.ssh/authprogs.pl
    Програмата authprogs.pl е скрипт взет от http://www.hackinglinuxexposed.com/. Неговата цел е да предостави възможност за изпълняване на няколко различни команди. Причината е че чрез възможностите на ssh можем да зададем само една задължителна команда.
    Самият срипт има нужда от прост конфигурационен файл

    # хост
    [11.22.33.44]
    # команди които може да изпълнява
    # Backups
    rsync --server --sender -logDtprR --numeric-ids . /var/www
    rsync --server --sender -logDtprR --numeric-ids . /var/lib/mysql

    По този начин ефективно прескочихме ограниченията на ssh

  • Тестване – пуснете ръчно rsnapshot с интервала който сме си дефинирали. Ще повиси малко и в последствие ще имате вече архиви в точката която сте дефинирали като архивна.
    garota:~# ls -l /home/webbackup/
    drwxr-xr-x 3 1005 1005 4096 2007-11-08 12:00 whgeto.0
    drwxr-xr-x 3 1005 1005 4096 2007-11-08 11:39 whgeto.1
    drwxr-xr-x 3 1005 1005 4096 2007-11-08 11:07 whgeto.2
    garota:~# ls -l /home/webbackup/whgeto.1
    drwxr-xr-x 4 1005 1005 4096 2007-11-08 11:36 getoto.net
    garota:~# ls -l /home/webbackup/whgeto.1/getoto.net/
    drwxr-xr-x 3 1005 1005 4096 2007-11-08 11:36 sql
    drwxr-xr-x 3 1005 1005 4096 2007-11-08 11:10 web

Заключение
Е надявам се това да ви е помогнало поне малко. Вече би трябвало да имате изградена система за напълно автоматизиран и подсигурен бекъп. Поне на мен ми върши добра работа.

Полезни Връзки

  • authprogs.pl
  • http://www.snailbook.com/faq/restricted-scp.auto.html
  • http://www.hackinglinuxexposed.com/articles/20030115.html
  • http://pkeck.myweb.uga.edu/ssh/
  • http://sial.org/howto/openssh/
Коментари
Няма коментари »
Категории
Статии
Tags
backup, configuration, debian, rsnapshot, rsync, scp, security, ssh, web
RSS коментари RSS коментари
Trackback Trackback

The Perfect SOHO router – Part 5

Владимир | 12/06/2009

Това е петата част от серия от статии в които ще обясня как да създадем перфектният SOHO рутер. Държа да отбележа че това е моята идея за рутер със всичките и предимства и недостатъци.

Серията се състои от следните статии:

  • Общи насоки, идеи, нужни услуги и размисли – тук ще се постарая аргументирано да обоснова защо съм избрал този комплект от софтуер и услуги
  • Инсталация на базовата система - ще опиша методът по който ще инсталираме и минимизираме нашата система
  • Конфигуриране на DNS и DHCP услугите – тук ще опиша обосновано конфигурациите които смятам за оптимални
  • Конфигуриране на рутирането – като цяло тук е сърцето на нашият рутер. Ще предложа някои трикове за улесняване на живота, както и насоки към по-специфични задачи
  • Конфигуриране на елементарна система за наблюдение и статистика
  • Разширяване възможностите на нашият рутер – ще опиша някои дреболии които могат да направят живота ни много по лесен, удобен и приятен

В тази част ще изградим една много проста система за наблюдение и диагностика на нашият рутер.
Защо
За да знаем какво се случва с нашият рутер. Винаги е полезно да знаем в какво състояние е нашият рутер и то да можем да достигнем до тази информация бързо.

Какво ще има
Личното ми предложение за елементарна система е както следва:

  • Web базирана – за лесен достъп от всякъде
  • Проверка на състоянието на интернет свързаността – за да може с един поглед да се каже дали имаме връзка и дали проблема е някъде при нашият доставчик
  • Проверка на състоянието на мрежовите карти – дали са включени, да не би кабелчето да е избягало и т.н.
  • Проверка на използването на паметта – да не би случайно да сме влезнали в swap зоната и харда да траши
  • Проверка броя активни сесии – за да видим до къде е стигнало използването
  • Трафик статистика с помощта на mrtg
  • Пълна системна информация от phpsysinfo

Скрипт за проверка на състоянието на интернет свързаността
Това е един много прост скрипт който ще се опита да направи няколко пинг-а до определен адрес който сме сигурни че е винаги на линия. Използваме ип адрес а не име за да избегнем проблема с пропаднал DNS.
За да работи коректно този скрипт е необходимо да имаме ping, tail, cut, php

<?php
// simple checking of connectivity
// vvitkov
// 02.11.2006
?>
<html>
<head>
<title>Connection check</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<link REL=StyleSheet HREF="style.css" TYPE="text/css" MEDIA=screen>
</link></head>
<body>
<?php include "header.php"; ?>
<center><br /><br /><h2>Checking Conection with
<?php
$target="194.145.63.12";
if (isset($_REQUEST['t'])){
        $target=$_REQUEST['t'];
}
echo "<font color=#000000>" . $target . "</h2><br /><br />";
$OK="<div class=ok>CONNECTION IS UP</div>";
$NO="<div class=no>CONNECTION DOWN</div>";

$status=exec("ping -q -c3 $target | tail -n 1 | cut -d' ' -f1");

if ($status == "rtt") { echo $OK; } else { echo $NO; }
?>
<br /><br />
<div class=sub><a href="?t=www.abv.bg">Check with abv.bg</a>&nbsp;<a href="?t=www.google.com">Check with Google</a></div>

<?php include "footer.php"; ?></center>

Самият скрипт изобщо не е красив а да не говорим и че не е много сигурен но върши работа. Ето примерен изглед на успешна и неуспешна проверка.
pingcheck-ok
pingcheck-no
както забелязвате ако подадем хост който не съществува за проверка ще ни върне отговор че нямаме интернет, което може да не е вярно. Поради тази причина освен проверка с ip са сложени два популярни сайта които се очаква че са винаги на линия.

Скрипт за проверка на състоянието на мрежовите карти
Идеята на този скрипт е да установи дали имаме физическа свързаност. Не винаги е полезен но върши работа.
За да работи скрипта имаме нужда от sudo, mii-tool.

<?php
// simple checking of network cards
// vvitkov
// 02.11.2006
?>
<html>
<head>
<title>NIC check</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<link REL=StyleSheet HREF="style.css" TYPE="text/css" MEDIA=screen>
</link></head>
<body>
<?php include "header.php"; ?>
<center><br /><br /><h2>Checking Network Cards</h2><br />
<?php
$status=exec("sudo /sbin/mii-tool eth0 | md5sum | cut -d' ' -f1");
if ($status === '011d899f145c89793888771019335049'){
        echo "<div class=ok>External network is UP";
} else {
        echo "<div class=no>External network is DOWN<br />Please check Cable (eth0)</div>";
}
$status=exec("sudo /sbin/mii-tool eth1 | md5sum | cut -d' ' -f1");
if ($status === 'e413ff927a35f4df4c8bdecd70111902'){
        echo "<div class=ok>Internal network is UP</div>";
} else {
        echo "<div class=no>Internal network is DOWN<br />Please check Cable (eth1)</div>";
}
?>
</center>

<?php include "footer.php"; ?>

Проверката на картите не е универсална поради използваните md5 суми, но това може да се коригира особенно лесно. Напълно достатъчно е да се търси в изхода на командата mii-tool стринга link ok. За да работи този скрипт е необходимо потребителят от чието име вървъ нашият web сървър да има достъп до mii-tool. Това става посредством следният ред в /etc/sudoers

www-data ALL=(ALL) NOPASSWD: /sbin/mii-tool

Проверка на използването на паметта
Този скрипт е полезен за проверка на използваната памет. При рутери е особенно важно системата да не използва swap тъй като това краде процесорни цикли и като цяло затормозва машината. За да работи скрипта ни е необходима командата free

< ?php
// simple checking of memory utilisation
// vvitkov
// 02.11.2006
?>
< html >
<head>
<title>Memory Usage</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<link REL=StyleSheet HREF="style.css" TYPE="text/css" MEDIA=screen>
</link></head>
< ?php include "header.php"; ?>
< body ><center><br /><h2>Memory Usage</h2><br /></center>
< ?php
$stat=explode(" ", shell_exec("free -m| head -2|tail -1|awk '{print $2\" \"$3\" \"$4}'"));
$stat2=explode(" ", shell_exec("free -m| head -4|tail -1|awk '{print $2\" \"$3\" \"$4}'"));
$tresh=30;
?>
<table border=0 align=center>
        <tr>
                <th>Mem type</th>
                <th>Used</th>
                <th>free</th>
                <th>Total</th>
        </tr>
        <tr>
                <th>RAM</th>
                <td>< ?php echo $stat[1]; ?></td>
                <td>< ?php echo $stat[2]; ?></td>
                <td>< ?php echo $stat[0]; ?></td>
        </tr>
        <tr>
                <th>SWAP</th>
                <td>< ?php
                        if ($stat2[1] > $tresh) {
                                echo "<font color=red weight=bold>$stat2[1]</font>" ;
                        } else {
                                echo $stat2[1];
                        }
                ?>
                </td>
                <td>< ?php echo $stat2[2]; ?></td>
                <td>< ?php echo $stat2[0]; ?></td>
        </tr>
        <tr>
                <th>TOTAL</th>
                <td>< ?php echo ($stat[1]+$stat2[1]); ?></td>
                <td>< ?php echo ($stat[2]+$stat2[2]); ?></td>
                <td>< ?php echo ($stat[0]+$stat2[0]); ?></td>
        </tr>
        <tr>
                <td>&nbsp;</td>
                <th>< ?php
                        if ($stat2[1] > $tresh) {
                                echo "<font color=red weight=bold>^^^</font>" ;
                        } else {
                                echo "&nbsp";
                        }
                ?>
                </th>
                <td>&nbsp;</td>
                <td>&nbsp;</td>
        </tr>
</table>
<div class="sub">If there is a red number ... that is a problem</div>
< ?php include "footer.php"; ?>

Единствената променлива която трябва да се коригира е $tresh. Тя се използва за да извади предупреждение че използването на swap е нарастнало над някакво ниво. Възможно е да бъде нагласена на примерно 20% но смятам че е по удачно да бъде въведена на ръка.

Проверка броя активни сесии
Ако има проблеми с отваряне на страници, това може да е индикация на изхабени сесии. Тъй като знаем че някои доставчици лимитират броя сесии, този инструмент може да бъде полезен. Трябва да се отбележи че числата които са отчетени не са строго меродавни, тъй като не се отчита състоянието на сесията а просто наличието и. Тоест ако сесията е в състояние CLOSE_WAIT въпреки че може да бъде оползотворена тя се включва в бройката.
За да работи коректно скрипта са ни необходими sudo, netstat-nat

<?php
// simple checking of connectivity
// vvitkov
// 02.11.2006
?>
<html>
<head>
<title>Connection statistics</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<link REL=StyleSheet HREF="style.css" TYPE="text/css" MEDIA=screen>
</link></head>
<?php include "header.php"; ?>
<body ><center><br /><h2>Connection statistics</h2><br /></center>
<table border=0 align=center>
        <tr>
                <th>Proto</th>
                <th>Clients</th>
                <th>Ruter</th>
        </tr>
        <tr>
                <th>TCP</th>
                <td><?php echo exec("sudo netstat-nat -n -S -p tcp | grep ESTABLISHED | wc -l"); ?></td>
                <td><?php echo exec("sudo netstat-nat -n -L -p tcp | grep ESTABLISHED | wc -l"); ?></td>
        </tr>
        <tr>
                <th>UDP</th>
                <td><?php echo exec("sudo netstat-nat -n -S -p udp | grep ESTABLISHED | wc -l"); ?></td>
                <td><?php echo exec("sudo netstat-nat -n -L -p udp | grep ESTABLISHED | wc -l"); ?></td>
        </tr>
</table>
<br />
<div class=sub>Only active connections are visible</div>
<?php include "footer.php"; ?>

Заключение
В тази статия не е показана настройка на mrtg и phpsysinfo, тъй като те са относително елементарни. С това приключва нашата елементарна система за наблюдение и статистика. Самата система е наистина доста проста но върши работа.
Прилагам цялата система в архивиран вид. За да работи е необходимо да си настроите mrtg посредством cfgmaker и indexmaker от инсталацията на mrtg и phpsysinfo посредством пакетната система на дебиан.

monitoring system

Трябва да се отбележи че системата има възможност да показва съобщения настроени от администратора в основният си изглед. Това се постига благодарение на файла header.php

Серията продължава в The Perfect SOHO router – Part 6

Коментари
Няма коментари »
Категории
Статии
Tags
class, Code, debian, dhcp, firewall, Head, installation, iproute, iptables, management, mrtg, network, php, ping, router, secure, simple, soho, web, web swap
RSS коментари RSS коментари
Trackback Trackback

The Perfect SOHO router – Part 1

Владимир | 12/06/2009

Това е първата част от серия от статии в които ще обясня как да създадем перфектният SOHO рутер. Държа да отбележа че това е моята идея за рутер със всичките и предимства и недостатъци.

Серията се състои от следните статии:

  • Общи насоки, идеи, нужни услуги и размисли – тук ще се постарая аргументирано да обоснова защо съм избрал този комплект от софтуер и услуги
  • Инсталация на базовата система – ще опиша методът по който ще инсталираме и минимизираме нашата система
  • Конфигуриране на DNS и DHCP услугите – тук ще опиша обосновано конфигурациите които смятам за оптимални
  • Конфигуриране на рутирането – като цяло тук е сърцето на нашият рутер. Ще предложа някои трикове за улесняване на живота, както и насоки към по-специфични задачи
  • Конфигуриране на елементарна система за наблюдение и статистика
  • Разширяване възможностите на нашият рутер – ще опиша някои дреболии които могат да направят живота ни много по лесен, удобен и приятен

Е да започваме с първата част.
Идеята
От известно време си мисля за тази серия от статии. Темата със SOHO рутерите е интересна от много гледни точки. От една страна това трябва да са евтини машини. От друга трябва да са достатъчно ефективни за да вършат работата. И може би последната гледна точка е че никъде няма описано подобно нещо. И вече наистина последно – просто ми е приятно да го напиша.

Нужни услуги
Тук трябва да се вложи най много мисъл. Трябва да се определи точно какви услуги ще се изпълняват на нашият рутер. Абсолютният минимум е рутиране/маскиране и SSH. Реално това е напълно достатъчно но и леко неудобно. Моят минимум е следният:

  • Рутиране/маскиране/НАТ – без него няма смисъл от рутер
  • SSH – за мениджмънт от конзола
  • Кеширащ DNS – за наша собствена фалшива зона, скорост и частична независимост от нашия доставчик
  • DHCP сървър който да ни настройва мрежата автоматично
  • Минималистична web базирана система за наблюдение, статистики и елементарни проверки

Като цяло това е един добър комплект услуги които предоставят удобство на работа и изискват минимална поддръжка. Лично аз предпочитам допълнително да имам следните допълнителни услуги:

  • Самба – за да укротя малко windows машините в мрежата. Предоставя MasterBrowser и WINS
  • NTP сървър – предоставя точно време
  • FTP сървър – за да мога отдалечено да си качвам дреболии

Размисли
Така вече сме избрали услугите, остана изборът на дистрибуция. Лично аз предпочитам дебиан и на него ще реализирам целият проект. Всеки е свободен да избере каквото иска, и най-вече това което му е удобно. Трябва от рано да се помисли за това как ще се проверява сигурността, кой ще има право на достъп до машината, дали ще се ползват квоти/ограничения във времето. Какъв тип маскиране ще се ползва и още дреболии. Повечето от тези въпроси изникват в процеса на работа, така че моля първо прочетете цялата серия и тогава започнете работа.

Общи насоки
Това не е елементарен проект. Предполага се че имате прилична представа какво точно се опитвате да постигнете. Всяка грешка допусната по време на инсталацията може наистина да ви ухапе след време. Така че мислете навреме и по няколко пъти.

Серията продължава в The Perfect SOHO router – Part 2

Коментари
Няма коментари »
Категории
Статии
Tags
debian, dhcp, dns, firewall, router, secure, simple, soho, ssh, ssh ssh, web
RSS коментари RSS коментари
Trackback Trackback

Разни Лични

  • БирБлог
  • На море
  • Шумилницата

Blogroll

  • Summerborn

Етикети

bash Code debian dhcp dhcpd dns dnsmasq encryption firewall fun gnupg installation iproute iptables jabber linux lqlqlq management memdisk mrtg n900 netboot new nokia Norton ntp pcsuite php ping port reborn router routing rsync secure shaper simple soho squid ssh tftp web webserver Конкурс сигурност
rss RSS коментари valid xhtml 1.1 get firefox