데비안에 MIMEDefang을 설치하는 방법은 무엇입니까?

데비안에 MIMEDefang을 설치하는 방법은 무엇입니까?

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의 설정 프로세스는 다음과 같습니다.

  1. MIMEDefang을 설치합니다:apt install mimedefang
  2. /etc/default/mimedefang컬렉션 에서 (필요한 경우 다른 포트 사용):SOCKET=inet:33333
  3. 다음에 추가 /etc/postfic/main.cf: smtpd_milters = inet:localhost:33333 milter_default_action = accept
  4. /etc/mimedefang-filter에 복사 /etc/mail/mimedefang-filter하고 필요에 따라 수정합니다(실행 가능하게 만들 필요 없음).
  5. 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모든 것이 제대로 실행되고 있는지 모니터링하세요 .

관련 정보