+프로토콜
여러분들은 이메일 계정을 아웃룩익스프레스를 통해서 설정할 때 다음과 같은
단어들을 보았을 것이다. (아직 한번도 아웃룩익스프레스에서 이메일 계정을
생성해 보지 않은 사람은 이장을 보고나서 계정을 한번 생성시켜 보라.)
SMTP (simple mail transfer protocol) : 메일을 보낼 때 사용되는 프로토콜.
POP3 (post office protocol) : 우체국처럼 메일을 받을 때 사용되는 프로토콜.
IMAP (internet mail protocol) : 메일을 받을 때 사용되는 프로토콜.
본인도 처음에 아웃룩익스프레스로 계정을 생성할 때 요것들이 몬 뜻인지를
몰라 헤메인 기억이 있다. 위의 것들은 프로그램이 아니다.(헷갈리지 말것)
여러분들에게 익숙한 TCP/IP와 같이 메일을 전송하기 위한프로토콜들이다.
+프로그램
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)로 전달이 된다.
요것들은 프로토콜이 아니라 프로그램이다.(위의 것과 개념을 헷갈리지 말것)
이해가 좀 됐는가? 그림으로 한번 확인해 보자.
+----------+ MTA +----------+
| ServerA |--------------------------------->| ServerB |
+----------+ SMTP +----------+
| |
| |
| MUA |POP3,IMAP
| |
| |
+----------+ +----------+
| ClientA | | ClientB |
+----------+ +----------+
tip)SendMail은 보안에 취약성을 드러내고 있다. 그래서 요즘은 qMail이라는
프로그램도 많이 쓰인다.
2)sendmail 설정
-imap프로토콜 설정
여기서는 프로토콜을 pop3대신에 imap을 쓰도록 하겠다.
[root@rootshell root]# vi /etc/inetd.conf
/imap <--패턴매치입니다.
#pop-2 stream tcp nowait root /usr/sbin/tcpd ipop2d
#pop-3 stream tcp nowait root /usr/sbin/tcpd ipop3d
요부분을 주석처리
imap stream tcp nowait root /usr/sbin/tcpd imapd
요부분을 주석제거
-/etc/services 확인
[root@rootshell root]# vi /etc/services
/imap <--패턴매치입니다.
imap2 143/tcp imap # Interim Mail Access proto v2
imap2 143/udp imap
이 부분의 설정을 확인해 줍니다.
자 포트가 열려 있는지 확인해 봅시다.
[root@rootshell root]# telnet localhost imap
Trying 127.0.0.1...
telnet unable to connect to remote host: 연결이 거부됨
[root@rootshell root]# telnet localhost pop-3
Trying 127.0.0.1...
Connected to localhost.localdomain.
Escape character is '^]'
우리는 방금 pop프로토콜을 주석처리하고 imap프로토콜의 주석을 제거 하였다.
그러나 서비스가 거부되고 있다. 왜 그런가?
[root@rootshell /root]# /etc/rc.d/init.d/sendmail stop
shutting down sendmail [ok]
[root@rootshell /root]# /etc/rc.d/init.d/sendmail start
starting sendmail [ok]
그렇다. 데몬 설정 파일을 변경했으니 데몬을 재실행해 주어야 한다.
데몬 재실행 이후에 다시 시도해 보자.
[root@rootshell root]# telnet localhost imap
Trying 127.0.0.1...
Connected to localhost.localdomain.
Escape character is '^]'
[root@rootshell root]# telnet localhost pop-3
Trying 127.0.0.1...
telnet unable to connect to remote host: 연결이 거부됨
자 이제 포트가 열렸다. 메일을 한번 보내보자.
-메일 보내기
자기 자신에게 메일을 보내보자.
[root@rootshell root]# mail root
Subject: test <--제목입니다.
hi test <--본문내용입니다.
. <--글마침 표시입니다.
Cc: <--참조 입니다. (주)메일을 함께 읽을 메일 주소를 적어 주는
부분입니다.
다른 콘솔로 로그인해서 메일을 확인해 보자.
login:root
passwd:xxxxxxxxxx
You have a new mail
[root@rootshell root]# mail
Mail version 8.1 6/6/93. type ? for help
"var/spool/mail/root": 1 message 1 new
> 1 root@localhost.local Tue Jun 17 15:30 13/369 "hi"
메일이 도착했는가? 축하한다.
tip) var/spool/mail/root 각 계정별로 메일의 임시 저장소이다. 이 파일에
메일이 임시 저장되었다가 메일을 확인하게 되면 ~/mailbox 각 계정의
홈디렉토리에 mailbox로 옮겨진다.
-/etc/sendmail.cf 설정
실질적으로 이 파일은 전문가들 조차도 까다롭게 생각하는 파일입니다.
따라서 꼭 필요한 부분에 대해서만
설정을 하도록 하겠습니다.
[root@rootshell root]# vi /etc/sendmail.cf
*중략*
#########################
# local info #
#########################
Cwlocalhost
예)Cwdacker.net
Cwwww.yahoo.co.kr
메일 서버의 도메인 지정(복수 도메인 가능)
Fw/etc/sendmail.cw
많은 복수 도메인을 기입하는 것의 불편을 막기 위해 별도의
파일을 만들어 저장
#Dj$ww.Foo.COM
예)Djdacker.net
j뒤에 도메인명을 지정하면 sendmail이 자신의 호스트명을
알아내지 못하는 실수가 있을 때 강제적으로 그 도메인으로 메일이 작동될 수
있게 해주는 것
#who I masquerade as (null for no masquerading) (see alse $=M)
DM
DMhacker.net
예)현재 메일 호스트명이 dacker.net이지만 위와 같이 해놓으면 메일을 받는
사람들에게는 hacker.net에서 편지가 온 것으로 표시됩니다.
(디립따 욕을 해놓고 다른 발신지를 적어놓으면 안돼겠죠*^^*)
원래 목적은 메일을 보내고 답장을 받을 때 hacker.net으로 받겠다는 의미입니다.
메일 전송자의 주소를 메일 호스트와 다르게 지정
#Foward file research path
O ForwardPath=$z/.forward.Sw:$z/.forward
이메일 주소가 여러개일 때 한 이메일 주소에서만 메일을
수신하겠다 할 때 사용
*생략*
-/etc/sendmail.cw 설정
[root@rootshell root]# vi /etc/sendmail.cw
#sendamail.cw - include all aliases for your machine here
여기에 메일 호스트로 사용하고자 하는 도메인들을
입력해 주면sendmail.cf파일에서 지정한 Fw 명령에 의해 이 파일 내용을 읽어서
여기에 기록된 도메인들에 관하여 Sendmail기능이 작동하게 됩니다.
-/etc/sendmail.mc 설정(매크로 파일 설정)
[root@rootshell root]# vi /etc/sendmail.mc
레드햇6.0패키지에 들어 있는 Sendmail버젼 8.9.3 버젼에
추가된 파일로 sendmail.cf파일을 변경했을 때 m4라는 전 처리기(preprocessor)로
이 매크로 설정을 작동시켜 /etc/sendmail.cf 파일을 새롭게 생성시켜 주여야 합니다.
만일 여러분이 Sendmail설정 파일을 실수로 인하여 삭제를했거나 원상태의 설정 파일로
복원하고 싶다면 아래와 같은 명령을 실행하면 sendmail.cf가 생성됩니다.
[root@rootshell root]# m4 /etc/sendmail.mc > /etc/sendmail.cf
-/etc/aliases
메일 알리아스 기능이란, 어느 계정으로 메일을 보냈을 때 그 계정으로 메일이
도착하지 않고, 알리어스 파일에 지정된 다른 계정으로 메일이 전송될 수 있게
하는 기능입니다.
[root@rootshell root]# vi /etc/aliases
hacker: dacker@dacker.net, admin@hitel.net, linux
linux: sa@dacker.net, webma@dacker.net
이것은 hacker라는 계정으로 메일을 보내면,
dacker@dacker.wo.to, admin@hitel.net로 메일이
전달되고, 로컬 호스트에 있는 linux 계정으로오는 메일은 다시
sa@dacker.net, webma@dacker.wo.to 계저으로 메일이 전달됩니다.
설정을 바꿔 준 후에는 newaliases 명령을 이용하여 /etc/aliases/를 etc/aliases.db
파일로 저장시켜 줘야 한다.
-/etc/mail/access 설정
레드햇 5.0 이후 부터 Sendmail에는 스팸 메일을 방지하기 위하여 메일 중계기능이
추가 되었다. 따라서 다른 네트워크들이 나의 서버를 통하여 메일을 전송하는 것이
막혀있다. 자신의 네트워크가 아닌 곳에서도 메일을 전송하기 위해서는 access에
도메인 또는 호스트 주소를 입력하여 DB 파일로 저장해야 한다.
[root@rootshell root]# vi /etc/mail/access
/*모든 간격은 Tab key을 사용한다는 것을 잊지 말기 바란다.*/
yahoo.co.kr RELAY
dacker.net RELAY
linux.com RELAY
hacker.net REJECT
이를 DB화 해 준다.
[root@rootshell root]# makemap hash /etc/mail/access < /etc/mail/access
-/etc/mail/vitusertable 설정(가상 메일 서버스)
만약 여러개의 도메인을 서비스 하던 중, 모두들 admin계정을 달라고 요구할 경우에는
virtusertable파일을 설정해야 한다.
[root@rootshell root]# vi /etc/mail/virtusertable
새로작성=>
admin@dacker.com hacker
admin@dacker.co.kr dacker
admin@dacker.net webma
위의 설정은 실제로는 admin이라는 계정이 3개나 존재할 수 없다.
다만 이렇게 오는 메일을 실제 계정을 가지고 있는 사용자로 전달하는 역활을 한다.
[root@rootshell root]#
makemap hash /etc/mail/vitusertable < /etc/mail/vitusertable
이를 DB화 해 준다.
-SendMail의 재시동
[root@rootshell /root]# /etc/rc.d/init.d/sendmail stop
shutting down sendmail [ok]
[root@rootshell /root]# /etc/rc.d/init.d/sendmail start
starting sendmail [ok]