Reborn

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

Multiple courier-imap-ssl instances on single machine

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

Днес ще покажем как да си сглобим сървър за поща на който ще работят няколко инстанции на Courier. Интересното в случая ще е че на всяка от инстанциите ще има различен SSL сертификат. По този начин на една реална физическа машина ще хостваме няколко напълно легитимни мейл сървъра със техните си отделни сертификати.

Процедурата е пределно проста.
Първо трябва да си инсталираме необходимият софтуер. Аз лично съм привърженик на Debian и него си слагам

apt-get install postfix courier-imap-ssl sasl2-bin libsasl2-modules courier-pop-ssl ca-certificates

Е postfix-a не ни е нужен точно за това изпълнение но помага да го имаме. При изпълняването на горната команда ще бъдат инсталирани няколко допълнителни пакета включително courier-authlib.
След като приключи инсталацията трябва да спрем стартирането на цялата система courier с изключение на демона за аутентификация. Той ще остане единственото недублирано нещо.
Да приемем че имаме следният набор от мрежови настройки:

IP1: 10.199.199.201
IP2: 10.199.199.202
Mask: 255.255.255.0

Да осъзнавам факта че това не са публични адреси но ако не можете да си смените два адреса на няколко места … не знам защо изобщо четете това.
Следващата ни стъпка е да направим по две копия на конфигурациите на courier и стртиращите скриптове. В крайна сметка получаваме следна структура:

/etc/
/etc/courier/
/etc/courier-201/
/etc/courier-202/
/etc/init.d/courier-imap
/etc/init.d/courier-imap-201
/etc/init.d/courier-imap-202
/etc/init.d/courier-imap-ssl
/etc/init.d/courier-imap-ssl-201
/etc/init.d/courier-imap-ssl-202
/etc/init.d/courier-pop
/etc/init.d/courier-pop-201
/etc/init.d/courier-pop-202
/etc/init.d/courier-pop-ssl
/etc/init.d/courier-pop-ssl-201
/etc/init.d/courier-pop-ssl-202

Както се вижда структурата сме организирали по последният октет на IP адреса на който ще закачим инстанцията на куриер-а.

Следващата стъпка е да редактираме скриптовете за стартиране да сочат към правилната директория с конфигурации. Тоест трябва да редактираме всеки един от скриптовете с имена *-201, *-202 и да променим стойността на sysconfdir. По подразбиране тя е /etc/courier а трябва да стане съответно /etc/courier-201 и /etc/courier-202.

След като вече сме насочили скриптовете за стартиране към правилните директории е време да променим самите конфигурации. Поради факта че искаме да използваме SSL се налага всяка инстанция да е на отделен адрес. И понеже така и така имаме няколко адреса нека да преместим и неподсигурените връзки на същите адреси.

В конфигурационните файлове трябва да се променят следните опции

ADDRESS – от 0 да стане на конкретният IP адрес който сме заплюли (201,202)
SSLADDRESS – същото като по горе
PIDFILE – към зададеният път да добавим последният октет. Т.е. от imapd.pid да стане imapd-201.pid
SSLPIDFILE – аналогично на горното
TLSCERTFILE – дали ще е самоподписан или ще си е нормален това е ваш избор.

Е остана само да включите новосъздадените ни скриптове за стартиране да стартират при стартиране на машина да рестартирате и да тествате. Ако сте направили всичко вече си имате два напълно отделени пощенски сървъра изградени с Courier.

Коментари
Няма коментари »
Категории
Статии
Tags
courier, debian, linux, mail, miltiple instances, ssl
RSS коментари RSS коментари
Trackback Trackback

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

Разни Лични

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

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