Sun Java System Messaging Server 6.3 관리 설명서

18.7.4 SMTP 릴레이 차단에 RBL 검사를 포함한 DNS 조회 사용

Messaging Server에는 유효한 DNS 이름을 가진 주소에서 전송된 메일만 전달되도록 하는 여러 방법이 있습니다. 가장 간단한 방법은 tcp_local 채널에 mailfromdnsverify 채널 키워드를 지정하는 것입니다.

Messaging Server는 ORIG_MAIL_ACCESS에서 다음 규칙을 사용하여 유효한 DNS 이름을 가진 주소에서 전송된 메일만 전달되도록 하는 dns_verify 프로그램도 제공합니다.

ORIG_MAIL_ACCESS

  TCP|*|*|*|*|SMTP*|MAIL|*|*@*|*|*  \
$[msg-svr-base/lib/dns_verify.so,  \
dns_verify,$7|$$y|$$NInvalid$ host:$ $$7$ -$ %e]

위 예에서 줄 바꿈은 이러한 매핑 항목에서 구문적으로 매우 중요합니다. 다음 행으로 진행하려면 백슬래시 문자를 사용해야 합니다.

또한 dns_verify 이미지를 사용하여 받는 연결을 RBL(Realtime Blackhole List), MAPS(Mail Abuse Prevention System), DUL(Dial-up User List) 또는 ORBS(Open Relay Behavior-modification System) 목록 등에 대해 검사하여 UBE로부터 보호할 수 있습니다. 새 mailfromdnsverify 키워드와 마찬가지로 dns_verify 콜아웃을 수행하는 대신 “보다 간단한 구성” 방법으로 이러한 검사를 수행할 수도 있습니다. 보다 간단한 방법은 dispatcher.cnf 파일에 DNS_VERIFY_DOMAIN 옵션을 사용하는 것입니다. 예를 들어, [SERVICE=SMTP] 섹션에서 검사하려는 다양한 목록에 대한 옵션의 인스턴스를 설정합니다.


[SERVICE=SMTP]
PORT=25
! ...rest of normal options...
DNS_VERIFY_DOMAIN=sbl-xbl.spamhaus.org.
DNS_VERIFY_DOMAIN=list.dsbl.org.
...etc...

이 경우 메시지는 SMTP 수준에서 거부됩니다. 즉 메시지는 SMTP 대화 도중 거부되므로 MTA로 전송되지 않습니다. 이 방법의 단점은 내부 사용자가 보낸 메시지를 포함하여 모든 받는 SMTP 메시지를 검사한다는 것입니다. 따라서 효율성이 떨어지며 인터넷 연결이 중지되면 문제가 발생할 수 있습니다. 그 대안은 PORT_ACCESS 매핑 테이블 또는 ORIG_MAIL_ACCESS 매핑 테이블로부터 dns_verify를 호출하는 것입니다. PORT_ACCESS 매핑 테이블에는 로컬 내부 IP 주소나 메시지 전송자를 검사하지 않는 초기 항목과 다른 모든 사용자에 대해 원하는 검사를 수행하는 후기 항목을 지정할 수 있습니다. 또는 ORIG_MAIL_ACCESS 매핑 테이블에서 tcp_local 채널로 받는 메시지에만 검사를 적용하려는 경우에는 내부 시스템/클라이언트로부터 받는 메시지에 대해 해당 검사를 건너뛸 수 있습니다. dns_verify를 가리키는 항목을 사용하는 예는 다음과 같습니다.

PORT_ACCESS

! Allow internal connections in unconditionally
  *|*|*|*|* $C$|INTERNAL_IP;$3|$Y$E
! Check other connections against RBL list
  TCP|*|25|*|* \
$C$[msg-svr-base/lib/dns_verify.so,\
dns_verify_domain_port,$1,sbl-xbl.spamhaus.org.]EXTERNAL$E
ORIG_MAIL_ACCESS 

  TCP|*|25|*|*|SMTP*|*|tcp_local|*@*|*|*  \
$C$[msg-svr-base/lib/dns_verify.so,\
dns_verify_domain,$1,sbl-xbl.spamhaus.org.]$E

18.7.4.1 DNS 기반 데이터베이스 지원

dns_verify 프로그램은 원치 않는 대량 전자 메일을 보낼 수 있는 받는 SMTP 연결을 확인하는 데 사용되는 DNS 기반 데이터베이스를 지원합니다. 공개적으로 사용 가능한 DNS 데이터베이스 중 일부는 일반적으로 이러한 용도로 사용되는 TXT 레코드를 포함하지 않을 수 있습니다. 대신 A 레코드만 포함합니다.

일반 설정에서 특정 IP 주소에 대한 DNS의 TXT 레코드에는 메시지를 거부할 때 SMTP 클라이언트로 반환하기에 적합한 오류 메시지가 포함되어 있습니다. 하지만 TXT 레코드가 없고 A 레코드가 있는 경우 Messaging Server 5.2 이전의 dns_verify 버전에서는 "No error text available"이라는 메시지를 반환했습니다.

이제 dns_verify에서는 사용 가능한 TXT 레코드가 없는 경우에 사용되는 기본 텍스트를 지정하는 옵션을 제공합니다. 예를 들어, 다음 PORT_ACCESS 매핑 테이블에서는 이 옵션을 사용하는 방법을 보여 줍니다.

PORT_ACCESS 

   *|*|*|*|* $C$|INTERNAL_IP;$3|$Y$E  \
   TCP|*|25|*|*   \
$C$[<msg-svr-base/lib/dns_verify.so \
,dns_verify_domain_port,$1,dnsblock.siroe.com,Your$ host$ ($1)$ \
found$ on$ dnsblock$ list]$E 
    * $YEXTERNAL

이 예에서 원격 시스템이 dnsblock.siroe.com 도메인의 쿼리에 있지만 TXT 레코드를 사용할 수 없는 경우에는 “Your host a.b.c.d found on dnsblock list.