Postfix: Использование check_client_access для ограничения некоторых учетных записей SASL по IP-адресам?

Вопрос или проблема

У меня есть небольшой почтовый сервер (работающий на Ubuntu 22.04), на котором около 10 аккаунтов разрешено отправлять почту через SASL аутентификацию (они принадлежат к системной группе).

Я бы хотел ограничить пару из этих аккаунтов, позволив им подключаться только с определенного IP адреса (один IPv6, другой IPv4).

Например, вот типичная запись в журнале для одного из аккаунтов, подключающегося с легитимного адреса (2001:xxx:x:xxx::53 – также обратите внимание, что для этих пользователей sasl нет доменного имени):

Jan 31 04:15:35 alice submission/smtpd[3140867]: 8EA36BA068: client=mail.xxx.xxx.uk[2001:xxx:x:xxx::53], sasl_method=PLAIN, sasl_username=user1

Я использую check_client_access в своих правилах отправки следующим образом:

submission      inet    n       -       n        -      -       smtpd
  -o smtpd_tls_security_level=encrypt
  -o smtpd_sender_restrictions=
  -o smtpd_milters=
  -o { smtpd_client_restrictions=
HERE -->  check_client_access hash:/etc/postfix/hatters/sasl_access
     }
  -o { smtpd_recipient_restrictions=
         reject_non_fqdn_recipient
         reject_unknown_recipient_domain
         permit_sasl_authenticated
         reject
     }
...etc.

Но файл sasl_access ниже, похоже, не оказывает никакого влияния (и ничего нет в журналах) при попытке отправить с другого IP, который должен предотвратить отправку клиентом:

user1 2001:xxx:x:xxx::53 208.x.x.50 OK
user2 2001:xxx:x:xxx::53 208.x.x.50 OK

Я запустил postmap и перезагрузил postfix.

ИЗМЕНЕНИЕ: Я также рассмотрел вариант использования postfwd для этого, но предпочел бы решение с postfix, так как было бы немного легче в обслуживании (и я также не уверен, поддерживает ли версия postfwd, поставляемая с Ubuntu 22.04, IPv6).

Я смог это сделать, добавив соответствующие IP-адреса в $mynetworks, а затем используя check_sasl_access в моем master.cf вот так:

submission      inet    n       -       n        -      -       smtpd
  -o smtpd_tls_security_level=encrypt
  -o smtpd_sender_restrictions=
  -o smtpd_milters=
## Ограничить отправителей только с локальных сетей:
  -o { smtpd_client_restrictions=check_sasl_access hash:/etc/postfix/sasl_access }
  -o { smtpd_recipient_restrictions=
         reject_non_fqdn_recipient
         reject_unknown_recipient_domain
... etc.

Затем я могу поместить это в файл sasl_access, который запрещает доступ этим пользователям, если они подключаются из не указанной сети:

user1 permit_mynetworks, reject
user2 permit_mynetworks, reject

Ответ или решение

Использование Postfix для ограничения SASL-учетных записей по IP-адресам является вполне выполнимой задачей, если правильно настроить соответствующие параметры. Рассмотрим теоретическую основу, пример и применение данной задачи.

Теоретическая основа

Postfix предоставляет разнообразные методы для управления доступом к вашему серверу. Два ключевых метода, которые мы будем использовать, это check_client_access и check_sasl_access. Каждый из них предлагает свой подход к проверке и ограничению доступа.

check_client_access

Этот метод используется для применения правил к IP-адресам, подключающимся к серверу. Обычно используется хэшированный файл, который связывает IP-адрес или диапазон адресов с определённым действием (например, разрешение или запрет доступа).

check_sasl_access

Этот метод фокусируется на учетных записях SASL и позволяет проверять и ограничивать доступ на основе имен пользователей, используя подробные правила. check_sasl_access может использоваться для того чтобы разрешить или запретить действия в зависимости от наличия пользователя в локальных сетях, описанных в $mynetworks.

Пример

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

  1. Настройка master.cf:

    submission      inet    n       -       n        -      -       smtpd
      -o smtpd_tls_security_level=encrypt
      -o smtpd_sender_restrictions=
      -o smtpd_milters=
      -o smtpd_client_restrictions=check_sasl_access hash:/etc/postfix/sasl_access
      -o smtpd_recipient_restrictions=
         reject_non_fqdn_recipient
         reject_unknown_recipient_domain
         permit_sasl_authenticated
         reject
  2. Настройка файла sasl_access:

    Представьте, что вам нужно разрешить доступ только из определённых IP-адресов, которые находятся в $mynetworks. Файл /etc/postfix/sasl_access может выглядеть так:

    user1 permit_mynetworks, reject
    user2 permit_mynetworks, reject
  3. Обновление конфигурации:

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

    postmap /etc/postfix/sasl_access
    systemctl reload postfix

Применение

Эта конфигурация позволяет только тем SASL-учетным записям, которые перечислены в $mynetworks, отправлять почту, что существенно повышает уровень безопасности вашего почтового сервера.

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

Заключение

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

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

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

Капча загружается...