메일 서버 · 2 min read · Oct 23, 2025
Postfix를 위한 스팸 제어
Postfix를 위한 스팸 제어
스팸은 메일 서버를 운영하는 사람들에게 큰 문제입니다. 많은 경우, 스팸은 존재하지 않는 이메일 주소로 전송됩니다. 하지만, 배달되지 않더라도 여전히 서버에 도달합니다. 다른 경우에는 사용자의 받은 편지함이 비아그라, 매춘부, 무료 소프트웨어 및 기타 불쾌한 메시지로 넘쳐날 것입니다.
아래는 해결책입니다. 이는 제가 스팸을 최대한 차단하기 위해 노력한 결과물입니다. 지금까지 20,000개 이상의 이메일(스팸과 정상 이메일 포함)을 처리하여 97%의 성공률을 기록하고 있습니다.
지침을 따르세요. 불명확한 부분이 있으면 필요에 따라 업데이트/수정하겠습니다. 언제든지 질문해 주세요.
1) Postgrey, RRD, 로그 파서 및 그래프 도구 설치하기.
apt-get install postgrey rrdtool mailgraph pflogsummPostgrey는 기본적으로 메일박스로 가는 이메일에 대해 5분의 지연을 설정합니다. 이 시간이 너무 길다면, /etc/default/postgrey 파일을 편집하여 –delay=120을 추가하세요. 여기서 120은 초 단위입니다.
2) Postgrey 서버 재시작하기.
/etc/init.d/postgrey restart3) Postfix main.cf 편집하기.
우리는 Postgrey 설정을 포함하여 여러 가지를 추가할 것입니다.
# See /usr/share/postfix/main.cf.dist for a commented, more complete version
# Debian specific: Specifying a file name will cause the first
# line of that file to be used as the name. The Debian default
# is /etc/mailname.
#myorigin = /etc/mailname
smtpd_banner = $myhostname ESMTP $mail_name (Debian/GNU)
biff = no
# appending .domain is the MUA's job.
append_dot_mydomain = no
# Uncomment the next line to generate "delayed mail" warnings
#delay_warning_time = 4h
readme_directory = /usr/share/doc/postfix
# TLS parameters
smtpd_tls_cert_file = /etc/postfix/smtpd.cert
smtpd_tls_key_file = /etc/postfix/smtpd.key
smtpd_use_tls = yes
smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache
# See /usr/share/doc/postfix/TLS_README.gz in the postfix-doc package for
# information on enabling SSL in the smtp client.
myhostname = my.derekgordon.com
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
myorigin = /etc/mailname
mydestination = my.derekgordon.com, localhost, localhost.localdomain
relayhost =
mynetworks = 127.0.0.0/8 [::1]/128 66.118.142.78
mailbox_command = procmail -a "$EXTENSION"
mailbox_size_limit = 0
recipient_delimiter = +
inet_interfaces = all
html_directory = /usr/share/doc/postfix/html
virtual_alias_domains =
virtual_alias_maps = proxy:mysql:/etc/postfix/mysql-virtual_forwardings.cf, mysql:/etc/postfix/mysql-virtual_email2email.cf
virtual_mailbox_domains = proxy:mysql:/etc/postfix/mysql-virtual_domains.cf
virtual_mailbox_maps = proxy:mysql:/etc/postfix/mysql-virtual_mailboxes.cf
virtual_mailbox_base = /var/vmail
virtual_uid_maps = static:5000
virtual_gid_maps = static:5000
smtpd_sasl_auth_enable = yes
broken_sasl_auth_clients = yes
smtpd_sasl_authenticated_header = yes
smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, check_recipient_access mysql:/etc/postfix/mysql-virtual_recipient.cf, reject_unauth_destination, check_policy_service inet:127.0.0.1:60000, reject_rbl_client zen.spamhaus.org, reject_rbl_client smtp.dnsbl.sorbs.net, reject_rbl_client bl.spamcop.net, reject_rbl_client combined.rbl.msrbl.net, reject_rbl_client multihop.dsbl.org, check_recipient_access regexp:/etc/postfix/spamtrap, permit
smtpd_tls_security_level = may
transport_maps = proxy:mysql:/etc/postfix/mysql-virtual_transports.cf
relay_domains = mysql:/etc/postfix/mysql-virtual_relaydomains.cf
relay_recipient_maps = mysql:/etc/postfix/mysql-virtual_relayrecipientmaps.cf
virtual_create_maildirsize = yes
virtual_maildir_extended = yes
virtual_mailbox_limit_maps = proxy:mysql:/etc/postfix/mysql-virtual_mailbox_limit_maps.cf
virtual_mailbox_limit_override = yes
virtual_maildir_limit_message = "The user you are trying to reach is over quota."
virtual_overquota_bounce = yes
proxy_read_maps = $local_recipient_maps $mydestination $virtual_alias_maps $virtual_alias_domains $virtual_mailbox_maps $virtual_mailbox_domains $relay_recipient_maps $relay_domains $canonical_maps $sender_canonical_maps $recipient_canonical_maps $relocated_maps $transport_maps $mynetworks $virtual_mailbox_limit_maps
smtpd_sender_restrictions = check_sender_access mysql:/etc/postfix/mysql-virtual_sender.cf
smtpd_client_restrictions = check_client_access mysql:/etc/postfix/mysql-virtual_client.cf
maildrop_destination_concurrency_limit = 1
maildrop_destination_recipient_limit = 1
virtual_transport = maildrop
header_checks = regexp:/etc/postfix/header_checks
mime_header_checks = regexp:/etc/postfix/mime_header_checks
nested_header_checks = regexp:/etc/postfix/nested_header_checks
body_checks = regexp:/etc/postfix/body_checks
content_filter = amavis:[127.0.0.1]:10024
receive_override_options = no_address_mappings
message_size_limit = 0
disable_vrfy_command = yes
smtpd_helo_required = yes
smtpd_helo_restrictions = permit_mynetworks, reject_invalid_hostname, permitDebian Lenny 설치에서 찾은 일반적인 main.cf에서, 저는 BOLD 영역을 추가/수정했습니다.
4) /etc/postfix/ 디렉토리에 “spamtrap”이라는 이름의 파일 생성하기.
이 파일은 필터 역할을 합니다. 스팸이 이 주소와 귀하의 머신의 다른 주소로 이메일로 전송되면, 해당 이메일은 다른 메일박스로 도달하지 않도록 삭제됩니다.
spamtrap 파일은 다음과 같습니다:
/emailcontrol.*@derekgordon\.com/ DISCARD이것은 정규 표현식이므로 슬래시를 사용해야 합니다. 제 필터 이메일은 [email protected]이므로 적절히 수정하고 spamtrap 파일에 넣으세요!!!
부가적인 메모: ISPConfig를 사용하여 이 메일박스를 생성하지 마세요. 메일 서버에 존재할 이유가 전혀 없습니다. 이는 성가신 스팸을 잡기 위한 가짜 주소입니다.
5) SpamAssassin의 local.cf 파일을 열고 다음 내용을 추가하기.
이는 SA와 더 잘 작동하도록 설계된 추가 필터가 될 것입니다.
nano /etc/spamassassin/local.cf아래 내용을 맨 아래에 추가하세요:
urirhssub URIBL_BLACK multi.uribl.com. A 2
body URIBL_BLACK eval:check_uridnsbl('URIBL_BLACK')
describe URIBL_BLACK URIBL 블랙리스트에 나열된 URL 포함
tflags URIBL_BLACK net
score URIBL_BLACK 3.0새 게시물을 받은 편지함에서 받기
스팸은 없습니다. 언제든지 구독 해지 가능합니다.