Sendmail server 구축 홍종현 version 0.1 차례 1. 서문 2. 간단한 소개 및 메일 전달과정 3. 메일 설정파일 3.1 sendmail.cf 1>Cw 2>Fw 3>Dj 4>DM 3.2 aliases 3.3 /etc/mail 1>access 2>vitusertable 4. POP3(클라이언트들이 outlook으로 메일을 사용하도록 설정하기) 5. 기본적인 보안 6. 스팸으로 부터 방지 7. 그외 메일 관련 설정 및 팁 1. 서문 메일 서버를 구축하는 데 있어서 직관적이고 효과적인 문서가 많이 있지 않아 다음과 같은 문서를 작성하게 되었다. 물론 이 문서보다 더 낳은 문서가 존재할 것이라고 믿어 의심치 않으며, 더 효과적인 방법을 제시하는 Tip도 있으리라... 본의의 취지는 일단은 설정한 후, 자세히 공부하자는 주의임을 밝힌다. 이 문서는 리눅스 배포판(알짜 6.1)으로 주어지는 것을 바탕으로 만들 었으며. 따라서 설치에 대해서는 언급을 하지 않을 것이다. 또한 메일 관련 DNS설정도 다루지 않는다. 메일 관련 DNS는 틈틈히 작업 중인 "직관적인 DNS 설정"문서에서 다룰 것이다. 서문에서도 언급했지만 이 문서 보다 더 훌륭한 문서가 존재 할것이다. 다만 리눅스를 처음 리눅스를 접하는 사람에게 조금이나마 도움이 되었으면 한다. 만약 문서에 틀린 점이 있거나 고쳐야 할 점, 추가할 점이 있다면 언제든지 메일로 연락을 바란다. 앞으로 이문서를 계속해서 수정 보안을 거처, 메일을 설정하는데 도움이 되는 토탈 지침서로 만들고자 하는 것이 작은 바램이다. 2. 간단한 소개 SMTP (simple mail transfer protocol) : 메일을 보낼 때 사용되는 프로토콜. POP3 (post office protocol) : 우체국처럼 메일을 받을 때 사용되는 프로토콜. IMAP (internet mail protocol) : 메일을 받을 때 사용되는 프로토콜. 현재, imap보다 pop3가 많이 사용되고 있으며, imap을 통해 웹메일을 구현하고자 하는 사람은 공개된 소스가 많으니 구현해 보길 권한다. MUA (Mail user agent) : 메일을 보내기 위해 사용되는 프로그램. 예) outlook .... MTA (Mail transfer agent) : 메일을 전달받아 이를 외부로 전달해 주는 프로그램. (ex. sendmail) 간단한 메일 전달 과정 소개 A가 (MUA)를 사용해서 B에게 메일을 보내면 MTA(sendmail)가 SMTP를 이용하여 B가 사용하는 메일 서버에 전달 된다. 그러면 B는 POP3를 이용하여 메일서버에 존재하는 메일을 로컬로 가지고 가서 확인한다. 만약 A와 B가 같은 동일한(하나의) 메일 서버에서 서로 메일을 주고 받을 경우에는, 메일이 MTA로 전달 되는 것이 아니라 MDA (mail delivery agent)로 전달이 된다. 3. 메일 관련 설정 파일 (알짜 리눅스 6.1) Sendmail sendmail 데몬 실행 파일 /usr/sbin Sendmail.cf sendmail 주 설정 파일 /etc Sendmail.cw 서비스할 도메인의 이름 지정 /etc access sendmail 서버로 접근제한 /etc/mail aliases 사용자에 대한 alias 작성 /etc virtusertable 가상메일 서비스 /etc/mail relay-domains relay할 도메인 /etc/mail/relay-domains 3.1 Sendmail.cf 설정 파일 ###################### # local info # ######################### Cwlocalhost <== 로컬호스트에 관하여 메일을 처리하도록 지정. ###Cw <== w클래스는 값을 일일이 대입하라는 명령으로 만약 3개의 도메인으로 서버를 운영하고자 할때에는 다음과 같이 설정하면 된다. Cwlinux777.com Cwlinuxkingdom.co.kr Cwlinuxkingdom.net 만약 더욱더 많은 도메인을 관리한다면, 다음과 같은 방법을 추천한다. sendmail.cw에 해당 도메인을 한 줄씩, 적어 나간다면 보다 편리하게 관리 할수 있을 것이다. 이와 같은 방법은 sendmail.cf에 Fw/etc/sendmail.cw라는 줄을 사용함으로 가능하다.(확인 바람..) ###Fw <== F는 클래스로 정의한 파일을 읽어 들임. 참고로, 만약 메일을 보낼 경우, 자신의 도메인을 인식하지 못할 경우 #Dj$w.Foo.COM Djlinux777.com 로 해당 도메인을 적은 후, 대몬을 재실행 시킨후 다시 시도해 보길.... ( 물론, 주석처리 되어 있다면 제거를 해야 겠지요 ^^;) ##### 메일 발신지 바꾸기 DMkldp.org <== DM부분에 kldp.org를 적었다. 위와 같이 DMkldo.org로 변경했을 경우, 메일의 발신지가 바뀐다. ###바뀌는 경우는 MUA를 사용할 경우에만 적용된다. ###만약 사용자가 outlook을 사용한다면 원본메시지를 확인 하기 전까지는 알수 없다. ###만약 사용자의 ID가 master일 경우, 받는 사람의 입장에서는 master@kldp.org로 인식이 됨. 저 같은 경우에는 이 부분을 DMMicrosoft.com으로 바꾸어서 많이 장난 친 경험이 있습니다. 주의 깊게 살피지 않으면 속더라구요!! (장난 치치 마세요. ^^;) ######답장을 특정 도메인/메일 주소로 받기 위해서는 MUA 설정을 바꾸어 Reply-To: 헤더를 지정해 주어도 가능하다. 원래의 목적은 받는 도메인 부분을 변경시켜, 답장을 그곳 도메인으로 받고자 이용하는 것임. 3.2 aliases 소규모의 메일링 리스트를 운영하거나 할 때, 유용하게 사용될 수 있다. aliases 파일 <== 적용 도메인(linux777.com) cool : utralinux, linuxer, linus 만약 cool@linux777.com으로 메일을 수신하면, utralinux, linuxer, linus 로 동일한 메일이 전달됨. 활용) kiki : ecoa30@yahoo.co.kr 이면 어떻게 될까요? 답은 kiki@linux777.com으로 오면 ecoa30@yahoo.co.kr로 전달이 됨. cool은 시스템에 없는 계정으로 지정할 수 있다. 설정을 다했다면 newaliaes로 aliases.db를 생성.(그냥, newaliases를 해주면 됨.) 3.3 /etc/mail access 파일 레드햇 5.0부터 스팸 메일을 방지하기 위해 메일 relay가 허용 불가. (스팸머들로 부터 우리의 메일서버가 스펨메일서버로 사용되는 것을 막고자 하는 것임.) 따라서 access 파일을 편집함으로써 외부에서 오는 메일을 자신의 메일서버로 접근제한과 다른 메일서버로의 전송 제한, relay허용을 설정할 수 있음. #####모든 간격은 Tab key을 사용한다는 것을 잊지 말기 바란다.###### linuxkingdom.co.kr RELAY linuxkingdom.net RELAY linux777.com RELAY 위의 설정은 지정된 도메인에 있는 사용자에게 오는 메일과 그 도메인 내에 있는 사용자가 메일을 보낼수 있게 설정되어 있다. 근데. 어떤 경우에는 도메인을 인식하지 못하더라구요..??? 그때에는 IP로 설정하면 됩니다. 이렇게 설정한 후 makemap hash /etc/mail/access < /etc/mail/access로 DBM파일을 만든다. 센드메일을 재 시작 할 필요는 없다. vitusertable 파일을 이용한 가상 메일 서버스 만약 여러개의 도메인을 서비스 하던 중, 모두들 webmaster계정을 달라고 요구할 경우 어떻게 해결 할 것인가? 해답은 virtusertable에 있다. webmaster@linux777.com linux webmaster@linuxkingdom.co.kr kiki webmaster@linuxkingdom.net linuxer 위의 설정은 실제로는 webmaster라는 계정이 3개나 존재할 수 없다. 다만 이렇게 오는 메일을 실제 계정을 가지고 있는 사용자로 전달하는 역활을 한다. makemap hash /etc/mail/vitusertable < /etc/mail/vitusertable 이렇게 DBM파일을 만든다. 물론 샌드메일을 다시 시작 할 필요는 없다. 4. POP3 사용 대개의 경우, 클라이언트가 사용하는 MUA는 원도우 아웃룩이 다수를 차지할 것이다. 따라서 아웃룩으로 서버에 있는 메일을 가져가는 것을 구현해 보자. 먼저 POP3서비스가 가능하려면, 설치가 되어 있어야한다. telnet linux777.com 110 Trying 210.124.182.121... Connected to linux777.com. Escape character is '^]'. +OK POP3 linux777.com v7.59 server ready user ************* +OK User name accepted, password please pass *************** +OK Mailbox open, 0 messages quit 위와 같이 출력이 된다면 설치가 되어 있으며, 올바르게 실행이 된다고 볼수 있다. 만약 연결이 안되거나, 바로 접속이 종료될 경우에는 imap-package.rpm을 설치하기 바란다. 소스는 리눅스 설치 시디의 RPMS에 존재할 것이다. 그런 다음 /etc/inetd.conf 파일을 확인해서 주석이 되어 있으면 주석을 제거한다. pop-3 stream to nowait root /usr/sbin/tcpd ipop3d 물론 /etc/service 파일에 다음 행이 있는지 확인 해 본다. pop3 110/tcp pop-3 # POP version 3 만약 위와 같이 되어 있다면 편집할 필요가 없다. 그런후 inetd 데몬을 재시작 한다. (/etc/rc.d/init.d/inet restart) 다시 해당 호스트의 110번 포트로 접속해 보고 올바르게 접속이 된다면 설치가 완료되었다. 5. 기본적인 보안 #######/etc/hosts.allow의 내용################################### in.telnetd : 192.168.1.3,192.168.1.2,210.124.182.121,210.124.182.122 ipop3d : 192.168.1.3,192.168.1.2,210.,211. ##설명 : telnet과 pop3를 해당 IP 주소에서만 접근이 가능하도록 설정되어 있다.# ##물론, /etc/hosts.deny는 ALL : ALL로 지정해 두었다.################## ##210.,211. 이렇게 되어 있는 것은 pop3로 메일을 가져 갈수 있는 IP범위이다.## ##내부 IP가 보이는 것은 MASQ로 사용하기 때문이다.################### 6. 스팸 방지 스팸을 방지 하려면 /etc/sendmail.conf에서 relay와 관련된 부분의 주석처리를 하지 않는다. 개괄 : 만약 자신이 linux777.com, linuxkingdom.co.kr, linuxkingdom.net등 다양한 도메인을 메일 서버로 운영한다면 /etc/sendmail.cw에 서비스할 도메인을 적어 준다. 그런 다음, 메일을 걸러낼 /etc/mail/access 편집하여 거부할 메일주소 또는 도메인을 적어주고, relay를 허용할, 즉 메일을 보낼수 있는 도메인 또는 IP범위를 적어 준다면, 해당 클라이언트들이 메일을 보낼 수 있게 된다. 만약 /etc/mail/access에 거부할 도메인만 적어 주고, /etc/mail/relay-domains에는 relay를 허용할 도메인 또는 IP를 적어 준다면(클라이언트들이 메일을 보낼수 있도록), 보다 효과적으로 관리 할 수 있을 것이다. (relay-domains는 기본으로 존재 하지 않으므로 만들어 주어야 함.) access에는 다양한 옵션이 존재한다. #################################################################### #지정된 호스트나 사용자가 보낸 메일은 다른 설정 rule이 거부하는 경우에도 받는다. OK #지정된 호스트에 대해 SMTP 메일 중계 역활. #지정된 도메인에 있는 사용자가 메일을 받고, #그 도메인에 있는 사용자가 서버를 통해 메일을 보낼 수 있다. #지정된 도메인에서 오는 메일은 다른 설정 rule이 거부하는 경우에도 받는다. REALY #지정된 도메인과 관련된 모든 메일의 송수신을 거부한다. REJECT #메시지를 받기는 하지만 바로 폐기한다. 발신자는 알 수 없다. DISCARD #지정된 사용자와 도메인과 일치할 경우(부분적이라도) 메일 수신을 거부한다. 501 #발신자의 주소에 호스트명이 없는 경우 메일을 받지 않는다. 553 #지정된 도메인과 관련된 메일을 받지 않는다. 550 ####만약 구체적으로 알고 싶을 경우 sendmail 관련서적을 참조하길 바란다.#### 설정의 예) /etc/mail/access hacker.com REJECT linux777.com RELAY spam.com DISCARD hacker@bad.com 501 you can't use this mail server. #########설명############# hacker.com 에서 오는 모든 메일은 거부된다. linux777.com 으로 오는 메일은 올바르게 수신이 되거나 RELAY가 허용된다. sapm.com 에서 오는 메일은 소리없이 폐기 된다. hacker@bad.com 에서 오는 메일은 메시지와 함께 거부된다. ##설정이 유효하기 위해서는 makemap hash /etc/mail/access < /etc/mail/access ######################### 참고로 위에서 언급한 relay-domains를 사용한다면 관리에 효과적임. 7. 그외 .forward 만약 admin@linux777.com으로 오는 메일을 다른 곳에서 확인 하고 싶을 경우에는 어떻게 하는가 ? 사용자가 받고자 하는 메일 주소가 가령, master@linux777.com이라면 admin의 홈디렉토리에 .forward라는 파일을 만들고 한 줄에 메일 주소 하나씩 적는다. admin의 홈디렉토리내의 .forward의 내용은 master@linux777.com이 될 것이다.