Postfix 설정 · 5 min read · Sep 22, 2025
ISPConfig 3를 위한 Postfix 강화
ISPConfig 3를 위한 Postfix 강화
작성자: Jesús Córdoba
이메일: j.cordoba [at] gmx [dot] net
포럼 사용자: pititis
버전: 1.2
이 튜토리얼의 목표는 인증된 사용자가 신뢰되는 인터넷 메일 서버를 위해 ISPConfig에서 사용하는 메일 서버 Postfix를 강화하는 것입니다. 이 설정을 사용하면 메일 큐로 들어가기 전에 많은 스팸을 거부하여 시스템 리소스를 절약하고 메일 서버를 스팸 및 스팸 봇넷에 강하게 만들 수 있습니다. 시작하겠습니다.
역 DNS, (DNS PTR 레코드)
rdns를 설정하려면 두 가지 상황을 찾을 수 있습니다:
귀하의 ISP가 직접 변경할 수 있도록 허용합니다. 제어판을 확인해 보세요.
귀하의 ISP가 변경을 허용하지 않습니다. 요청을 담은 이메일을 보내세요.
rdns 레코드를 귀하의 서버로 요청하거나 지정하세요. 예:
server.example.com
다음 명령어로 rdns를 확인할 수 있습니다:
root@server / # host 149.20.4.69 69.64-27.4.20.149.in-addr.arpa 도메인 이름 포인터 pub2.kernel.org.변경 사항이 DNS에 전파되어야 합니다.
도메인을 위한 SPF (DNS TXT 레코드)
SPF는 이메일 스푸핑을 감지하여 이메일 스팸을 방지하기 위해 설계된 이메일 검증 시스템입니다. 이는 일반적인 취약점으로, 발신자 IP 주소를 확인하여 수행됩니다.
spf를 설정하려면 DNS 존에 TXT 레코드를 추가해야 하지만 먼저 여기에서 레코드를 생성할 수 있습니다: http://www.mailradar.com/spf/
spf 결과를 복사한 후 ISPConfig -> dns -> zones -> 도메인 이름 클릭 -> records 탭 클릭 -> TXT 클릭
호스트 이름 -> example.com. (끝에 점 포함!)
텍스트 -> 여기에서 spf 결과를 붙여넣기 (“ “ 없이).
예: v=spf1 a mx ptr ip4:11.222.333.444 -all …그리고 저장을 클릭하세요.
변경 사항이 DNS에 전파되어야 합니다.
Postfix main.cf
/etc/postfix/main.cf에 다음을 추가/변경합시다.
Helo 제한:
smtpd_helo_required = yes
smtpd_helo_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_non_fqdn_helo_hostname, reject_invalid_helo_hostnameHelo 제한 작동:
Jan 12 01:57:08 server postfix/smtpd[4687]: NOQUEUE: reject: RCPT from unknown[186.43.77.153]: 450 4.7.1 클라이언트 호스트 거부: 호스트 이름을 찾을 수 없습니다, [186.43.77.153]; from=
to= proto=ESMTP helo=<[186.43.77.153]>
Jan 8 00:32:22 server postfix/smtpd[17504]: NOQUEUE: reject: RCPT from 201-93-87-2.dial-up.telesp.net.br[201.93.87.2]: 504 5.5.2 : Helo 명령 거부: 완전한 호스트 이름 필요; from= to= proto=ESMTP helo= 엄격한 rfc:
strict_rfc821_envelopes = yes클라이언트 제한:
smtpd_client_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unknown_client_hostname, check_client_access mysql:/etc/postfix/mysql-virtual_client.cf수신자 제한:
smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination, check_recipient_access mysql:/etc/postfix/mysql-virtual_recipient.cf, reject_unknown_recipient_domain데이터 제한:
smtpd_data_restrictions = reject_unauth_pipeliningSmtpd 지연:
smtpd_delay_reject = yesPostfix를 다시 로드하는 것을 잊지 마세요:
/etc/init.d/postfix reloadPostfix를 위한 SPF 확인 (Debian 및 Ubuntu)
spf 패키지 설치:
apt-get install postfix-policyd-spf-python또는
apt-get install postfix-policyd-spf-perl다음 내용을 /etc/postfix/main.cf에 추가하세요:
policy-spf_time_limit = 3600s그리고 smtpd_recipient_restrictions의 끝에 check_policy_service unix:private/policy-spf를 추가하세요:
smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, check_recipient_access mysql:/etc/postfix/mysql-virtual_recipient.cf, reject_unauth_destination, reject_unknown_recipient_domain, check_policy_service unix:private/policy-spf이제 master.cf를 편집하고 python 버전의 경우 다음을 추가하세요:
policy-spf unix - n n - - spawn
user=nobody argv=/usr/bin/policyd-spf perl 버전의 경우:
policy-spf unix - n n - - spawn
user=nobody argv=/usr/sbin/postfix-policyd-spf-perl…postfix를 다시 로드하세요.
/etc/init.d/postfix reloadSPF 확인 작동:
Jan 4 15:50:11 server postfix/smtpd[19096]: NOQUEUE: reject: RCPT from g230068165.adsl.alicedsl.de[92.230.68.165]: 550 5.7.1 : 수신자 주소 거부: 메시지가 SPF 실패로 인해 거부되었습니다 - 권한이 없습니다. 자세한 내용은 http://www.openspf.org/Why?s=helo;id=paxxxxxn.com;ip=92.230.68.165;[email protected]; from= to= proto=ESMTP helo=
그레이리스트
그레이리스트는 이메일 사용자를 스팸으로부터 방어하는 방법입니다. 그레이리스트를 사용하는 메일 전송 에이전트(MTA)는 인식하지 못하는 발신자로부터의 이메일을 “일시적으로 거부“합니다. 메일이 합법적이라면 원래 서버는 지연 후 다시 시도하고, 충분한 시간이 경과하면 이메일이 수락됩니다.
postgrey 설치 (Debian, Ubuntu):
apt-get install postgrey구성 옵션은 /etc/default/postgrey에 있습니다 (기본 지연은 5분입니다).
main.cf를 편집하고 smtpd_recipient_restrictions의 끝에 check_policy_service inet:127.0.0.1:10023를 추가하세요:
smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, check_recipient_access mysql:/etc/postfix/mysql-virtual_recipient.cf, reject_unauth_destination, reject_unknown_recipient_domain, check_policy_service unix:private/policy-spf,check_policy_service inet:127.0.0.1:10023…postfix를 다시 로드하세요:
/etc/init.d/postfix reload그레이리스트 작동:
Jan 10 17:38:57 server postfix/smtpd[21302]: NOQUEUE: reject: RCPT from mailout-de.gmx.net[213.165.64.22]: 451 4.7.1 : 수신자 주소 거부: 그레이리스트가 적용되고 있습니다. 나중에 다시 오세요; from= to= proto=SMTP helo= DNSBL (DNS 기반 블랙리스트/차단 목록)
DNSBL은 인터넷 도메인 이름 서비스(DNS)를 통해 게시된 IP 주소 목록으로, DNS 서버 소프트웨어에서 사용할 수 있는 존 파일 또는 실시간으로 쿼리할 수 있는 라이브 DNS 존으로 사용됩니다. DNSBL은 스팸과 연결된 컴퓨터 또는 네트워크의 주소를 게시하는 데 가장 자주 사용됩니다. 대부분의 메일 서버 소프트웨어는 이러한 목록 중 하나 이상에 나열된 사이트에서 보낸 메시지를 거부하거나 플래그를 지정하도록 구성할 수 있습니다. 여기에는 스팸을 보내는 데 사용되는 좀비 컴퓨터 또는 기타 기계의 주소를 나열하거나, 스팸을 호스팅하는 데 기꺼이 참여하는 ISP의 주소를 나열하거나, 허니팟 시스템에 스팸을 보낸 주소를 나열하는 것이 포함될 수 있습니다. Postfix와 함께 dnsbl을 사용하려면 reject_rbl_client를 사용합니다. main.cf 파일에 쿼리를 위한 일부 라이브 DNS 존을 추가하세요.
내 예제에서는 매우 좋은 평판을 가진 두 목록을 사용할 것입니다 (smtpd_client_restrictions의 끝에 추가됨):
smtpd_client_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unknown_client_hostname, check_client_access mysql:/etc/postfix/mysql-virtual_client.cf, reject_rbl_client cbl.abuseat.org, reject_rbl_client b.barracudacentral.orgrbl 작동:
Jan 12 01:52:42 server postfix/smtpd[4616]: NOQUEUE: reject: RCPT from 89.pool85-49-26.dynamic.orange.es[85.49.26.89]: 554 5.7.1 서비스 사용 불가; 클라이언트 호스트 [85.49.26.89]가 cbl.abuseat.org를 사용하여 차단되었습니다; 차단됨 - http://cbl.abuseat.org/lookup.cgi?ip=85.49.26.89; from= to= proto=SMTP helo=
Jan 11 20:13:58 server postfix/smtpd[29591]: NOQUEUE: reject: RCPT from 93-87-122-56.dynamic.isp.telekom.rs[93.87.122.56]: 554 5.7.1 서비스 사용 불가; 클라이언트 호스트 [93.87.122.56]가 b.barracudacentral.org를 사용하여 차단되었습니다; http://www.barracudanetworks.com/reputation/?pr=1&ip=93.87.122.56; from=
to= proto=ESMTP helo= 포스트스크린
참고: 이 기능은 Postfix 2.8 이상에서 사용할 수 있습니다.
Postfix postscreen 데몬은 메일 서버 과부하에 대한 추가 보호를 제공합니다. 하나의 postscreen 프로세스는 여러 개의 수신 SMTP 연결을 처리하고, 어떤 클라이언트가 Postfix SMTP 서버 프로세스와 통신할 수 있는지를 결정합니다. 스팸 봇을 멀리함으로써 postscreen은 합법적인 클라이언트를 위해 더 많은 SMTP 서버 프로세스를 사용할 수 있게 하고, 서버 과부하 조건의 발생을 지연시킵니다.
postscreen의 주요 과제는 단일 측정을 기반으로 좀비인지 아닌지를 결정하는 것입니다. 이는 많은 좀비가 레이더 아래에서 비행하고 같은 사이트에 반복적으로 스팸을 보내는 것을 피하려고 하기 때문에 필요합니다. postscreen이 클라이언트가 좀비가 아니라고 결정하면, 합법적인 메일을 위해 추가 지연을 피하기 위해 클라이언트를 일시적으로 화이트리스트에 추가합니다.
이 튜토리얼에서는 기본 설정을 사용할 것이며, 예외가 있습니다. 이러한 설정은 대부분의 상황에 적합합니다.
먼저, 다음 명령어로 main.cf에 줄을 추가합니다:
postscreen_greet_action = enforce둘째, master.cf에 postscreen과 몇 가지 새로운 서비스를 추가합니다. 참고: 이러한 설정은 이미 존재할 수 있으므로 주석을 제거하세요. 또한 “smtp inet … smtpd” 줄이 주석 처리되어 있는지 확인하세요 (있는 경우, 매개변수는 새 smtpd 서비스로 이동해야 합니다).
# Postfix 마스터 프로세스 구성 파일. 파일 형식에 대한 자세한 내용은 master(5) 매뉴얼 페이지를 참조하세요 (명령: "man 5 master").
#
# 이 파일을 편집한 후 "postfix reload"를 실행하는 것을 잊지 마세요.
#
# ==========================================================================
# 서비스 유형 개인 비공식 chroot 깨우기 최대 프로세스 명령 + 인수
# (예) (예) (예) (결코) (100)
# ==========================================================================
#smtp inet n - - - - smtpd
# -o ...
smtpd pass - - n - - smtpd
-o ... # 매개변수는 smtp 서비스에서 새 smtpd 서비스로 이동했습니다.(있는 경우)
smtp inet n - n - 1 postscreen
tlsproxy unix - - n - 0 tlsproxy
dnsblog unix - - n - 0 dnsblog이제 postfix를 다시 로드합니다:
/etc/init.d/postfix reload새 게시물을 받은 편지함에서 받기
스팸은 없습니다. 언제든지 구독 해지 가능합니다.