Postfix

Настройка DNS

Для начала нужно настроить MX запись в DNS. MX запись это тип DNS-записи, предназначенный для маршрутизации электронной почты с использованием протокола SMTP. Простыми словами, что бы другие сервера могли посылать вам почту, то есть эта запись нужна для входящей почты.

По мимо этого у этой записи есть еще поле приоритета от 1 до 255. Чем меньше число, тем выше приоритет.

Можно указать несколько MX записей с разным приоритетом, для резервирования почтовых серверов. Например, если первый сервер не примет почту или будет неисправен, то сервер отправитель отправит письмо следующему по приоритету серверу. Таким образом вы не потеряете входящие письма.

А вот для настройки исходящих писем требуется несколько других записей в DNS.

Очень неплохо настройка DNS для почтового сервера описана в статье на хабре Настройка DKIM/SPF/DMARC записей или защищаемся от спуфинга / Хабр (habr.com) Я не буду расписывать все, что там сказано, а приведу лишь конкретный пример.

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

Как я понимаю абсолютно все публичные сервера проверяют эту запсь SPF поэтому она обязательна. А вот DKIM уже опционально, но если DKIM будет настроено, то вероятность доставки вашей почты возрастет в разы.

Примером записей является DKIM:

Публичный ключь можно сгенерить так: Домен > Выбираем нужный домен > Редактировать — Общие > Дополнительно. Нажимаем кнопку создать ключь и вставляем этот ключь в DNS запись.

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

Для проверки записи обратного DNS можно воспользоваться сервисом 2whois.ru — сервис PTR, проверка доменов, проверка работы сайта

От каких клиентов пересылать(relay) письма

По умолчанию, Postfix пересылает почту от клиентов, находящихся в авторизованной части сети, на любой адрес.
Авторизованные сети определяет конфигурационный параметр .
Поведение по умолчанию — авторизовать всех клиентов IP подсетей, к которым подсоединена машина.

ВАЖНО: если Ваша машина подключена к глобальной сети (wide area network), то настройки параметра
, по умолчанию, могут быть небезопасными. Примеры (укажите лишь один из следующих вариантов):

Примеры (укажите лишь один из следующих вариантов):

Вы можете указать сети, которым доверяете, в файле main.cf или предоставить Postfix-у возможность сделать
эту работу. По умолчанию, Postfix делает работу за Вас. Результат зависит от значения параметра .

  • Укажите » = host», если Postfix должен
    пересылать почту только от локального хоста.

  • Укажите » = subnet» (по умолчанию), если
    Postfix должен пересылать почту от SMTP клиентов из IP подсетей, к которым принадлежит локальная машина.
    На Linux-е это работает корректно только для интерфейсов, сконфигурированных командой «ifconfig».

  • Укажите » = class», если Postfix должен
    пересылать почту от SMTP клиентов, находящихся в одной и той же IP сети класса A/B/C с локальной машиной.
    Не стоит настраивать Postfix таким образом при работе на машине с dialup соединением, так как Postfix будет
    «доверять» всей сети Вашего провайдера. Вместо этого явно укажите список
    , как описано ниже.

В качестве альтернативы, Вы можете указать список вручную,
что заставит Postfix игнорировать параметр .
Чтобы указать список доверенных сетей, укажите сетевые блоки в формате CIDR (сеть/маска), например:

Вы также можете указать абсолютный путь файла со списком доверенных сетей вместо непосредственного
перечисления их в файле main.cf.

Что такое DMARC и с чем его едят ¶

DMARC — это набор правил и протоколов для авторизации почты. Если перевести на общечеловеческий, то
это будет означать «делай вот так и письма не будут сразу падать в спам».

Дело в том, что протоколы электронной почты разрабатывались в те славные времена, когда люди доверяли друг другу. И если
на сервер приходило письмо, то оно сразу падало в ящик получателя. Сам протокол отправки писем не предполагает авторизацию
сервера, который отправляет письмо, а это значит, что любое устройство в сети Интернет может слать письма от кого угодно
и куда угодно. Да-да, именно от кого угодно и куда угодно!

DMARC позволяет:

  1. Проверять сервер, чтобы ему было дозволено отправлять письма с определённого домена (SPF-запись).
  2. Проверять письмо, что оно пришло именно то, какое было отправлено (цифровая подпись DKIM).
  3. Получать отчёты о проблемах доставки (DMARC-запись).

То есть DMARC не решает проблемы спама на 100%, но позволяет понимать, что письмо было отправлено и доставлено с добросовестного
сервера, а не с кофеварки бабы Маши. Если не выполнять требования DMARC, то вероятность того, что ваше письмо отправится
в спам, будет примерно 100%.

Настройка аутентификации на Postfix

Аутентификация на postfix будет выполняться методом dovecot. Для этого устанавливаем его. Заодно, устанавливаем и postfix (на случай, если его нет еще в системе). В зависимости от используемой операционной системы используем разные команды.

а) если используем Ubuntu / Debian:

apt-get update

apt-get install postfix dovecot-imapd dovecot-pop3d

б) если используем CentOS / Red Hat:

yum install postfix dovecot

После установки пакетов, разрешаем автозапуск dovecot и postfix:

systemctl enable postfix dovecot

Открываем на редактирование конфигурационный файл нашего MTA Postfix:

vi /etc/postfix/main.cf

Добавляем строки (или меняем значения):

smtpd_sasl_type = dovecot
smtpd_sasl_auth_enable = yes
smtpd_sasl_path = private/auth
smtpd_relay_restrictions =
        permit_mynetworks
        permit_sasl_authenticated
        reject_unauth_destination

* где:

  • smtpd_sasl_type — тип плагина, который используется для SASL-аутентификации. Командой postconf -a мы можем получить список механизмов аутентификации, которые поддерживаются почтовой системой.
  • smtpd_sasl_auth_enable — разрешает или запрещает аутентификацию по механизму SASL.
  • smtpd_sasl_path — путь до файла для обмена аутентификационной информацией. Используется для взаимодействия нескольких систем — в нашем примере Postfix + Dovecot.
  • smtpd_relay_restrictions — правила разрешения и запрета использования MTA при пересылке. В нашем случае:
    • permit_mynetworks — разрешить отправку с компьютеров, чьи IP-адреса соответствуют настройке mynetworks.
    • permit_sasl_authenticated — разрешить отправку писем тем, кто прошел авторизацию.
    • reject_unauth_destination — запретить всем, кто не прошел проверку подлинности.

Проверяем корректность настройки:

postconf > /dev/null

Если команда не вернула ошибок, перезапускаем Postfix:

systemctl restart postfix

Переходим к настройке dovecot — открываем файл:

vi /etc/dovecot/conf.d/10-master.conf

… и приводим опцию service auth к следующему виду:

service auth {
  …
  unix_listener /var/spool/postfix/private/auth {
    mode = 0660
    user = postfix
    group = postfix
  }
  …
}

* если соответствующей секции unix_listener нет, то ее нужно создать

Обратите внимание, что для обмена аутентификационными данными мы применяем файл /var/spool/postfix/private/auth, который в конфигурационном файле postfix был указан, как private/auth

Отключаем требование ssl для аутентификации (на текущем этапе нам это не нужно):

vi /etc/dovecot/conf.d/10-ssl.conf

Проверяем, чтобы значение ssl не было required:

ssl = yes

* нас устроит оба варианта — yes или no.

Настройки аутентификации приводим к следующему виду:

vi /etc/dovecot/conf.d/10-auth.conf

auth_mechanisms = plain login

* данные механизмы позволяют передачу данных в открытом виде.

В этом же файле проверяем, что снят комментарий со следующей строки:

!include auth-system.conf.ext

Проверяем корректность настройки dovecot:

doveconf > /dev/null

Если команда ничего не вернула, перезапускаем сервис:

systemctl restart dovecot

В качестве логина и пароля можно использовать любую системную учетную запись. Создадим ее для теста:

useradd smtptest

passwd smtptest

Мы настроили простую аутентификацию на сервере SMTP. Для проверки можно воспользоваться любым почтовым клиентом. Пример настройки thunderbird:

Пробуем отправить письмо. Отправка должна потребовать ввода логина и пароль — используем аутентификационные данные для записи, созданной выше.

Мы завершили настройку аутнтификации на postfix при отправке письма. Добавим проверку данных через LDAP.

550 Your message was identified as SPAM

Сообщение означает, что входящее письмо было идентифицировано как спам на основе анализа его содержимого.

Рекомендации отправителю:

Попробуйте изменить формулировку письма и повторить отправку. Если проблема сохранится, обратитесь, пожалуйста, к получателю с помощью других средств связи с просьбой добавить ваш домен в белый список.

Если у вас нет контактных данных администратора домена получателя, воспользуйтесь сервисом Whois.

Рекомендации получателю:

Вы можете добавить домен отправителя в белый список, тогда почта с данного домена не будет проверяться спам-фильтром. Чтобы добавить домен example.net в белый список, необходимо:

  • авторизоваться в панели управления, используя номер своего договора и пароль;
  • перейти в раздел Почта;
  • нажать на название почтового домена;
  • перейти в раздел Спам-фильтрБелый список;
  • добавить маску вида *@example.net в блоке Новая маска почтового адреса и нажать кнопку Создать

Подключение LDAP

И так, наш сервер требует ввода логина и пароля от системных учетных записей для отправки писем. Теперь сделаем так, чтобы эти учетные записи брались из LDAP (на примере Active Directory).

В службе каталогов нам нужна учетная запись со стандартными правами — ее мы будем использовать для подключения к LDAP. Создаем служебную учетную запись, например, postfix в корневом контейнере Users. Таким образом, в моем примере, это будет запись cn=postfix,cn=Users,dc=dmosk,dc=local (в домене dmosk.local).

Теперь возвращаемся на наш сервер. Если у нас Debian/Ubuntu, необходимо установить пакет dovecot-ldap:

apt-get install dovecot-ldap

Открываем файл:

vi /etc/dovecot/dovecot-ldap.conf.ext

* в системах deb файл уже будет создан и в нем будут приведены примеры настройки; в системах RPM файл будет создан новый файл.

Добавляем в него следующее:

hosts            = dmosk.local
ldap_version     = 3
auth_bind        = yes
dn               = cn=postfix,cn=Users,dc=dmosk,dc=local
dnpass           = ldap-password-for-postfix
base             = ou=Пользователи,dc=dmosk,dc=local
scope            = subtree
deref            = never
pass_filter = (&(objectCategory=Person)(sAMAccountName=%n))
user_filter = (&(objectCategory=Person)(sAMAccountName=%n))

* где:

  • hosts — имя нашего сервера ldap (в моем примере указан домен, так как по нему у меня разрешается кластер LDAP).
  • ldap_version — версия ldap. Как правило, третья.
  • auth_bind — указываем, нужно ли выполнять аутентификацию при связывании с LDAP.
  • dn — учетная запись для прохождения авторизации при связывании со службой каталогов.
  • dnpass — пароль от записи для прохождения авторизации.
  • base — базовый контейнер, в котором мы ищем наших пользователей. Нельзя использовать поиск на уровне домена. Внимательнее проверяем путь на предмет использования контейнеров (CN) или организационных юнитов (OU).
  • scope — указывает на каком уровне нужно искать пользователей:
    • subtree — во всех вложенных контейнерах.
    • onelevel — во всех вложенных контейнерах, но на один уровень.
    • base — только в контейнере, который указан в base.
  • deref — параметр означает использование поиска по разыменованным псевдонимам. К сожалению, не нашел подробного описания. Обычно, не используется.
  • pass_filter — фильтр для поиска паролей пользователей. Его формат зависит от используемой реализации LDAP. В нашем примере это Active Directory.
  • user_filter — фильтр для поиска учетных записей пользователей. Формат зависит от того, какую реализацию для LDAP мы используем.

Не знаю причину, но если для base указать корневой путь к домену, например, dc=dmosk,dc=local, наша связка не будет работать, а система вернет ошибку … failed: Operations error.

Открываем файл:

vi /etc/dovecot/conf.d/10-auth.conf

Комментируем строку для использования аутентификации по системных учетных записям и снимаем комментарий для аутентификации в ldap. Получим следующий результат:

#!include auth-system.conf.ext

!include auth-ldap.conf.ext

Проверяем корректность настройки dovecot:

doveconf > /dev/null

И перезапускаем его:

systemctl restart dovecot

Возвращаемся к настроенному почтовому клиенту и меняем параметры для авторизации с smtptest на учетную запись из домена, например, [email protected]. Проверяем отправку письма — системы должна запросить пароль и отправить письмо при успешной проверке пользователя.

Можно переходить к настройке почтовых ящиков для пользователей из LDAP.

Механизмы записи SPF

В таблице ниже перечислены механизмы, используемые при создании записей SPF. Почтовые серверы получателей проверяют письма на соответствие механизмам в том порядке, в котором они указаны в записи SPF.

Полезно знать

  • Помимо механизмов можно использовать необязательные .
  • В записи TXT для SPF можно упоминать не более 10 других доменов и серверов. Эти упоминания называются запросами. Подробнее о том, …
Механизм Описание и допустимые значения

Версия SPF. Этот тег является обязательным и должен быть первым тегом в записи. Этот механизм должен иметь следующее значение:

Задает разрешенные почтовые серверы на основе IPv4-адреса или диапазона адресов. Значение должно представлять собой IPv4-адрес или диапазон в стандартном формате. Например:

или

Задает разрешенные почтовые серверы на основе IPv6-адреса или диапазона адресов. Значение должно представлять собой IPv6-адрес или диапазон в стандартном формате. Например:

или

Задает разрешенные почтовые серверы на основе доменного имени. Например:

Задает один или несколько разрешенных почтовых серверов на основе записи MX домена. Например:

Если в записи SPF нет этого механизма, по умолчанию используются записи MX домена, в котором создана эта запись SPF.

Задает разрешенных сторонних отправителей электронной почты на основе домена. Например:

Указывает, что механизм применяется ко всем входящим письмам. Рекомендуем всегда включать его в запись SPF.

Механизм должен быть последним в записи. Механизмы, следующие за ним, игнорируются.

Какой вариант следует использовать: ~all или -all?

Если запись SPF содержит элемент (), как правило, серверы получателей принимают письма от отправителей, которые не включены в запись SPF, но помечают их как подозрительные.

Если запись SPF содержит элемент (), серверы получателей могут отклонять письма от отправителей, которые не включены в запись SPF. Если запись SPF настроена неправильно, наличие квалификатора отказа может привести к тому, что подлинные письма из вашего домена будут попадать в спам.

Совет. Чтобы защитить от спуфинга домены, которые не отправляют почту, задайте для домена запись SPF .

476 connections from your host are denied

Сообщение означает, что подключение с вашего IP-адреса к почтовому серверу хостинга временно заблокировано. Это происходит в результате множественных ошибок при работе с почтовым сервером:

  • многократные попытки авторизации с неверными логином и паролем,
  • отправка писем на несуществующие адреса,
  • многократные попытки отправки писем при достижении лимитов, указанных на странице Ограничения и особенности почтовой системы.

Блокировка снимается автоматически через 15 минут. Для устранения проблемы рекомендуем проверить корректность настроек почтовых клиентов. Если проблема сохранится, сообщите о ней в службу технической поддержки, написав на адрес [email protected] и указав в письме

  • номер вашего договора,
  • почтовый ящик, при попытке отправки с которого наблюдается проблема,

Настройка DNS-записей для домена

После создания почтового домена и почтового ящика необходимо правильно настроить DNS-записи домена: MX, SPF, DMARC, DKIM и PTR.

MX

  1. Нажмите на значок шестеренки рядом с нужным доменом и выберите пункт Настройки DNS.
  2. Создайте новую MX-запись или отредактируйте имеющуюся, кликнув на значок карандаша. В качестве значения укажите ваш домен, например:
  3. Удалите прочие MX-записи, если они были созданы.

SPF

В SPF-записи указывается список серверов, с которых разрешена отправка писем от имени вашего домена.

Для настройки SPF:

  1. Нажмите на значок шестеренки рядом с нужным доменом и выберите пункт Настройки DNS.
  2. Если TXT-запись с параметром «v=spf1» уже существует, ее необходимо отредактировать, нажав на значок карандаша. Если подобной записи еще нет, необходимо нажать на «Добавить DNS-запись» справа вверху и выбрать пункт «TXT».
  3. В окне настройки DNS-записи поле «Хост» оставьте пустым. В поле «Значение» укажите следующую запись, заменив 1.1.1.1 на IP-адрес вашего сервера:

    v=spf1 ip4:1.1.1.1 a mx ~all
  4. Сохраните изменения.

DKIM

1. Включите DKIM в панели ISPmanager:

  • Под пользователем root перейдите в раздел Настройки — Конфигурация ПО.
  • Найдите в списке «Почтовый сервер (SMTP/POP3/IMAP)» и дважды кликните по нему
  • Отметьте пункт «OpenDKIM (exim)» и нажмите «Применить изменения».
  • Перейдите в раздел Почта — Почтовые домены и дважды кликните по нужному домену.
  • Отметьте пункт «Включить DKIM для домена».
  • Также отметьте пункт «Включить DMARC для домена» — эта запись потребуется нам на следующем шаге.

Нажмите Ok.

Произведенная настройка добавит необходимые TXT-записи для домена (dkim._domainkey и _dmarc). 

2. Скопируйте полученную запись:

  • Перейдите в раздел Управление DNS.
  • Выделите нужный домен и нажмите Управлять DNS-записями.
  • Найдите запись вида «dkim._domainkey.вашдомен» и дважды кликните по строчке с ней.
  • Скопируйте содержимое поля «Значение».

3. Пропишите DKIM у домена:

  • Нажмите на значок шестеренки рядом с вашим доменом и выберите пункт Настройки DNS.
  • Если TXT-запись с параметром «v=DKIM1» уже существует, ее необходимо отредактировать, нажав на значок карандаша. Если подобной записи еще нет, необходимо нажать на «Добавить DNS-запись» справа вверху и выбрать пункт «TXT».
  • В окне настройки DNS-записи в поле «Хост» укажите dkim._domainkey. В поле «Значение» вставьте DKIM-запись, скопированную в ISPmanager.

Сохраните изменения.

DMARC

1. Включите DMARC в панели ISPmanager.

Вероятно, вы сделали это на предыдущем шаге с DKIM. Если же нет, то:

  • Перейдите в раздел Почта — Почтовые домены.
  • Выделите нужный домен и нажмите Изменить.
  • Отметьте пункт Включить DMARC для домена и нажмите Ок, чтобы сохранить изменения.

2. Скопируйте полученную запись:

  • Перейдите в раздел Управление DNS.
  • Выделите нужный домен и нажмите Управлять DNS-записями.
  • Найдите запись вида «_dmarc.вашдомен» и дважды кликните по строке с ней.
  • Скопируйте содержимое поля «Значение».

3. Пропишите DMARC у домена:

  • Нажмите на значок шестеренки рядом с вашим доменом и выберите пункт Настройки DNS.
  • Если TXT-запись с параметром «v=DMARC1» уже существует, ее необходимо отредактировать, нажав на значок карандаша. Если подобной записи еще нет, необходимо нажать на «Добавить DNS-запись» справа вверху и выбрать пункт «TXT».
  • В окне настройки DNS-записи в поле «Хост» укажите _dmarc. В поле «Значение» вставьте DMARC-запись, скопированную в ISPmanager.

PTR

  1. В панели ISPmanager перейдите в раздел Настройки — Настройки системы.
  2. В поле «Имя сервера» укажите ваш домен. Этим именем ваша почтовая служба будет представляться при отправке письма.
  3. В поле «IPv4-адрес» кликните на имя сервера и также укажите ваш домен.

Настраиваем SPF ¶

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

Если домен уже привязан к какой-либо почте

Находим в настройках домена TXT-запись, которая начинается с и добавляем в середину информацию о дополнительном
сервере, например так:

Запись означает, что в результирующий список разрешённых адресов нужно добавить IP-адреса, которые указаны
в A-записях домена . Запись и другие подобные оставляйте как есть, они нужны для
работы других служб.

Если домен не привязан к почте

Добавляем новую TXT-запись к самому домену (иногда нужно указать @ в качестве имени хоста) следующего содержания:

Такая запись означает «доверять почте с сервера и не доверять остальным».

После внесения изменений

Выполните следующую команду, чтобы проверить настройки домена:

Если изменения успели попасть на сервер, то результатом будет значение, которое вы внесли, а если нет, придётся
ждать. Время ожидания зависит от того, как быстро ДНС-сервер вашего провайдера применяет настройки, и сколько времени
живёт запись (TTL). И то и другое можно проверить с помощью команды :

Ищите строчку , под ней будут нужные вам значения: число перед , это секунды жизни записи, а строка
после — значение. Однако, если вы делегируете домен на Яндекс (как и я), то независимо от того, что показывает ,
изменения могут вступить в силу только спустя несколько дней (старый баг, который они постоянно обещают исправить).

Подготовка к настройке собственного почтового сервера ¶

Прежде чем настраивать почтовый сервер убедитесь, что хостинг-провайдер разрешает использовать SMTP-порты (25, 465 и другие).
Многие провайдеры по умолчанию блокируют эти порты и открывают при обращении в службу поддержки. Уточните у своего хостера
требования для того, чтобы безбоязненно рассылать письма, а также требования к самим письмам, чтобы они не подпадали под
определение SPAM.

Быстрая проверка доступности SMTP через консоль:

Если появится примерно такой текст, то порты открыты:

А вот так выглядит сообщение, если порты закрыты и придётся обращаться в поддержку хостера:

Что такое ошибка NXDOMAIN

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

Отображаемое сообщение может незначительно отличаться. Например, в Google Chrome в браузере появившееся сообщение будет DNS_PROBE_FINISHED_NXDOMAIN . Это означает, что страница, на которую мы пытаемся войти, загружается некорректно.

Возможные причины ошибки NXDOMAIN

Эта ошибка может возникать по разным причинам. Иногда это может быть в наших силах исправить, а в других случаях это зависит от сервера сайта. Посмотрим, что за Основные причины составляют:

  • DNS-сервер не работает
  • Проблема с DNS-клиентом
  • VPN мешает
  • Установленные средства безопасности
  • Неправильные настройки DNS
  • Проблемы с браузером

Немного общих слов о настройках

Итак, Postfix установлен. Все настройки этого почтового сервера хранятся в . В этом каталоге Вас в первую очередь должен интересовать основной файл конфигурации, называющийся .

Теперь настала пора определиться с тем, какую функцию будет выполнять ваш почтовый сервер. Собственно, для каждого из обслуживаемых доменов тут есть два варианта:

  1. Либо Postfix будет использоваться только для пересылки почты на другой хост.
  2. Либо Postfix будет сохранять почту локально, возможно и не всю, передавая часть на другой хост.

Третьего собственно не дано. В настройках Postfix есть три основных группы параметров:

  1. Параметры локальной доставки.
  2. Параметры пересылки.
  3. Параметры «виртуальных доменов».

Как «правильный» почтовый сервер, Postfix занимается обработкой почты для указанных в конфигурации доменов. Так вот, каждый домен может обрабатываться ровно одним из указанных способов, то есть либо как конечный домен для почты, либо как домен для пересылки, либо как виртуальный домен.

Стандартная локальная доставка основана на системе авторизации и учёта пользователей вашей системы, что значительно уменьшает её гибкость, поэтому смысла её использовать обычно нет. Вместо этого следует использовать механизм «виртуальных доменов» для доставки почты в локальные почтовые ящики. Однако рассмотреть параметры, отвечающие за локальную доставку, всё же надо, ибо на них много что завязано.

Итак, откройте файл в вашем любимом текстовом редакторе. Записи этого файла имеют вид

параметр = значение

Комментарии можно добавлять, поставив в начало строки символ . Кстати, сразу хочу сказать, что параметры, имеющие несколько значений, можно записывать одним из следующих способов:

параметр = значение1 значение2 значение3
параметр = значение1, значение2, значение3
параметр =
 значение1
 значение2
 значение3
параметр =
 значение1,
 значение2,
 значение3

В третьем и четвёртом случае не забудьте про пробел в начале каждой строчки с параметром. В данном примере, рассмотрим конфигурирование по способу №3.

Кстати, после того, как вы задали значение какого-либо параметра, вы можете его использовать для задания значений другим параметрам. Вам просто нужно указать имя параметра с символом $ вначале в том месте, куда вы хотите подставить его значение. Например вот так:

mydomain = example.com
mydestination = mail.$mydomain

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

Теперь немного конкретики.

Рейтинг
( Пока оценок нет )
Понравилась статья? Поделиться с друзьями:
Все про сервера
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: