메일 서버 설정 · 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 * none

exim 및 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/dovecotpopper
exim4/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
``
Share: X/Twitter LinkedIn

새 게시물을 받은 편지함에서 받기

스팸은 없습니다. 언제든지 구독 해지 가능합니다.