You cannot see this page without javascript.

Postfix 표준 설정 예제

Linux 조회 수 3426 추천 수 0 2014.11.25 14:20:46

Postfix 표준 설정 예제




이 문서의 목적

이 문서에서는 전형적인 Postfix 예제 몇가지를 설명하고있습니다. 여러분이 이 문서를 보기 이전에 Postfix 기본설정에 대해 설명하고 있는 C_CONFIGURATION_README 를 참고 하실것을 권해드립니다. 특히, 여러분중에서 메일 송신과 수신이 불가능한 Postfix 가 설치되어 있다면 더이상 이 문서를 참조하지 말것을 권고드립니다.

이 문서의 처음 부분은 특정 문제를 해결할수 있는 표준설정을 예시하여 드립니다.

이 문서의 두번째 부분은 특정 환경에 있는 호스트를 위한 추가적인 설정 에 대해서 설명하고 있습니다.

독립 서버에서 Postfix 설정

독립 서버에서 Postfix는 아무런 설정 변경없이 잘 동작 할것입니다. 그러나 최소한 http://www.postfix.org/ 이곳 에서 소스를 다운 받아 설치 하는 방법에 대해서는 알고 있어야 합니다.

여러분의 Postfix 메인 설정 화일인 main.cf 의 주요 룰이 궁금할때는 "postconf -n" 이라는 명령으로 알수있습니다. 그 밖에 몇가지 경로설정을 제외한 BASIC_CONFIGURATION_README 문서에서 설명하지 못한 독립서버에서 설정해야하는 몇몇 매개변수에 대해서 다루고 있습니다.:

/etc/postfix/main.cf:
    # 옵션: user@hostname 이 아닌 user@domainname 로 메일보내기 .
    #myorigin = $mydomain

    # 옵션: NAT/proxy 의 외부주소 지정.
    #proxy_interfaces = 1.2.3.4

    # 다른 호스트로부터 메일 릴레이 방지.
    mynetworks_style = host
    relay_domains =



또한 여러분의 서버가 정식 도메인이 없는 호스트의 경우에 해당 된다면 "
정식 도메인이 없는 호스트" 문서를 참고 하십시오.

null client 에서 Postfix 설정

null client 는 단지 메일을 보낼수만 있는 호스트입니다. 이 호스트는 네트웍을 통해서 결코 메일을 받지도 않은뿐만 아니라 로컬 사용자에게도 메일을 전달하지도 않습니다. 일반적으로 null client는 사용자의 메일박스 를 접근하기 위해 POP, IMAP,NFS 들을 사용합니다.

이번 예제에서는 인터넷 도메인을 "roun.net" 으로 가정하고 이 머신의 이름을 "nullclient.roun.net" 으로 할것입니다. 이 예제는 일반적으로 디폴트 셋팅에는 없는 몇개의 파라미터들만 보여준것입니다.

1 /etc/postfix/main.cf:
2     myorigin = $mydomain
3     relayhost = $mydomain
4     inet_interfaces = 127.0.0.1
5     local_transport = error:local delivery is disabled
6 
7 /etc/postfix/master.cf:
8     로컬 DA(Mail Delivery Agent) 항목 라인 주석 



해 석:

  • Line 2: 메일을 "user@nullclient.roun.net" 사용자가 아닌 "use@roun.net" 사용자로 보내게 되서 "user@nullclient.roun.net" 로 메일이 가는 상황은 결코 일어나지 않게됩니다.

  • Line 3: 모든 메일이 "roun.net" 도메인의 메일서버로 포워딩 됩니다. 이러한 설정은 메일서버가 꺼져 있어서 메일의 배달장소에 도착할수 없는때 null client 에 잔류 메일이 생기는 문제점을 방지합니다.

  • Line 4: 네트웍으로 부터 메일 수신거부.

  • Lines 5-8: 로컬 메일 전달자(LMD)를 사용하지 못하게 하여 모든 메일이 line 3 에 지정한 메일서버로 가게 된다.


로컬 네트웍에서 Postfix 설정

이번 장에서는 단일 메인서버와 다중서버가 있는 LAN 환경에서 메일의 수신과 송신에 대해서 설명 할 것입니다. 여기서도 위에서와 같이 도메인의 이름은 "roun.net" 으로 가정할것 입니다. 모든 시스템은 "user@roun.net" 주소 형식으로 메일을 보낼수 있고, 또한 모든 시스템은 "user@hostname.roun.net" 형식으로 온 메일을 수신 할수 있습니다. 메인서버 또한 "user@roun.net" 형태로온 메일을 수신 할수 있습니다. 여기서 이 서버를 "mailhost.roun.net" 으로 부르기로 합니다.

메일을 "user@roun.net" 주소형태로 보내는것에 대한 약점은 "root" 를 포함한 다른 시스템 계정의 메일도 중앙 메일서버로 보내진다는 것입니다. 이 부분에 대한 해결방법은 "일부 사용자에게만 메일 보내기" 를 참고 하십시오.

일반적으로 디폴트 셋팅에는 없는 몇몇 파라미터들 만 예제로 보여 드릴것입니다.

첫번째로 우리는 메일호스트 설정하는것이 더 복잡하기 때문에 메일호스트 가 없다고 간주하고 그에 대한 설정을 보여 드릴것입니다. 이 머신은 "user@roun.net" 주소를 사용해 최종 목적지인 "user@hostname.roun.net" 으로 메일을 보냅니다.

 1 /etc/postfix/main.cf:
 2     myorigin = $mydomain
 3     mynetworks = 127.0.0.0/8 10.0.0.0/24
 4     relay_domains =
 5     # 옵션: 외부로 나가는 메일을 메일호스트로 포워딩
 6     #relayhost = $mydomain



해 석:

  • Line 2: " user@roun.net" 사용자로 메일 보내기.

  • Line 3: 신뢰할수 있는 네트웍 주소 지정.

  • Line 4: 신뢰할수 없는 네트웍 주소로 부터 오는 메일의 릴레이거부.

  • Line 6: 이 설정은 방화벽이나 기타 이유로 인터넷에 직접 접속할수 없는 호스트에게는 필요합니다. 다음 문서를"방화벽 환경에서 Postfix 메일 설정" 참고 하십시오.

다음은 메일호스트가 설정되어 있을때를 예를 듭니다. 이 머신은 "user@roun.net" 의 계정으로 메일을 최종 메일 수신자 "user@hostname.roun.net" 뿐만 아니라 "user@roun.net" 으로도 보냅니다.

 1 DNS:
 2     roun.net    IN    MX  10 mailhost.roun.net.
 3 
 4 /etc/postfix/main.cf:
 5     myorigin = $mydomain
 6     mydestination = $myhostname localhost.$mydomain localhost $mydomain
 7     mynetworks = 127.0.0.0/8 10.0.0.0/24
 8     relay_domains =
 9     # 옵션: 외부로 나가는 메일을 방화벽으로 포워딩
10     #relayhost = [firewall.roun.net]



해 석:

  • Line 2: "roun.net" 의 도메인으로 보내는 메일은 "mailhost.roun.net." 로 보내집니다. 유의 할 사항은 도메인 이름 끝에 "." 을 붙인다는것 입니다.

  • Line 5: "user@roun.net" 계정으로 메일 보내기

  • Line 6: 이 호스트는 "roun.net" 도메인으로 오는 메일의 최종목적지 이며 또한 이 호스트의 이름이기도 합니다.

  • Line 7: 신뢰할수 있는 네트웍 주소 지정.

  • Line 8: 신뢰할수 없는 네트웍 주소로 부터 오는 메일의 릴레이거부.

  • Line 10: 이 설정은 메일호스트가 외부 네트웍으로 나가는 메일을 방화벽에 있는 메일서버를 통해서 메일을 포워딩 해야 할때만 필요합니다. []는 Postfix 가 MX 레코드를 검색하지 않도록 강제적으로 설정합니다.

이러한 환경에서 사용자들은 다음에 나오는 한가지 또는 그 이상의 방법으로 자신의 메일박스에 접근합니다.:

  • NFS 또는 같은 환경에서 Mailbox 접근.

  • POP 또는 IMAP을 통한 Mailbox 접근.

  • 사용중인 머신의 Mailbox.

가장 아래와 같은 케이스는 사용자의 머신으로 메일이 포워딩 될수 있게 메일호스트에 알리어스를 가지고 있습니다.:

/etc/aliases:
    joe:    joe@joes.preferred.machine
    jane:   jane@janes.preferred.machine



알리어스 데이타 베이스가 /etc/aliases 에 없는 일부 시스템들도 있습니다. 여러분의 시스템에 알리어스 데이타 베이스가 어디에 있는지는 "postconf alias_maps"찾아보십시오.

여러분의 알리어스 파일이 변경되었을때는 "newaliases" 라는 명령어를 실행 시키십시오.

방화벽 환경에서 Postfix 메일 설정

방화벽 환경에서 Postfix 메일 설정을 한다는것은 "anything.roun.net" 으로 오는 메일은 거부하고 "roun.net" 으로 오는 메일은 gateway안에 있는 서버로 메일을 포워딩하는것입니다. 바람직한 현상은 아니지만 "relay_domains = roun.net" 의 설정 에는 한가지 문제점이 있는데, 일반적으로 방화벽은 "anything.roun.net" 로 오는 메일도 받아들이 기때문입니다.

주 의: 이 예제는 Postfix 버전 2.0 이상에서 실행 되어야 합니다. 여러분이 설치한 Postfix 버전이 궁금하신분은 "postconf mail_version" 이라고 실행 시켜보십시오.

이 문제에 대한 해결방안은 여러 부분에 걸쳐 보여 드릴것입니다. 우선, 로컬 메일 전달자(LMD)를 제거 할것이며 이러한 설정은 방화벽을 더 견고히 해줄것입니다.

1 /etc/postfix/main.cf:
2     myorigin = roun.net
3     mydestination =
4     local_recipient_maps =
5     local_transport = error:local mail delivery is disabled
6 
7 /etc/postfix/master.cf:
8     로컬 DA(Mail Delivery Agent) 항목 라인 주석



해 석:

  • Line 2: 이 머신에서 "user@roun.net" 이란 주소를 이용해서 메일을 보내기 때문에 "user@firewall.roun.net" 으로 메일을 보내는것이 존재해야 할 근거가 없습니다.

  • Lines 3-8: 방화벽 머신에 있는 로컬 메일전달자를 작동중지 합니다.

기술적 정확성을 위해서 방화벽을 postmaster@[firewall ip address] 로 오는 메일은 반드시 받을수 있게 설정 해야 합니다. 전하는 바에 의하면 몇몇 측면에서는 실제로 이러한 기능의 존재가 당연시 되고 있습니다. 해결책의 두번째 부분은 사용자 지원을 위해 postmaster@[firewall ipaddress] 계정을 사용 가능함에 따라 추가적으로 buse@[firewall ip address] 라는 메일계정도 사용가능 하게 만듭니다. 이 두개의 계정으로 모든 메일은 실제 내부 메일계정으로 배달됩니다.

1 /etc/postfix/main.cf:
2     virtual_alias_maps = hash:/etc/postfix/virtual
3 
4 /etc/postfix/virtual:
5     postmaster      postmaster@roun.net
6     abuse           abuse@roun.net



해 석:

  • mydestination 이 공백(바로 전 예제 참조)이기 때문에 오직 $inet_interfaces와 매칭되는 주소나 $proxy_interfaces들이 로컬 주소로 간주됩니다. canonical(5)virtual(5) 에 따라 "localpart@[a.d.d.r]" 는 간단하게 "localpart"로 대치할수 있습니다. 이러한 설정은 특정 방화벽 IP 주소를 Postfix 설정화일에 넣지 않도록 해줍니다.

해결책의 마지막 부분은 방화벽 환경에서 메일 보내기의 진짜 목적인 이메일 포워딩입니다.

 1 /etc/postfix/main.cf:
 2     mynetworks = 127.0.0.0/8 12.34.56.0/24
 3     relay_domains = roun.net
 4     parent_domain_matches_subdomains = 
 5         debug_peer_list smtpd_access_maps
 6     smtpd_recipient_restrictions =
 7         permit_mynetworks reject_unauth_destination
 8  9     relay_recipient_maps = hash:/etc/postfix/relay_recipients
10     transport_maps = hash:/etc/postfix/transport
11 
12 /etc/postfix/relay_recipients:
13     user1@roun.net   x
14     user2@roun.net   x
15      . . .
16 
17 /etc/postfix/transport:
18     roun.net   smtp:[inside-gateway.roun.net]



해 석:

  • Lines 1-7: "user@anything.roun.net" 오는 메일을 제외한 로컬 시스템 $mynetworks 에서 오는 메일과 외부에서 "user@roun.net" 로 오는 메일은 받아 들입니다. 이러한 설정은 lines 4-5 에 나와 있습니다.

  • Lines 9, 12-14: "roun.net" 도메인에서 인터넷을 통한 메일을 받을수 있는의 올바른 주소들을 정의하고 있습니다. 이러한 설정들은 메일큐에 "메일을 배달할수 없음" 이라는 MAILER-DAEMON 메세지로 가득 차는 것을 방지해 줍니다. 여러분이 유효한 메일 수신자 리스트를 만들거나 다룰수 없다면 반드시 다음과 같이 "relay_recipient_maps = " ( 빈 공백) 으로 하거나 relay_recipients 테이블안에 "@roun.net x" 와 같이 와일드 카드를 지정해야 합니다.

  • Lines 10, 17-18: "roun.net" 로 오는 메일이 게이트웨이 안으로 들어가기위한 경로. []의 역할은 Postfix 가 MX 레코드를 검색하는것을 강제적으로 금지.

여러분의 시스템이 db가 아닌 dbm을 사용하면 hash 대신에 dbm 을 지정하십시오. Postfix 가 지원하는 lookup tables의 데이타베이스 포맷은 "postconf -m" 라는 명령을 통해서 알수 있습니다.

여러분의 relay_recipients table의 내용이 변경 되었을때마다 "postmap /etc/postfix/relay_recipients" 라는 명령을 실행 시켜주십시오.

여러분의 transport table 의 내용이 변경 되었을때마다 "postmap /etc/postfix/transport" 라는 명령을 실행 시켜주십시오.


일부 사용자에게만 메일 보내기


전체 사용자가 아닌 일부에 사용자에게 메일을 전달하는데 있어서 "user@hostname.roun.net" 주소가 아닌 "user@roun.net"주소를 사용함으로 생기는 단점은"root" 에게로 오는 메일 말고도 다른 시스템 계정으로 오는 메일도 중앙 메일서버로 보내 진다는 것입니다. 여러분은 이러한 계정들의 메일을 로컬에서 배달하기 위해 다음과 같은 virtual aliases 를 설정 할수 있습니다. :

1 /etc/postfix/main.cf:
2     virtual_alias_maps = hash:/etc/postfix/virtual
3 
4 /etc/postfix/virtual:
5     root     root@localhost
6     . . .


해 석:


방화벽 내에서 Postfix 운영
 

방화벽이 설치된 넷트웍에서 Postfix를 셋업하기 가장 쉬운 방법은 모든 메일을 게이트웨이 호스트로 보고 메일호스트에게 메일을 내부 및 외부로의 포워딩을 관리하게 하는것입니다. 이러한 예는 위의 로컬 네트웍에서 Postfix 설정 부분에서 보여주고 있습니다. 이 문제에 대한 좀더 세련된 접근 방법은 외부로 가는 메일만 게이트웨이로 보내고 내부로 가는 메일은 직접보내는 것입니다. 이런것들이 Wietse 가 작업에서 한일들입니다.

주 의: 이 예제는 Postfix 2.0 버전 이상에서 실행되어 합니다. 여러분의 Posftix 버전을 확인하시려면 다음과 같은 명령 "postconf mail_version" 를 실행 하십시오.

다음 예제에서는 추가적인 설정을 보여줍니다. 여러분은 다음 예제와 이문서 중간 초반부에 설명한 기본설정을 잘 조화롭게 구성하기를 권해드립니다.

	 1 /etc/postfix/main.cf:
	 2     transport_maps = hash:/etc/postfix/transport
	 3     relayhost =
	 4     # 항상켜지 있지않은 머신을 위한옵션
	 5     #fallback_relay = [gateway.roun.net]
	 6 
	 7 /etc/postfix/transport:
	 8     #  내부로 배달 Internal delivery.
	 9      roun.net      :
	10     .roun.net     :
	11     # 외부로 배달 External delivery.
	12     *                smtp:[gateway.roun.net]



해 석:

  • Lines 2, 7-12: 내부(인트라넷) 메일은 직접 전달하고 외부로 나가는 메일은 게이트웨이로 보내게 설정했습니다. 분명한 점은 이 예제는 특정 회사같은 조직체 에서 내부적으로 DNS 의 MX 레코드를 사용한다고 가정하고 있습니다. []는 Postfix 가 MX 레코드를 검색하지 못하도록 강제적으로 금지를 설정합니다.

  • Line 3: *중 요* : main.cf 안에 relayhost 를 지정하지 마십시오.

  • Line 5: 이러한 설정은 머신이 꺼져있을때 큐에 메일이 남아 있는것을 방지 합니다. Postfix 는 메일을 직접 전달하려 하고 배달 할수 없는 메일은 게이트웨이로 보냅니다.

여러분의 시스템이 db가 아닌 dbm을 사용하면 hash 대신에 dbm 을 지정하십시오. Postfix 가 지원하는 lookup tables의 데이타베이스 포맷은 "postconf -m" 라는 명령을 통해서 알수 있습니다.

여러분의 transport tables의 내용이 변경 되었을때마다 "postmap /etc/postfix/transport" 라는 명령을 실행 시켜주십시오.


다른 서버를 위한 Mail eXchanger[MX] 호스트로 설정

다음 예제에서는 추가적인 설정을 보여줍니다. 여러분은 다음 예제와 이문서 중간 초반부에 설명한 기본설정을 잘 조화롭게 구성하기를 권해드립니다.

여러분의 시스템이 원격 싸이트에 대해 SECONDARY MX 호스트라면 필요한 설정은 다음의 예제가 전부입니다. :

 1 DNS:
 2     the.backed-up.domain.tld        IN      MX 100 your.machine.tld.
 3 
 4 /etc/postfix/main.cf:
 5     relay_domains = . . . the.backed-up.domain.tld
 6     smtpd_recipient_restrictions = 
 7         permit_mynetworks reject_unauth_destination
 8 
 9     # NAT/proxy 의 외부 주소를 반드시 지정하십시오.
10     #proxy_interfaces = 1.2.3.4
11 
12     relay_recipient_maps = hash:/etc/postfix/relay_recipients
13 
14 /etc/postfix/relay_recipients:
15     user1@the.backed-up.domain.tld   x
16     user2@the.backed-up.domain.tld   x
	17      . . .



여러분의 시스템이 원격 싸이트에 대해 PRIMARY MX 호스트라면 위의 설정 예제에 추가적으로 다음 설정이 필요합니다.:

18 /etc/postfix/main.cf:
19     transport_maps = hash:/etc/postfix/transport
20 
21 /etc/postfix/transport:
22     the.backed-up.domain.tld       relay:[their.mail.host.tld]



*중요 알림* :

  • mydestination 에 the.backed-up.domain.tld 리스트를 만들지 마십시오.

  • virtual_alias_domains 에 the.backed-up.domain.tld. 리스트를 만들지 마십시오.

  • virtual_mailbox_domains 에 the.backed-up.domain.tld. 리스트를 만들지 마십시오.

  • Lines 1-7: 인터넷 상에서 "the.backed-up.domain.tld" 로 온 메일을 저 도메인의 primary MX 호스트로 포워딩 합니다.

  • Line 10: Postfix 가 NAT 릴레이를 통해 메일을 받거나 내부 IP와 외부 IP가 다르게 나타나는 프락시를 통해서 메일을 받는다면 이 설정은 필수입니다

  • Lines 12-16: "the.backed-up.domain.tld" 도메인에서 올바른 주소들을 지정 하고 있습니다. 이러한 설정들은 메일큐에 "메일을 배달할수 없음" 이라는 MAILER-DAEMON 메세지로 가득 차는 것을 방지할수 있습니다. 여러분이 올바른 메일 수신자 리스트를 만들수없거나 또는 관리할수 없다면 반드시 다음과 같이 "relay_recipient_maps =" 를 "공백" 으로 하거나 또는 반드시 relay_recipients table안에 "@roun.net x"와 같이 와일드 카드를 지정해야 합니다.

  • Line 22: []는 Postfix 가 MX 레코드를 검색하지 못하도록 강제적으로 금지를 설정합니다.

여러분의 시스템이 db가 아닌 dbm을 사용하면 hash 대신에 dbm 을 지정하십시오. Postfix 가 지원하는 lookup tables의 데이타베이스 포맷은 "postconf -m" 라는 명령을 통해서 알수 있습니다.

여러분의 transport 테이블의 내용이 변경 되었을때마다 "postmap /etc/postfix/transport" 라는 명령을 실행 시켜주십시오.


Dialup 머신에서 Postfix 설정


이번 섹션에서는 dialup(전화연결)과 같이 대부분의 시간에 인터넷과 연결되어 있지 않은 머신에 적용 됩니다. dialup(전화연결)연결에는 24x7 까지 나타납니다. 이 부분은 위에로컬 넷트웍에서 Postfix 설정 을 참고 하십시오.

다음 예제에서는 추가적인 설정을 보여줍니다. 여러분은 다음 예제와 이문서 중간 초반부에 설명한 기본설정을 잘 조화롭게 구성하기를 권해드립니다.

여러분이 호스트네임이 없다면 (동적 IP주소 사용자) "정식 도메인이 없는 호스트 " 문서를 참조 하시기 바랍니다.

  • 외부로 나가는 모든 메일을 여러분의 네트워크 공급자(ISP)로 메일경로를 지정 시켜주켜 주십시오.

    여러분의 머신이 대부분의 시간 동안 인터넷에 연결되어 있지 않다면 도달하기 곤란한 특정 인터넷 영역으로 Postfix 가 메일을 배달할 기회가 많지 않다는 것을 의미합니다. 이런 환경에서는 오히려 항상 인터넷과 연결되어 있는 머신에 메일을 전달해 주는것이 더 좋은 방법입니다. 아래 예제의 [] 는 Postfix 가 MX 레코드를 검색하지 못하도록 강제적으로 금지를 설정합니다.

    /etc/postfix/main.cf:
        relayhost = [smtprelay.someprovider.com]
    
  • SMTP의 자동메일 발송기능 정지 (on-demand dialup IP에만 해당됨).

    일반적으로 Postfix는 기회가 닿는대로 외부로 나가는 메일을 전달하려 합니다. 여러분이 on-demand dialup IP를 사용한다면 메일배달 버튼을 누르거나 Postfix 가 지연된 메일을 배달하려고 시도 할때마다 전화를 걸려고 할것입니다. 이렇게 전화거는 것을 방지하기 위해서는 SMTP의 자동 메일 발송 기능을 중지 시켜 주십시오.

    /etc/postfix/main.cf:
        defer_transports = smtp (Only for on-demand dialup IP hosts)
    
  • Disable SMTP client DNS lookups (dialup LAN only).

    /etc/postfix/main.cf:
        disable_dns_lookups = yes (on-demand dialup IP를 사용하는 호스트에게만 해당됨)
    
  • 인터넷 연결이 활성화 될때마다 메일큐를 비웁니다.

    다음과 같은 명령어를 여러분의 PPP 또는 SLIP dialup 스크립트에 넣어 주십시오. :

    /usr/sbin/sendmail -q (인터넷에 연결이 될때마다)
    

    sendmail 의 명령어의 정확한 위치는 시스템에 따라 다릅니다. 여러분의 컴퓨터에 sendmail 명령어의 정확한 위치를 알고자 한다면 다음과 같은 명령어를 이용하십시오. "postconf sendmail_path"

    메일 큐가 비워졌는지 알기 위해서는 다음과 같은 스크립을 이용 하십시오.:

    #!/bin/sh
    
    # 메일 배달 서비스 시작.
    /usr/sbin/sendmail -q
    
    # Allow deliveries to start.
    sleep 10
    
    # 모든 메세지의 배달을  한번에 될수 있을때까지 반복.
    while mailq | grep '^[^ ]**' >/dev/null
    do  
        sleep 10
    done
    

    여러분이 SMTP의 자동 메일 발송 기능을 껐다면 다이얼업 연결이 활성화 되어 있는 동안 새로운 메일이 메일큐에서 비워 질수 있도록 "sendmail -q"라는명령을 내리는 것이 좋습니다.


정식 도메인이 없는 호스트


이번 섹션은 인터넷 호스트네임을 가지고있지 않은 호스트들 위한 내용입니다. 일반적으로 이러한 시스템은 DHCP또는 다이얼업연결을 통한 동적IP 주소 를 부여 받습니다. Postfix 는 가상호스트네임을 사용하는 머신에서의 메일 송수신은 가능하게 해줄것입니다. 그러나 가상호스트네임을 이메일 주소로는 사용하지 못합니다 왜냐하면 그누구도 여러분의 메일주소로 답장을 할수 없기 때문입니다. 실제로 점점더 많은 싸이트들이 가상의 도메인으로 부터 오는 이메일을 거부해 왔습니다.

이문제에 대한 완벽한 해결 방법은 메일이 외부로 나갈때 로컬 가상 이메일주소를 올바른 인터넷 이메일주소로 맵핑(Senmail의 generics 테이블과 유사) 시켜주는것이 될것입니다. 멀지 않아 Postifx 에서도 이러한 기능을 구현 할 계획을 가지고 있습니다.

그런 동안에 Postfix 에서 해결책은 유효한 인터넷 주소를 사용할수 장소에 설치하는것과 Postfix에 유효한 인터넷 주소와 로컬 가상 인터넷주소를 맵핑 시켜주는 것입니다. 이러한 방법은 유효한 인터넷주소가 아닌 가상 인터넷주소로 메일을 보내 는것을 포함해서 인터넷 과 로컬 가상주소로 메일을 보낼수 있습니다.

다음 예제에서는 추가적인 설정을 보여줍니다. 여러분은 다음 예제와 이문서 중간 초반부에 설명한 기본설정을 잘 조화롭게 구성하기를 권해드립니다.

 1 /etc/postfix/main.cf:
 2     myhostname = hostname.localdomain
 3     mydomain = localdomain
 4 
 5     canonical_maps = hash:/etc/postfix/canonical
 6 
 7     virtual_alias_maps = hash:/etc/postfix/virtual
 8 
 9 /etc/postfix/canonical:
10     your-login-name    your-account@your-isp.com
11 
12 /etc/postfix/virtual:
13     your-account@your-isp.com       your-login-name



해 석:

  • Lines 2-3: 여러분의 가상의 호스트네임으로 바꿔주십시오. 인터넷상에서 이미 사용하고 있는 실제로 존재하는 조직체의 도메인 이름을 사용하지 마십시오. 어느 누구도 소유하고 있지 않다고 보장하는 도메인의 예제는 RFC 2606 문서를 참조 하십시오.

  • Lines 5, 9, 10: "your-login-name@hostname.localdomain" 주소를 "your-account@your-isp.com" 주소로 맵핑하는데 적용 됩니다. 이 부분은 필수 입니다.

  • Lines 7, 12, 13: ISP로 메일을 전달 하는대신에 "your-account@your-isp.com"라는 로컬주소 로 메일을 전달합니다.이 부분은 필수는 아니지만 편리합니다. 
















1. Version
OS : CentOS 6.2
postfix version : 2.6.6 
 

2. 설치

# yum install postfix                                             // CentOS 6.x 에선 기본 메일전송 에이전트로 설치되어 있음


3. 기본 설정



Postfix 메인 설정파일 : /etc/postfix/main.cf

1) 도메인 설정 

# postconf | grep ^my

mydestination = $myhostname, localhost.$mydomain, localhost
mydomain = localdomain
myhostname = localhost.localdomain
mynetworks = 127.0.0.0/8 xxx.xxx.xxx.xxx/24 [::1]/128 [fe80::%eth0]/64
mynetworks_style = subnet
myorigin = $myhostname

//mydestination : 로컬 전송되는 도메인
//myorigin : 해당 서버에서 발송시 메일에 나타나는 도메인 






# hostname postfix
# postconf | grep ^my

mydestination = $myhostname, localhost.$mydomain, localhost
mydomain = russianblue.kr
myhostname = postfix
mynetworks = 127.0.0.0/8 xxx.xxx.xxx.xxx/27 [::1]/128 [fe80::%eth0]/64
mynetworks_style = subnet
myorigin = $myhostname

 
# postconf -e mynetworks_style=host                        // postconf -e : 환경설정 파일 수정시 -e 옵션을 주고 수정
# postconf | grep ^my

mydestination = $myhostname, localhost.$mydomain, localhost
mydomain = russianblue.kr
myhostname = postfix
mynetworks = 127.0.0.1/32 x.x.x.x/32 [::1]/128 [fe80::200:f0ff:fe94:63e%eth0]/128
mynetworks_style = host
myorigin = $myhostname

 
2) 포트 외부오픈
# postconf -e inet_interfaces=all
# /etc/init.d/postfix restart 





 
3) 인증 설정
# postconf -a                                                           // 가능한 인증설정 확인
  cyrus
  dovecot 
 
# postconf | grep smtpd_sasl

smtpd_sasl_auth_enable = no
smtpd_sasl_authenticated_header = no
smtpd_sasl_exceptions_networks =
smtpd_sasl_local_domain = 
smtpd_sasl_path = smtpd
smtpd_sasl_security_options = noanonymous
smtpd_sasl_tls_security_options = $smtpd_sasl_security_options
smtpd_sasl_type = cyrus



# vi main.cf                                                         // 아래의 내용 추가

smtpd_sasl_auth_enable = yes

smtpd_sasl_security_options = noanonymous

broken_sasl_auth_clients = yes

smtpd_recipient_restrictions =

        permit_sasl_authenticated,

        permit_mynetworks,

        reject_unauth_destination


smtpd_sasl_local_domain = $myhostname


# cat /etc/sasl2/smtpd.conf

pwcheck_method: saslauthd
mech_list: plain login

 


# cat /etc/pam.d/smtp.postifx

#%PAM-1.0

auth       include      password-auth

account    include      password-auth

 
# cat /etc/pam.d/password-auth

#%PAM-1.0

# This file is auto-generated.

# User changes will be destroyed the next time authconfig is run.

auth        required      pam_env.so

auth        sufficient    pam_unix.so nullok try_first_pass

auth        requisite     pam_succeed_if.so uid >= 500 quiet

auth        required      pam_deny.so


account     required      pam_unix.so

account     sufficient    pam_localuser.so

account     sufficient    pam_succeed_if.so uid < 500 quiet

account     required      pam_permit.so


password    requisite     pam_cracklib.so try_first_pass retry=3 type=

password    sufficient    pam_unix.so sha512 shadow nullok try_first_pass use_authtok

password    required      pam_deny.so


session     optional      pam_keyinit.so revoke

session     required      pam_limits.so

session     [success=1 default=ignore] pam_succeed_if.so service in crond quiet use_uid

session     required      pam_unix.so


# yum install cyrus-sasl-plain
# saslauthd -v

# cat /etc/sysconfig/saslauthd

# Directory in which to place saslauthd's listening socket, pid file, and so

# on.  This directory must already exist.

SOCKETDIR=/var/run/saslauthd


# Mechanism to use when checking passwords.  Run "saslauthd -v" to get a list

# of which mechanism your installation was compiled with the ablity to use.

MECH=pam


# Options sent to the saslauthd. If the MECH is other than "pam" uncomment the next line.

# DAEMONOPTS=--user saslauth


# Additional flags to pass to saslauthd on the command line.  See saslauthd(8)

# for the list of accepted flags.

FLAGS=


# /etc/init.d/saslauthd start

4. test
# telnet localhost 25

# telnet locahost 25

Trying localhost...

Connected to localhost.

Escape character is '^]'.

220 mail.russianblue.kr ESMTP Postfix

helo localhost

250 mail.russianblue.kr

ehlo localhost

250-mail.russianblue.kr

250-PIPELINING

250-SIZE 10240000

250-VRFY

250-ETRN

250-AUTH PLAIN LOGIN

250-AUTH=PLAIN LOGIN

250-ENHANCEDSTATUSCODES

250-8BITMIME

250 DSN


// mydestination 도메인 수신 체크
mail from:test@russianblue.kr

250 2.1.0 Ok

rcpt to:123@gmail.com

250 2.1.5 Ok

data

354 End data with <CR><LF>.<CR><LF>

subject:test

lsdkjf

sdlkfj

lskjdf

.

250 2.0.0 Ok: queued as C4CB5204F0

quit

221 2.0.0 Bye

Connection closed by foreign host.


  


List of Articles
번호 제목 글쓴이 날짜sort 조회 수
369 APM mariadb download origin address LynX 2019-06-19 1989
368 APM What one can and should optimize LynX 2019-06-03 1415
367 CentOS mariadb install LynX 2019-05-31 1179
366 CentOS init mode change LynX 2019-05-30 1288
365 APM ext zip install LynX 2019-02-19 1612
364 APM ext ImageMagick install LynX 2019-02-19 511
363 3D Printer Pronterface(PrintRun) install file LynX 2018-09-13 753
362 CentOS Grub UUID change LynX 2018-08-08 867
361 Linux letsencrypt wildcard LynX 2018-07-26 798
360 Printer cura usb connection LynX 2018-07-06 666
359 CentOS cli 무선랜 LynX 2018-06-07 446
358 APM 윈도우에 APM 페키지 설치 file LynX 2018-05-04 586
357 APM MySQLTuner 설치 LynX 2018-04-27 544
356 CentOS CentOS7 커널 업데이트 LynX 2018-04-23 699
355 HTML Tag CSS 여러가지 모양 만들기 LynX 2018-02-08 771
354 Linux wkhtmltopdf wkhtmltoimage install LynX 2018-01-31 602
353 APM LZ4_LIBS Not Found (CentOS7, MariaDB 10.1.29) LynX 2018-01-03 485
352 APM mysql ./configure LynX 2017-12-15 804
351 APM PHP-7.2.0 LynX 2017-12-12 3157
350 Linux libiconv LynX 2017-12-08 558

XE Login