Автор Тема: Qmail dot-qmail и получаване на ip на изпращача  (Прочетена 3799 пъти)

Naka

  • Напреднали
  • *****
  • Публикации: 3401
    • Профил
имам user 'test',
вътре в /home/test имам файл .qmail със съдържание:

| script.php

когато някой изпрати писмо до test@xxxx то се доставя през pipe на скрипта script.php

проблема е че искам вътре в 'script.php' да сложа проверки за ip-to на изпращача. но незнам как да да го получа.

т.е. искам само някои точно определени хостове да могът да пращат писма до test@xxxx

1.има ли някъв начин IP-to да се предаде през променлива на обкръжението до скрипта? такава променлива има $TCPREMOTEIP но тя се предава само от tcpserver до rblsmtpd и дотам.

или

2.как може да се настрои qmail така че само пределени хостове да могът да пращат писма до test@xxxx. а всички други си доставят писмата нормално навсякъде.



Активен

Perl - the only language that looks the same before and after encryption.

neter

  • Global Moderator
  • Напреднали
  • *****
  • Публикации: 3408
  • Distribution: Debian, SailfishOS, CentOS
  • Window Manager: LXDE, Lipstick
    • Профил
    • WWW
Qmail dot-qmail и получаване на ip на изпращача
« Отговор #1 -: Jun 05, 2008, 09:51 »
Qmail не пази променлива за тази цел. За целта, можеш да хванеш писмото при получаването му, да го изрежеш до числото след "Clear:RC:0(" (там седи IP-то на изпращача), да вмъкнеш получената стойност в една променлива и след това да правиш каквото искаш с тази променлива и файла с писмото, съобразно това каква е стойността на променливата '<img'>
Активен

"Да си добре приспособен към болно общество не е признак за добро здраве" - Джиду Кришнамурти

Naka

  • Напреднали
  • *****
  • Публикации: 3401
    • Профил
Qmail dot-qmail и получаване на ip на изпращача
« Отговор #2 -: Jun 05, 2008, 19:55 »
Цитат (neter @ Юни 05 2008,10:51)
Qmail не пази променлива за тази цел. За целта, можеш да хванеш писмото при получаването му, да го изрежеш до числото след "Clear:RC:0(" (там седи IP-то на изпращача), да вмъкнеш получената стойност в една променлива  '<img'>

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

q-maila се стартира така:
Примерен код

exec /usr/local/bin/tcpserver -v -R -l 0 -x /etc/tcp.smtp.cdb -c "$MAXSMTPD" -u "$QMAILDUID" -g "$NOFILESGID" 0 smtp \
    /usr/local/bin/rblsmtpd -t 120 \
             -r cbl.abuseat.org \
             -r bl.spamcop.net \
             -r psbl.surriel.com \
             -r list.dsbl.org \
             -r zen.spamhaus.org \
    /var/qmail/bin/qmail-smtpd xxxxxxx.net /bin/cmd5checkpw /bin/true 2>&1 | /var/qmail/bin/splogger rblsmtpd > /dev/null &


и единственото място където има и $TCPREMOTEIP и адресса на получателя е /var/qmail/bin/qmail-smtpd. а пък $TCPREMOTEIP не се предава по-нататък.
Незнам какво му трябва на qmail-a да ограничи само определени IP-та да могът да пращат мейл на точно определен юсер.
Активен

Perl - the only language that looks the same before and after encryption.

neter

  • Global Moderator
  • Напреднали
  • *****
  • Публикации: 3408
  • Distribution: Debian, SailfishOS, CentOS
  • Window Manager: LXDE, Lipstick
    • Профил
    • WWW
Qmail dot-qmail и получаване на ip на изпращача
« Отговор #3 -: Jun 05, 2008, 21:32 »
Уф, днес нещо не бях във форма и виж какви глупости съм те съветвал. Точно така, рискът от големи писма може да събори сървъра, а това (да речем друг начин) да прихващаш само част от хедъра вместо цялото писмо или друга обработка на писмото е бошлаф работа. Поздравления, че мислиш ':ok:' Интелигентно и красиво може да стане чрез tcp.smtp. Отвори го и въведи нужното в такъв формат
Примерен код
IP_НА_ИЗПРАЩАЧА:deny,RELAYCLIENT="ПОЛУЧАТЕЛ/И"

За получател/и се поддържа използването на nqkakyv@email.adres или @email.adres (за да обхванеш цял домейн). Ако все пак (поради някаква причина) искаш или ти се налага да използваш скрипт, който да върши тази работа, то използвай qmail променливата $SENDER, за да извлечеш email адресът на изпращача, от който адрес лесно можеш да отрежеш да остане само домейна, да го резолвнеш (ако ти е нужно IP) и да го използваш в скрипта. Това обаче, не е идеален метод, тъй като някои пощенски сървъри работят с две или повече обработващи машини и при този метод информацията за IP на изпращача може да не се окаже достоверна. Въпреки това спокойно можеш да работиш с домейна, който ще е достоверен. Имай предвид, че и при всички положения, които изложих тук, се използва IP-то на сървъра-изпращач. Ако искаш да извършваш някакви действия с IP-то на човека-изпращач (съдържа се в писмото, ако то е било изпратено от програма за изпращане на поща, а не web интерфейс), то ще трябва да ти мислим други варианти. Успех '<img'>
Активен

"Да си добре приспособен към болно общество не е признак за добро здраве" - Джиду Кришнамурти

Naka

  • Напреднали
  • *****
  • Публикации: 3401
    • Профил
Qmail dot-qmail и получаване на ip на изпращача
« Отговор #4 -: Jun 07, 2008, 23:21 »
Оправих се. След много мъки, четене и пачосване. '<img'>
Инсталирах този патч
http://qmail.jms1.net/patches/validrcptto.cdb.shtml

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

Ако някой прати писмо на несъществуващ усер или на скрипта, изпращача ще получи отказ че няма такъв юзер.
Обаче юзерите които имат smtp парола, могът да изпращат писма и на скрипта и на всички други емейли.

получава се нещо като вътрешен e-mail до който имат достъп само потребители с парола.

първоначалната идея за проследяване на Ip-to няма начин как да се реализира. няма начин нито ip, нито променлива на обкръщенито да се предаде до скрипта.


колкото дo IP_НА_ИЗПРАЩАЧА:allow,RELAYCLIENT="ПОЛУЧАТЕЛ/И"
и това не може да свърши работа защото разрешава само на някои да пращат писма до скрипта без ограничения, обаче няма как да се забрани на всички други да не пращат. ако пък им се забрани, те няма да могът да пращат нормални писма.

IP_НА_ИЗПРАЩАЧА:allow,RELAYCLIENT="ПОЛУЧАТЕЛ/И"
:deny

мерси за помощта и насоките.



Активен

Perl - the only language that looks the same before and after encryption.