Поднимаем меил сервер на проксмоксе | Wiki | PWODEV
, 09.02.2023 14:23

Поднимаем меил сервер на проксмоксе


Proxmox это отличное решение для виртуализации, сегодня мы будем считать что у вас уже установлен и настроен проксмокс, и вы уже владеете начальными знаниями о проксмоксе. Так же для начала необходимо иметь свободный IP адрес для меил сервера. Мы начнем с того что создадим для нашего mail server новую виртуальную машину. В качестве меил сервера будем использовать Mailcow. Обязательно ознакомьтесь с последней версией этого скрипта. Проект обновляется постоянно, может быть так что там уже появилось что-то новое.

Итак, приступим.

Создаем Сервер

Для начала логинемся в наш Proxmox и жмем в верхнем правом углу кнопку «Создать VM».

  • Вводим ID, Имя хоста, жмем далее,
  • Выбираем ISO образ centos-7…. жмем далее, далее
  • Выбираем размер диска не меньше 100 гигабайт жмем далее,
  • Выбираем количество ядер процессора, не меньше 4, жмем далее,
  • Выбираем количество RAM лучше не меньше 8192, жмем далее,
  • Подтверждаем и запускаем контейнер.
  • Заходим в консоль
  • Выбираем установить Centos
  • Выбираем язык
  • Выбираем таймзону
  • Выбираем диск для установки
  • Включаем Ethernet и сразу конфигурируем ее
    • IPv4 Settings
    • Method: Manual
    • Выбираем IP
    • добавляем DNS
  • Стартуем установку
  • Ставим временный рут пароль
  • После окончания установки нажимаем кнопку перезагрузить
  • В параметрах виртуальной машины редактируем параметр запуск при загрузке

Базовая настройка сервера

Меняем временный рут пароль на постоянный:

passwd

Дальше заходим в консоль и видим ошибку локализации. Исправляем.

echo -e "LANG=en_US.utf-8\nLC_ALL=en_US.utf-8" >> /etc/environment

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

yum update -y && yum upgrade -y && yum makecache
yum -y install openssh-server openssh-clients epel-release nano htop mc wget git chrony ntp
systemctl stop sshd && systemctl start sshd

Теперь можем подключиться к серваку через наш любимый CLI клиент.

Теперь нам нужно проверить все ли ок с портами. Команда должна вернуть пустоту

ss -tlpn | grep -E -w '25|80|110|143|443|465|587|993|995|4190'
# or:
netstat -tulpn | grep -E -w '25|80|110|143|443|465|587|993|995|4190'

Пусто? отлично идем дальше. Если нет, то отключаем сервисы что юзают эти порты. Скорее всего это порт 25 и это postfix. Отключаем

systemctl stop postfix
yum remove postfix -y

Перепроверяем еще раз порты, если теперь пусто, то идем дальше.

Проверяем чтобы время на сервере было настроена правильно:

timedatectl status

Проверяем чтобы NTP enabled: yes и NTP synchronized: yes. Если что-то не правильно, настраиваем:

nano /etc/systemd/timesyncd.conf

и добавляем следующий текст:

[Time]
NTP=0.pool.ntp.org 1.pool.ntp.org 2.pool.ntp.org 3.pool.ntp.org

и применяем параметры

timedatectl set-ntp true
systemctl start ntpd.service
systemctl enable ntpd.service
systemctl restart ntpd.service

Меняем таймзону если нужно

timedatectl set-timezone Europe/Berlin

Еще раз все перепроверяем

timedatectl status

Обычно приходится тут перезагрузить VPS чтобы применились параметры

Установка Docker

Первым делом устанавливаем докер следующей командой:

curl -sSL https://get.docker.com/ | CHANNEL=stable sh
systemctl enable --now docker

Проверяем что докер установлен, смотрим версию докера:

docker -v

Проверяем версию докер композ

docker compose version

Selinux

проверяем установлен ли Selinux:

rpm -qa | grep container-selinux

Эта команда должна что-то вывести, если выводит — идем дальше, если нет, то нужно установить Selinux. Теперь проверяем поддержку Selinux в докере:

docker info | grep selinux

Тут ничего не должно вывести. Это означает, что в докер Selinux еще не подключен. Но прежде чем его подключить обсудим некоторый момент на счет докера. Давай проверим какой обьем имеет «/» директория, так как именно на по умолчанию ставится докер и там он хранит данные своих контейнеров и соответственно все наши письма будут лежать именно там.

df -h

Если мы видим что «/» занимает самую большую часть памяти, пропускаем все что будет ниже и переходим к пункту включения selinux без переноса рабочей папки докера. Но если у нас например «/home» больше чем «/» следует перенести рабочую папку докера на другой диск.

Вариант 1: Останавливаем докер:

systemctl stop docker
systemctl stop docker.socket

Когда докер остановлен, переносим текущую рабочую папку на другой диск

mv /var/lib/docker /home/docker-data

Теперь меняем конфигурацию докера:

mkdir -p /etc/docker
nano /etc/docker/daemon.json

заполняем в файлик следующее, заодно сразу включаем selinux для докера

{
  "data-root": "/home/docker-data",
  "selinux-enabled": true
}

сохраняем и стартуем докер

systemctl start docker
systemctl start docker.socket

Вариант 2: Если нам не нужно переносить рабочую папку докера, то просто включаем selinux:

nano /etc/docker/daemon.json

заполняем следующий текст:

{
  "selinux-enabled": true
}

и перезапускаем докер:

systemctl restart docker

Дальше что для первого случая что для второго
проверяем выводит ли теперь selinux следующая команда:

docker info | grep selinux

если да, то все получилось. Также проверяем докер применилась ли перенос Docker Root Dir в /home/docker-data. Для его запускаем следующую команду и ищем в результатах Docker Root Dir:

docker info

Нашли, значит все хорошо и докер работает с новой рабочей папкой на другом диске.

DNS записи

Следующим шагом нужно добавить нужные нам DNS записи к домену. Идем в сервис где покупали домен, и добавляем следующие записи:

A    mail    1.2.3.4
AAAA    mail    1111:111:111
CNAME    autodiscover   mail.youdomain.com. 
CNAME    autoconfig    mail.youdomain.com. 
MX 10    @    mail.youdomain.com. 
TXT    @    v=spf1 a mx ip4:1.2.3.4 ip6:1111:111:111 -all
TXT    _dmarc    v=DMARC1; p=none; sp=none; rua=mailto:postmaster@youdomain.com; ruf=mailto:postmaster@youdomain.com; fo=1; ri=86400;

вместо 1.2.3.4 надо написать IPv4 и вместо 1111:111:111 — IPv6 адрес вашего меил сервера и вместо youdomain.com надо написать ваш домен к которому делаем изменения DNS

Проверяем правильность по следующим сервисам:

Запуск Mailcow

Теперь все готово для установки mailcow. Перепроверяем следующую команду:

su
umask

должно вывести 0022, если все ок идем дальше.

git clone https://github.com/mailcow/mailcow-dockerized /home/mailcow
cd /home/mailcow
./generate_config.sh
  1. Первое что спросит это hostname. Тут пишем название вашего домена для сервера mail.youdomain.com.
  2. Дальше спросит таймзону — ее мы уже настроили поэтом идем дальше
  3. Следующее спросит какую версию mailcow использовать, жмем 1 чтобы использовать стабильную версию.

Теперь добавляем сразу редирект http -> https для этого создаем файл:

nano data/conf/nginx/redirect.conf

и заполняем содержимым:

server {
  root /web;
  listen 80 default_server;
  listen [::]:80 default_server;
  include /etc/nginx/conf.d/server_name.active;
  if ( $request_uri ~* "%0A|%0D" ) { return 403; }
  location ^~ /.well-known/acme-challenge/ {
    allow all;
    default_type "text/plain";
  }
  location / {
    return 301 https://$host$uri$is_args$args;
  }
}

Готово, меилку установлен и редирект подготовлен. Теперь можно скачать контейнеры и запускать докер.

docker compose pull
docker compose up -d

Лог посмотреть можно следующей командой:

docker compose logs --tail=200 -f acme-mailcow

Как только все контейнеры стартовали, нужно подождать до минуты, и можно переходить в браузер и проверить работает ли наш новый меил сервер — https://mail.youdomain.com, Домен понятное дело пишем тот который мы в настройках DNS сделали. Вы должны увидеть что-то похожее в браузере:

Увидели? Могу вас поздравить. Вы только что запустили очень мощный меил сервер.

Вводим стандартный логин admin и пароль moohoo, и сразу меняем пароль для администратора. Делаем необходимые нам настройки, добавляем меилы и наслаждаемся новой системой 🙂

В настройках нам нужно сделать следующее:

  1. Добавить домен
  2. Сгенерировать для него dkim ключ
  3. добавить этот ключ в DNS
TXT    dkim._domainkey    v=DKIM1;k=rsa;t=s;s=email;p=****************

После этого можно добавлять почтовые адреса и тестировать почту с помощью сервиса https://www.mail-tester.com/


Добавить комментарий