Debian Stretch에 MIMEDefang을 설치하려고 하는데 기본적으로 작동하지 않고 사용 가능한 가이드를 찾을 수 없습니다.
apt install mimedefang
다음을 추가한 후 /etc/postfix/main.cf
:
smtpd_milters = unix:/var/spool/MIMEDefang/mimedefang.sock
milter_default_action = accept
접미사를 다시 로드하고 service mimedefang status
다음과 같이 말하세요.긍정적인그리고달리기.
복사해서 /etc/mimedefang-filter
실행 /etc/mail/mimedefang-filter
가능하게 만들어보아도...
하지만 나는 여전히 이것을 얻습니다 /var/log/mail.log
.
postfix/smtpd[29832]: warning: connect to Milter service unix:/var/spool/MIMEDefang/mimedefang.sock: No such file or directory
그래도 파일은 /var/spool/MIMEDefang/mimedefang.sock
존재합니다.
sendmail
이전에 이미 설치되어 있습니다.
이걸 어떻게 설치하고 활성화하나요?
답변1
MIMEDefang 메일링 리스트의 Benoît Panizzon의 도움으로 저는 소켓 이 로컬 또는 원격 호스트의 지정된 TCP 포트에서 수신 대기하도록 리스너 inet
대신 소켓을 사용해야 한다는 사실을 발견했습니다. unix
따라서 Debian/Ubuntu에서 MIMEDefang의 설정 프로세스는 다음과 같습니다.
- MIMEDefang을 설치합니다:
apt install mimedefang
/etc/default/mimedefang
컬렉션 에서 (필요한 경우 다른 포트 사용):SOCKET=inet:33333
- 다음에 추가
/etc/postfic/main.cf
:smtpd_milters = inet:localhost:33333 milter_default_action = accept
/etc/mimedefang-filter
에 복사/etc/mail/mimedefang-filter
하고 필요에 따라 수정합니다(실행 가능하게 만들 필요 없음).- Postfix 및 MIMEDefang 서비스를 다시 로드합니다.
sudo systemctl reload postfix mimedefang
MIMEDefang은 변경될 때마다 다시 로드되어야 합니다 mimedefang-filter
.
그런데 이 데모를 통해 MIMEDefang을 잘 이해할 수 있습니다.https://www.mimedefang.org/static/mimedefang-lisa04.pdf
실행되는 실제 Perl 스크립트는 /usr/bin/mimedefang.pl
다음 내용 에 있습니다 mimedefang-filter
.
또한 필터링 논리를 작성할 수 있기를 원합니다.PHPPerl 대신 다음과 같은 해결책을 생각해 냈습니다. 예를 들어 이것을 끝에 추가하십시오. filter_begin
기능 mimedefang-filter
:
%passToPhp = ("Sender", $Sender, "Recipients", \@Recipients, "Subject", $Subject, "RelayAddr", $RelayAddr, "RelayHostname", $RelayHostname, "Helo", $Helo, "QueueID", $QueueID, "MessageID", $MessageID);
my $cmd = "/path/to/your/email-filter.php";
$cmd .= " " . encode_base64(encode_json(\%passToPhp), '');
my $phpOutput = `$cmd`;
md_syslog('info', "PHP filter output: $phpOutput"); #causes entry in /var/log/mail.log
if ($phpOutput eq "bounce") {
action_bounce("We dont want this particular message.");
} elsif ($phpOutput eq "discard") {
action_discard();
}
그런 다음 다음 코드를 사용하여 email-filter.php
시작하세요.
#!/usr/bin/php
<?php
// runs as user "defang". This file must have execute permissions.
// Get variables from mimedefang that we passed along, headers, raw message, and extra information from mimedefang
$arguments = ($argv[1] ? base64_decode($argv[1]) : null);
if ($arguments) $arguments = json_decode($arguments, true);
$headers = file_get_contents('HEADERS');
$raw_message = file_get_contents('INPUTMSG');
$commands = file_get_contents('COMMANDS');
// Get all the MIME parts into an array
$mimeparts = [];
chdir('./Work');
foreach (glob('*') as $mimepart_file) {
if (is_dir($file)) continue;
$mimeparts[$mimepart_file] = file_get_contents($mimepart_file);
}
// Do all your logic here...
if ($someLogic == 'spam') {
echo 'discard';
// echo 'bounce'; //use this line if you want to have a bounce message sent back to sender (but you probably don't want that for spam)
}
/var/log/mail.log
모든 것이 제대로 실행되고 있는지 모니터링하세요 .