Postfix, ограничение входящих сообщений

Необ­хо­ди­мо орга­ни­зо­вать доступ сле­ду­ю­щим образом:
с одно­го ip адре­са, мож­но отправ­лять сооб­ще­ние толь­ко одно­му поч­то­во­му ящи­ку (связь один к одному)
созда­ём сле­ду­ю­щие файлы:

Thank you for reading this post, don't forget to subscribe!

ll /etc/postfix/access_mail/

total 44
-rw-r--r-- 1 root root 18 Jan 25 13:53 access_ip
-rw-r--r-- 1 root root 18 Jan 25 14:21 access_ip2
-rw-r--r-- 1 root root 47 Jan 25 14:35 mail_list

со сле­ду­ю­щим содержимым:

cat /etc/postfix/access_mail/access_ip
10.10.10.1 OK

cat /etc/postfix/access_mail/access_ip2
10.10.10.2 OK

cat /etc/postfix/access_mail/mail_list

user1@ class_domain1
user2@ class_domain2

в фай­лах access_ip и access_ip2 ука­зы­ва­ют­ся ip адре­са с кото­рых раз­ре­ше­на отправ­ка сооб­ще­ний для поль­зо­ва­те­лей user1@ user2@
в фай­ле mail_list ука­за­ны какие кла­сы назна­ча­ют­ся для каж­до­го из пользователей(почтовых ящиков/доменов)

как толь­ко фай­лы созда­ны выпол­ня­ем сле­ду­ю­щую команду:
postmap /etc/postfix/access_mail/access_ip
postmap /etc/postfix/access_mail/access_ip2
postmap /etc/postfix/access_mail/mail_list

при любом добав­ле­нии инфор­ма­ции в дан­ные фай­лы, необ­хо­ди­мо повто­рять дан­ную команду.

далее необ­хо­ди­мо вне­сти кор­рек­ти­ров­ки в кон­фи­гу­ра­ци­он­ный файл:
/etc/postfix/main.cf
добав­ля­ем сле­ду­ю­щую запись:

smtpd_sender_restrictions = check_sender_access hash:/etc/postfix/access_mail/mail_list, reject
smtpd_restriction_classes = class_domain1,class_domain2
class_domain1 = check_client_access hash:/etc/postfix/access_mail/access_ip, reject
class_domain2 = check_client_access hash:/etc/postfix/access_mail/access_ip2, reject

после чего пере­за­пус­ка­ем postfix

systemctl restart postfix

теперь с ip 10.10.10.1 может отправ­лять толь­ко user1@
а с ip 10.10.10.2 толь­ко user2@

Про­ве­рить рабо­ту мож­но сле­ду­ю­щим образом:
yum –y install mailx

echo "Test text" | mail -s "Test title" -r user1@domain.ru -S smtp="10.10.10.50:25" user1@domain.ru

здесь 10.10.10.50  IP наше­го релея

--------------------------------------------------------------------------------------
Допол­ни­тель­ная информация
В демоне smtpd есть 4 ограничения(restrictions) для почты

Огра­ни­че­ние Когда про­ве­ря­ет­ся Что проверяется

smtpd_client_restrictions - сра­зу после уста­нов­ле­ния соеди­не­ния ip-адрес клиента
smtpd_helo_restrictions - на эта­пе HELO/EHLO при­вет­свие клиента
smtpd_sender_restrictions - на эта­пе MAIL FROM: адрес отправителя
smtpd_recipient_restrictions - на эта­пе RCPT TO: адрес получателя

Про­вер­ка про­ис­хо­дит в ука­зан­ном поряд­ке. Если какое-либо из огра­ни­че­ний даёт нега­тив­ный ответ - даль­ней­шая про­вер­ка пре­кра­ща­ет­ся и кли­ент посы­ла­ет­ся куда подаль­ше. И есть одна дирек­ти­ва, кото­рая управ­ля­ет вре­ме­нем вычис­ле­ния зна­че­ний и при­ме­не­ния огра­ни­че­ний. Это smtpd_delay_reject. Если она рав­на yes, Postfix дождёт­ся момен­та, когда будет доступ­на пол­ная инфор­ма­ция о клиенте(ip и helo) и письме(от кого и кому), и толь­ко после это­го всту­пят в дей­ствие огра­ни­че­ния. Ина­че огра­ни­че­ния вычис­ля­ют­ся и

при­ме­ня­ют­ся соот­вет­ствен­но таб­ли­це. По умол­ча­нию дирек­ти­ва вклю­че­на. Как пишут в мане, это есть хоро­шо - в логе вид­но, кому и чья поч­та "не дошла". Так­же это даёт опре­де­лён­ные плю­сы - воз­мож­ность опе­ри­ро­вать все­ми вели­чи­на­ми во всех ограничениях.

в каж­дом огра­ни­че­нии мож­но про­ве­рять любой пара­метр, напри­мер в огра­ни­че­нии полу­ча­те­лей smtpd_recipient_restrictions про­ве­рять ip-адрес кли­ен­та. Вот соот­вет­ству­ю­щие наи­бо­лее часто исполь­зу­е­мые директивы
Дирек­ти­ва что проверяет
check_client_access ip-адрес клиента
check_helo_access при­вет­ствие клиента
check_sender_access адрес отправителя
check_recipient_access адрес получателя
smtpd_restriction_classes класс кото­рый поз­во­ля­ет опре­де­лять груп­пы со сво­и­ми именами

=================================================================================

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

cat /etc/postfix/access_mail/mail_list | grep user1
user1@domain.ru class_domain4

cat /etc/postfix/main.cf | grep 'class_domain4'
smtpd_restriction_classes = class_domain1,class_domain2,class_domain3,class_domain4
class_domain4 = check_client_access hash:/etc/postfix/access_mail/access_ip4, reject

cat /etc/postfix/access_mail/access_ip4
10.10.10.1 OK
10.10.10.2 OK

и выпол­ня­ем:
postmap /etc/postfix/access_mail/access_ip4
postmap /etc/postfix/access_mail/mail_list

после чего пере­за­пус­ка­ем postfix

systemctl restart postfix

=================================================================================
Если необ­хо­ди­мо про­из­ве­сти настрой­ку мно­гие ко мно­гим, т.е. име­ет­ся спи­сок поч­то­вых ящи­ков и спи­сок ip адре­сов, и с каж­до­го из этих сер­ве­ров мож­но отправ­лять сооб­ще­ния с поч­то­вых ящи­ков ука­зан­ных в списке.

в main.cnf добавляем
smtpd_sender_restrictions = check_sender_access hash:/etc/postfix/access_mail/mail_list,check_sender_access hash:/etc/postfix/access_mail/ip_list,reject

 

cat /etc/postfix/access_mail/mail_list
user1@ OK
user2@ OK

cat /etc/postfix/access_mail/ip_list
10.10.10.1 OK
10.10.10.2 OK

после чего выполняем
postmap /etc/postfix/access_mail/mail_list
postmap /etc/postfix/access_mail/ip_list

и пере­за­пус­ка­ем postfix
systemctl restart postfix

 

====================================================================================================

Ограничить доступ на релее - запрет на отправку с определённых email

 

Име­ет­ся кор­по­ра­тив­ный релей, через кото­рый идёт отправ­ка сооб­ще­ний со всех ip адре­сов добав­лен­ных в пере­мен­ную mynetworks (айпиш­ни­ки или подсети)

Далее посту­пи­ла зада­ча огра­ни­чить отправ­ку с опре­де­лён­ных поч­то­вых ящи­ков (они нуж­ны были для внут­рен­ней рас­сыл­ки и мы так обез­опа­си­ли себя если они лома­нуть­ся на внешку)
Мы созда­ли файл:

/etc/postfix/sender_access
Со сле­ду­ю­щим содержимым:

zabbix@test.local REJECT

Созда­ва­ли далее хэш
postmap /etc/postfix/sender_access

Далее в
smtpd_sender_restrictions

доба­ви­ли:
check_sender_access hash:/etc/postfix/sender_access,

( smtpd_sender_restrictions отве­ча­ет за - огра­ни­че­ния будут при­ме­нять­ся во вре­мя выпол­не­ния кли­ент­ской коман­ды MAIL FROM)

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

smtpd_client_restrictions = permit_mynetworks
smtpd_restriction_classes = has_our_domain_as_sender
has_our_domain_as_sender = check_sender_access hash:/etc/postfix/has_our_domain_as_sender reject
smtpd_sender_restrictions =
check_sender_access hash:/etc/postfix/sender_access,
permit_mynetworks,
reject_unauth_destination,
reject_invalid_hostname,
reject_unknown_helo_hostname,
reject_non_fqdn_hostname,
reject

smtpd_recipient_restrictions =
reject_non_fqdn_sender,
permit_mynetworks,
check_client_access hash:/etc/postfix/company_networks,
reject_unauth_destination,
reject

Рас­смот­рим подробнее:
smtpd_client_restrictions — настрой­ки огра­ни­че­ния кли­ент­ских соеди­не­ний. В дан­ном при­ме­ре раз­ре­шить толь­ко авто­ри­зо­ван­ных permit_mynetworks, кото­рый соот­вет­ству­ет mynetworks со спис­ком ip адре­сов и подсетей

smtpd_restriction_classes
- тут опи­сы­ва­ем класс с име­нем has_our_domain_as_sender. Содер­жи­мое кото­ро­го соот­вет­ству­ет нашим доме­нам от кото­рых про­ис­хо­дит отправка.

cat /etc/postfix/has_our_domain_as_sender
test.kg OK
test.local OK
test.info OK

Все осталь­ные доме­ны на отправ­ку долж­ны отбрасываться.
smtpd_sender_restrictions — огра­ни­че­ния будут при­ме­нять­ся во вре­мя выпол­не­ния кли­ент­ской коман­ды MAIL FROM. Пер­вым проверятся:
/etc/postfix/sender_access
zabbix@test.local REJECT. check_sender_access про­ве­ря­ет MAIL FROM отпра­ви­те­ля в нашем спис­ке, т.е. сам поч­то­вый ящик. permit_mynetworks - раз­ре­ша­ет всех кто есть в спис­ке mynetworks, все осталь­ные откло­ня­ют­ся по пра­ви­лу reject
smtpd_recipient_restrictions — кон­тро­ли­ру­ет ответ Postfix на SMTP-коман­ду RCPT TO. Здесь мы раз­ре­ша­ем толь­ко соеди­не­ния от узлов, пере­чис­лен­ных в mynetworks. check_client_access - ищет в ука­зан­ном фай­ле имя хоста кли­ен­та, IP-адрес кли­ен­та или сети отпра­ви­те­ля, мы про­ве­ря­ем файл /etc/postfix/company_networks в кото­ром пере­чис­ле­ны под­се­ти наших дове­рен­ных айпиш­ни­ков и ука­зан класс:

cat /etc/postfix/company_networks
10.230 has_our_domain_as_sender
10.244 has_our_domain_as_sender
127.0.0 has_our_domain_as_sender

 

----------- ------------------------ ---------------------- ----------------------------

Теперь поступила задача ограничивать IP=email

Смот­рим main.cf

smtpd_client_restrictions = permit_mynetworks
smtpd_restriction_classes = has_our_domain_as_sender,class_domain1,class_domain2
has_our_domain_as_sender = check_sender_access hash:/etc/postfix/has_our_domain_as_sender reject
class_domain1 = check_sender_access hash:/etc/postfix/access_mail/access_mail1, reject
class_domain2 = check_sender_access hash:/etc/postfix/access_mail/access_mail2, reject

smtpd_sender_restrictions =
warn_if_reject
check_client_access hash:/etc/postfix/sender_access,
check_sender_access hash:/etc/postfix/sender_access,
permit_mynetworks,
reject_unauth_destination,
reject_invalid_hostname,
reject_unknown_helo_hostname,
reject_non_fqdn_hostname,
reject

smtpd_recipient_restrictions =
reject_non_fqdn_sender,
permit_mynetworks,
check_client_access hash:/etc/postfix/company_networks,
reject_unauth_destination,
reject

smtpd_relay_restrictions = check_client_access hash:/etc/postfix/sender_access, permit_mynetworks, permit_sasl_authenticated, defer_unauth_destination

 

Рас­смот­рим что тут творится:
smtpd_client_restrictions — настрой­ки огра­ни­че­ния кли­ент­ских соеди­не­ний. В дан­ном при­ме­ре раз­ре­шить толь­ко тех что добав­ле­ны в mynetworks
smtpd_restriction_classes - тут опи­сы­ва­ем наши клас­сы: has_our_domain_as_sender,class_domain1,class_domain2

cat /etc/postfix/has_our_domain_as_sender
test.kg OK
test.local OK
test.info OK

cat /etc/postfix/access_mail/access_mail1
serv@test.kg OK

cat /etc/postfix/access_mail/access_mail2
zabbix@test.kg OK

smtpd_sender_restrictions — огра­ни­че­ния будут при­ме­нять­ся во вре­мя выпол­не­ния кли­ент­ской коман­ды MAIL FROM
check_client_access - ищет в ука­зан­ном фай­ле имя хоста кли­ен­та, IP-адрес кли­ен­та или сети отпра­ви­те­ля (в нашем слу­чае это два ip адре­са с раз­ре­шён­ным одним email (class_domain1) и ещё один ip адрес с кото­ро­го раз­ре­ше­на отправ­ка толь­ко с одно­го email (class_domain2) ) поми­мо него есть ещё ящи­ки кото­рым отправ­ка в прин­ци­пе запрещена:

cat /etc/postfix/sender_access
zabbix@test.local REJECT
10.71.200.29 class_domain1
10.71.200.28 class_domain1
10.71.200.40 class_domain2
check_sender_access - про­ве­ря­ет MAIL FROM отпра­ви­те­ля в нашем спис­ке, т.е. сам поч­то­вый ящик - бла­го­да­ря этой про­вер­ке мы бло­ки­ру­ем поч­то­вые ящи­ки кото­рым запре­ще­на отправка

smtpd_recipient_restrictions кон­тро­ли­ру­ет ответ Postfix на ста­дии SMTP-коман­ды RCPT TO. Здесь мы раз­ре­ша­ем толь­ко соеди­не­ния от узлов, пере­чис­лен­ных в mynetworks но мы ещё добавляем
check_client_access hash:/etc/postfix/company_networks в кото­ром наши ip адре­са не ука­зан­ные в mynetworks .

cat /etc/postfix/company_networks
10.230 has_our_domain_as_sender
10.244 has_our_domain_as_sender
127.0.0 has_our_domain_as_sender
10.71.200.29 has_our_domain_as_sender
10.71.200.28 has_our_domain_as_sender
10.71.200.40 has_our_domain_as_sender

smtpd_relay_restrictions - это огра­ни­че­ние появи­лось в Postfix 2.10 По умол­ча­нию име­ет значение
smtpd_relay_restrictions = permit_mynetworks permit_sasl_authenticated defer_unauth_destination
В допол­не­ние к ранее при­сут­ству­ю­щим настрой­кам smtpd_{client, helo, sender,recipient}_restrictions добав­ле­на дирек­ти­ва smtpd_relay_restrictions, кото­рая поз­во­ля­ет сни­зить веро­ят­ность появ­ле­ния откры­то­го релея из-за оши­бок при опре­де­ле­нии пра­вил бло­ки­ро­ва­ния спа­ма. По умол­ча­нию задей­ство­ва­ны настрой­ки для пол­но­го сохра­не­ния обрат­ной сов­ме­сти­мо­сти (smtpd_relay_restrictions = permit_mynetworks, reject_unauth_destination; для новых уста­но­вок smtpd_relay_restrictions = permit_mynetworks, permit_sasl_authenticated, defer_unauth_destination);

smtpd_relay_restrictions — огра­ни­че­ния пере­сыл­ки почты в кон­тек­сте кли­ент­ской коман­ды RCPT TO.
Тут мы проверяем
check_client_access hash:/etc/postfix/sender_access

 

Что­бы настро­ить огра­ни­че­ние ip=mail дела­ем сле­ду­ю­щие шаги:

cat /etc/postfix/access_mail/access_mail2
test@test.kg OK

postmap /etc/postfix/access_mail/access_mail2

cat /etc/postfix/sender_access
10.71.200.40 class_domain2

postmap /etc/postfix/sender_access

cat /etc/postfix/company_networks
10.71.200.40 has_our_domain_as_sender

postmap /etc/postfix/company_networks

cat /etc/postfix/main.cf
smtpd_restriction_classes = has_our_domain_as_sender,class_domain1,class_domain2
class_domain2 = check_sender_access hash:/etc/postfix/access_mail/access_mail2, reject

postfix check --- и если всё ок то можно
systemctl restart postfix