Linux
  • << DEBIAN >>

  •   Сървър на отделни хостове
  •     DNS Сървър
  •     SQL Сървър
  •     WEB Сървър
  •     Пощенски Сървър
  •   PXE Server
  •   PXE UEFI Server - TFTP
  •   Debian 9
  •     Инсталиране на Debian 9
  •     Първоначални настройки (мрежа, VIM, Кирилизация)
  •     Инсталиране и настройка на SSH
  •     Инсталиране и настройка на DNS
  •     Инсталиране и настройка на NTP
  •     Инсталиране и настройка на Apache
  •     Инсталиране и настройка на MySQL (MariaDB)
  •     Инсталиране и настройка на PHPMyAdmin
  •     Инсталиране и настройка на собствен облак
  •     Инсталиране и настройка на SAMBA
  •     Инсталиране и настройка на FTP сървър
  •     Инсталиране и настройка на OSCAM
  •     Инсталиране и настройка на Mail server
  •       Първоначално конфигуриране на базата данни
  •       Инсталиране и конфигуриране на PostFix
  •       Инсталиране и конфигуриране на Dovecot
  •       PostFix дефинира Dovecot да удостоверява
  •       RoundCube
  •       Тестване доставката на поща
  •       Създаване на TLS криптиран ключ и сертификат
  •       WEB администриране
  •       Антиспам със SpamAssassin
  •       Антиспам с RSpmad
  •   Debian 11
  •     Как зарежда Linux
  •     Разпределение на диска при BIOS и UEFI
  •     Debian 11 на BIOS върху LVM и RAID
  •     Инсталиране на Debian 11 на BIOS и ZFS
  •     Инсталиране на Debian 11 на BIOS и ZFS-1
  •     Инсталиране на Debian 11 на UEFI и ZFS
  •     ZFS Замяна на развален огледален диск
  •     Ремонт на GRUB и INITRAMFS
  •   Debian 12
  •     Първоначални настройки
  •     DNS Сървър
  •     Добавяне на втори диск
  •     Файлов сървър + WEBMIN
  •     SAMBA
  •     Инсталиране и настройка на Apache
  •     Инсталиране и настройка на Nginx
  •     MySQL и PHPMyAdmin
  •     Елементарен MAIL сървър
  •       Подобрение SSL/TLS, Maildir, LMTP
  •       Подобрение ВИРТУАЛИЗАЦИЯ без MySQL
  •       Подобрение ВИРТУАЛИЗАЦИЯ и MySQL
  •       Подобрение Антиспам - SpamAssasin
  •       Подобрение Антиспам - RSpamd
  •       Защита - SPF, DKIM и DMARK
  •       Подобрение Антивирус
  •     Пълноценен MAIL сървър
  •     Пощенски сървър с iRedMail и PHPMyAdmin
  •       DKIM, SPF и DMARK
  •     MAIL сървър за вътрешна мрежа
  •     NextCloud
  •     Сървър за отдалечен достъп - RustDESK
  • << UBUNTU >>
  •   Ubuntu SERVER 22.04
  •     Инсталиране на Ubuntu 22.04 Server
  •     Първоначални настройки на Ubuntu 22.04 Server
  •     DNS в Ubuntu 22.04 Server
  •     MySQL Apache PHPMyAdmin
  •     Пощенски сървър
  •       Пощенски сървър в опростен вариант
  •       PostFix, Dovecot по-подробно
  •   Ubuntu mini
  • << RAID >>
  •     BIOS RAID1+MSDOS
  •     BIOS RAID1+MSDOS+LVM
  •     UEFI RAID1
  • << BTRFS >>
  •     BTRFS - създаване монтиране fstab размер
  •     BTRFS - RAID
  •     BTRFS - subvolume и snapshot
  • << КОНТЕЙНЕРИ >>
  •     Инсталиране на LXC/LXD
  •     Образи (image) в LXC/LXD
  •     Контейнери в LXC/LXD
  •     Команди в LXC/LXD
  • << ОТСТРАНЯВАНЕ НА ГРЕШКИ >>
  •     SWAP
  •     InitRAMFs
  • Първоначално конфигуриране на базата данни

    Много е мъчно да се определи от къде да започнем изграждането на пощенски сървър и не защото е супер сложно а защото е един омагьосан кръг. Примерно: В случая се видя че за бази данни ще се ползва MySQL. Казваме MySQL но ще имаме в предвид MariaDB. Структурата на базата и таблиците се определя от конфигурационни файлове в Postfix и Dovecot. Получава се като яйцето и кокошката - кое е първото. За да излезем от това затруднение, приемаме структурата на таблиците и базата за даденост и стъпили върху това започваме изграждането на самия сървър.

    MySQL

    В по предни статии се видя как се инсталира MySQL, но ако той не съществува се инсталира пакета mariadb-server. Postfix черпи данни от MySQL база за виртуалните домейни, виртуалните потребители и виртуалните псевдоними (aliases) Първата задача е да създадем база данни наречена pfdb , с принадлежащи таблици virtual_domains, virtual_users и virtual_aliases.


    Създаване на база pfdb и потребители боравещи с нея.

    За начало влизаме в MySQL като главен потребител root

    # mysql -u root -p Enter password: MySQL


    Сега създаваме и самата база

    MariaDB [(none)]> CREATE DATABASE pfdb; Query OK, 1 row affected (0.00 sec)


    Сега създаваме потребител който да има права само върху базата pfdb. Потребителя ще се казва pfuser с парола pfpass

    MariaDB [(none)]>CREATE USER 'pfuser'@'127.0.0.1' IDENTIFIED BY 'pfpass'; Query OK, 0 rows affected (0.00 sec)


    ВАЖНО!!! Потребителя е pfuser@127.0.0.1 а не pfuser@localhost. За Debian това на практика е едно и също, но за MySQL не е. Разликата се заключава в това, че ако се иницира връзка за базата данни към localhost то тогава се говори със сокет файла намиращ се в /var/run/mysqld/mysqld.sock. Ако пък се свръжем през 127.0.0.1, то ще се създаде мрежова връзка ползваща TCP сокета на порт 3306. За какво правим всичко това: - PostFix е ограничен до началната си директория /var/spool/postfix, а сокета mysqld.sock не се намира в тази директория. За да се направи връзка между PostFix и MySQL се ползва TCP връзка. Много ясно ще си проличи когато създаваме таблиците и направим тестове. Потребителя pfuser ще може само да чете от pfdb.

    MariaDB [(none)]>GRANT SELECt ON pfdb.* TO 'pfuser'@'127.0.0.1'; Query OK, 0 rows affected (0.00 sec)


    Сега да създадем потребител който да управлява pfdb. Този потребител ще се ползва от PHPMyAdmin и тъй като той се свързва по-подразбиране през localhost то и връзката ще е през там.

    MariaDB [(none)]>CREATE USER 'pfadmin'@'localhost' IDENTIFIED BY 'adminpass'; Query OK, 0 rows affected (0.00 sec)


    pfadmin трябва да може и да чете и да пише в pfdb

    MariaDB [(none)]>GRANT ALL ON pfdb.* TO 'pfadmin'@'localhost'; Query OK, 0 rows affected (0.00 sec)

    Значението pfdb.* означава, че потребителя pfuser има права не само върху базата pfdb но и върху всичките нейни таблици. Активирамe промените (напрактика зачиствамe кеша на MySQL)

    MariaDB [(none)]> FLUSH PRIVILEGES; Query OK, 0 rows affected (0.00 sec)


    До сега всички тези команди влияеха върху базата mysql. Ще се наложи да сменим базата mysql с pfdb за да може в нея да изградим таблици

    MariaDB [(none)]> USE pfdb; Database changed


    Изграждане на таблици в pfdb

    Първата таблица ще е на виртуалните домейни. Всеки домейн заема един ред.

    Field Предназначение
    id Номер показващ кой ред е. Добавя се автоматично в базата
    name Име на домейна приемащ пощата за..

    MariaDB [(none)]>CREATE TABLE IF NOT EXISTS `virtual_domains` ( `id` int(11) NOT NULL auto_increment, `name` varchar(50) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; Query OK, 0 rows affected (0.01 sec)


    Създаваме таблица на виртуалните пощенските адреси и пароли (virtual_users) в базата pfdb. Всяка поща заема един ред.

    Field Предназначение
    id Номер показващ кой ред е. Добавя се автоматично в базата
    domain_id Съдържа номера на домейна в таблицата virtual_domains, а delete cascade осигурява сигурност, че ако се изтрие домейна всички потребители в домейна също ще бъдат изтрити за да се избегнат осиротели редове
    email пощенския адрес на пощенския потребител
    password Защитена парола за пощенския потребител. Най-често защитата е с {SHA256-CRYPT} , но може да се ползва и стара защита {PLAIN-MD5}

    MariaDB [(none)]>CREATE TABLE IF NOT EXISTS `virtual_users` ( `id` int(11) NOT NULL auto_increment, `domain_id` int(11) NOT NULL, `email` varchar(100) NOT NULL, `password` varchar(150) NOT NULL, PRIMARY KEY (`id`), UNIQUE KEY `email` (`email`), FOREIGN KEY (domain_id) REFERENCES virtual_domains(id) ON DELETE CASCADE ) ENGINE=InnoDB DEFAULT CHARSET=utf8; Query OK, 0 rows affected (0.01 sec)


    Създаваме таблица на виртуалните псевдоними (virtual_aliases) в базата pfdb. Всеки пощенски псевдоним използва един ред

    Field Предназначение
    id Номер показващ кой ред е. Добавя се автоматично в базата
    domain_id Съдържа номера на домейна в таблицата virtual_domains, а delete cascade осигурява сигурност, че ако се изтрие домейна всички потребители в домейна също ще бъдат изтрити за да се избегнат осиротели редове
    source Пощенски адрес от който ще се препраща писмото
    destination Пощенски адрес получен от source

    MariaDB [(none)]>CREATE TABLE IF NOT EXISTS `virtual_aliases` ( `id` int(11) NOT NULL auto_increment, `domain_id` int(11) NOT NULL, `source` varchar(100) NOT NULL, `destination` varchar(100) NOT NULL, PRIMARY KEY (`id`), FOREIGN KEY (domain_id) REFERENCES virtual_domains(id) ON DELETE CASCADE ) ENGINE=InnoDB DEFAULT CHARSET=utf8; Query OK, 0 rows affected (0.01 sec)


    Попълване на таблици с данни

    Помните ли преди казахме, че pfuser@127.0.0.1 и pfuser@localhost не са едно и също. Излизаме от MySQL като root и влизаме като pfuser

    MariaDB [pfdb]> quit Bye # mysql -u pfuser -p Enter password: ERROR 1045 (28000): Access denied for user 'pfuser'@'localhost' (using password: YES)

    Какво значи това: Нарочно написахме именно така командата за да се види че в момента се мъчим да влезем като pfuser@localhost, а ние създадохме потребител pfuser@127.0.0.1. Затова сега ще влезем по правилния начин

    # mysql -u pfuser -h 127.0.0.1 -p Enter password: pfpass


    Преди да запълним с данни таблиците, проверяваме дали може да ги четем:

    MariaDB [(none)]> show databases; +---------------------------+ | Database | +---------------------------+ | information_schema | | pfdb | +---------------------------+ 2 rows in set (0.00 sec)

    Виждат се само тези две бази, както трябва да бъде, защото само върху тях има позволени права.


    MariaDB [(none)]> use pfdb; Reading table information for completion of table and column names You can turn off this feature to get a quicker startup with -A Database changed

    Избрахме да работим с базата pfdb


    MariaDB [(none)]> show tables; +---------------------+ | Tables_in_pfdb | +---------------------+ | virtual_aliases | | virtual_domains | | virtual_users | +---------------------+ 3 rows in set (0.00 sec)

    Това беше важно уточнение. Обаче потребителя който ще пише по таблиците е pfadmin и именно с него трябва да боравим. За целта излизаме от този потребител.

    MariaDB [pfdb]> quit Bye


    Влизаме като pfadmin

    # mysql -u pfadmin -p Enter password: adminpass


    Да достигнем до таблиците и да ги попълним, хем за проба дали потребителя има права върху базата, хем да има данни с които после ще боравим в пощенския сървър.


    Създаваме два виртуални домейна в таблицата virtual_domains

    MariaDB [(none)]> INSERT INTO `pfdb`.`virtual_domains` (`id` ,`name`) VALUES ('1', 'home.tachko.com'), ('2', 'home.tlan.net'); Query OK, 2 rows affected (0.00 sec) Records: 2 Duplicates: 0 Warnings: 0


    И веднага проверяваме съдържанието на таблицата

    MariaDB [(none)]> select * from virtual_domains; ERROR 1046 (3D000): No database selected


    Това е така защото не сме избрали база с която да боравим затова:

    MariaDB [(none)]> use pfdb; Reading table information for completion of table and column names You can turn off this feature to get a quicker startup with -A Database changed


    MariaDB [(none)]> select * from virtual_domains; +---+------------------------+ | id | name | +---+------------------------+ | 1 | home.tachko.com | | 2 | home.tlan.net | +---+------------------------+ 2 rows in set (0.00 sec)

    Прекрасно създали сме два записа в таблицата и по важното е, че pfadmin може да пише по базата. Значи всичко до тук е правилно. Попълваме данни в таблицата virtual_users

    MariaDB [pfdb]> INSERT INTO `pfdb`.`virtual_users` (`id`, `domain_id`, `password` , `email`) VALUES ('1', '1', ENCRYPT('Iceman', CONCAT('$6$', SUBSTRING(SHA(RAND()), -16))), 'tachko@home.tlan.net'), ('2', '1', ENCRYPT('tit', CONCAT('$6$', SUBSTRING(SHA(RAND()), -16))), 'tit@home.tlan.net'); Query OK, 2 rows affected (0.01 sec) Records: 2 Duplicates: 0 Warnings: 0


    И веднага проверяваме съдържанието на таблицата

    MariaDB [pfdb]> select * from virtual_users; +----+-----------+--------------------------------+------------------------------------------------------------------------------------------------------------+ | id | domain_id | email | password | +----+-----------+--------------------------------+------------------------------------------------------------------------------------------------------------+ | 1 | 1 | tachko@home.tlan.net | $6$0406f8c432058043$Crb9Ytq3KH5FoIBPh6r8RkG9vZA9DoWWaP8H4yRxW | | 2 | 1 | tit@home.tlan.net | $6$c6627f4ee53d7128$0wLXz8SUWP8uK8aUIcRdvpd/ox0BSufaXpcq6Wuc0R | +----+-----------+--------------------------------+------------------------------------------------------------------------------------------------------------+ 2 rows in set (0.00 sec)

    Потребителя pfadmin има права и върху тази таблица и създаде две пощенски кутии tachko@home.tlan.net и tit@home.tlan.net И накрая попълваме таблицата virtual_aliases

    MariaDB [pfdb]> INSERT INTO `pfdb`.`virtual_aliases` (`id`, `domain_id`, `source`, `destination`) VALUES ('1', '1', 'tit@home.tlan.net', 'tachko@home.tlan.net'); Query OK, 1 row affected (0.00 sec)

    С този запис идеята е всички писма които идват до tit@tlan.net да се препращат и до tachko@tlan.net. Много удобна функция за големи предприятия. Примерно директора да може да вижда писмата които идват до подчините. Това е и добре и зле, защото генерира много поща за получателя а не всяка поща която пристига е важна, понякога има и спам. Проверяваме съдържанието на таблицата

    MariaDB [(none)]> select * from virtual_aliases; +---+--------------+------------------------+-------------------------------+ | id | domain_id | source | destination | +---+--------------+------------------------+-------------------------------+ | 1 | 1 | tit@home.tlan.net | tachko@home.tlan.net | +---+--------------+------------------------+-------------------------------+ 1 row in set (0.00 sec)


    Изход от MySQL

    MariaDB [pfdb]> quit Bye


    Ако по някаква причина сте объркали данните в някоя таблица спокойно може да се коригират със следните команди

    MariaDB [(none)]> REPLACE INTO `pfdb`.`virtual_domains` ( `id` , `name` ) VALUES ( '2', 'home.tlan.net' );

    Тази команда ще замени 2 ред в таблицата virtual_domains която е собственост на pfdb със съдържанието home.tlan.net. На практика нищо няма да се промени именно защото когато попълвахме таблицата първи ред беше със съдържание home.tlan.net. Но ако беше нещо различно щеше да го препокрие именно с home.tlan.net


    MariaDB [(none)]> REPLACE INTO `pfdb`.`virtual_users` ( `id` , `domain_id` , `password` , `email` ) VALUES ('1', '1', 'johnpass' , 'john@home.tlan.net');

    Отново препокриваме първи ред в таблицата virtual_users собственост на pfdb със потребителя john@home.tlan.net и с парола johnpass. Това са примерни команди на практика няма да се изпълняват.


    MariaDB [(none)]> REPLACE INTO `pfdb`.`virtual_aliases` (`id`,`domain_id`,`source`,`destination`) VALUES ('1', '1', 'jack@home.tlan.net', 'john@home.tlan.net');


    ВНИМАНИЕ !!!

    Преди да пуснете в реална експлоатация забършете сегашните данни които създадохте за теста. Или най просто е да се забърши домейна home.tlan.net Това автоматично ще доведе до зануляване на потребителите с пощенските им кутии.


    Зачистването може да стане със следната команда

    MariaDB [(none)]> DELETE FROM `pfdb`.`virtual_domains` where name='home.tlan.net';


    Всичко това може да се види нагледно и през PHPMyAdmin. Но е добре да се борави с MySQL от конзола, не на всеки сървър има инсталиран PHPMyAdmin и ако ви се наложи да работите на чужд сървър какво ще правите.


    Доста се позабавих, но беше особено важно да се разбере идеологията на работа. Базата е създадена и има данни. Сега трябва да се укаже на Postfix да ги ползва. На практика сме готови с базата, таблиците и съдържанието им. Сега остава да се инсталират пакетите за Mail сървъра и да се конфигурират, но това в следващите статии.