Wie beschränken Sie ausgehende SMTP-E-mail gesendet von PHP
Haben wir shared hosting-Servern, die den Einsatz von PHP fastcgi (auf IIS) für mehrere clients (shared hosting). Regelmäßig clients verwenden die alten verwertbaren code, der bewirkt, dass Löcher in Ihre Anwendungen, die irgendwann von Hackern verwendet, um schädlichen code zu installieren. Die meisten der Zeit, dieser code wird verwendet zum versenden von spam über unsere Server.
Wir haben keine Kontrolle über unsere Kunden-code, so dass das patchen der Löcher ist ziemlich unmöglich.
Wir möchten jedoch zu blockieren, die Kunden spam senden, sobald Sie mehr senden, dann X E-Mail-Nachrichten, die in Y Zeit.
Setup ist fastcgi-basiert, so gibt es wenig Beziehung zwischen php und den webserver.
PHP sendet seine E-mail über SMTP auf localhost. Der mailserver erlaubt auch die Weitergabe von allen localhost-verbindungen (offensichtlich).
Eine Sache, geht mir durch den Kopf, ist das setzen einer environment-variable mit einem Bezeichner in der fastcgi-Umgebung und mit Hilfe von php-prepend-Datei option, um eine Kopfzeile auf alle Mails, die von der php-mailer. Danach könnten wir das E-mail-header zu identifizieren, die Spam-Täter.
Die oben genannte option immer noch nicht, kümmern sich um spam-Skripte mit regelmäßigen telnet (telnet localhost (HELO, MAIL FROM, etc... ) beim senden von E-Mail.
Meine Frage an Euch: ist die Idee, die ich erwähnt habe, die beste und vielleicht einzige Möglichkeit, um sich mit unserer Frage? Oder gibt es bessere Lösungen für diese situation? Und wenn ja, bitte erklären Sie, wie würde mit dem Thema beschäftigen.
- Nicht sicher, ob dies ist eine Frage der Programmierung erhalten Sie möglicherweise eine bessere Antwort auf serverfault.com
- Ich war im Zweifel auch. Einfach nicht sicher, ob die Lösung wäre, auf die PHP ' s end-der smtp-server, Ende oder beides.. Naja wahrscheinlich beides. Ich denke, man müsste wissen von beiden und ich erwarte mehr PHP-Entwickler über server wissen dann Umgekehrt. Wenn ich keine Antworten hier, aber, krank zu Fragen für einen Umzug auf serverfault.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie filter, die Sie auf MTA (message transfer agent). Zum Beispiel, erlauben nicht mehr als 50 E-Mails in 1 Stunde für jeden Benutzer in Exim ( http://www.exim.org ) config-Datei (/etc/exim/exim.conf):
Und egal wie Sie versuchen, Sie zu senden, per php-mail() oder eine andere Methode.
mail()
ist eine mail anlocalhost:25
ohne Authentifizierung. Wie man bestimmt, welche domain ist das senden der E-Mail? Siehe mein Erster Kommentar.Den meisten shared-hosts Sperrung der Nutzung von PHP ' s mail () - Funktion kann leicht ausgenutzt werden. Statt dessen haben Sie die Beratung mit sendmail oder ähnliche Skripte, die eine SMTP-Authentifizierung erforderlich, bevor Sie senden. Vorausgesetzt du bist nicht bereits, dies zu tun, einmal implementiert, sollten Sie in der Lage zu verfolgen die Anzahl der gesendeten E-Mails von einer bestimmten domain/E-Mail-Konto und legen Beschränkungen auf Sie.
Okay, stick mit mir auf diese ein. Ich habe nicht realisiert, aber es sieht gut aus.
Das Konzept hier ist, dass man
Müssen Sie installieren die PECL Erweiterung runkit
http://us.php.net/manual/en/runkit.installation.php
Änderungen
in php.ini
in /var/www/allclients_forcedfile.php
Als erwartet, es scheint, Stack-Überlauf ist nicht der richtige Ort für diese Frage. Die bereitgestellten Antworten nicht setzen einige klare Methode zur Identifizierung der FastCGI-Sitzungen' verbindungen zu den MTA-server (SMTP).
Gehe ich mit meinen anfänglichen Konzept, das hinzufügen einer id zu der php-Umgebung. Diese Bezeichner werden können, Lesen Sie in der PHP - voranstellen - Datei mit der
getenv()
Funktion. Diese Kennung kann dann Hinzugefügt werden, um E-mail-Header für ausgehende E-Mails.Außerdem habe ich aktiviert, die
E-mail.add_x_header
ini-Einstellung, die helfen, herauszufinden, welches script verursacht das spam ausgeführt.Lasse ich die Frage offen für die bounty Dauer, in der Hoffnung anderen Optionen wird magisch erscheinen 🙂