Π ΠΏΠΎΡΠ΅Π½ΡΠΊΠΈΡ ΡΡΡΠ²ΡΡ Π½Π° Exim
Π ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΡΠ° ΠΏΠΎ ΠΏΠΎΠ΄ΡΠ°Π·Π±ΠΈΡΠ°Π½Π΅ Π°ΡΠ°ΠΊΠ°ΡΠ° ΠΌΠΎΠΆΠ΅ Π΄Π° Π±ΡΠ΄Π΅ ΠΈΠ·Π²ΡΡΡΠ΅Π½Π° Π±Π΅Π· Π½Π΅Π½ΡΠΆΠ½ΠΈ ΡΡΠ»ΠΎΠΆΠ½Π΅Π½ΠΈΡ ΠΎΡ Π»ΠΎΠΊΠ°Π»Π΅Π½ ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π», ΡΡΠΉ ΠΊΠ°ΡΠΎ ΡΠ΅ ΠΏΡΠΈΠ»Π°Π³Π° ACL βverify = recipientβ, ΠΊΠΎΠΉΡΠΎ ΠΈΠ·Π²ΡΡΡΠ²Π° Π΄ΠΎΠΏΡΠ»Π½ΠΈΡΠ΅Π»Π½ΠΈ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ Π·Π° Π²ΡΠ½ΡΠ½ΠΈ Π°Π΄ΡΠ΅ΡΠΈ. ΠΡΠ΄Π°Π»Π΅ΡΠ΅Π½Π° Π°ΡΠ°ΠΊΠ° ΠΌΠΎΠΆΠ΅ Π΄Π° Π²ΡΠ·Π½ΠΈΠΊΠ½Π΅, ΠΊΠΎΠ³Π°ΡΠΎ Π½Π°ΡΡΡΠΎΠΉΠΊΠΈΡΠ΅ ΡΠ΅ ΠΏΡΠΎΠΌΠ΅Π½ΡΡ, ΠΊΠ°ΡΠΎ Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ Π΄Π΅ΠΉΡΡΠ²Π° ΠΊΠ°ΡΠΎ Π²ΡΠΎΡΠΈΡΠ΅Π½ MX Π·Π° Π΄ΡΡΠ³ Π΄ΠΎΠΌΠ΅ΠΉΠ½, ΠΏΡΠ΅ΠΌΠ°Ρ Π²Π°Π½Π΅ Π½Π° ACL βverify=recipientβ ΠΈΠ»ΠΈ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈ ΠΏΡΠΎΠΌΠ΅Π½ΠΈ Π² local_part_suffix). ΠΡΠ·ΠΌΠΎΠΆΠ½Π° Π΅ ΠΈ ΠΎΡΠ΄Π°Π»Π΅ΡΠ΅Π½Π° Π°ΡΠ°ΠΊΠ°, Π°ΠΊΠΎ Π°ΡΠ°ΠΊΡΠ²Π°ΡΠΈΡΡ Π΅ Π² ΡΡΡΡΠΎΡΠ½ΠΈΠ΅ Π΄Π° ΠΏΠΎΠ΄Π΄ΡΡΠΆΠ° Π²ΡΡΠ·ΠΊΠ°ΡΠ° ΡΡΡ ΡΡΡΠ²ΡΡΠ° ΠΎΡΠ²ΠΎΡΠ΅Π½Π° Π² ΠΏΡΠΎΠ΄ΡΠ»ΠΆΠ΅Π½ΠΈΠ΅ Π½Π° 7 Π΄Π½ΠΈ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ ΠΈΠ·ΠΏΡΠ°ΡΠ°Π½Π΅ Π½Π° Π΅Π΄ΠΈΠ½ Π±Π°ΠΉΡ Π½Π° ΠΌΠΈΠ½ΡΡΠ°, Π·Π° Π΄Π° Π·Π°ΠΎΠ±ΠΈΠΊΠΎΠ»ΠΈ ΠΈΠ·ΡΠ°ΠΊΠ²Π°Π½Π΅). Π ΡΡΡΠΎΡΠΎ Π²ΡΠ΅ΠΌΠ΅ Π΅ Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎ Π΄Π° ΠΈΠΌΠ° ΠΏΠΎ-ΠΏΡΠΎΡΡΠΈ Π²Π΅ΠΊΡΠΎΡΠΈ Π½Π° Π°ΡΠ°ΠΊΠ° Π·Π° ΠΎΡΠ΄Π°Π»Π΅ΡΠ΅Π½ΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Π½Π° ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ°.
Π£ΡΠ·Π²ΠΈΠΌΠΎΡΡΡΠ° Π΅ ΠΏΡΠΈΡΠΈΠ½Π΅Π½Π° ΠΎΡ Π½Π΅ΠΏΡΠ°Π²ΠΈΠ»Π½Π° ΠΏΡΠΎΠ²Π΅ΡΠΊΠ° Π½Π° Π°Π΄ΡΠ΅ΡΠ° Π½Π° ΠΏΠΎΠ»ΡΡΠ°ΡΠ΅Π»Ρ Π²ΡΠ² ΡΡΠ½ΠΊΡΠΈΡΡΠ° deliver_message(), Π΄Π΅ΡΠΈΠ½ΠΈΡΠ°Π½Π° Π²ΡΠ² ΡΠ°ΠΉΠ»Π° /src/deliver.c. Π§ΡΠ΅Π· ΠΌΠ°Π½ΠΈΠΏΡΠ»ΠΈΡΠ°Π½Π΅ Π½Π° ΡΠΎΡΠΌΠ°ΡΠΈΡΠ°Π½Π΅ΡΠΎ Π½Π° Π°Π΄ΡΠ΅ΡΠ°, Π°ΡΠ°ΠΊΡΠ²Π°ΡΠΈΡΡ ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΏΠΎΡΡΠΈΠ³Π½Π΅ Π·Π°ΠΌΠ΅ΡΡΠ²Π°Π½Π΅ Π½Π° ΡΠ²ΠΎΠΈΡΠ΅ Π΄Π°Π½Π½ΠΈ Π² Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΈΡΠ΅ Π½Π° ΠΊΠΎΠΌΠ°Π½Π΄Π°, ΠΈΠ·Π²ΠΈΠΊΠ°Π½Π° ΡΡΠ΅Π· ΡΡΠ½ΠΊΡΠΈΡΡΠ° execv() Ρ root ΠΏΡΠ°Π²Π°. Π Π°Π±ΠΎΡΠ°ΡΠ° Π½Π΅ ΠΈΠ·ΠΈΡΠΊΠ²Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ΡΠΎ Π½Π° ΡΠ»ΠΎΠΆΠ½ΠΈ ΡΠ΅Ρ Π½ΠΈΠΊΠΈ, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½ΠΈ Π·Π° ΠΏΡΠ΅ΠΏΡΠ»Π²Π°Π½Π΅ Π½Π° Π±ΡΡΠ΅Ρ ΠΈΠ»ΠΈ ΠΏΠΎΠ²ΡΠ΅Π΄Π° Π½Π° ΠΏΠ°ΠΌΠ΅ΡΡΠ°; ΠΏΡΠΎΡΡΠΎ Π·Π°ΠΌΠ΅ΡΡΠ²Π°Π½Π΅ Π½Π° Π·Π½Π°ΡΠΈ Π΅ Π΄ΠΎΡΡΠ°ΡΡΡΠ½ΠΎ.
ΠΡΠΎΠ±Π»Π΅ΠΌΡΡ Π΅ ΡΠ²ΡΡΠ·Π°Π½ Ρ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ΡΠΎ Π½Π° ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΈΡΡΠ° Π·Π° ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΡΠ²Π°Π½Π΅ Π½Π° Π°Π΄ΡΠ΅ΡΠΈ:
Π΄ΠΎΡΡΠ°Π²ΠΈ_Π»ΠΎΠΊΠ°Π»Π½Π°ΡΠ°ΡΡ = ΡΠ°Π·ΡΠΈΡΠΈ_Π½ΠΈΠ·(
string_sprintf("${local_part:%s}", Π½ΠΎΠ²->Π°Π΄ΡΠ΅Ρ));
Π΄ΠΎΡΡΠ°Π²ΠΈ_Π΄ΠΎΠΌΠ΅ΠΉΠ½ = ΡΠ°Π·ΡΠΈΡΠΈ_Π½ΠΈΠ·(
string_sprintf("${domain:%s}", Π½ΠΎΠ²->Π°Π΄ΡΠ΅Ρ));
Π€ΡΠ½ΠΊΡΠΈΡΡΠ° expand_string() Π΅ ΠΏΡΠ΅ΠΊΠ°Π»Π΅Π½ΠΎ ΡΠ»ΠΎΠΆΠ΅Π½ ΠΊΠΎΠΌΠ±ΠΈΠ½ΠΈΡΠ°Ρ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½Ρ, Π²ΠΊΠ»ΡΡΠΈΡΠ΅Π»Π½ΠΎ ΡΠ°Π·ΠΏΠΎΠ·Π½Π°Π²Π°Π½Π΅ Π½Π° ΠΊΠΎΠΌΠ°Π½Π΄Π°ΡΠ° β${run{command arguments}β, ΠΊΠΎΠ΅ΡΠΎ Π²ΠΎΠ΄ΠΈ Π΄ΠΎ ΡΡΠ°ΡΡΠΈΡΠ°Π½Π΅ Π½Π° Π²ΡΠ½ΡΠ΅Π½ ΠΌΠ°Π½ΠΈΠΏΡΠ»Π°ΡΠΎΡ. ΠΠΎ ΡΠΎΠ·ΠΈ Π½Π°ΡΠΈΠ½, Π·Π° Π΄Π° Π°ΡΠ°ΠΊΡΠ²Π° Π² ΡΠ°ΠΌΠΊΠΈΡΠ΅ Π½Π° SMTP ΡΠ΅ΡΠΈΡ, Π»ΠΎΠΊΠ°Π»Π½ΠΈΡΡ ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π» ΡΡΡΠ±Π²Π° ΡΠ°ΠΌΠΎ Π΄Π° ΠΈΠ·ΠΏΡΠ°ΡΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Π° ΠΊΠ°ΡΠΎ βRCPT TO βusername+${run{...}}@localhostββ, ΠΊΡΠ΄Π΅ΡΠΎ localhost Π΅ Π΅Π΄ΠΈΠ½ ΠΎΡ Ρ ΠΎΡΡΠΎΠ²Π΅ΡΠ΅ ΠΎΡ ΡΠΏΠΈΡΡΠΊΠ° Ρ local_domains, ΠΈ ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»ΡΠΊΠΎ ΠΈΠΌΠ΅ Π΅ ΠΈΠΌΠ΅ΡΠΎ Π½Π° ΡΡΡΠ΅ΡΡΠ²ΡΠ²Π°Ρ Π»ΠΎΠΊΠ°Π»Π΅Π½ ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π».
ΠΠΊΠΎ ΡΡΡΠ²ΡΡΡΡ ΡΠ°Π±ΠΎΡΠΈ ΠΊΠ°ΡΠΎ ΡΠ΅Π»Π΅ Π·Π° ΠΏΠΎΡΠ°, Π΄ΠΎΡΡΠ°ΡΡΡΠ½ΠΎ Π΅ Π΄ΠΈΡΡΠ°Π½ΡΠΈΠΎΠ½Π½ΠΎ Π΄Π° ΠΈΠ·ΠΏΡΠ°ΡΠΈΡΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Π°ΡΠ° βRCPT TO β${run{...}}@relaydomain.comββ, ΠΊΡΠ΄Π΅ΡΠΎ relaydomain.com Π΅ Π΅Π΄ΠΈΠ½ ΠΎΡ Ρ ΠΎΡΡΠΎΠ²Π΅ΡΠ΅, ΠΈΠ·Π±ΡΠΎΠ΅Π½ΠΈ Π² relay_to_domains ΡΠ°Π·Π΄Π΅Π» Ρ Π½Π°ΡΡΡΠΎΠΉΠΊΠΈ. Π’ΡΠΉ ΠΊΠ°ΡΠΎ Exim Π½Π΅ ΠΏΠΎ ΠΏΠΎΠ΄ΡΠ°Π·Π±ΠΈΡΠ°Π½Π΅ ΠΏΡΠ΅ΠΌΠ°Ρ Π²Π° ΡΠ΅ΠΆΠΈΠΌΠ° Π½Π° ΠΏΡΠΈΠ²ΠΈΠ»Π΅Π³ΠΈΠΈ (deliver_drop_privilege = false), ΠΊΠΎΠΌΠ°Π½Π΄ΠΈΡΠ΅, ΠΏΡΠ΅Π΄Π°Π΄Π΅Π½ΠΈ ΡΡΠ΅Π· "${run{...}}" ΡΠ΅ Π±ΡΠ΄Π°Ρ ΠΈΠ·ΠΏΡΠ»Π½Π΅Π½ΠΈ ΠΊΠ°ΡΠΎ root.
Π’ΡΡΠ±Π²Π° Π΄Π° ΡΠ΅ ΠΎΡΠ±Π΅Π»Π΅ΠΆΠΈ, ΡΠ΅ ΡΡΠ·Π²ΠΈΠΌΠΎΡΡΡΠ° Π±Π΅ΡΠ΅
ΠΠΎΡΠ΅ΠΊΡΠΈΡ Π·Π° ΠΏΡΠ΅Π΄ΠΈΡΠ½ΠΈ Π²Π΅ΡΡΠΈΠΈ, ΠΊΠΎΠΈΡΠΎ ΠΏΡΠΎΠ΄ΡΠ»ΠΆΠ°Π²Π°Ρ Π΄Π° ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ Π² Π΄ΠΈΡΡΡΠΈΠ±ΡΡΠΈΠΈ, Π² ΠΌΠΎΠΌΠ΅Π½ΡΠ° Π΅ Π½Π°Π»ΠΈΡΠ½Π° ΡΠ°ΠΌΠΎ ΠΊΠ°ΡΠΎ
ΠΠ·ΡΠΎΡΠ½ΠΈΠΊ: opennet.ru