메일 서버 설정 · 3 min read · Oct 13, 2025
Debian Lenny에서 Exim4, Clamav, Dovecot, SpamAssassin 및 기타 여러 가지를 사용하여 메일 서버 설정하기
Debian에서 Exim4, Clamav, Dovecot, SpamAssassin 및 기타 여러 가지를 사용하여 메일 서버 설정하기
이 방법서는 확장 가능하고 안전하며 기능이 완전한 메일 플랫폼을 구축하는 한 가지 방법을 설명합니다. 메일dir 형식의 메일박스에 대한 가상 호스팅을 제공하며, 쿼터 및 서버 측 필터링, 도메인 별칭, 주소 별칭, 주소 전달, 캐치올 주소를 지원합니다. 릴레이는 STARTTLS 및 SMTP-AUTH로 보호됩니다. 수신 메일은 바이러스, 스팸을 검사하고 SPF 정책 및 DNSBL에 대해 확인됩니다.
확장성을 달성하기 위해 설정은 3개의 서버로 나뉘어집니다:
- 보안 기능이 대부분 위치하는 1개의 MX 서버 (faramir.middle.earth)
- 사용자가 외부 세계에 메일을 보낼 수 있도록 하는 1개의 SMTP 릴레이 (ectelion.middle.earth)
- 메일박스가 위치하는 1개의 Mailstore 서버 (denetor.middle.earth)
물론 DNS MX 레코드를 사용하여 도메인에 더 많은 MX를 추가할 수 있으며, DNS 라운드 로빈을 사용하여 더 많은 릴레이 서버를 추가할 수 있고, 이 방법서에 설명된 메커니즘을 사용하여 더 많은 메일 저장소를 추가할 수 있습니다. 반대로 MX와 릴레이 부분 또는 릴레이와 메일 저장소 부분을 쉽게 병합할 수 있습니다. MX와 메일 저장소를 병합하려면 약간의 수정이 필요합니다.
사전 참고
이 방법서에서는 작동하는 Debian 서버가 있다고 가정합니다. 또한 sudo가 시스템에 설치되어 있어야 하며, sudoer여야 합니다.
LDAP 구성
사용자 정보는 LDAP 디렉토리에 저장됩니다. 여기에서는 릴레이 서버에 설치합니다.
먼저 필요한 패키지를 설치합시다:
sudo apt-get install slapd ldap-utils튜토리얼에서는 다음 LDAP 매개변수를 사용할 것입니다:
ldapBase: dc=middle,dc=earth
adminDn: cn=admin,dc=middle,dc=earth
adminPwd: thirdAge
또한 특정 LDAP 스키마를 사용할 것입니다. 대부분의 속성과 객체는 표준이지만 하나 또는 두 개는 예외입니다. 주의: 표준 속성이 많기 때문에 중복 정의되지 않도록 주의해야 합니다.
그럼 /etc/ldap/schema/mailMEO.schema에 스키마를 추가합시다:
attributetype ( 2.16.840.1.113730.3.1.13
NAME 'mailLocalAddress'
DESC '이 수신자의 RFC822 이메일 주소'
EQUALITY caseIgnoreIA5Match
SYNTAX 1.3.6.1.4.1.1466.115.121.1.26{256} )
attributetype ( 2.16.840.1.113730.3.1.16
NAME 'mailQuota'
DESC '메일박스의 최대 디스크 공간(킬로바이트)'
EQUALITY integerMatch
SYNTAX 1.3.6.1.4.1.1466.115.121.1.27 )
attributetype ( 2.16.840.1.113730.3.1.18
NAME 'mailHost'
DESC '이 수신자의 SMTP/MTA의 FQDN'
EQUALITY caseIgnoreIA5Match
SYNTAX 1.3.6.1.4.1.1466.115.121.1.26{256}
SINGLE-VALUE )
attributetype ( 2.16.840.1.113730.3.1.22
NAME 'mailCopyAddress'
DESC 'RFC822 이메일 그림자 복사 주소'
EQUALITY caseIgnoreIA5Match
SYNTAX 1.3.6.1.4.1.1466.115.121.1.26{256} )
attributetype ( 2.16.840.1.113730.3.1.47
NAME 'mailRoutingAddress'
DESC '이 수신자의 RFC822 라우팅 주소'
EQUALITY caseIgnoreIA5Match
SYNTAX 1.3.6.1.4.1.1466.115.121.1.26{256} )
attributetype ( 2.16.840.1.113730.3.1.49
NAME 'spamassassinUserPrefs'
DESC 'SpamAssassin 사용자 기본 설정'
EQUALITY caseIgnoreIA5Match
SYNTAX 1.3.6.1.4.1.1466.115.121.1.26{256} )
objectclass ( 2.16.840.1.113730.3.2.147
NAME 'inetLocalMailRecipient'
DESC '인터넷 로컬 메일 수신자'
SUP top AUXILIARY
MAY ( mailLocalAddress $ mailHost $ mailRoutingAddress $ mailCopyAddress $ mailQuota $ spamassassinUserPrefs ) )
objectclass ( 2.16.840.1.113730.3.2.148
NAME 'inetMailForwarder'
DESC '인터넷 메일 전달 주소'
SUP top AUXILIARY
MAY ( mailHost $ mailRoutingAddress ) )그런 다음 /etc/ldap/slapd.conf에 필요한 스키마를 추가했는지 확인합니다:
...
include /etc/ldap/schema/inetorgperson.schema
include /etc/ldap/schema/mailMEO.schema
...… 그리고 접미사를 확인합니다 (debconf는 slapd를 설치할 때 이미 구성했어야 합니다):
suffix "dc=middle,dc=earth"이제 LDAP에 바인드할 데몬이 필요로 하는 몇 가지 ACL을 추가합니다.
dovecot에 대한 userPassword 속성에 대한 읽기 전용 접근:
access to attrs=userPassword,shadowLastChange
by dn="cn=admin,dc=middle,dc=earth" write
by dn="uid=dovecot,dc=middle,dc=earth" read
by anonymous auth
by self write
by * noneexim 및 dovecot에 대한 다른 속성에 대한 읽기 전용 접근:
access to *
by dn="cn=admin,dc=middle,dc=earth" write
by dn="uid=dovecot,dc=middle,dc=earth" read
by dn="uid=exim,dc=middle,dc=earth" read
by * read
by anonymous none마지막 ACL은 익명 읽기를 비활성화하지만 모든 인증된 사용자에 대한 읽기(검색)를 활성화합니다. 이는 원하지 않을 수 있습니다.
이제 변경 사항을 적용하기 위해 slapd를 재시작할 수 있습니다:
sudo /etc/init.d/slapd restart이전 ACL의 사용자를 생성해야 합니다. 이를 위해 다음 user.ldif 파일을 사용할 것입니다:
dn: uid=exim,dc=middle,dc=earth
objectClass: account
objectClass: simpleSecurityObject
objectClass: top
uid: exim
userPassword:: e01ENX1hOElTeXAwV2hnVzFSVnhHd0hCNDF3PT0=
dn: uid=dovecot,dc=middle,dc=earth
objectClass: account
objectClass: simpleSecurityObject
objectClass: top
uid: dovecot
userPassword:: e01ENX1yZGp2Q1lPNmtDRm1scXAyVWQwa0xBPT0=사용자/비밀번호는:
dovecot/dovecotpopperexim4/eximmta 디렉토리에 입력하려면:
ldapadd -x -D cn=admin,dc=middle,dc=earth -W < users.ldif다음은 샘플 데이터를 포함하는 또 다른 ldif 파일입니다 (주의: 이 샘플에는 귀하의 설정에 맞지 않는 IP 주소가 포함되어 있으므로 수동으로 변경하십시오):
dn: ou=domains,dc=middle,dc=earth
objectClass: organizationalUnit
objectClass: top
ou: domains
dn: dc=middle.earth,ou=domains,dc=middle,dc=earth
dc: middle.earth
objectClass: dNSDomain
objectClass: top
objectClass: inetLocalMailRecipient
objectClass: domainRelatedObject
objectClass: posixAccount
mailLocalAddress: [email protected]
cn: catchall
gidNumber: 8
homeDirectory: /var/mail/middle.earth/c/catchall
uid: catchall
uidNumber: 8
userPassword:: e01ENX1EV3RteGErOFROanJKNUFXZWt1Z0tBPT0=
mailQuota: 102400
mailHost: denetor.middle.earth
associatedDomain: middle.earth
associatedDomain: lotr.middle.earth
dn: uid=sam,dc=middle.earth,ou=domains,dc=middle,dc=earth
cn: sam
displayName: Sam Gamji
gidNumber: 8
homeDirectory: /var/mail/middle.earth/s/sam
mail: [email protected]
mailHost: 172.16.16.23
mailQuota: 102400
objectClass: inetLocalMailRecipient
objectClass: inetOrgPerson
objectClass: posixAccount
objectClass: top
sn: Gamji
uidNumber: 8
uid: sam
userPassword:: e01ENX1NeVV5M1BxaHkvWWVLaVpyMXlOaExBPT0=
mailLocalAddress: [email protected]
mailLocalAddress: [email protected]
mailLocalAddress: [email protected]
dn: uid=frodo,dc=middle.earth,ou=domains,dc=middle,dc=earth
cn: frodo
displayName: Frodo Baggins
gidNumber: 8
givenName: Frodo
homeDirectory: /var/mail/middle.earth/f/frodo
mail: [email protected]
mailHost: 172.16.16.23
mailQuota: 102400
objectClass: inetLocalMailRecipient
objectClass: inetOrgPerson
objectClass: posixAccount
objectClass: top
sn: Baggins
uidNumber: 8
uid: frodo
userPassword:: e01ENX04UGlDRHVnWEdCMmNhRktnbDljTmpRPT0=
mailLocalAddress: [email protected]
mailLocalAddress: [email protected]
mailLocalAddress: [email protected]
dn: uid=gmail,dc=middle.earth,ou=domains,dc=middle,dc=earth
cn: gmail
mail: [email protected]
mailHost: 172.16.16.23
mailRoutingAddress: [email protected]
objectClass: inetMailForwarder
objectClass: inetOrgPerson
objectClass: top
sn: Gmail 주소에 대한 별칭
uid: gmail
``새 게시물을 받은 편지함에서 받기
스팸은 없습니다. 언제든지 구독 해지 가능합니다.