В данной статье речь пойдет о создании почтового сервера на операционной системе CentOS 7, используя хостинг VDS.
Почтовый сервер будет работать используя Postfix, Dovecot, PHP, PHP-FPM, MariaDB, NGINX, phpMyAdmin, PostfixAdmin, Roundcube и систему защиты от вирусов и СПАМа.
Данное эссе не претендует на глубокое исследование или руководство к действию, скорее это памятка для системного администратора, у которого есть необходимость быстро вспомнить, или отыскать ту или иную команду, материал, и как бы всегда находящийся под рукой.
Все действия, в данной статье происходят на виртуальной машине, но также воспроизводились на живом хостинге.
Для примера имя почтового сервера будет mail.ho.local IP адрес 192.10.1.10
дистрибутив Linux CentOS 7 — minimal.
Условие:
1. Должен быть установлен Linux CentOS 7, minimal, или выбран и оплачен сервер VDS, с подходящим тарифом.
2. Права и пароль для root.
3. Доступ по ssh.
4. Настроено DNS записи у провайдера для имени mail.ho.local с IP адресом 192.10.1.10, и IP адрес должен разрешаться в mail.ho.local
5. Время и опыт.
Важно! Нужно учесть что антивирус ClamAV требует для работы минимум 2 Гигабайта ОЗУ!
Содержание
1. Предварительная настройка и безопасность системы
2. Настройка веб-сервера: PHP, PHP-FPM, MariaDB, NGINX, phpMyAdmin
3. Установка и настройка PostfixAdmin для Postfix
4. Установка и настройка Postfix
5. Установка и настройка Dovecot
6. Проверка работы почтового сервера
7. Установка и настройка почтового клиента Roundcube
8. Защита от вирусов
9. Защита со СПАМа
10. Разное
1. Предварительная настройка системы
Пароль для root : PassR00T
Создаем нового пользователя с правами root, а также ключ ssh для без парольного входа:
# adduser poststaff
задаем пароль
# passwd poststaff
pass456789
включаем в группу wheel (администраторов)
# gpasswd -a poststaff wheel
# exit
Заходим по ssh под юзером poststaff.
создаем директорию в домашнем каталоге нового пользователя для хранения ключа:
# mkdir ~/.ssh
даем права:
# chmod 0700 ~/.ssh
создаем файл:
# touch ~/.ssh/authorized_keys
Создаем в PuTTY Key Generator ключи, действуем в WINDOWS:
Скачать putty:
https://www.chiark.greenend.org.uk/~sgtatham/putty/latest.html
На момент написания статьи стабильный релиз PuTTY 0.70 цифровые подписи от 4 июля 2017 putty.zip (a .ZIP archive of all the above). Распаковываем в любую удобную директорию (каталог), запускаем PUTTYGEN.EXE, выбираем SSH-2-RSA key, жмем кнопку Generate, водим мышкой.
Создаем директорию куда сохраним ключи, например — C:/secret_dir/keys.
Жмем кнопку Save public key, сохраняем в C:/secret_dir/keys, обзываем, например public-key
Жмем кнопку Save private key, сохраняем в C:/secret_dir/keys, обзываем, например private-key, на вопрос о том что пароль для доступа к этому файлу останется пустым, соглашаемся, хотя конечно вы можете создать пароль, но тогда при каждом запуске putty, на доступ к сайту, будет происходить его запрос.
Создаем в папке C:/secret_dir/keys текстовый документ с названием, например authorized.txt
Копируем из PuTTYgen, из поля Public key for pasting into OpenSSS… текст от начала до конца, не больше, ни меньше. Вставляем в файл authorized.txt, сохраняем.
В последствии, если что-то пойдет не так, PuTTY Key Generator, можно подсунуть файл, private-key, нажать кнопку Load, и в поле Public key for… появится текст для файлика authorized.txt
Копируем из созданного ранее в puttygen authorized.txt и вставляем в linux, используем текстовый редактор vi или другой..
vi ~/.ssh/authorized_keys
вставляем ключ
Если редактор vi не нравится, устанавливаем nano:
# sudo yum update
# sudo yum install nano
Отступление. Получить информацию по программам, пакетам.
список всех установленных пакетов:
# sudo yum list installed
список подключенных репозиториев:
# sudo yum repolist
информация об определенном репозитории:
# sudo yum repoinfo epel
Продолжаем.
делаем права:
# chmod 0600 ~/.ssh/authorized_keys
перезапускаем ssh
# sudo systemctl reload sshd.service
PuTTY — настройка доступа по ключу см. интернет.
Можно сделать чтобы не запрашивался пароль при вызове sudo:
# sudo visudo
вписываем под строкой root ALL=(ALL) ALL
poststuff ALL=(ALL) ALL
для записи — shift: wq!
а можно не делать!
После пробного подключения, если все нормально работает, отключаем доступ руту, и доступ по паролю:
# sudo nano /etc/ssh/sshd_config
PermitRootLogin no
PasswordAuthentication no
PubkeyAuthentication yes
AuthorizedKeyFile .ssh/authorized_keys
Правила для Firewall
Проверяем работает или нет
# sudo firewall-cmd —state
=running
если не запущен:
# sudo systemctl start firewalld.service
Проверить дефалтные зоны:
# firewall-cmd —get-default-zone
=public
Проверить активные зоны:
#
=public
interfaces: eth0
Все зоны:
# firewall-cmd —list-all
Не большое отступление:
смотрим открытые порты и сервисы
# sudo firewall-cmd —zone=public —list-ports
# sudo firewall-cmd —zone=public —list-services
Автоматический запуск после перезагрузки:
# sudo systemctl enable firewalld
ПРИМЕРЫ:
Правило блокировки, для ненавистных IP адресов, для зоны публичного интерфейса (по умолчанию — public):
# sudo firewall-cmd —permanent —zone=public —add-rich-rule=’rule family=»ipv4″ source address=»AA.BB.CC.DD» drop’
# sudo firewall-cmd —reload
удалить из блокировки:
# firewall-cmd —permanent —zone=public —remove-rich-rule=’rule family=»ipv4″ source address=»AA.BB.CC.DD» drop’
# sudo firewall-cmd —reload
добавить разрешающее правило для конкретного IP — порт, протокол:
# firewall-cmd —permanent —zone=public —add-rich-rule=’rule family=»ipv4″ source address=»AA.BB.CC.DD/32″ port protocol=»udp» port=»68″ accept’
# sudo firewall-cmd —reload
смотреть что есть в rich-rule:
# sudo firewall-cmd —zone=public —list-rich-rule
Если захочется удалить (закрыть) порт или сервис из правил:
# sudo firewall-cmd —permanent —zone=public —remove-port=80/tcp
# sudo firewall-cmd —permanent —zone=public —remove-service=http
перечитать правила
# sudo firewall-cmd —reload
Вернемся к делу:
На всякий случай проверяем, или сразу открываем 22 порт для доступа по ssh:
# sudo firewall-cmd —permanent —zone=public —add-port=22/tcp
# sudo firewall-cmd —permanent —zone=public —add-service=ssh
перезапускаем сервис sshd:
# sudo systemctl reload sshd.service
Проверить состояние SELinux:
# sudo sestatus
можно временно изменить режим SELinux
# sudo setenforce 0
Чтобы навсегда отключить SELinuxvi
# sudo vi /etc/selinux/config
установить для SELINUX режим в disabled
Перезагрузка
# sudo shutdown -r now
обновить все пакеты прежде чем что-то устанавливать:
# sudo yum update
От подбора паролей и прочего:
# sudo yum install fail2ban
No package fail2ban available
Добавляем репозиторий..
Extra Packages for Enterprise Linux (EPEL)
yum install https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
yum update
Устанавливаем..
# sudo yum install epel-release yum-utils
# yum install fail2ban
# sudo yum install nano
# sudo systemctl start fail2ban
копируем
# sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
правим
# sudo nano /etc/fail2ban/jail.local
включить sshd правила — секция JAIL [sshd]:
добавить enabled = true
секция JAIL [sshd-ddos]
добавить enabled = true
стартуем fail2ban:
# sudo systemctl start fail2ban
# sudo systemctl status fail2ban
# sudo systemctl enable fail2ban
# sudo fail2ban-client status
# sudo fail2ban-client status sshd
Дата, время, часовой пояс
# date
какой часовой пояс:
# ls -l /etc/localtime
какие существуют часовые пояса:
# timedatectl list-timezones
# timedatectl list-timezones | grep Europe
для москвы:
# sudo timedatectl set-timezone Europe/Moscow
Проверяем запущена ли chrony:
# sudo systemctl status chronyd
если нет:
# sudo yum install chrony
Запускаем и добавляем в автозагрузку:
# sudo systemctl start chronyd
# sudo systemctl status chronyd
# sudo systemctl enable chronyd
Имя сервера, версия linux, время:
uname -a
узнаем IP адрес
# ip a | grep ‘inet ‘
# ip a | grep ‘inet6 ‘
узнаем имя машины:
# hostname
должно быть — mail.ho.local
Если нет, правим:
# sudo nano /etc/hostname
mail.ho.local
пишем:
# sudo hostname mail.ho.local
смотрим:
# hostname -f
mail.ho.local
# hostname -s
mail
если все так, правим /etc/hosts:
# sudo nano /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
#добавляем для IPv4
192.10.1.10 mail.ho.local mail
#добавляем для IPv6
64-x_битный_адрес mail.ho.local mail
# sudo shutdown -r now
С предварительной настройкой системы закончено, можно переходить к следующему шагу — Настройка веб-сервера: PHP, PHP-FPM, MariaDB, NGINX, phpMyAdmin.
Всем удачи!
Оставить комментарий