exim을 사용하여 홈 네크워크에서
메일 설정하기

윤봉환 / eletuz@chollian.net

 

 

1. 들어가며 (Introduction)

    삼바, IP 매스커래이딩(Masquerading), 그리고 diald 을 이용한 Linux와 Win95 홈 네트워크(home network) 구성은 Linux Gazzete에서도 매우 여러 번 설명되어 왔지만, 여태껏 나는 오직 하나의 전화접속(dial-up) 전자 메일 계정(e-mail account)을 가진 작은 네트워크에서 메일 설정하는 방법을 찾지 못했다.  이 기사(article)에서 나는 이렇게 하는 방법을 설명하여 한다.

    이 시스템에서:

    ■ 네트워크 위의 사용자는 각자 다른 사람에게 지역적으로 메일을 보낼 수 있고,
        역시 지역적으로 회답할 수 있다.
    ■ 나가는 메일은 자신의 From: 주소를 가지고 있어 바깥 세상에서 회답할 수 있다.
    ■ e-mail 계정은 사용자들에 의해 공유되지만 각각 오로지 그/그녀 자신의 메일만 받는다.

    이것은 내 시스템에서 (Debian Linux 2.1이 운영중인) 아래 프로그램들을 이용하여 구현된다:

    ■ 메일 전송 에이전트 exim (Smail 3와 비슷한 Mail Transfer Agent(MTA)로 sendmail보다
       설정하기가 매우 쉽다.  최근 버전은 3.02이다. 
    http://www.exim.org)
    ■ ISP로부터 메일을 모으는 fetchmail.
    ■ Linux 쪽에서 사용하는 메일 클라이언트인 pine
        (하지만 mail을 포함한, 다른 클라이언트들도 매우 잘 사용될 수 있다.)
    ■ Windows 에서는 Micro$oft Internet Mail (하지만 다른 클라이언트들도 매우 잘 사용될
        수 있다.)
    ■ 메일을 Linux 시스템에서 Win95 머신으로 옮기는, POP3 서버 qpopper

    나는 두 머신에서 (1 Linux + 1 Win95) 이렇게 설정했지만, 아마도 조금 더 큰 네트워크에서도 역시 동작할 것이고, 작은 사무실에서라면 아마 충분할 것이다.  

    Note: 이 문서는 Debian 지향적이다.  만일 당신이 다른 배포본을 사용한다면, 적절하게 바꾼다.

 

2. 네트워크, 그리고 이름들 (The network and the names)

    이 기사에서 나는 아래와 같은 이름들을 가정한다. (이 것들은 당신 자신의 경우에 적절하도록 바꾼다)

    ■ 주인(owner) / 시스템 관리자는 Joe Bloggs라 불린다.
    ■ 리눅스 머신은 heaven 이라 불린다.
    ■ Win95 머신은 earth라 불린다.  이 머신은 거의 Emily Bloggs에 의해 사용된다.
    ■ heaven에서 Joe의 사용자 이름은 joe이다.
    ■ heaven에서 Emily의 사용자 이름은 emi이다.
    ■ earth에서 Emily의 사용자 이름은 역시 emi이다; heaven에서 그녀의 리눅스 패스워드와
        earth에서 그녀의 ‘Microsoft Networking 패스워드’는 같다.
    ■ Joe는 isp.com이라 불리는 ISP에서 다이얼 업 계정을(동적 IP 주소) 가진다.
        메일은 POP3를 사용하여 ISP로부터 수집될 수 있다.
    ■ ISP에서 Joe의 계정이름은 jbloggs다.
    ■ Joe의 e-mail 주소는(Emily에 의해서도 사용되는) joe.bloggs@isp.com다.
    ■ POP3 메일을 모으기 위한 Joe의 패스워드는 zaphod다.
    ■ ISP의 메일 서버는 (메일을 보내기 위한) smtp.isp.com다.
    ■ ISP의 POP3 서버는 (메일을 모으기 위한) pop3.isp.com다.

    heaven과 earth는 home이라 불리는 도메인에 속한다.  이런 도메인 이름을 예로 든 것은, 이 도메인 이름이 다만 홈 네트워크 안에서만 사용된다는 것을 의미한다; Joe는 그의 도메인 이름을 등록하지 않았고 이 것은 바깥 세상에서는 (outside world) 알지 못한다.  
    나는 지역 네트워크가 동작하고, diald를 사용하여 전화접속을 요청한다고 가정한다.  
    heaven에는 네임 서버(name server)가 없다.  /etc/resolv.conf 파일은 ISP에 의해 제공되는 네임 서버 두 개의 주소를 포함한다.  이들 동일한 주소들은 earth의 TCP/IP 구성에 속한다.

    heaven의 /etc/hosname 파일은

    heaven

    heaven의 /etc/hosts 파일은

    127.0.0.1 localhost
    192.168.1.1 heaven.home heaven
    192.168.1.2 earth.home earth

    earth에서 /etc/hosts와 같은 내용의 파일은 c:\windows\hosts다.

     

3. 메일 주소 (Mail addresses)

    메일 메시지들은 ‘To:’와 ‘From:’ 줄들에 주소 이상의 것을 가질 수 있다.  이를테면 :

    To: Emily Bloggs <joe.bloggs@isp.com>

    위 예제에서 ‘Emily Bloggs’는 ‘실제-이름 부분(real-name part)’이다.  이 것은 메시지를 작성하는 e-mail 프로그램 안에서 설정한다.  이 ‘실제-이름 부분’은 Emily의 메일을 그녀에게 배달하는데 사용할 수 있다.  

    Note: 만약 ‘실제-이름 부분’이 그 안에 점 들(dots)을 가진다면, 반드시 “ 문자로 인용되어야 한다. (“Joe C. Bloggs”).  man mailaddr를 참고한다.

     

4. exim 환경설정 (Configuring exim)

    Debian 시스템에서는 eximconfig를 실행하는 것으로 충분하다.  이 프로그램은 아래처럼 당신이 대답할 수 있는 몇 가지 질문들을 묻는다.

    ■ 당신의 시스템이 smarthost를 사용하는 인터넷 사이트인지.
    ■ ‘쓸 수 있는 메일 도메인’이 home인지.
    ■ home과 heaven.home외의 다른 이름: heaven:localhost
    ■ 어떤 비-지역(non-local) 도메인에 중계하고 싶지 않은지.
    ■ 지역 네트워크 192.168.1.0/16을 중계하려 하는지.
    ■ RBL (스팸 필터 데이터베이스): 당신은 좋아할 지도 모르지만, 나는 n을 답한다.
    ■ 나가는 메일을 다루는 smarthost가 smtp.isn.com인지.
    ■ 시스템 관리자 메일이 joe에게 갈 것인지 (root가 아닌!)

    MS Internet Mail에서 (또는 Win95에서 당신이 사용하는 다른 메일 클라이언트일지라도) heaven은 반드시 STMP 서버와 POP3 서버 모두에 등록되어 있어야 한다.  ‘pop3 계정’ 과 ‘pop3 패스워드’ 아래에서, 사용자 이름 emi와 그녀의 리눅스 패스워드를 넣는다.  적절한 곳에 이름, Emily Bloggs를 넣고, e-mail 주소로, emi@home을 넣는다.  e-mail 주소는 반드시 로컬 도메인이어야 하는 것에 주의한다!

    리눅스 쪽에서는, 특별히 설정할 것이 없다.  /etc/pine/conf 와 사용자의 ~/.pinerc는 ‘박스 밖(out of the box)’에서 사용되어질 수 있다.  메일 클라이언트(pine)는 호스트네임과 함께 /etc/passwd로부터 사용자 정보로 로컬 주소들을 구성한다.

    앞서 설정으로, 로컬 사용자들은 서로에게 메일을 보내고 그 회신을 유쾌하게 전송할 수 있다. 예를 들어, heaven의 pine으로, 사용자 joe가 사용자 emi에게 메일을 보낸다.  자동적으로, pine은 이 것을 이렇게 변경한다:

    To: Emily Bloggs <emi@heaven.home>

    메시지는 즉시 배달된다. (당신이 exim 모니터링 도구인 eximon을 사용한다면, 눈으로 확인할 만큼)  emi는(그녀는 아마 heaven에 로그인했을 것이다) 다음과 같은 메시지를 볼 것이다.

    From: Joe Bloggs <joe@home>
    home은 메시지들이 교환될 수 있는 곳 안에서는 로컬 도메인처럼 실제로 작동한다.  문제는 바깥 세상으로 메시지들을 보내는 것이다.  <joe@home>과 같은 From: 주소는, 바깥에서 존재하지 않는 도메인 home 안의 주소로 회신을 보낼 수 있는 이는 아무도 없기 때문에 좋지 않다.  

     

5. From: address 고정하기
   (Fixing the From: address)

    우리는 반드시 로컬 From: 주소를 유효한 e-mail 주소로 (ISP에서의 e-mail 계정) 바꾸어야 하지만, 오로지 나가는 메시지인 경우에만 해당된다.  exim에서, 우리는 ‘전송 필터’가 뜻하는 바에 따라 이렇게 할 수 있다.  나가는 메일은 이 필터를 통해 지나가고, From: 주소는 바뀌어진다.  로컬 메일은 영향을 받지 않을 것이다.
    만일 우리가 원하는 변경하기를 원하는 주소가 항상 < 와 > 기호 사이에 있는 것이 확실하다면, 아래 필터는 그 트릭을 수행할 것이다.  이 것은 보증되지는 않지만, 매우 범용적이다: pine, mutt, 그리고 mail, MS 인터넷 메일도 물론 그런 주소들을 모두 생성한다.

    #!/usr/bin/perl
    while (<STDIN>) {
     if (/^From: /) {
      s/<.*>/<’joe.bloggs@isp.com’>/;
      print “$_”; last;
      }
     print “$_”;
     }
    while (<STDIN>) { print “$_”; }

    당신의 메일들에서 e-mail 주소를 바꾸는 것을 잊지 말아야 한다!  이 프로그램을 outfilt라 이름 짓고, chmod +x outfilt 명령을 수행하여, /usr/bin 아래 넣는다.  이제 우리는 /etc/exim.conf에서 TRANSPORTS CONFIGURATION 섹션의 마지막 줄을 읽어 한 줄을 추가해야 한다:

    remote_smtp:
       driver = smtp
       headers_remove = “sender”
       transport_filter = “/usr/bin/outfilt”
    end

    실제로, 우리는 두 줄을 추가했다.  headers_remove 줄도 역시 새로운 것이다.  이 것은 메시지에 Sender: 헤더가 추가되는 것으로부터 exim을 막아준다. (실제로 당신이 pine을 사용한다면 이 설정을 사용해야 한다.)  Sender: 줄은 어떤 (나쁘게 설정된) 메일 목적지에서 문제의 원인이 될 수 있다.

    /etc/exim.conf에서 이들을 변경함으로써, 누군가 e-mail 메시지를 바깥 세상에 보낼 때엔 언제나 exim에 의해 바로바로 정확하게 배달된다.  Exim은 (diald를 통해) 바깥쪽 회선을 한번에 연다.  home 위치에서 이 것은 아마도 당신이 바라는 바일 것이다.  작은 사무실에서, 매우 많은 e-mail 교통량(traffic)으로 시달린다면, 전화요금을 절약하기 위해, 메시지들을 늦추고 시간이 확보되었을 때 묶어서 보내기를 원할 것이다.  이 것은 물론 가능하겠지만, 내 자신에게는 필요치 않은 일이고 연구해 본 적도 없다.  당신은 ‘Linux Mail-Queue mini-HOWTO’를 읽어볼 수도 있을 것이다.

     

6. 패치메일 환경설정
    (Fetchmail configuration)

    fetchmail 명령으로 diald는 회선을 열고, ISP로부터의 메일은 모아진다. (그리고 지역적 배달을 위해 exim을 지나간다.)  오직 .fetchmailrc 파일을 가진 사용자들만이 그들 자신에 의해, 그들의 홈 디렉터리에서 fetchmail을 실행할 수 있는 권한을 소유한다.  이 파일은 환경설정 도구인 fetchmailconfig를 사용함으로써 생성될 수 있다.  당신은 다음과 같은 어떤 것을 얻는다:

    # Configuration created Sun Mar 28 03:15:20 1999 by fetchmailconf
    set postmaster “postmaster”
    poll pop3.isp.com with proto POP3
           user “jbloggs” there with password “zaphod” is joe here options fetchall warnings 3600

    .fetchmailrc 파일들은 다양한 사용자에 속해있어 서로 복사하는 등 모든 것을 할 수 있지만, 소유권 설정은 사용자와 관계가 있다.  모든 사용자가 그저 보기만 하는 데 패스워드를 가지는 것은 좋지 않다.  더 좋은 방법들이 있을지도 모르지만, home 영역에서는 별 문제가 없다.
    중요한 점은 누구나 fetchmail을 실행할 수 있어, 메일은 반드시 같은 사용자 메일박스에 항상 배달된다는 것이다. (우리의 경우 joe의 메일박스)

 

7. exim의 배달제한 없애기
   (Removing exim’s delivery limit)

    Exim은 기본설정에 의해 한 번에 10개 이상의 메시지들을 배달하지 않는다.  나는 이 것이 정말 이치에 닿는 상황이라 확신하지만, 다이얼업 계정을 가지고 있는 것은 그들 가운데 하나가 아니다.  이 제한을 극복하기 위해서, 당신은 반드시 /etc/exim.conf 파일의 MAIN CONFIGURATION 섹션에서, 그 내용이 끝나기 전에 한 줄을 추가해야 한다.

    smtp_accept_queue_per_connection = 0

     

8. 개인 메일 배달하기
   (Delivering personal mail)

    fetchmail과 exim을 통해, 바깥으로부터 들어오는 모든 메일은 기본 설정 값에 의해 heaven에 있는 Joe의 메일박스로 (var/spool/mail/joe) 배달된다.  Joe의 홈 디렉터리에 그는 아래와 같은 문자열을 포함하는 .forward라 불리는 파일을 넣어둔다.

    # Exim filter
    if $header_to: contains Emily then deliver emi endif

    만약 메일이 To: 주소에서 ‘Emily’를 (‘진짜 이름 부분’에서) 포함한다면 (그리고 그녀의 친구들이 그녀에게 메일을 보낼 때 거의 모든 경우에 이렇게 될 것이다) Joe의 것이 아닌 heaven에 있는 그녀의 메일 계정으로 갈 것이다.  그녀는 POP3를 사용하는 그녀 자신의 머신으로 메일을 옮길 수 있다. (아래를 보라.)

     

9. qpopper로 메일 전송하기
   (Transferring mail with qpopper)

    earth를 위해 heaven이 POP3 서버와 같이 동작하도록 만들기 위해, qpopper가 설치될 수 있다.  나는 Debian 패키지 qpopper_2.3-4.deb를 설치했다.  설치는 자동적이다: 환경설정을 필요하지 않다.  Emily가 MS 인터넷 메일에서 ‘메시지들을 가져오고/보내기’를 강요한다면, 그녀의 heaven에 있는 그녀 메일박스의 내용이 earth로 옮겨질 수 있다 (그리고 그녀가 썼거나 배달된 로컬 또는 바깥의 모든 메일)

     

10. 메일 수동 관리하기
     (Manually checking the mail)

    고맙게도 earth의 Win95 ‘desktop’ 위 ‘shortcut’은, heaven에 telnet을 수행한다.  Emily는 heaven에 로그하고 직접 fetchmail을 실행할 수 있다.  그 것은 fetchmail이 동작할 때 그녀가 계획된 cron 일정을 기다리려고 하지 않는다는 것이다.  메일이 ISP로부터 전송된 후, 그녀가 ‘메시지들을 가져오고/보내기’를 강요한다면, heaven에 있는 그녀의 메일박스 내용이 earth 하나로 옮겨질 수 있다.
    -----------------------------------------------------
    Copyright ⓒ 1999, Jan W. Stumpel
    Published in Issue 42 of Linux Gazette, June 1999
    -----------------------------------------------------

     

덧붙임 (appendix)

    나는 나가는 메시지들에서 Mail Transport Agent는 (이 경우 exim이다) 고유의 From: 주소를 설정한다고 설명했다.  Mail User Agent가 말썽을 일으키지 않는다면 잘 동작한다.  유감스럽게도, pine 3.96은 (내가 사용하는) 이런 경우에 문제로부터 자유롭지 않다.

    만약 pine에서 메시지를 작성하고 배달을 뒤로 미룬다면 (메시지를 보내기 전에, 나중에 편집하기 위해 저장한다거나) pine은 나중에 메시지가 다시 시작될 때 Reply-To: 헤더를 추가할 것이다.  그래서, Joe Bloggs에 의해 보내진 연기/재시작된 메시지처럼 아래 헤더들과 함께 밖으로 보내질 것이다.
    From: Joe Bloggs <jbloggs@isp.com>
    Reply-To: Joe Bloggs <joe@home>

    이것은 첫 번째 지연된 메시지에만 발생할 것이고, 다음에 재시작되고 보내진다! 한 곳에서 작성되고 보내진 메시지들은 Reply-To: 주소는 없이 단지 From: 주소만을 가질 것이다. 문제는, 만약 수신인이 당신의 메시지에 회답한다면 Reply-To: 헤더는 From:보다 우선권을 가진다는 것이다.  그래서 답신은 진짜 isp.com 도메인 대신 home 도메인으로 갈 것이다.

    이 버그는 (pine 3.96 소스코드에서 고쳐지지 않은 버그로 알려진) pine의 몇 가지 새로운 버전에서는 고쳐졌다. (적어도 pine 4.10에서는)  그러나 pine 3.96은 여전히 이 문제를 가진다.  당신의 pine에 이 버그가 있다면, 쓰기, 미루기, 다시 시작하기, 그리고 다시 미루기를 테스트하여 점검한다.  그 다음 Reply-To: 헤더가 나타나는지 알아보기 위해 ~/mail/postponed-msgs 파일을 점검한다. (그리고나서 메시지를 없애버린다.)

    만약 당신에게 문제가 있다면, pine 외의 다른 MUA를 사용하는 것은 별개로하고, 가장 쉬운 해결방법은 나가는 메일에서 어떤 Reply-To: 헤더들을 지우도록 /etc/exim.conf 파일을 수정하는 것이다.  이 것은 한 줄을 변경하는 것으로 해낼 수 있다. (앞서 설명되었다.)
    headers_remove = “sender”

    를 아래처럼 수정한다.

    headers_remove = “sender:reply-to”

    이 것은 최소한의 임시적인 방법이다.  가장 좋은 방법은 pine 4.10 버전으로 업그레이드하는 것이다. (그러나 나 자신은 Debian package에서 pine 4.10을 얻을 수 있게 될 때까지 기다릴 것이다.)




▲ top

home으로...