3 октября 2013

*TBD* Свой почтовый сервер на базе Linux и свободных приложений


Рано или поздно приходится позаботиться о безопасности вашей переписки,
стоит ли доверять бесплатным сервисам, когда можно сделать свой собственный?


Что вам понадобится:


Что вам понадобится

Купить имя домена можно в любой компании, желательно с мировым именем: Namecheap, Moniker, Go Daddy.
Интернет провайдер подойдёт любой из вашего региона, лишь бы у него была услуга "публичный IP-адрес" и скоростной, качественный канал.
Маршрутизатор - любой: D-Link, TP-Link, ASUS - главное чтоб была функция проброса портов.
Компьютер нужен экономный, маленький и надёжный. Например Acer Aspire|X XC-105 или подобный.


Теперь, по шагам:

  1. Создание установочного диска / флешки
    1. загрузка образа ОС
    2. запись образа на диск / флешку

  2. Установка и настройка ОС Debian
    1. разбивка диска на разделы
    2. LVM
    3. шифрование диска
    4. сеть и DNS
    5. пользователи и пароли
    6. обновления
    7. время
    8. локаль

  3. Установка и настройка служб и приложений
    1. SSH
    2. Uncomplicated FireWall (ufw)
    3. Fail2ban
    4. Logwatch
    5. HTTP-сервер Apache

  4. Система коллективной работы Kolab

  5. Усиливаем безопасность Debian

Создание установочного диска / флешки

Для нашего сервера нужна очень стабильная, надёжная и предсказуемая операционная система,
идеальный кандидат Debian Wheezy. Нет это не единственный возможный выбор, но точно один из лучших.

загрузка образа ОС

Пожалейте сервера проекта Debian, используйте для загрузки образа торрент-клиент.
Если у вас 64 бит процессор Intel или AMD, то качать нужно этот образ debian-8.5.0-amd64-CD-1.iso

запись образа на диск / флешку

Используя программу для записи CD дисков запишите скачанный .iso файл на диск. Скорость записи выберите самую маленькую - так будет надёжнее.
Если у вас есть флешка на 4 ГиБ и более, то можно записать образ на неё. Для этого есть специальная программа UNetbootin.

Установка и настройка ОС Debian

разбивка диска на разделы

LVM

шифрование диска

сеть и DNS

пользователи и пароли

Ваше первое действие на сервере - это СМЕНИТЬ ПАРОЛЬ. Выполните:

$ passwd
Введите новый пароль дважды и нажмите Enter.

Суперпользователя root у нас не будет, запретим его. Обычный же пользователь будет иметь доступ к команде sudo после ввода хорошего пароля.
Меняем пароль root и в то же время блокируем эту учетку:
$ sudo su
# passwd --lock root
# passwd
# passwd -S
root L 12/08/2016
буква L означает что вы не сможете входить как root напрямую или использовать команду su чтобы переключиться на пользователя root. Больше знаний о суперпользователе.

обновления

Обновите списки пакетов и установленные программы:

$ sudo apt-get update
$ sudo apt-get upgrade

время

Для сервера время лучше задать в часовом поясе UTC+00:00.
Чтобы проверить время введите команду:

$ date
Fri Aug 12 09:11:34 UTC 2016
Чтобы задать новое время:
$ date --set 2016-08-12
$ date --set 21:00:00
Больше о настройке времени читайте тут.

локаль

Выполните команду

$ locale
чтобы узнать какая локаль задана для текущего пользователя. Затем используйте команду:
sudo dpkg-reconfigure locales
чтобы задать ту локаль, которая вам нужна. Например, по-умолчанию en_US.UTF-8 и дополнительно вашу региональную, например de_DE.UTF-8.

Установка и настройка служб и приложений

SSH

SSH server это программа позволяющая безопасно, удалённо управлять сервером.
Настроим SSH так чтобы войти на сервер можно было используя только публичные ключи, а вход как суперпользователь и вход с вводом пароля были запрещены.
И конечно вход будет разрешен только для конкретных IP адресов:

$ sudo apt-get install openssh-server
sudo nano /etc/ssh/sshd_config
Добавьте эти строки в файл, указывайте тот IP адрес скоторого будет осуществляться вход:
PermitRootLogin no
PasswordAuthentication no
AllowUsers deploy@(your-ip) deploy@(another-ip-if-any)
Добавьте в файл authorized_keys содержимое файла id_rsa.pub с вашего рабочего ПК и другие публичные ключи с которыми будет разрешен доступ на этот сервер.
sudo nano /home/deploy/.ssh/authorized_keys
sudo chmod 400 /home/deploy/.ssh/authorized_keys
sudo chown deploy:deploy /home/deploy -R
Выполните перезапуск службы
service ssh restart


Uncomplicated FireWall (ufw)

ufw это программа для упрощенной настройки стандартного для Linux межсетевого экрана iptables.
Это базовые настройки для системы Kolab разрешающие трафик на перечисленные порты. Настройте дополнительные порты если нужно.

$ sudo apt-get install ufw
ufw allow from {your-ip} to any port 22
ufw allow 25
ufw allow 80
ufw allow 110
ufw allow 143
ufw allow 389
ufw allow 443
ufw allow 465
ufw allow 587
ufw allow 636
ufw allow 993
ufw allow 995
ufw enable
Больше о настройке ufw читайте тут.


Fail2ban

Fail2ban это служба которая мониторит попытки входа на сервер и блокирует подозрительную активность при её обнаружении. Настроек по-умолчанию достаточно.

$ sudo apt-get install fail2ban


Logwatch

Logwatch это служба которая мониторит логи сервера и отправляет вам их по почте. Это полезно для отслеживания и определения вторжений. Если кто-то заходил на сервер, отправленные вам по почте логи будут полезными для понимания что случилось и когда - учитывая что логи оставшиеся на сервере могли быть скомпрометированны.

$ sudo apt-get install logwatch
В файл
sudo nano /etc/cron.daily/00logwatch
добавьте строку:
/usr/sbin/logwatch --output mail --mailto test@gmail.com --detail high


HTTP-сервер Apache (если нужен)

Apache это программа веб-сервер, именно она отвечает пользователю когда он вводит имя вашего сайта в браузере.
На Apache работают большинство сайтов сети Интернет.

sudo apt-get update
sudo apt-get install apache2
Тут общая настройка. Тут настройка виртуальных хостов.
Для безопасности, лучше когда сервер не рассказывает посторонним о том какой у него номер версии и какая ОС использована:
$ sudo nano /etc/apache2/conf-enabled/security.conf
ServerTokens Prod
ServerSignature Off


Система коллективной работы Kolab

инструкция по установке Kolab


Усиливаем безопасность Debian

Securing Debian Manual

My first 5 minutes on a server


Автор

© Dmytro Nikandrov