IT/OracleLinux-1Z0460

메일 서비스

알콩달콩아빠 2022. 5. 19. 19:18
728x90
반응형

안녕하세요

 

뚱보 프로그래머 입니다.

 

 

메일 관련 내용을 적어봅니다.

 

Mail Service

1. 전자 메일 개요

인터넷 초기부터 가장 많이 사용된 서비스는 전자메일이다. 전자메일은 인터넷이 연결된 곳이면 어느 곳이라도 빠르게(보통 몇 초만에), 그리고 무료로 메일을 주고 받는다. 또 주소가 바뀌어도 포워드 기능을 이용하면 메일을 받는데 지장이 없다. 뿐만 아니라 음악파일, 사진 등 바이너리 파일도 함께 보낼 수 있으므로 MIME 타입을 이용해서 멀티미디어 정보를 보낼 수 있다.

최근에는 사용자의 컴퓨팅 환경과 전송망의 발달, 기타 다양한 멀티미디어 기술의 발달로 인해 기존의 E-mail이 갖는 특징 외에 상대방에게 전화 메시지를 남기는가 하면, 사용자 본인의 E-mail 내용이 FAX로 상대방에게 전송되기도 한다. 뿐 만 아니라 회사에서는 업무에 있어 아주 중요한 도구로 자리매김을 하고 있다. 여기서는 전자우편의 대명사인 sendmail 의 설치와 설정, 그리고 메일 클라이언트의 설정에 대해 알아본다.

 

1) 메일 서비스의 개요

메일 서버(mail server)란 인터넷을 통해 E-mail을 주고 받는 기능을 수행하는 컴퓨터 혹은 이런 기능을 가진 소프트웨어를 말한다. E-mail은 크게 메일 클라이언트와 메일 서버로 나누어지며, 메일 클라이언트에서 제작된 내용은 단순한 텍스트이거나 바이너리 파일이 될 수 있다.

 

2) 참조 site

http://www.sendmail.org

 

3) 메일 프로토콜 소개

SMTP (simple mail transfer protocol) : 메일을 보낼 때 사용되는 프로토콜.

POP3 (post office protocol)                : 우체국처럼 메일을 받을 때 사용되는 프로토콜.

IMAP (internet mail protocol)              : 메일을 받을 때 사용되는 프로토콜.

MUA (Mail user agent)                        : 메일을 보내기 위해 사용되는 프로그램.

) Outlook ....

MTA (Mail transfer agent)      : 메일을 전달받아 이를 외부로 전달해 주는 프로그램.

) sendmail

 

4) mail 프로그램 전달 과정 

1] MUA

클라이언트에서 메일이 작성될 때는 MUA라고 하며, 메일 서버의 25번 포트에 접속한다. MS 계열에서는 Netscape Messenger, MS Outlook(Express), Eudora등이 있고, Linux에서는 PINE(Program for Internet News and Email), ELM(interactive mail system), MUTT 등이 있다. , 일반 사용자들이 사용하는 메일 프로그램을 의미한다.

 

2] MTA

MUA를 통해 메세지의 작성 작업이 끝나게 되면 메시지는 SMTP를 통해 MTA에게 전송되고, MTA는 메일을 전송하게 된다. 메일 서버의 25번 포트에서 MTA가 대기하고 있다가 MUA가 보내고자 하는 메일을 받는다. 대표적인 프로그램으로는 sendmail, qmail, Netscape Messaging Server(상용) 등이 있다.

 

3] MDA

메일을 MTA로부터 받아서 메일박스 등에 저장하거나 원하는 필터링을 할 수 있는 프로그램이다.

기본적으로 사용하는 MDA 프로그램은 /bin/mail이며, 한글 처리를 위해 procmail을 이용하는 서버도 많이 있다.

 

5) 메일 프로토콜 이용

메일 클라이언트는 MUA를 이용해서 메일을 작성하고 나면, 이 메일은 SMTP를 통해 메일 클라이언트가 소속된 메일 서버로 전송된다. 메일 서버는 메일 큐(/var/spool/mqueue)에 임시로 메일을 저장한 후,

메일의 주소를 살핀다. 동일한 도메인 내에 속한 사용자에게로 메일을 보내는 경우에는 MDA를 호출하여 시스템의 로컬 메일 박스(/var/mail)에 다른 메일 클라이언트의 ID로 메일을 저장하고, 다른 도메인에 속한 사용자에게 전송하는 메일인 경우에는 해당 메일 사용자가 속한 다른 메일 서버로 메일을 전송한다. 다른 메일 클라이언트는 자신에게 메일이 도착했는지 확인하기 위해 MUA를 가동한다. 그럼 MUA POP3 IMAP을 이용해서 사용자 인증을 거친 후 자신이 속한 메일 서버에 도착한 메일이 있는지 확인한다. 메일 서버는 POP3를 통해 접근하는 사용자를 위해 POP3 서버를 가지고 있어야 한다.

 

6) 관련 자료

RFC822 (메일의 헤더와 본문을 구분하는 방법, 메일주소 표현방법에 관해)

RFC821 (센드메일이 TCP/IP을 통해 다른 호스트에 메일을 전달할 때 사용하는 SMTP에 관해)

RFC1123 (RFC821, 822의 확장)

RFC819 (도메인 네임설정에 관해)

 

2. 메일 프로토콜

1) SMTP(Simple Mail Transfer Protocol)

SMTP 프로토콜은 /etc/services 파일 내에 정의되어 있으며, TCP/IP 기반에서 동작하며 25번 포트를 사용한다. 메일 서버가 다른 도메인에 속한 사용자에게 전달되는 메일을 받은 경우에는 자기에게 가장 가까이 존재하는 다른 메일 서버에게 메일 메시지를 전달하게 된다. 메일 메시지를 전달하게 되면 자신이 가지고 있던 메일 메시지는 삭제하게 된다. 이 과정을 store and forward라고 한다.

SMTP는 헤더(header)에 두가지 기본적인 데이터를 가지고 있는데, 하나는 목적지 호스트의 주소이며,다른 하나는 목적지 메일 박스의 이름(최종 목적지 메일 서버에 등록된 사용자 계정명이며 SMTP 헤더에 포함되어야 할 기본적인 두 가지 데이터 중 일부라도 완벽하지 않으면 메일을 제대로 전송할 수 없다. 보통 보내는 서버와 받는 서버가 바로 direct로 연결되어 있지 않을 때 중간에서 메일을 전송해줄 필요가 있는데 이 역할을 하는 메일 서버를 Relay 메일 서버라고 한다. 메일 서버가 Relay 기능을 제대로 설정하지 못하면 스팸메일을 보내는 서버로 동작하게 될 수 있고, 온갖 비난을 받을 수 있으므로 주의해야 한다. 한가지 주의할 점은 메일은 HTTP를 이용하는 웹 서비스나 FTP 서비스와는 달리 Relay 호스트나 큐가 존재하기 때문에 Relay하는 경우에는 메일 큐에 임시로 저장하였다가 보내기도 하는데 이 때문에 메일이 지연되기도 한다.

 

2)  POP3 (Post Office Protocol version 3)

POP3 /etc/services 파일을 보면 TCP UDP 기반위에서 110번 포트를 사용하고 있고, POP2(Post Office Protocol version 2) 109번 포트를 사용하고 있다. SMTP를 이용하는 MTA가 사용자에게 메일을 전달하기에는 너무나 많은 컴퓨팅 파워가 필요하고, 사용자가 메일을 받기 위해 항상 메일 서버에 연결하고 있는 것은 아니기 때문에 별도의 서버 프로그램이 필요하다. 이 과정을 담당하는 것이 POP 이다. 즉 사용자(MUA)로부터 메일 데이타를 받아서 SMTP에게 전달하거나 반대로 SMTP로부터 전달된 메시지를 사용자에게 전송하는 역할을 하는 것이다. 이때 POP3 데몬이 사용자 인증을 거쳐서 메일을 클라이언트에게 보내주는 기능을 수행하게 된다. 클라이언트는 이 데몬을 이용하여 메일을 직접 받아서 읽는다. 클라이언트측 프로그램인 아웃룩이나 넷스케이프 메신저을 이용하여 메일 서버에 접속하고 인증이 되면 메일을 보내준다. 이때 메일 서버에 메일을 남겨 두는가의 차이가 POP  IMAP 이 다른 점이다.

IMAP도 메일 서버에 설치하는 데몬이다. 메일 서버에는 메일이 항상 존재하며 클라이언트는 메일 헤더만 보고 읽은 메일인지 아닌지를 구분하게 된다. 이 방식의 장점은 집이나 회사 등 어느 곳에서도 같은 메일을 읽을 수 있기 때문에 읽는 위치가 자주 변하는 사용자에게 편리하다는 점이다.

반면 POP3는 메일을 읽는 곳이 한군데인 경우에 유리하며 구현이 쉽다

 

3) IMAP(Internet Message Access Protocol)

IMAP은 이름이 의미하듯이 인터넷 메시지를 접근할 수 있는 기능을 제공하는 프로토콜이다.

다음은 POP과 비교한 IMAP의 장점이다.

(1) 메시지 상태 표시 플래그(flag) 조작 가능

(2) 둘 이상의 메일 박스 유지 관리

(3) 공유된 메일 박스의 접근과 업데이트 동시 처리

(4) 뉴스 폴더에 연결 가능

위의 장점이 의미하는 것은 IMAP POP의 단점을 보완하기 위해 만들어졌음을 가리킨다. 물론 POP3와 같이 원격 메일 서버로부터 메일 데이터를 읽어오는 데 사용되기도 한다. 하지만 가장 큰 차이점이라고 하면, 메일 메시지를 서버에 저장시켜둔 채로 각각의 메시지를 조작할 수 있다는 점이다. , IMAP 클라이언트가 메일 서버에게 메일 메시지를 요청할 때, 메일의 헤더 부분만을 요청하여 자신에게 필요한 메시지인 경우에는 전체 내용을 포함하는 메시지를 받고, 그렇지 않은 경우에는 서버에 있는 상태에서 메일을 삭제할 수 있다. 이런 기능은 네트워크의 속도가 느리거나 첨부된 파일의 크기가 큰 경우에 효과적이며, 특히 메일 바이러스가 확산되는 요즘에 더욱 유용하다. IMAP은 메일 서버에 메시지를 그대록 둔채 메일 개봉 여부를 알 수 있으며, 이는 다른 컴퓨터에서 다른 메일 클라이언트를 이용할 때 유용하다.

 

1] POP IMAP의 공통점

메일을 클라이언트에게 보내는 서버 데몬이다.

다양한 운영체제에서 운용이 가능하며 오프라인을 지원한다.

메일을 중계하는 기능은 없다

 

2] POP IMAP의 다른점

팝은 메일을 가져오면 서버에 남아 있지 않지만 아이맵은 서버에 남겨놓는다.

팝은 구현이 비교적 쉽고 클라이언트 프로그램이 많아서 사용자가 많다. 오프라인으로 동작한다.

아이맵은 한번 읽었어도 다시 접속하여 읽을 수 있고 온라인, 오프라인 모두 지원한다

 

3) MIME ( Multipurpose Internet Mail Extensions)

MIME는 인터넷 메일의 확장 규격으로 멀티미디어 파일을 주고 받을 수 있는 환경을 제공하기 위한 규약이다. 7비트/ascii 문자만을 위한 인터넷 메일 표준 규약의 문제점을 해결하여 8비트 문자와 다양한 바이너리 파일을 전자메일을 통해 올바르게 처리하려면 이 규약을 잘 지켜야 한다.

MIME RFC 822의 확장 표준으로 multipart/multimedia 메시지를 정의하는 표준화된 방식을 제공하고 있으며, 현재는 RFC 822와 완벽한 호환을 이루고 있는 실정이다. MIME에서 제공하고 있는 content-type “text”, “image”, “audio”, “video”, “message”, “multipart”, “application” 등 모두 7가지로, 각각의 content-type의 하부 타입이 존재한다. MIME에서 규정하고 있는 전송 데이터 타입은 아래와 같다.

1] text

특정 문자셋(Charset)으로 구성된 텍스트 정보나, 포스트 스크립트 같은 formatted text 정보 전송에 사용되며 Plaintext(단순한 텍스트 파일 혹은 HTML 파일) richtext(RTM 파일)의 하부 타입을 가진다.

 

2] multipart

다양한 타입으로 구성된 메일 메시지(여러 "body")를 하나의 메시지로 조합하여 전송할 경우에 사용하며, “mixed”, “alternative”, “parallel”, “digest” 등의 하부 타입을 가진다.

 

3] application

application 데이터나 binary 데이터를 전송할 때 사용하는 것으로, Postscript나 응용 프로그램 간에 공유되는 데이터 등을 전송할 때 이용된다.

 

4] message

메일 메시지 전체를 캡슐화(encapsulation)할 경우에 사용하며, 하부 타입으로는 “partial”(메시지의 크기가 커 여러 조각으로 나누어 전송할 때 사용) “external-body”(메시지의 본체부를 전송할 경우에 사용)을 가진다.

 

5] image

정지 image 데이터의 전송을 위한 것으로, gif, jpeg 등을 하부 타입으로 가진다.

 

6] audio

audio 데이터의 전송을 위한 것으로, 8000HZ의 모노 채널 데이터를 의미하는 basic이라는 하부 타입을 가지며, 앞으로 고품질을 위해 추가될 예정이다.

 

7] video

video 데이터의 전송(audio를 부분으로 가질 수 있다)을 위한 것으로, ISO MPEG 표준을 따르는 “mpeg”이라는 하부 타입을 가진다.

 

MIME에서 제공하는Content-Type은 전송 데이터의 형식과 세부형식을 표시한다. 위에서 열거한 일곱 가지가 형식이 가능하며, 각 형식은 나름의 세부형식을 가지게 된다.

video  ‘mpeg’ image  ‘gif’, ‘jpeg’를 하부타입으로 가질 수 있다.

 

3. 센드메일 설정

센드메일의 설치, 설정이 좀 까다로운 이유는 우선 컴퓨터들을 연결한 네트웍이 TCP/IP, UUCP 등의 다양한 방법으로 연결되어 있기 때문이다. 이런 네트웍을 통과해 메일이 전달되려면 그만큼 융통성과 유동성이 필요한다. .  TCP/IP, UUCP 등을 모두 수용할 수 있어야 다양한 네트웍을 통과해 메일을 전달할 수 있다. 이를 위해 실행화일인 sendmail은 다양한 유닉스에서 컴파일되어 설치하고 네트웍정보, 메일 주소등은 설정 파일을 통해 조절할 수 있도록 되어 있다. 따라서 설정 파일은 자신의 네트웍 이 얼마나 복잡한가에 따라 그 정도가 다르다. 둘째는 MDA에게 일을 처리하기 위한 정보를 넘겨주어야 하기 때문이다. 센드메일이 받은 메일은 MDA에게 넘겨져 수신자에게 전달되기 위해 수신자, 헤더, 등의 정보가 함께 넘겨진다.

 

1) 센드메일의 구성 부분

센드메일은 크게 센드메일 프로그램인 sendmail과 설정 파일인 sendmail.cf로 구분할 수 있고 설정 파일은 크게 주설정 파일(sendmail.cf), 큐화일(Queue file) 앨리어스 파일(Aliases file)로 되어 있다.

주요 관련 파일

/usr/sbin/sendmail                        센드메일 프로그램

/etc/mail/sendmail.cf                    주 설정 파일

/etc/mail/local-host-names          수신자 설정

/etc/sysconfig/sendmail/                           Queue 설정

/etc/mail/access                                        센드메일의 접근제어

/etc/mail/domaintable                   도메인 매핑

/etc/mail/virtusertable                   메일 경로 바꾸기

/etc/rc.d/init.d/sendmail               시작, 종료 스크립트

/etc/mail/aliases                           사용자 별칭

 

2) Sendmail 주 설정 파일 정보

설정정보는 7 개의 섹션으로 구분되어 있으며 각 섹션은 여러 개의 하부 섹션을 포함하고 있다.

Local info                        로컬 호스트을 다루는 설정

Options                            센드메일 설정 옵션

Message Precedences   메시지의 우선 순위 조정

Trusted Users                 자신의 주소를 수정할 수 있도록 허락된 사용자들

Format of Headers           메일에 들어갈 헤더

Rewriting Rules                새로 시작될 규칙을 정의한 집합

Mailer Definitions             메일을 전달할 프로그램을 정의

 

1] 설정 파일 분석

/etc/sendmail.cf

sendmail은 다량의 메일을 서로 다른 네트워크 환경간에 빠르게 전달해야 하기 때문에 사람이 읽고 이해하기 쉬운 방향으로 설정파일이 생성되어서는 안되고, 프로그램이 빠르게 처리될 수 있는 방햐으로 설정되어야 한다. sendmail.cf 파일은 줄 단위로 설정이 진행되며, 설정에 사용되는 하나의 문자로 표시된다. 또한 sendmail.cf 파일에서 사용되는 설정은 모두 첫번째 칼럼부터 시작되어야 하며, 그렇지 않은 경우 해당 설정은 모두 무시를 하게 된다.

다음은 sendmail.cf 파일에서 사용되는 설정 명령어들에 대한 설명이다.

명령어 설명
C 클래스(Class) 지정. 매크로의 경우에는 하나의 변수만을 정의하지만, 클래스는 여러
변수를 매크로로 정의하게 된다. 예를 들어 Cwlocalhost mail.edu00.net이라고 사용하면, w라는 변수에 localhost mail.edu00.net이라는 두 값이 저장되고, $=w와 같이 사용할 수 있다.
D 매크로를 정의(Define). 예를 들어 Djedu00.net이라고 정의하게 되면 j라는 변수에 edu00.net을 대입하게 된다. 만약 edu00.net을 사용하게 될 필요가 있다면 $j를 이용하면 된다.
E 8.7 버전부터 사용되었으며, 환경(Environment) 변수를 지정. sendmail은 보안을 위해서 실행될 때 모든 환경 변수를 삭제하게 되는데, 이때 새로운 환경 변수를 지정하기 위해서 사용한다.
F 클래스 매크로가 저장된 파일(File)이나 읽어 들일 파이프(pipe)를 지정. 매크로로 지정할 변수가 많을 경우 이를 sendmail.cf 내에서 한 줄로 모두 기록하는 것은 무리가 있다. 그래서 파일에 저장한 후 이 파일을 읽어들이도록 할 때 유용하다.
H 헤더(Header)를 지정. 메일은 헤더와 본문으로 구성되는데, 헤더에 포함될 항목들을 지정하기 우해 사용된다.
K 맵 파일이나 데이터베이스를 지정. sendmail이 사용하는 데이터를 db dbm 등의 파일에 저장한 후 빠르게 사용하고자 할 때 이용하는 것으로
Karith     arith     /etc/mail/arithmetic
이라고 지정할 경우에 arith에 사용하는 데이터베이스가 arith의 형식을 취하며, 저장된 파일의 이름은 /etc/mail/arithmetic임을 지정한다.
O 옵션(Option)을 정의. sendmail의 동작에 필요한 옵션을 지정할 때 사용된다.
P 전송 우선 순위를 결정(Priority)
R 다시 쓰기(Rewrite)를 지정. (Rule)이라고도 하는데, 룰이란 입력된 메일 주소를 다른 형태로 변경하는 방법을 의미한다. 예를 들어
R$-     $1$1@$j
와 같이 룰을 정의하면 $1의 형태(mail_id)와 일치하면 $1@$H의 형태
(mail_id@edu00.net)으로 변경된다.
S 룰 셋(rule-Set) 지정. 위에서 정의한 룰에는 여러 단계가 있을 수 있는데, 여러 단계의 룰을 하나로 묶어서 집합처럼 사용하겠다는 의미이다. 만약 S2라고 정의를 하게 되면 이후에 등장하는 룰은 모두 S2의 구성 원소가 된다.
T 신뢰(Trust)할 수 있는 사용자 지정.
V 환경 설정 파일(sendmail.cf)의 버전

 

V10/Berkeley

첫 칼럼부터 시작하기 때문에 별다른 문제가 발생하지 않지만 첫 칼럼에 공백이 오게 되면 설정에 오류가 발생한다.

 

local info            

sendmail 8.9.x부터는 sendmail이 읽어들이는 파일의 모드를 검사한다.

 

Cw

메일 호스트를 지정하는 부분으로, 호스트가 여러 개, 즉 가상 호스트 서비스를 하는 경우 해당 가상 호스트의 호스트 이름으로 오는 메일도 처리하기 위해, 이 곳에 모든 호스트 이름을 입력하여 설정할 수 있다. w클래스는 값을 일일이 대입하라는 의미이다.

Cwlocalhost.localdomain

Cwlocalhost       

로컬 호스트로 들어온 메일을 처리하도록 지정.

Cwlinux777.com

Cwlinuxkingdom.co.kr

Cwlinuxkingdom.net

 

Fw

메일 호스트를 지정하는 부분으로, 더 많은 domain을 관리한다면, local-host-names에 해당 domain을 한 줄씩 적는다. F class로 정의한 file을 읽어 들인다는 의미이다.

Fw/etc/mail/local-host-names

메일 호스트로 사용하고자 하는 도메인 이름을 입력해주면 sendmail.cf 파일에서 지정한 Fw 명령에

의해 이 파일 내용을 읽어서 기록된 도메인들에 대해 sendmail 기능이 작동하게 된다. 메일을 수신할 호스트의 이름을 입력하는 파일이며 sendmail 서버는 이곳에 명시된 호스트 이름으로 메일이 들어오면 더 이상 다른 서버로 메일을 보내지 않고 자신의 메일 박스에 저장한다. 주로 메일 서버의 이름이나 사용할 가상 호스트를 지정하여 설정한다.

/etc/mail/local-host-names

www.edu00.net

www.edu00.co.kr

www.edu00.com

ms.edu00.net

ms.edu00.co.kr

 

Dj 

일반적으로 sendmail 데몬이 가동중일 때는 현재 서버의 공식적인 이름을 자동적으로 알아본다. 하지만 메일 호스트의 이름을 강제로 변경할 경우 이 명령을 사용하며, mail을 보낼 때 자신의 domain을 인식하지 못할 경우 해당 domain을 적은 후, daemon을 재실행하면 된다.

Dj$w.Foo.COM

Djms.edu00.net

 

DM

메일 호스트가 외부 메일 서버에 의해 Relay된다면 메일 서버에 부하가 많이 걸리게 된다. 그래서 공식적인 메일 서버의 주소를 외부에 알려주지 말아야 할 경우가 있다. 예를 들어 메일링 리스트를 제작해 사람들에게 메일 메시지를 전달해야하는데, 이러한 메일링 리스트를 운영해주는 호스팅 서비스를 수행하고 있다면 가끔은 메일을 보내는 곳의 정확한 주소를 숨길 필요가 있다. 이때 메일 발신지를 바꾸기 위한 사용하는 명령이 DM이다.

DMkldp.org        

DMkldo.org로 변경했을 경우, 메일의 발신지가 다른 도메인일 경우에도 설정 내용으로 바뀐다.

이때 바뀌는 경우는 MUA를 사용할 경우에만 적용된다. 만약 사용자가 outlook을 사용한다면 원본메시지를 확인 하기 전까지는 알수 없다. 위의 설정의 경우 만약 사용자의 ID master일 경우, 받는 사람의 입장에서는 master@kldp.org로 인식이 된다.

DMMicrosoft.com

답장을 특정 도메인/메일 주소로 받기 위해서 MUA 설정을 바꾸어 Reply-To: 헤더를 지정하는 부분으로 원래의 목적은 받는 도메인 부분을 변경시켜, 답장을 그곳 도메인으로 받고자 이용하는 것이다.

 

Dn

전송 오류를 설정하는 부분으로 메일을 되돌린 서버를 지정한다.

DnMAILER-SERVER-DAEMON

 

FR o /etc/mail/relay-domains

릴레이를 허용할 호스트를 지정하는 부분으로 주석처리하면 모든 IP에 대해서 릴레이가 허용된다.

해당 파일에 경유를 허용할 호스트(도메인) 이름을 입력한다. sendmail은 허가 받지 않은 메일 릴레이(relay)를 기본적으로 거부하게 되어 있다. 만약 허가받은 도메인이 서버를 중계서버로 이용할 수 있게 하려면, 이 파일에 각 도메인을 지정해주면 된다. 일반적으로 자신의 도메인과 기타 릴레이 기능을 허용하고 싶은 도메인을 지정한다. 하지만 메일 데몬이 경유지(Relay)로서 역할을 할 경우 서버에 부하가 많아진다는 문제점도 있고, 다른 곳에서는 관리하는 메일 서버를 스팸 메일의 근원지로 간주할 수 있다는 우려가 나올 수 있다. 그리고 이 파일에 설정된 호스트 외에는 메일 서버를 경유해서 다른 곳으로 메일을 전송할 수 없게 된다.

sample.org

www.good.org

192.168.3.

freind@linuxone.co.kr

 

Kaccess hash /etc/mail/access

릴레이 허용 여부를 지정하는 부분으로 /etc/mail/access 파일을 편집함으로써 외부에서 오는 메일을 자신의 메일서버로 접근 제한과 다른 메일서버로의 전송 제한과 relay허용을 설정한다. 공백은 Tab key을 사용한다. 만약 도메인을 인식하지 못하는 경우 IP로 설정한다.

192.168.0.           RELAY

192.168.0.에서 오는 mail relay를 허용한다.

spam.com          REJECT          

spam.com에서 오는 mail은 무조건 받아들이지 않는다.

spam@linux.com DISCARD    

spam@linux.com에서 오는 메일은 조용히 받아들이되 /dev/null로 보낸다.

spam2@linux.com            550        I hate spammers like you!

메일을 보낸 상대편에 설정된 메시지를 출력한다.

hacker.com       REJECT 

hacker.com 에서 오는 모든 메일은 거부된다.

linux777.com       RELAY

linux777.com으로 오는 메일은 올바르게 수신이 되거나 RELAY가 허용된다.

위의 설정을 마친 후 다음의 명령을 실행하여 데이터베이스화한다.

# makemap hash /etc/mail/access < /etc/mail/access

이 경우 daemon을 재실행할 필요 없다.

다음은 /etc/mail/access 파일에 설정할 수 있는 옵션들이다.

OK

지정된 호스트나 사용자가 보낸 메일은 다른 설정 rule이 거부하는 경우에도 받는다.

 

RELAY

지정된 호스트에 대해 SMTP 메일 중계 역할을 하는 설정으로 지정된 도메인에 있는 사용자가 메일을 받고, 그 도메인에 있는 사용자가 서버를 통해 메일을 보낼 수 있다. 지정된 도메인에서 오는 메일은 다른 설정 rule이 거부하는 경우에도 받는다.

 

REJECT

지정된 도메인과 관련된 모든 메일의 송수신을 거부한다.

 

DISCARD

메시지를 받기는 하지만 바로 폐기한다. 발신자는 알 수 없다.

 

501 <message>

지정된 사용자와 도메인과 일치할 경우(부분적이라도) 메일 수신을 거부한다.

 

553 <message>

발신자의 주소에 호스트명이 없는 경우 메일을 받지 않는다.

 

550 <message>

지정된 도메인과 관련된 메일을 받지 않는다.

 

ForwardPath=$z/.forward.$w:$z/.forward

메일 포워딩 파일을 설정하는 부분으로, 여러 개의 메일을 가진 경우, 특정 메일 계정으로 들어온 메일을 다른 메일로 보내주는 포워딩 파일을 설정한다. 이 때 사용자의 홈 디렉토리에 .forward 파일을 만들고 포워딩 시킬 메일 주소를 입력하면 된다. 만약 유저 디렉토리(홈 디렉토리)와 그 상위 디렉토리가 그룹에게 쓰기 가능하거나, other가 쓰기 가능하다면 .forward가 작동하지 않을 수도 있다.

만일 일반 사용자의 .forward 파일이 작동하지 않으면 그 사용자 홈 디렉토리의 모드를 확인한다.

다음은 하나의 예를 설정하여 설명한다.

admin@linux777.com으로 오는 메일을 master@linux777.com이라는 mail 주소에서 확인하고 싶다면 admin의 홈 디렉토리에 .forward라는 파일을 만들고 한 줄에 mail 주소 하나씩 적는다.

#cd /home/admin

#vi .forward

master@linux777.com

 

AliasFile=/etc/aliases

메일 알리어스를 설정하는 부분으로 어느 계정으로 메일을 보냈을 때 그 계정으로 메일이 보내지지 않고, 앨리어스 파일에 지정된 다른 계정으로 메일이 전송되도록 하는 기능을 설정한다.

 mailing list 제작

② 특정 계정으로 들어오는 편지를 여러 사람(혹은 특정인)에게 전달시

③ 존재하지 않는 계정으로 들어오는 편지를 존재하는 계정을 가진 사람에게 전달

다음의 사용 형식을 따른다.

name:name1, name2, name3

cool : utralinux, linuxer, linus

admin:candy@children.com, cooki@children.com, gum@child.net (admin계정)

manager: :include:/etc/maillist/manager (manager에게 오는 메일은 /etc/maillist/manager라는 파일에 있는 계정에게 전달)

 

수정 후 다음 명령을 실행하여 설정내용을 적용한다.

#newaliases ( aliases 파일에 있는 규칙을 aliases.db hash table 형식으로 저장)

 

Kvirtuserltable hash o /etc/mail/virtusertable

가상 사용자를 지정하는 부분으로, 동일한 계정을 여러 가상 사용자들이 메일 주소로 동시에 사용할 수 있게 해주는 기능이다.

다음은 vitusertable 파일을 이용한 가상 메일 서버스의 예이다.

만약 여러 개의 도메인을 서비스 하던 중, 모두들 webmaster계정을 달라고 요구할 경우 해결은 /etc/mail/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파일을 만들지만 daemon을 재실행할 필요는 없다.

 

O LogLevel=9

로그 관리를 설정하는 부분이다.

 

O MaxMessageSize=1000000 (1메가)

mail 용량의 제한을 설정하는 부분으로 기본값으로 1메가가 설정되어 있다.

 

O DeliveryMode=background

전달모드를 백그라운드로 설정한다.

 

2) 매크로 파일

/etc/mail/sendmail.mc

sendmail 매크로 설정 파일로, m4라는 전처리기로 매크로 설정을 작동시켜 sendmail.cf 파일을 새롭게 생성한다. sendmail.cf 파일을 삭제했거나 원래 상태로 복원시킬 경우에 사용한다.

#m4 /etc/mail/sendmail.mc > /etc/sendmail.cf

 

4. POP3 사용 예

client가 사용하는 MUA는 원도우 outlook이 다수를 차지할 것이다. 따라서 outlook으로 server에 있는 mail을 가져가는 것을 구현해 보자.

먼저 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을 설치하기 바란다. 소스는 리눅스 설치 cd RPMS에 존재할 것이다.

 

(1) 6.2 버전

/etc/inetd.conf 파일을 확인해서 주석이 되어 있으면 주석을 제거한다.

pop-3    stream   to          nowait   root       /usr/sbin/tcpd    ipop3d

 

(2) 7.1 버전

/etc/xinetd.d/ipop3

/etc/service 파일 확인

pop3            110/tcp         pop-3           # POP version 3

다시 해당 호스트의 110번 포트로 올바르게 접속이 된다면 설치가 완료되었다.

 

5. 기본적인 보안

#vi /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 주소에서만 접근이 가능하도록 설정한다. 210.,211. pop3로 메일을 가져 갈수 있는 IP범위이다. 그리고 내부 IP MASQ를 사용하여 설정한다.

 

#vi /etc/hosts.deny

ALL : ALL

 

6. 스팸 방지

스팸을 방지 하려면 /etc/sendmail.cf에서 relay와 관련된 부분의 주석처리를 하지 않는다.

다음의 파일에는 서비스할 도메인명만 설정한다.

#vi /etc/mail/local-host-names 

linux777.com

linuxkingdom.co.kr

linuxkingdom.net

 

다음의 파일에는 거부할 메일 주소 또는 도메인을 설정하거나 relay를 허용할, 즉 메일을 보낼수 있는 도메인 또는 IP 범위를 설정한다.

#vi /etc/mail/access

 

효과적인 관리를 위해서는 /etc/mail/access 파일에는 거부할 도메인만 설정하고, relay를 허용할 도메인 또는 IP 주소의 범위는 /etc/mail/relay-domains 파일에 설정한다. 이 경우 사용자들이 주의할 점은

/etc/relay-domains는 기본으로 존재하지 않으므로 만들어서 설정을 해주어야 한다.

 

7. sendmail test

1)  sendmail 작동 여부 검사

#telnet localhost(서비이름) 25 (or smtp)

 

2)  local 계정으로 mail 보내기

#sendmail -v 계정

내용 입력

^D (EOF)

---sent message 나오는지 확인

---mail, pine, mutt mail 확인

---or /var/spool/mail 디렉토리 확인

 

3)  외부 mail 계정으로 mail 보내기

#sendmail -v -t

To:one@dreamwiz.com

From:계정@서버이름

Subject:Test

Test

^d (EOF)

------이후 메시지 출력 sent ok인지 확인, 해당 mail 서버로 가서 mail 확인

-----실패한 경우 에러 메시지 확인

 

4) 내부 network에서 mail 보내기

#vi /etc/hosts 파일에 상대편 호스트 추가

#sendmail -v -t

To:상대편 계정

From:내계정

Subject:Test

Test

^d (EOF)

 

5)  내부 network에서 spam mail 방지

상대편 mail reject or discard하도록 설정 후 test

 

6)  내부 조절 파일과 rule set

sendmail이 내부적으로 어떤 조절 파일과 rule set을 이용하여 전자편지 발송을 수행하는지 알고 싶을 때 사용한다.

#sendmail -d

 

7)  큐에 쌓여있는 메시지 볼 때 (현재 처리중인 메시지 목록)

#sendmail -bp

 

8)  pop3 서버 test

#telnet 서버이름 pop3

OK

user 이름 (입력)

OK

pass 암호 (입력)

메시지 출력

quit

 

9) 메일 큐 확인

데몬(bd)으로 가동시키고,  15분마다(q15m) 메일 큐를 확인하도록 시작설정한다.

#sendmail -bd -q15m

 

10) mail 명령어를 이용하여 메일 보내기

#mail nadream@linuxone.co.kr

#mail -v -s "제목" nadream2000@korea.com < /etc/passwd

 

11) 파일 첨부

#vi letter

#mail nadream@linuxone.co.kr -s 'subject' -c nadream2000@korea.com <letter

 

12)  Email 주소바꾸기

대부분의 서버에서 사용되는 mail 프로그램은 sendmail이다.  sendmail telnet으로 접속해서(포트는 25) 수동 조작을 한다.

보내는 사람 컴퓨터 ---> 중간 경유지 ---> 받는 사람 컴퓨터 형식으로 편지가 보내지는데 여기서 중간 경유지를 자신의 컴퓨터로 하고 보내는 사람의 정보까지 적당히 만들어 내는게 email 주소 바꾸기의 요점이다. 흔히 Relay기능이라고 한다.

 

수동조작 명령은 ehlo, mail, rcpt, data, quit 등이 있다.

ehlo : network 자신을 소개한다.

mail : mail을 보내는 사람의 주소이다.

rcpt : 받을 사람 주소이다.

data : 내용을 적는 곳이다.

quit : sendmail을 종료하는 명령이다.

 

먼저 자신의 컴퓨터에서 시험을 한다.

$ telnet 127.0.0.1 25

Trying 127.0.0.1...

Connected to 127.0.0.1.

Escape character is '^]'.

220 localhost.localdomain ESMTP Sendmail 8.9.3/8.9.3; Sun, 6 Feb 2000 21:56:34 +0900

ehlo hacker.com

자신의 컴퓨터를 소개하는 부분이다.

250-localhost.localdomain Hello localhost [127.0.0.1], pleased to meet you

250-EXPN

250-VERB

250-8BITMIME

250-SIZE

250-DSN

250-ONEX

250-ETRN

250-XUSR

250 HELP

mail from:<babo@warning.com>

이 부분은 mail을 보내는 사람의 주소이다. 이 주소가 mail 첫머리에 나타난다. 이 부분을 속여서 원하는 주소를 적는다.

250 <babo@warning.com>... Sender ok

 

rcpt to:<oprix@localhost.localdomain>

그리고 받을 사람 주소를 적는다.

250 <oprix@localhost.localdomain>... Recipient ok

 

.

354 Enter mail, end with "." on a line by itself

subject:hello

제목

I'm a boy.

내용을 적을 부분이다

.

"."하나만 쓰면 메일 쓰기를 마친다는 내용이다.

250 VAA00492 Message accepted for delivery

quit

221 localhost.local

domain closing connection

Connection closed by foreign host.

 

자 이렇게 한 뒤 다시 login을 하면 mail이 왔다는 걸 확인 할 수 있다.

 

#mail 

From babo@warning.com  Sun Feb  6 21:58:31 2000

Return-Path: <babo@warning.com>

Received: from hacker.com (localhost [127.0.0.1])

by localhost.localdomain (8.9.3/8.9.3) with ESMTP id VAA00492

for <oprix@localhost.localdomain>; Sun, 6 Feb 2000 21:57:26 +0900

Date: Sun, 6 Feb 2000 21:57:26 +0900

From: babo@warning.com

Message-Id: <200002061257.VAA00492@localhost.localdomain>

subject: hello

I'm a boy.

, sendmail 8.9.? 버전 부터는 /etc/mail/access 가 생겨서 허가를 받은 네트워크가 아니고서는 전달해 주는 작동이 안된다. Relay 기능을 막아놓은 네트워크의 경우이다.

 

8. sendmail 설치

1) 삭제 및 백업

1] 삭제

#rpm -e sendmail

 

2] 백업

/etc/sendmail.cf

/etc/init.d/sendmail

/etc/aliases.db

 

2)  소스 다운로드

ftp.sendmail.org/pub/sendmail

sendmail.8.12.0.Beta5.tar.gz

 

3)  사전 환경 설정 및 컴파일

** http://www.sendmail.org/compiling.html에서는 src 디렉토리에서 직접 make를 이용해서 컴파일을 하지 말도록 권장한다.

 

#cd sendmail.8.12.0

#vi Makefile

-------------------------

; 소스파일의 의존관계를 추가하고 컴파일

-DNEWDB : Berkeley DB 패키지를 사용할 때 alias와 일반적인 map을 위해서 DB 패키지를 이용하는데  Berkeley  DB패키지를 사용하기를 권장

사이트: http://www.sleepycat.com

 

-DNDBM  : 더 이상 사용하지 않음

-DNIS, -DNISPLUS : 각각 NIS NIS+를 지원

-DMAP_REGEX : 스펨메일 필터링할 때 정규식을 사용할 수 있도록 한다.

-----------------------------

    

#cd src

#sh Build

#cd ../cf/cf

#cp generic-linux.mc config.mc 

혹은 m4 ../m4/cf.m4 generic-linux.mc > /etc/sendmail.cf

#sh Build config.cf

#cp config.cf /etc/mail/sendmail.cf

#cd sendmail

#sh Build install

#cd /usr/lib

#ls -l /usr/lib/sendmail

#chown root /usr/lib/sendmail

#chgrp bin /usr/lib/sendmail

#chmod 4555 /usr/lib/sendmail

#chmod go-w / /etc /etc/mail /usr /var /var/spool /var/spool/mqueue

#chown root / /etc /etc/mail /usr /var /var/spool /var/spool/mqueue

#vi /etc/hosts

------------------------------

127.0.0.1             localhost.localdomain       localhost

192.168.1.10        edu00.co.kr        edu00 loghost

------------------------------

 

#/usr/lib/sendmail –bi

오류를 체크한다.

#cat /var/log/syslog

#/usr/lib/sendmail -bd -q1h

데몬을 실행한다.

메일을 특정 계정을 보내서 설정을 확인한다.

#mail -v -s "제목" nadream@korea.com < /home/linux/letter.txt

 

4) 한글 지원

메일에서 사용되는 SMTP 프로토콜은 기본적으로 7bit 문자 기반으로 제작되었다. 하지만 한글의 경우 EUC_KR로 표현하면 8bit를 사용하기 때문에 문제가 발생할 수 있다. 따라서 메일에서 사용하기 위해 한글의 7bit 표현방법인 ISO-2022-kr(RFC 1557)이 만들어졌고 메일의 본문에 사용되었다. 하지만 대부분의 프로그램에서는 한글을 8bit 표현방법인 EUC_KR을 사용했으므로 두 표현간 변환이 필요했다.

이 작업은 MTA, MDA, MUA에서 할 수 있다.

MTA에서 변환을 해주는 대표적인 프로그램이 sendmail 8.6.12h2이다.

이 프로그램은 프로그램으로부터 8bit 표현을 입력으로 받아서 다른 곳으로 전송할 때 ISO-2022-kr로 변환한 후 전송을 하고, 네트워크를 통해 받은 ISO-2022-kr로 표현된 메일을 EUC-KR로 변환 후 메일박스에 저장하도록 만들어졌다. 이전까지 대부분의 메일서버에서 사용해왔다. 하지만 SMTP 프로토콜이 8bit 문자를 지원하는 ESMTP 프로토콜로 변하면서 본문에서도 ISO-2022-kr대신에 EUC-KR을 사용하도록 표준이 바뀌었다. 물론 정식 표준으로 공표하지 않았고, 아직까지 인터넷에는 ISO-2022-kr로 표현된 메일이 사용되기 때문에 메일을 EUC-KR로 변환해주는 추가적인 작업이 필요하게 되었다.

ISO-2022-kr EUC-KR로 변환해주는 프로그램들은 UNIX 환경에서 많이 만들어졌는데, 대표적인 것들이 hconv hmconv이다.

관리자는 sendmail이 받은 메일을 메일박스로 저장하기 전에 이 프로그래을 통과하게 만들어서 ISO-2022-kr EUC-KR로 변환만 해주면 된다. 이러한 필터링을 가능하게 해주는 프로그램이 바로 procmail이다. procmail을 이용하여 한글 메일을 처리할 때 중요한 내용은 MDA이다.  MDA MTA가 받은 메일의 최종적인 도착지가 현재 호스트인 경우(sendmail의 경우 sendmail.cw local-host-names를 참고하여 결정한다.) 메일을 MDA에게 넘겨준다. 보통 시스템의 기본적인 MDA /bin/mail이다.

procmail /bin/mail 대신에 사용할 수 있는 프로그램으로 필터링 기능이 강력하여 한글 처리에 이용할 수 있다. procmail 자체가 한글 디코딩을 하지 않는다. 실제로 procmail도 한들 디코딩을 위해 다른 프로그램(hcode hmconv)을 이용한다. procmail이 하는 일은 단순히 어떤 헤더가 있을 때 적당한 프로그램을 불러 한글 디코딩을 해준다. 따라서 procmail뿐만 아니라 한글 디코딩을 위한 프로그램을 설치해야 한다. 여기에서는 hcode를 사용한다.

 

hcode 설치

hcode ftp://ftp.kaist.ac.kr/hangul/code/hcode에서 구한다.

#tar zxvf hcode*

#cd hcode*

#make

#cp hcode /usr/local/bin

 

procmail 설치

procmail ftp://ftp.kreonet.re.kr/pub/tools/mail/procmail에서 구한다.

#cd procmail*

#make

메시지에 따라 설치를 진행한다.

#cp procmail /usr/local/bin

#vi /etc/procmailrc

LOGFILE=/var/log/procmail

VERBOSE=no

PATH=/usr/local/bin:/usr/bin:/bin

SHELL=/bin/sh

:0 B

*^.\$\)C

{

:0 fbw

|hmconv -u

 

:0 fhw

* ^Content-Type:text/plain

|formail -c -I "Content-Type: text/plain; charset=EUC-KR" -I "Content-Transfer-Encoding: 8bit"

:0 Efhw

* !^Content-Type:

|formail -c -I "Content-Type: text/plain; charset=EUC-KR" -I "Content-Transfer-Encoding: 8bit"

 

# Note that -c flag has been added to formail invocation.

# It concatenates a header of multiple lines into a single line so that a bug in 'hcode -dk -m' dealing # with RFC 2047 # encoded header has less 'harmful' effect.

:0 fhw

| formail -A "X-Automatic-Korean-Mail-Conversions: iso-2022-kr to euc-kr"

}

DROPPRIVS=yes

:0 fhw

*Content-type:.+; charset="?EUC-KR

| formail -c | hcode -dk -m

:0 Efhw

*^(Subject|Form|Cc):.*=\?EUC-KR\?(B|Q)\?

|formail -c | hcode -dk -m

#vi /etc/sendmail.cf

.....

; sendmail에서 MDA procmail을 사용할 수 있도록 한다.          

Mlocal, P=/usr/local/procmail, F=lsDFMAw5:/|@qSPfhn9, S=10/30, R=20/40,

T=DNS/RFC822/X-Unix,

A=procmail -Y -a $h -d $u

.........

 

9. Q-mail 서버 구축

1) 개요

MySQL 과 큐 메일의 인터페이스는 메일 서비스를 전문으로 하는 서비스를 위하여 필요한 부분이다. 큐메일을 비롯한 유닉스계열의 전자우편 프로그램들은 유닉스나 리눅스의 표준 계정 파일인 /etc/passwd 파일에 등록되어 있는 이용자를 대상으로 메일서비스를 하도록 되어 있다.

그러나 /etc/passwd에 등록한다는 것은 SHELL 계정을 준다는 이야기고 SHELL 게정을 주지 않는다고 하더라도 /etc/passwd 파일은 일반 유닉스 파일시스템이므로 관리하기가 상당히 어렵고 수백 아니 수천명을 /etc/passwd 파일에 등록하여 사용한다는 것은 상당히 힘든 일이 될 것이다.

따라서 /etc/passwd 파일을 사용하지 않고 메일서비스만 사용하려면 그 계정시스템을 MySQL을 이용하도록 한다.

 

센드메일에도 이런 부분이 있다. 소스를 수정할 엄두가 나지 않는다면 BSD db를 이용한 접근방법이 있다.

   

2) 큐 메일 사이트

security를 염두에 두고 설계된 메일이므로 모든 프로그램이 정확히 설정되지 않으면 안된다.

한국 미러사이트 (http://qmail.manic.co.kr/top.html

   

3)  MySQL 과의 인터페이스

버전은 qmail-1.03을 사용하도록 한다.

qmail 설치를 먼저 설치한다.

mysql의 인터페이스 모듈은 MySQL 사이트 (http://www.mysql.com/) 에서 구한다.

 

4) 설치

[root @edu00 linux]# tar zxvf qmail-1.03.tar.gz --directory=/usr/local

[root @edu00 local]# gzip -d qmail-1.03-mysql-0.4.0.pathc.gz

[root @edu00 local]# cd qmail-1.03

[root @edu00 qmail-1.03]# patch -p1 < ../qmail-mysql-patch

큐메일과 mysql의 연동을 위해서 qmail-1.03-mysql-.4.0.patch.gz 파일을 qmail이 설치된 디렉토리에서 패치를 하여 mysql 모듈이 깔리도록 한다. 패치가 에러없이 수행되었으면 make파일과 mysql과 연동하는 파일들이 패치된다. mysql과 연동시키는 간단한 설명 파일인 README.mysql.en 파일을 반드시 읽도록 한다.

 

설치는 반드시 root 계정으로 한다.

[root @edu00 qmail-1.03]#make

[root @edu00 qmail-1.03]#make setup check

 

qmail 패치외에 POP-3 서비스를 위한 checkpassword 의 패치도 필요하다.

[root @edu00 qmail-1.03]#tar zxvf checkpassword-0.81.tar.gz

[root @edu00 qmail-1.03]#gzip -d checkpassword-0.81-mysql-0.5.0.patch.gz

[root @edu00 qmail-1.03]#cd checkpassword-0.81

[root @edu00 qmail-1.03]#patch -p1 < ../checkpassword-0.81-mysql-0.5.0.patch

[root @edu00 qmail-1.03]#make

[root @edu00 qmail-1.03]#make setup check

: README.nysql.en 파일이 생성되어 있으므로 설치시에 참고한다.

[root @edu00 linux]#vi /var/qmail/control/sqlserver 파일을 다음과 같은 내용으로 생성된다.

mysql_use yes                --> mysql 을 사용한다.

server localhost               --> 서버는 현재의 mysql 서버를 사용한다.

login qmail                        --> mysql DB에 접근하는 사용자명

password qmail1234        --> mysql DB에 접근시에 필요한 비밀번호

db qmail                           --> 사용자 계정을 가지고 있는 DB

table users                      --> 사용자 계정이 들어있는 테이블명

check_host no                 --> yes 이면 mysql DB에 있는 이용자명과 도메인 (호스트)로부터만

메일을 수신한다.

 

[root @edu00 linux]#mysql -u qmail

: 비밀번호를 넣고 설정한 qmail DB 에 들어갈수 있는지를 확인

 

[root @edu00 linux]#mkdir /somewhere/username

[root @edu00 linux]#maildirmake /somewhere/username/Maildir

[root @edu00 linux]#chown -R 1234 /somewhere/username/

[root @edu00 linux]#chgrp -R 6789 /somewhere/username/

: Maildir 구조의 메일박스를 생성

: 꼭 해당 ID 소유로 설정 (아니면 수신되지 않음)

: 이때 Maildir 로 서비스가 되게 하려면 해당 이용자의 홈디렉토리의 .qmail 파일에 ./Maildir/ 문장을 넣어 놓거나 qmail 실행시에 기본 서비스가 ./Maildir/ 서비스가 되도록 구동

qmail-start ./Maildir/ 로 실행하는데 /var/qmail/rc 의 스크립트 파일을 수정, 혹은 Mailbox 를 사용

 

5)  테스트

[root @edu00 linux]# /var/qmail/bin/qmail-getpw username localhost

username12346789/home1/qmail-box/g/gumdong

위와 같이 id, uid, gid, home값이 나타난다.

제대로 DB를 접근하지 못하면 DB 의 내용과는 다른 alias의 기본값이 나타나게 된다.

   

[root @edu00 linux]# /usr/local/libexec/mysqld --log=/tmp/mysql.log

: mysqld를 로그를 남기도록 실행하는 방법

 

6)  테스트 메일

[root @edu00 linux]# echo to:username | /var/qmail/bin/qmail-inject

성공적으로 메일이 보내졌는지 ~username/Maildir/new 디렉토리의 파일을 참조

만약에 파일이 보내지지 않으면 /var/mail/maillog 파일을 확인하여 원인 파악

파일의 수신은 성공적으로 이루어졌는데 POP-3 와 연동하는 checkpassword 가 정상적으로 동작하는지 확인

[root @edu00 linux]# telnet localhost pop-3

Trying 127.0.0.1...

Connected to localhost.

Escape character is '^]'.

+OK <6195.936784767@calypso.mydomain.or.kr>

user username

+OK

pass 1234

+OK

quit

+OK

Connection closed by foreign host.

이렇게 pass 까지 DB에 넣어진 내용과 일치하여 +OK 가 나오면 확인된 것

만일 제대로 되지 않으면 DB crypt 항목에 있는 비밀번호와 일치하는지 확인

crypt 항목에 비밀번호를 넣을 때는 encrypt()  mysql 매크로를 이용

> update users set crypt=encrypt('1234') where id='gumdong'\g

정상적으로 동작하지 않을시에 앞에서 언급한 큐메일의 로그와 mysql의 로그를 참조

 

10.Qmail 서버 구축  패키지 구축 (메일 forwarding  pop3 설정)

설치를 하기 전에 반드시 필요한 것은 DNS에 등록된 호스트이다 만약 없다면, 메일서버를 구축할 수 없다.

1) qmail 소스 받아오기

qmail을 설치하고, pop3 까지 설정하기 위해서 필요한 패키지는 다음과 같다.

qmail , ucspi-tcp , daemontools , rblsmtpd , qmail-103.patch , checkpassword

위의 것들은 모두 http://www.qmail.org 에서 받을 수 있거나 링크를 찾을 수 있다.

 

http://www.qmail.org/top.html

http://cr.yp.to/rblsmtpd.html

http://cr.yp.to/ucspi-tcp/install.html

http://cr.yp.to/daemontools/install.html

ftp://ftp.dti.ad.jp/pub/FreeBSD/ports/distfiles/qmail-103.patch

ftp://ftp.fujitsu.co.jp/pub/FreeBSD-jp/ports-jp/LOCAL_PORTS/checkpassword-0.81.tar.gz

 

현재의 버전들은 다음과 같다.

qmail-1.03.tar.gz

rblsmtpd-0.70.tar.gz

ucspi-tcp-0.88.tar.gz

daemontools-0.70.tar.gz

qmail-103.patch

checkpassword-0.81.tar.gz

 

2) 권한 설정

루트권한으로 변경한 뒤, (이후과정은 계속 루트권한이어야 한다.) 임의의 디렉토리에서 소스를 푼다.

$ su

password:

# cd /root/temp/

# cp [소스를 다운받은 디렉토리]/qmail-1.03.tar.gz /root/temp/

# cp [소스를 다운받은 디렉토리]/rblsmtpd-0.70.tar.gz /root/temp/

# cp [소스를 다운받은 디렉토리]/ucspi-tcp-0.88.tar.gz /root/temp/

# cp [소스를 다운받은 디렉토리]/daemontools-0.70.tar.gz /root/temp/

 

# tar -zxf qmail-1.03.tar.gz

# tar -zxf rblsmtpd-0.70.tar.gz

# tar -zxf ucspi-tcp-0.88.tar.gz

# tar -zxf daemontools-0.70.tar.gz

 

그러면, 각각의 qmail-1.03 rblsmtpd-0.70 ucspi-tcp-0.88 daemontools-0.70 라는 하위 디렉토리가 생긴다.

※ 여기서,  checkpassword 는 소스를 풀지 않는지 궁금해 할 수도 있는 사람이 있을 것이다.

※ 이유는 일단 qmail 이 성공해야 pop3를 만들 수 있다는 것이다. pop3 의 설치는 아주 간단하므로,

 qmail 설치 성공이후에 다룰 것이다.

 

3) 디렉토리 생성

qmail 설치를 위한 디렉토리를 생성한다.

 

필요한 하위디렉토리는 qmail이 자동으로 만들기 때문에, qmail의 홈디렉토리만 만들어 주면 된다.

# mkdir /var/qmail

 

참고사항 : qmail /var가 아닌 다른 디렉토리에 설치하고 싶다면, /var/qmail 디렉토리에 그곳을 가리키는 심볼릭 링크를 만들면 된다.

예를 들면, 다음과 같다.

#mkdir /var/qmail

#ln -s /usr/man /var/qmail/man

man DIR /usr/man 으로 링크

#mkdir /etc/qmail

#ln -s /etc/qmail /var/qmail/control

control DIR /etc/qmail 로 링크

#ln -s /usr/sbin /var/qmail/bin

bin DIR /usr/sbin 으로 링크

 

4) 사용자와 그룹 생성

qmail 실행을 위한 유저와 그룹을 생성한다.

/root/temp/qmail-1.03/INSTALL.ids 파일을 편집한다. 다음과 같이 리눅스 항목들만 남기고 나머지는 깨끗하게 지운다.

 

groupadd nofiles

useradd -g nofiles -d /var/qmail/alias alias

useradd -g nofiles -d /var/qmail qmaild

useradd -g nofiles -d /var/qmail qmaill

useradd -g nofiles -d /var/qmail qmailp

groupadd qmail

useradd -g qmail -d /var/qmail qmailq

useradd -g qmail -d /var/qmail qmailr

useradd -g qmail -d /var/qmail qmails

 

#cd /root/temp/qmail-1.03

# sh INSTALL.ids

해주면 필요한 유저와 그룹이 생성된다.

 groupadd useradd 라는 명령어가 없다고 나오는 경우가 있는데, 그 경우에는 다음과 같이 PATH 변수를 갱신해 주면 된다.

# PATH=/usr/sbin:$PATH

# export PATH

 

이번에는 oversize DNS 패치를 적용한다. 이 패치는 RFC의 권고안을 무시하고 512바이트보다 큰 UDP DNS 응답을 되돌려주는 일부 ISP업체들(AOL, hanmail.net 같은 곳) 때문에 필요한 것이다. qmail DNS resolve 라이브러리는 RFC와 호환되도록 되어 있으므로 RFC와 호환되지 않게 전달되는 메시지에는 응답하지 못한다. 다음의 패치는 qmail이 그러한 불법적인 DNS의 응답에 정확하게 수행하도록 한다.

패치는 다음과 같이 한다.(반드시 qmail의 소스 디렉토리에서 할 것.)

#patch -p1 < ../qmail-103.patch

 

5) 컴파일

qmail과 연관 프로그램들을 컴파일한다.

 

# cd /root/temp/qmail-1.03/

# make

# make setup check

qmail을 위한 다른 프로그램들도 컴파일하고 설치한다.

(ucspi-tcp , daemontools , rblsmtpd)

 

# cd /root/temp/ucspi-tcp-0.88/

# make

# make setup check

 

# cd /root/temp/daemontools-0.70/

# make

# make setup check

 

# cd /root/temp/rblsmtpd-0.70/

# make

# make setup check

 

6) 기본 control 파일들의 설정을 위하여, qmail config 하기

# cd /root/temp/qmail-1.03/

# ./config

 

정상적인 실행결과는 다음과 같다.

[root @edu qmail-1.03]# ./config

Your hostname is edu.

Your host's fully qualified name in DNS is edu.edu00.net.

Putting edu.edu00.net into control/me...

Putting edu00.net into control/defaultdomain...

Putting net into control/plusdomain...

Checking local IP addresses:

127.0.0.1: Adding localhost to control/locals...

211.170.43.101: Adding edu.edu00.net to control/locals...

If there are any other domain names that point to you,

you will have to add them to /var/qmail/control/locals.

You don't have to worry about aliases, i.e., domains with CNAME records.

Copying /var/qmail/control/locals to /var/qmail/control/rcpthosts...

Now qmail will refuse to accept SMTP messages except to those hosts.

Make sure to change rcpthosts if you add hosts to locals or virtualdomains!

[root @edu qmail-1.03]#

만약, 위와 같은 메시지가 나오지 않는다면, Network 설정 및 DNS 설정에 문제가 있는 경우이다.

DNS 서버에 이름이 정상적으로 등록되어 있다면, Network 설정을 잘 살펴보아야 한다.

 

잘 살펴보아야 할 설정파일은 다음과 같다.

/etc/resolv.conf

search chonnam.ac.kr 

nameserver 168.126.63.1

nameserver 168.126.63.2

특히, search [domain name] 라인이 반드시 있어야 한다.

 

/etc/hosts

127.0.0.1 localhost localhost.localdomain

123.234.123.234 chsd.chonnam.ac.kr chsd

123.234.123.231 other.chonnam.ac.kr other

 

위 파일의 내용을 확인하고, 내용에 맞추어 수정한다.

 

/etc/sysconfig/network

..........

..........

HOSTNAME=edu

DOMAINNAME=edu00.net

..........

..........

 

위의 라인을 확인하여, 없으면 추가한다.

 

위의 수정사항을 다 적용하였는데도, 정상적인 config 가 수행되지 않는다면, 다음과 같이 한다.

[root@chsd qmail-1.03]# ./config-fast edu.edu00.net

 

config-fast 다음에 서버의 DNS 등록 호스트네임을 써주면 된다.

그러면, 정상적으로 다음 설치가 가능하다.

 

7) qmail 데몬을 위한 디렉토리와 파일들을 생성.

# mkdir -p /var/qmail/supervise/qmail-send/log

# mkdir -p /var/qmail/supervise/qmail-smtpd/log

# chmod +t /var/qmail/supervise/qmail-send

# chmod +t /var/qmail/supervise/qmail-smtpd

 

# vi /var/qmail/supervise/qmail-send/run

-----------------------------------

#!/bin/sh

exec /var/qmail/rc

-----------------------------------

 

# vi /var/qmail/supervise/qmail-send/log/run

---------------------------------------------------------------

#!/bin/sh

exec /usr/local/bin/setuidgid qmaill /usr/local/bin/multilog t /var/log/qmail

---------------------------------------------------------------

 

# vi /var/qmail/supervise/qmail-smtpd/run

--------------------------------------------------------

#!/bin/sh

exec /usr/local/bin/softlimit -m 2000000 \

/usr/local/bin/tcpserver -v -p -x/etc/tcp.smtp.cdb \

-u 505 -g 506 0 25 /var/qmail/bin/qmail-smtpd 2>&1

--------------------------------------------------------

위의 "-u 505 -g 506" 에서 505 alias  UID (user ID)이고, 506 GID (group ID)이다.

컴퓨터마다 등록되는 alias  UID GID는 다르므로, /etc/passwd 파일을 참조하라.

그리고, 위에서 보이는 "\"기호는 라인이 바뀌었음을 나타내는 기호이다. 원래 위의 파일을 한 줄로

만들어야 하지만, 그러면 보기가 어렵기 때문에 여러 줄로 만들기 위해서 추가된 것이다.

 

# vi /var/qmail/supervise/qmail-smtpd/log/run

----------------------------------------------------------------------

#!/bin/sh

exec /usr/local/bin/setuidgid qmaill /usr/local/bin/multilog t /var/log/qmail/smtpd

----------------------------------------------------------------------

이렇게 편집한 파일들에 실행 권한을 준다.

# chmod 755 /var/qmail/supervise/qmail-send/run

# chmod 755 /var/qmail/supervise/qmail-send/log/run

# chmod 755 /var/qmail/supervise/qmail-smtpd/run

# chmod 755 /var/qmail/supervise/qmail-smtpd/log/run

 

8) qmail log파일을 위한 디렉토리 만들기

# mkdir -p /var/log/qmail/smtpd

# chown qmaill /var/log/qmail /var/log/qmail/smtpd

 

9) root  postmaster를 위한 alias 설정

관리자 계정으로 수신되는 메일을 일반계정으로 포워딩하도록, alias를 설정해 준다.

여기서 silver  root, postmaster 등으로 오는 메일을 받을 일반 계정이다.

(여러분이 원하는 계정을 만들어서 바꾸어주면 된다.)

# cd ~alias

# echo silver > .qmail-mailer-daemon

# echo silver > .qmail-postmaster

# echo silver > .qmail-root

 

10) qmail 부트파일 만들기

아래의 스크립트를 그대로 복사, 저장하거나 새로 받는다.

http://kltp.kldp.org/tmp/qmail.txt

 

이 파일을 /etc/rc.d/init.d/ qmail 이라는 이름으로 저장한 후, 실행 퍼미션을 준다.

 

# cp [다운로드받은 디렉토리]/qmail.txt /etc/rc.d/init.d/qmail

# chmod 755 qmail

 

다음 ntsysv를 실행시키면 qmail 이라는 새로운 항목이 보일 것이다. 리부팅할 때, qmail 데몬이 실행되도록 체크해준다. 당연히 sendmail 은 체크된 것을 제거한다. (레드햇 리눅스의 경우이다.)

 

다음은 qmail 데몬의 부트 스크립트이다.

-----------------------------------------------------------------------------

#!/bin/sh

# Comments to support chkconfig on RedHat Linux

# chkconfig: 2345 80 80

# description: 빠르며, 안정적이고, 유연한 MTA

 

# Source function library.

. /etc/rc.d/init.d/functions

 

# Source networking configuration.

. /etc/sysconfig/network

 

# Check that networking is up.

[ ${NETWORKING} = "no" ] && exit 0

 

PATH=/var/qmail/bin:/usr/local/bin:/usr/bin:/bin

export PATH

 

case "$1" in

start)

echo -n "Starting qmail: svscan"

cd /var/qmail/supervise

env - PATH="$PATH" svscan &

echo $! > /var/run/svscan.pid

echo "."

;;

stop)

echo -n "Stopping qmail: svscan"

kill `cat /var/run/svscan.pid`

echo -n " qmail"

svc -dx /var/qmail/supervise/*

echo -n " logging"

svc -dx /var/qmail/supervise/*/log

echo "."

;;

stat)

cd /var/qmail/supervise

svstat * */log

;;

doqueue|alrm)

echo "Sending ALRM signal to qmail-send."

svc -a /var/qmail/supervise/qmail-send

;;

queue)

qmail-qstat

qmail-qread

;;

reload|hup)

echo "Sending HUP signal to qmail-send."

svc -h /var/qmail/supervise/qmail-send

;;

pause)

echo "Pausing qmail-send"

svc -p /var/qmail/supervise/qmail-send

echo "Pausing qmail-smtpd"

svc -p /var/qmail/supervise/qmail-smtpd

;;

cont)

echo "Continuing qmail-send"

svc -c /var/qmail/supervise/qmail-send

echo "Continuing qmail-smtpd"

svc -c /var/qmail/supervise/qmail-smtpd

;;

restart)

echo "Restarting qmail:"

echo "* Stopping qmail-smtpd."

svc -d /var/qmail/supervise/qmail-smtpd

echo "* Sending qmail-send SIGTERM and restarting."

svc -t /var/qmail/supervise/qmail-send

echo "* Restarting qmail-smtpd."

svc -u /var/qmail/supervise/qmail-smtpd

;;

cdb)

tcprules /etc/tcp.smtp.cdb /etc/tcp.smtp.tmp < /etc/tcp.smtp

chmod 644 /etc/tcp.smtp*

echo "Reloaded /etc/tcp.smtp."

;;

help)

cat <<HELP

stop -- stops mail service (smtp connections refused, nothing goes out)

start -- starts mail service (smtp connection accepted, mail can go out)

pause -- temporarily stops mail service (connections accepted, nothing leaves)

cont -- continues paused mail service

stat -- displays status of mail service

cdb -- rebuild the tcpserver cdb file for smtp

restart -- stops and restarts smtp, sends qmail-send a TERM & restarts it

doqueue -- sends qmail-send ALRM, scheduling queued messages for delivery

reload -- sends qmail-send HUP, rereading locals and virtualdomains

queue -- shows status of queue

alrm -- same as doqueue

hup -- same as reload

HELP

;;

*)

echo "Usage: $0 {start|stop|restart|doqueue|reload|stat|pause|cont|cdb|queue|help}"

exit 1

;;

esac

 

exit 0

-----------------------------------------------------------------------------

 

11) 액세스 컨트롤 파일 작성하기

qmail smtpd를 구동하기 전에, 액세스 컨트롤이 실행되도록 하여야 한다.

이 간단한 작업은 /etc/tcp.smtp 파일을 이용한다.

/etc/tcp.smtp 에 다음 한 줄을 작성한다.

# vi /etc/tcp.smtp

--------------------------------

:allow

--------------------------------

로컬호스트이외에 어떠한 메일 릴레이도 허락하지 않는 기본적인 configuration이다.

 

로컬호스트와 당신의 로컬네트웍에게만 메일 릴레이를 허락하는 configuration은 다음과 같다.

-------------------------------------

127.0.0.1:allow,RELAYCLIENT=""

192.168.1.:allow,RELAYCLIENT=""

:allow

-------------------------------------

 

액세스 컨트롤에 대한 자세한 설명을 보려면, 다음의 파일을 받아서, 압축을 푼 후에, tcprules에 대한 man 파일을 참조하면 된다.

ftp://ftp.innominate.org/pub/pape/djb/ucspi-tcp-0.88-man.tar.gz

 

rule 파일을 만들었으면 tcpserver cdb(데이터베이스)로부터 읽어서 활성화할 필요가 있다.

/etc/tcp.smtp 파일로부터 tcprules 프로그램을 이용하여 데이터베이스를 생성한다.

다음의 명령을 수행하면 된다.

 

# /etc/rc.d/init.d/qmail cdb

또는,

# tcprules /etc/tcp.smtp.cdb /etc/tcp.smtp.tmp < /etc/tcp.smtp

 

12) sendmail 죽이기

이제 qmail로 모든 메일을 처리할 것이므로, 구형의 sendmail을 제거한다.

 

# ps ax | grep sendmail <--- sendmail 데몬이 있는지를 확인한다.

# killall -TERM sendmail <--- sendmail 데몬을 제거한다.

 

# ps ax | grep sendmail <--- 다시 sendmail 데몬이 살아있는지를 확인한다.

 

위의 명령은 현재 실행중인 sendmail만을 제거할 뿐이다. 컴퓨터가 재시동되면, 다시 sendmail도 재시동되므로, 다음과 같은 명령어로 qmail로 모든 sendmail을 대체한다.

 

# mv /usr/lib/sendmail /usr/lib/sendmail.old

# mv /usr/sbin/sendmail /usr/sbin/sendmail.old

# ln -s /var/qmail/bin/sendmail /usr/lib/sendmail

# ln -s /var/qmail/bin/sendmail /usr/sbin/sendmail

 

13) /var/qmail/rc 생성하기

/var/qmail/rc 파일은 qmail 파일중에서 가장 중요한 파일중의 하나이다. 이것은 qmail을 책임지고 시작하게 한다. 보다 중요한 것은 qmail이 항상 메일을 수신할 수 있도록 한다.

rc 의 내용은 qmail을 위한 기본적인 전송 명령으로 되어 있다.

/var/qmail/boot 디렉토리에 가면, 여러 경우에 대한 rc 파일의 예제가 파일별로 준비되어 있다.

우리는 procmail을 이용하여, 메일을 처리할 것이기 때문에, 다음과 같이 명령을 내린다.

 

# cp /var/qmail/boot/proc /var/qmail/rc

 

파일의 내용은 다음과 같다.

---------------------------------------------------

 

#!/bin/sh

# Using splogger to send the log through syslog.

# Using dot-forward to support sendmail-style ~/.forward files.

# Using procmail to deliver messages to /var/spool/mail/$USER by default.

 

exec env - PATH="/var/qmail/bin:$PATH" \

qmail-start '|preline procmail' splogger qmail

---------------------------------------------------

 

그리고나서, 약간의 수정을 한다. 메일 수신을 각자의 홈 디렉토리밑의 ~/Maildir/ 디렉토리로 하기 때문이다.

다음과 같이 수정한다.

 

# vi /var/qmail/rc

-------------------------------------------------------------------

#!/bin/sh

# Using splogger to send the log through syslog.

# Using dot-forward to support sendmail-style ~/.forward files.

# Using procmail to deliver messages to /var/spool/mail/$USER by default.

 

exec env - PATH="/var/qmail/bin:$PATH" \

qmail-start '|preline procmail ./Maildir/' splogger qmail

-------------------------------------------------------------------

 

./Maildir/ 이것만 추가한 것이다.

 

14) 각 사용자별로 메일 송수신을 위한 디렉토리 만들기.

~/Maildir 디렉토리에 모든 송수신 메일을 저장할 것이다.

사용자별로 디렉토리를 만들기 위해서는, 반드시 그 사용자가 되어야 한다.

qmail 을 설치하기 전에 존재하는 모든 사용자에게 대해서, 그 사용자 로그인상태에서 다음의 명령을 내려야 한다. root는 일반계정으로 메일이 포워딩되므로, 해 줄 필요가 없다. 대신에 root계정의 메일을 받을 일반계정(앞에서 알리아스를 해 준 계정 "silver")에는 반드시 해 주어야 한다.

 

# su silver

$ /var/qmail/bin/maildirmake $HOME/Maildir

$ echo ./Maildir/ > ~/.qmail

$ exit

 

# su hook

$ /var/qmail/bin/maildirmake $HOME/Maildir

$ echo ./Maildir/ > ~/.qmail

$ exit

# ................

....................등등...

 

앞으로 추가되는 사용자마다 일일이 이런 명령을 내린다면 엄청난 시간낭비일 것이다.

그러므로, 사용자가 추가될 때마다 자동으로 이런 과정이 되도록 다음과 같이 한다.

# cd /etc/skel

# /var/qmail/bin/maildirmake Maildir

# echo ./Maildir/ > .qmail

 

이제부터는 추가되는 모든 사용자에게 자동으로 Maildir 디렉토리와 .qmail 파일이 생기게 될 것이다.

 

15) 리부팅하고, qmail의 정상적인 동작을 확인하기

시스템을 리부팅시킨다.

 

1] 리부팅되고나서, /var/log/maillog 파일내용을 살펴보면, 끝부분에서 다음과 같은 라인이 보여야 한다.

qmail: status: local 0/10 remote 0/20

그렇지 않다면, qmail 설정에 문제가 있는 것이므로, 앞의 과정들을 다시 한번 꼼꼼히 살펴보고, 설정파일들을 자세히 검토해야만 한다.

 

2] ps ax 명령을 내리고나서, 다음과 같은 라인들이 보이는 지를 확인하다.

562 ? S 0:00 svscan

563 ? S 0:00 supervise qmail-send

564 ? S 0:00 supervise log

565 ? S 0:00 supervise qmail-smtpd

566 ? S 0:00 supervise log

567 ? S 0:00 qmail-send

568 ? S 0:00 /usr/local/bin/multilog t /var/log/qmail

569 ? S 0:00 /usr/local/bin/multilog t /var/log/qmail/smtpd

570 ? S 0:00 /usr/local/bin/tcpserver -v -p -x/etc/tcp.smtp.cdb

-u 501 -g 501 0 25 /var/qmail/bin/qmail-smtpd

576 ? S 0:00 splogger qmail

577 ? S 0:00 qmail-lspawn |preline procmail

578 ? S 0:00 qmail-rspawn

579 ? S 0:00 qmail-clean

 

모양이나 숫자들이 약간씩 틀리더라도, 반드시 13개의 프로세서가 동작하고 있어야 한다.

위와 동일한 프로세서가 없다면, qmail 설정에 문제가 있는 것이다.

 

※ 위의 1], 2]와 같은 메시지와 프로세서들이 보이지 않는다면, 문서 앞의 과정 7)부터 14)에서 만든 설정파일들을 잘못 만들 것이다.

대표적으로 자주 하는 실수는 /var/qmail/supervise/qmail-send/log/run 파일과

/var/qmail/supervise/qmail-smtpd/log/run 파일을 만들 때, qmaill qmail 로 잘못 쓰는 것이다.

이 문서에 쓰여진 설정파일의 내용은 절대로 오타나 탈자가 없으므로, 잘 보고 틀린 곳을 찾아내기 바란다.

 

16) 메일 송신 테스트하기 (여기서부터는 시스템 root 가 아니어도 된다.)

1]host 내부에서 사용자간의 메일 송수신을 확인해 본다.

silver는 호스트안에 계정이 있는 사용자이어야 한다.

 

% echo to: silver | /var/qmail/bin/qmail-inject

 

그러면, 내용은 없고 메일헤더만 있는 메일이 바로 silver에게 송신되어 있어야 하고,

새로이 도착되는 메일은 ~silver/Maildir/new/ 밑에 수신메일마다 개개의 파일로 저장된다.

/var/log/maillog 파일안의 끝부분에는 다음과 같은 줄들이 보여야 한다.

 

qmail: new msg 53

qmail: info msg 53: bytes 246 from <me@domain> qp 20345 uid 666

qmail: starting delivery 1: msg 53 to local me@domain

qmail: status: local 1/10 remote 0/20

qmail: delivery 1: success: did_1+0+0/

qmail: status: local 0/10 remote 0/20

qmail: end msg 53

( 53 inode 숫자이고, 20345 는 프로세서 ID이다. 여러분한테는 이 번호들이 다를 것이다.

 

2]메일전송 에러를 확인해 본다.

none은 호스트의 메일사용자계정이 아니어야 한다.

 

% echo to: none | /var/qmail/bin/qmail-inject

 

/var/log/maillog 파일안의 끝부분

qmail: new msg 53

qmail: info msg 53: bytes 246 from <me@domain> qp 20351 uid 666

qmail: starting delivery 2: msg 53 to local nonexistent@domain

qmail: status: local 1/10 remote 0/20

qmail: delivery 2: failure: No_such_address.__#5.1.1_/

qmail: status: local 0/10 remote 0/20

qmail: bounce msg 53 qp 20357

qmail: end msg 53

qmail: new msg 54

qmail: info msg 54: bytes 743 from <> qp 20357 uid 666

qmail: starting delivery 3: msg 54 to local me@domain

qmail: status: local 1/10 remote 0/20

qmail: delivery 3: success: did_1+0+0/

qmail: status: local 0/10 remote 0/20

qmail: end msg 54

 

아마 여러분은 전송되지 못하고, 되돌아온 메일을 보게 될 것이다.

 

3]호스트 외부로의 메일 송신 확인

me@wherever  hook@hanmail.net 과 갈은 어떤 유효한 메일 주소이어야 한다.

 

% echo to: me@wherever | /var/qmail/bin/qmail-inject

 

/var/log/maillog 파일안의 끝부분

qmail: new msg 53

qmail: info msg 53: bytes 246 from <me@domain> qp 20372 uid 666

qmail: starting delivery 4: msg 53 to remote me@wherever

qmail: status: local 0/10 remote 1/20

qmail: delivery 4: success: 1.2.3.4_accepted_message./...

qmail: status: local 0/10 remote 0/20

qmail: end msg 53

 

라인``starting delivery'' ``success'' 사이에는 얼마간의 시간적 지연이 있을 수 있다.

me@wherever 라는 메일 계정으로 온 메일을 확인해 보아라.

 

4]호스트의 root 또는 postmaster 에게 메일을 전송하기.

우리는 앞에서 root, postmaster, mailer-daemon alias 를 설정하였다.

 alias가 정상적으로 동작하는지를 확인한다.

 

% echo to: POSTmaster | /var/qmail/bin/qmail-inject

 

POSTmaster alias 를 설정한 계정 (앞에서는 silver)으로 온 메일을 확인한다.

 

17) 메일 수신 테스트하기

(제일 중요한 부분이다. 메일이 송신은 잘되어도, 수신이 안되는 경우가 허다하다.)

1] SMTP 서버가 정상적으로 동작하는지를 검사한다.

dude 는 호스트의 유효한 계정이어야 한다.

me@domain  hook@hanmail.net 과 같은 유효한 메일주소이어야 한다.

 

$ telnet 127.0.0.1 25

Trying 127.0.0.1...

Connected to 127.0.0.1.

Escape character is '^]'.

220 domain ESMTP

helo dude

250 domain

mail <me@domain>

250 ok

rcpt <me@domain>

250 ok

data

354 go ahead

Subject: testing

 

This is a test.

.

250 ok 812345679 qp 12345

quit

221 domain

Connection closed by foreign host.

$

 

메일이 정상적으로 도착했는지를 확인하다.

 

18) 메일을 다른 호스트의 메일계정으로 포워딩하기

요즘은 대부분의 사용자가 여러 개의 메일 계정을 가지는 경우가 많다. 굳이 서버의 용량을 낭비하고, 서버의 성능에 부하를 주면서까지 메일을 직접 서버에 남겨둘 필요가 없는 경우가 많다. 그렇기 때문에, 도착하는 메일을 바로 다른 호스트의 메일계정으로 포워딩시키는 방법을 쓴다.

qmail에서는 각 사용자가 아주 간단하게 메일 포워딩을 할 수 있는데, 자신의 계정 디렉토리의 .qmail 파일에 포워딩되어질 메일계정을 써주면 된다.

 

$ cd

$ vi .qmail

---------------------------------------------

&mine@hanmail.net

---------------------------------------------

 

메일주소앞에 &기호는 넣어도 되고, 싫으면 넣지 않아도 무관하다.

모든 계정을 이렇게 포워딩되게 설정하면, 호스트자체에 전혀 부하를 주지 않고, 좋은 도메인을 가진 훌륭한 메일 서버가 되는 것이다.

 

19) pop3 설치하기

이제 pop3를 위한 설정을 해보자. 메일 서버에 있는 메일을 자신의 컴퓨터 메일 클라이언트로 가져오기 위해서는 반드시 메일서버가 pop3를 지원해야 한다. 이를 위한 설치와 설정은 다음과 같다.

 

먼저 checkpassword를 설치한다. 이것은 사용자명과 암호를 인증하는데 사용된다.

다른 소스도 /root/temp 디렉토리에 풀었으니 이것도 거기에다 풀어보자.

#cd /root/temp

#tar -zxvf checkpassword-0.81.tar.gz

 

checkpassword를 컴파일하고 설치한다.

#cd checkpassword-0.81

#make

#make setup check

 

이제 checkpassword가 제대로 설치되었는지 확인해보자.

# /var/qmail/bin/qmail-popup chsd.chonnam.ac.kr /bin/checkpassword pwd

+ok <1311.955932232@hsd.chonnam.ac.kr>

user dakeshi

+ok

pass foryou

-ERR authorization failed

 

제대로 password를 입력하지 않는다면, 위와 같은 결과가 나타난다.

 

제대로 된 password를 입력하면,

# /var/qmail/bin/qmail-popup hsd.chonnam.ac.kr /bin/checkpassword pwd

+ok <1311.955932232@hsd.chonnam.ac.kr>

user dakeshi

+ok

pass forme

/home/dakeshi

라고 나올 것이다.

 

이제는 호스트가 부팅될 때마다 자동적으로 pop3가 동작하도록 /etc/rc.d/rc.local 파일의 마지막에 다음의 내용을 추가한다.

 

#start qmail POP3 server

/usr/local/bin/tcpserver 0 110 /var/qmail/bin/qmail-popup FQDN \

/bin/checkpassword /var/qmail/bin/qmail-pop3d Maildir &

 

( FQDN에는 호스트네임과 도메인 네임을 써준다. 여기서는 edu.edu00.net)

 

이제 호스트를 리부팅시켜서 pop3가 제대로 동작하는지 확인해보자.

 

1) 호스트에 계정이 있는 사용자에게 메일을 보낸다.

2) 호스트에 그 계정으로 접속하여 메일이 들어왔는지 확인한다.

3) 자신이 사용하고 있는 메일서비스에 pop설정을 해준 다음 메일을 가져온다.

4) 메일이 정상적으로 읽혀지는지를 확인한다.

 

11. POSTFIX

MTA + MDA인 메일서버이며 sendmail qmail의 중간 정도의 특성을 가지고 있다. sendmail은 어렵기는 하지만, 잘 튜닝하면 정말로 훌륭한 메일서버이다. qmail은 설정하면 빠른 속도를 보여주고, postfix는 중간 정도된다. 무엇보다 큰 장점은 설정이 쉽고, qmail 보다는 느리지만 속도도 빠릅니다. 또한 multi queue가 기본으로 잘 구성되어 있기 때문에, sendmail로 이 정도를 구성하려면 상당한 실력을 갖추지 않으면 어려울 정도이다.

 

1) postfix 설치하기

http://www.postfix.org/에서 Postfix를 다운받는다. 테스트용으로는 postfix-1.1.3.tar.gz를 다운받는다.

# tar xvfz postfix-1.1.3.tar.gz

 

압축을 해제한 후 그 디렉토리로 이동.

# cd postfix-1.1.3

 

postfix 컴파일

# make -f Makefile.init makefiles

# make tidy

# make

위의 과정을 거치면 컴파일이 끝난다. configure나 기타 다른 작업은 전혀 할 필요는 없다.

 

postfix 사용자와 postdrop 그룹 추가

# useradd -M postfix

# groupadd -g 65000 postdrop

 

/etc/passwd 파일 변집

postfix:*:65001:65001:postfix:/no/where:/no/shell

 

/etc/aliases 파일 변집

postfix:    root

 

postfix 설치

# make install

install_root: [/]

tempdir: [/root/src/postfix/postfix-1.1.3]

config_directory: [/etc/postfix]

daemon_directory: [/usr/libexec/postfix]

command_directory: [/usr/sbin]

queue_directory: [/var/spool/postfix]

sendmail_path: [/usr/lib/sendmail]

newaliases_path: [/usr/bin/newaliases]

mailq_path: [/usr/bin/mailq]

mail_owner: [postfix]

setgid_group: [postdrop]

manpages: [/usr/local/man]    sample_directory: [/etc/postfix]    readme_directory: [no] 

 

/etc/postfix/main.cf 편집

queue_directory = /var/spool/postfix

command_directory = /usr/sbin

daemon_directory = /usr/libexec/postfix

default_privs = nobody

mail_owner = postfix

myhostname = mail.test.com

mydomain = test.com

myorigin = $myhostname

inet_interfaces = all

mydestination = $myhostname, localhost.$mydomain $mydomain

mynetworks_style = subnet

mynetworks = 192.168.0.0/24

alias_maps = hash:/etc/postfix/aliases

home_mailbox = Maildir/

transport_maps = hash:/etc/postfix/transport

 

myhostname는 호스트명이고 mydomain은 도메인명이다. 그런데 이 호스트명과 도메인명은 virtual mail server와는 상관이 없는 것으로 설치하고 있는 서버의 도메인명과 호스트명이다.

myorigin $mydomain을 쓰는 것이 더 일반적이지만, 테스트 목적으로 $myhostname을 사용했다. myorigin은 메일을 보낸 때 보낸 사름 필드에 "id@" 다음에 오는 문자열이다. 위의 경우에 jirisan이라는 유저가 메일을 보내면, postfix jirisan@mail.test.com이 보낸 것으로 처리하여 메일을 보낸다는 의미이다.

mynetworks_style class, subnet, host 세 가지가 있으나 아무 생각없이 subnet을 쓰는 것이 일반적이다. mynetworks_style mynetworks를 위와 같이 설정하면, 192.168.0.0/24 네트웍에 속한 컴퓨터들이 보내는 메일은 릴레이가 된다.

 

/etc/postfix/transport 편집

localhost       local:

mail.test.com   local:

test.com       local:

default_transport smtp:

          

aliases 테이블과 transport 테이블 db를 생성해 준다.

# postmap aliases

# postmap transport

 

postfix를 실행한다.

# postfix start

postfix/postfix-script: starting the Postfix mail system

 

postfix를 종료할 때는postfix stop 하면 되고, 설정을 바꾼뒤 reloading할 때는 postfix reload 하면 된다.

 

테스트

# telnet mail.test.com 25

 

Trying 192.168.0.2...

Connected to mail.test.com.

Escape character is '^]'

220 mail.test.com ESMTP Postfix

 

위와 같이 나오면 일단은 정상이다.

 

메일 송신

# mail jirisan@test.com

Subject: ttt

ttt

.

Cc:

           

이제 메일이 정상적으로 도착했는지 볼 차례다. 그런데, main.cf에서 Maildir/ 로 지정을 했기 때문에, 메일이 도착하면 사용자 홈디렉토리 아래에 Maildir/new 디렉토리에 메일이 저장된다. 확인해 보자.

#cd /home/jirisan/Maildir/new

# ls

1009355046.3383_0.localhost.localdomain  1009355046.3383_2.localhost.localdomain

1009355046.3383_1.localhost.localdomain

 

# cat 1009355046.3383_2.localhost.localdomain

Return-Path: <root@mail.test.com>

Delivered-To: jirisan@test.com

Received: by mail.test.com (Postfix, from userid 0)

id 3643C2B58F;

Wed, 26 Dec 2001 17:25:35 +0900 (KST)

To: jirisan@test.com

Subject: ttt

Message-Id: <20011226082535.3643C2B58F@mail.test.com>

Date: Wed, 26 Dec 2001 17:25:35 +0900 (KST)

From: root@mail.test.com (root)

ttt

 

위와 같이 jirisan의 홈 디렉토리에 Maildir 디렉토리가 만들어 지고 그 속에 받은 메일이 저장된다면 성공한 것이다.

참고 : test.com DNS zone 파일

 

    $TTL 172800

 

    @     SOA   ns.test.com.    steelblue.empal.com. (

 

                                             100000     ; Serial

 

                                             10800  ; Refresh after 3 hours

 

                                             3600   ; Retry after 1 hour

 

                                             604800 ; Expire after 1 week

 

                                             172800 ) ; Minimum TTL of 1 day

 

    ; Name Server records

 

                    NS       ns.test.com.

 

                    MX       10 mail.test.com.

 

    ; Address (A) records.

 

    localhost       A 127.0.0.1

 

    ns              A 192.168.0.2

 

    mail            A 192.168.0.2

  

728x90
반응형

'IT > OracleLinux-1Z0460' 카테고리의 다른 글

삼바  (0) 2022.05.19
NFS란  (0) 2022.05.19
DNS란  (0) 2022.05.19
인터넷 서버  (0) 2022.05.19
리눅스 네트워크  (0) 2022.05.19