Поднимаем меил сервер на проксмоксе Centos 7
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
Проверяем правильность по следующим сервисам:
- https://mxtoolbox.com/ или https://intodns.com/ проверка DNS записей
- https://dmarcly.com/tools/ и https://powerdmarc.com/analyzer/— еще сервисы для проверки правильности DNS
- https://www.mail-tester.com/ — тест отправки мейла
Запуск Mailcow
Теперь все готово для установки mailcow. Перепроверяем следующую команду:
su
umask
должно вывести 0022, если все ок идем дальше.
git clone https://github.com/mailcow/mailcow-dockerized /home/mailcow
cd /home/mailcow
./generate_config.sh
- Первое что спросит это hostname. Тут пишем название вашего домена для сервера mail.youdomain.com.
- Дальше спросит таймзону — ее мы уже настроили поэтом идем дальше
- Следующее спросит какую версию 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, и сразу меняем пароль для администратора. Делаем необходимые нам настройки, добавляем меилы и наслаждаемся новой системой 🙂
В настройках нам нужно сделать следующее:
- Добавить домен
- Сгенерировать для него dkim ключ
- добавить этот ключ в DNS
TXT dkim._domainkey v=DKIM1;k=rsa;t=s;s=email;p=****************
После этого можно добавлять почтовые адреса и тестировать почту с помощью сервиса https://www.mail-tester.com/
Читайте также:
- Chrome не пускает на сайт из-за SSL [Решено]
- Создаем свой токен в сети BEP-20
- Сравнение Asana и Trello
- Cli команды для Magento2
- SpeedTest CLI — Проверка скорости интернета в командной строке