내 SMTP 상황은 다음과 같습니다.
메일 흐름은 온라인 중계 공급자에 의해 태그가 지정됩니다(!!SPAM!!, !!BULK!! 등).
메일 흐름은 내부 접미사를 통해 수신됩니다. 전송은 제목이 태그된 경우 내부 Exchange로 중계하도록 구성됩니다. 나는 Header_checks를 사용하여 그렇게 합니다. 태그된 메일 흐름은 당사의 격리 서버(개별 사용자를 위한 webUI 등...)로 발송됩니다.
/^[sS]ubject:.*!!SPAM!!*/ FILTER smtp:192.168.11.250
/^[sS]ubject:.*!!BULK!!*/ FILTER smtp:192.168.11.250
/^[sS]ubject:.*!!SUSPECT!!*/ FILTER smtp:192.168.11.250
잘 작동합니다. 당사의 검역 서버는 사용자를 위해 신뢰할 수 있는 발신자 목록을 생성할 수 있습니다. 이 화이트리스트는 사용 가능하며 내 postfix로 다운로드할 수 있습니다.
내 질문은: 헤더 확인 전에 화이트리스트를 어떻게 적용할 수 있습니까?
If Subject contains *!!SPAM!!*
then
If from contains [email protected] AND if to contains [email protected]
Then redirect to internal exchange server
else redirect to quarantine server
endif
endif
어떻게 해야 할지 모르겠습니다. 힌트가 있나요?
답변1
@masegaloeh의 의견을 듣고 해결책을 찾았습니다. 아이디어는 일반 서버(화이트리스트에 있는 경우) 또는 격리 서버로 메일을 보내기 위해 정책 서버를 사용하여 10025를 수신하는 두 번째 postfix SMTP 서버를 보유하는 것입니다.
아이디어는 main.cf의 header_checks 솔루션에서 시작되었습니다.
header_checks = regexp:/etc/postfix/header_checks
header_checks에서:
/^(S|s)ubject: .*!!(SPAM|BULK|SUSPECT)!!.*/ FILTER smtp:127.0.0.1:10025
그런 다음 master.cf에서(@masegaloeh 주석으로 편집됨):
10025 inet n - n - - smtpd
-o receive_override_options=no_header_body_checks
-o smtpd_recipient_restrictions=${my_switcher_restrictions}
policy unix - n n - 0 spawn user=nobody argv=/etc/postfix/policy-server-switcher
이렇게 하면 postfix의 두 번째 인스턴스가 header_checks의 사용을 재정의하게 됩니다.
그리고 main.cf에서
my_switcher_restrictions = check_policy_service unix:private/policy
그리고 정책 서버 전환기의 내용
!/bin/bash
sender=""
recipient=""
while read line
do
key=$(echo $line | cut -f1 -d=)
value=$(echo $line|cut -f2 -d=)
if [ "$key" == "sender" ]
then
sender=${value}
logger -p mail.info -t PolicyServer "Sender is: ${value}"
fi
if [ "$key" == "recipient" ]
then
recipient=${value}
logger -p mail.info -t PolicyServer "Recipient is: ${value}"
fi
if [ "x${recipient}" != "x" ] && [ "x${sender}" != "x" ]
then
if [ "$sender" == "[email protected]" ] && [ "$recipient" == "[email protected]" ]
then
echo "action=FILTER smtp:192.168.1.150"
echo
exit 0
fi
if [ "$sender" == "[email protected]" ] && [ "$recipient" == "[email protected]" ]
then
echo "action=FILTER smtp:192.168.1.150"
echo
exit 0
fi
echo "action=FILTER smtp:192.168.1.151"
echo
exit 0
fi
done
물론 데이터베이스나 LDAP에서 화이트리스트를 로드하도록 정책 서버를 프로그래밍해야 합니다. 다음은 아이디어를 얻기 위한 예일 뿐입니다.
하지만 여기에는 여전히 몇 가지 주의 사항이 있습니다. 다음과 같이 메일을 보낸다고 가정해 보겠습니다.
에서:[이메일 보호됨]
에게:[이메일 보호됨]
에게:[이메일 보호됨]
정책 서버에 대한 마지막 테스트에서 FILTER를 정상으로 반환하는 한 이것은 alphamikevictor 및 thomas에 대한 일반 서버로 이동합니다. 그러나 alphamikevictor를 두 번째 위치에 배치하면 두 수신자 모두에게 메일을 격리하도록 보냅니다.