- 메일 관련 기초 용어
- 메일 관련 프로토콜
메일 전송을 위한 프로토콜(Mail Transport Protocol): SMTP, ESMTP 등
메일 수신을 위한 프로토콜(Mail Access Protocol) : POP3, IMAP4 등
- 메일 동작 원리
- Envelope : 송신측과 수신측의 메일 주소를 나타낸다. ( 메일헤더)
- Message : Header와 Body로 구성된다. (메일바디)
Header : From, To, Cc, Date, subject등의 필드로 시작된다.
Body : 최대 1000문자의 7비트 ASCII문자로만 구성된다.
- 메일 프로토콜 종류 및 사용법
|
Trying 127.0.0.1... Connected to localhost.localdomain (127.0.0.1). Escape character is '^]'. 220 linux.example.com ESMTP Sendmail 8.13.8/8.13.8; Wed, 13 Sep 2017 18:03:39 +0900 help /* 입력 */ 214-2.0.0 This is sendmail 214-2.0.0 Topics: 214-2.0.0 HELO EHLO MAIL RCPT DATA 214-2.0.0 RSET NOOP QUIT HELP VRFY 214-2.0.0 EXPN VERB ETRN DSN AUTH 214-2.0.0 STARTTLS 214-2.0.0 For more info use "HELP <topic>". 214-2.0.0 To report bugs in the implementation see 214-2.0.0 http://www.sendmail.org/email-addresses.html 214-2.0.0 For local information send email to Postmaster at your site. 214 2.0.0 End of HELP info QUIT /* 입력 */ |
|
POP3 명령어
# telnet localhost 110 /* 서비스 open 확인 */
|
Trying 127.0.0.1... telnet: connect to address 127.0.0.1: Connection refused telnet: Unable to connect to remote host: Connection refused |
|
# rpm -qa | grep dovecot /* 패키지 확인 */
# vi /etc/dovecot.conf
|
......중략......... # If you only want to use dovecot-auth, you can set this to "none". protocols = imap imaps pop3 pop3s /* 주석 제거 */ ......중략......... |
|
# service dovecot restart
# chkconfig dovecot on
# telnet localhost 110
|
Trying 127.0.0.1... Connected to localhost.localdomain (127.0.0.1). Escape character is '^]'. +OK Dovecot ready. user user01 +OK pass user01 +OK Logged in. list +OK 2 messages: 1 573 2 574 . top 1 1 +OK Return-Path: <root@linux.example.com> Received: from linux.example.com (linux.example.com [127.0.0.1]) by linux.example.com (8.13.8/8.13.8) with ESMTP id v8D9Akvx004795 for <user01@linux.example.com>; Wed, 13 Sep 2017 18:10:46 +0900 Received: (from root@localhost) by linux.example.com (8.13.8/8.13.8/Submit) id v8D9AkI5004794 for user01; Wed, 13 Sep 2017 18:10:46 +0900 Date: Wed, 13 Sep 2017 18:10:46 +0900 From: root <root@linux.example.com> Message-Id: <201709130910.v8D9AkI5004794@linux.example.com> To: user01@linux.example.com Subject: test test1 . retr 1 +OK 573 octets Return-Path: <root@linux.example.com> Received: from linux.example.com (linux.example.com [127.0.0.1]) by linux.example.com (8.13.8/8.13.8) with ESMTP id v8D9Akvx004795 for <user01@linux.example.com>; Wed, 13 Sep 2017 18:10:46 +0900 Received: (from root@localhost) by linux.example.com (8.13.8/8.13.8/Submit) id v8D9AkI5004794 for user01; Wed, 13 Sep 2017 18:10:46 +0900 Date: Wed, 13 Sep 2017 18:10:46 +0900 From: root <root@linux.example.com> Message-Id: <201709130910.v8D9AkI5004794@linux.example.com> To: user01@linux.example.com Subject: test test1 . dele 1 +OK Marked to be deleted. list +OK 1 messages: 2 574 . quit +OK Logging out, messages deleted. Connection closed by foreign host. |
|
- sendmail 메일 서버
# rpm -qa | grep sendmail /* 프로그램 확인 */
# grep smtp /etc/services /* 포트 확인 */
# cd /etc/mail ; ls /* 설정파일 확인 */
[참고] DNS 서버 zone 파일 설정
linux.example.com. IN MX 10 mail.linux.example.com.
mail IN A 192.168.17.220
- sendmail 설정 파일
파일의 종류 | 설 명 |
/etc/mail/aliases | 메일 엘리어스 설정 파일 |
/etc/mail/sendmail.cf | 메일 주 설정 파일(sendmail 주 설정 파일) |
/etc/mail/access | 메일 중계 기능 설정 파일 |
/etc/mail/virtusertable | 메일 가상 메일 설정 파일 |
/etc/mail/local-host-names | 메일 서버 도메인 기록 파일 |
/etc/mail/trusted-users | 메일 신뢰 사용자 지정 파일 |
/etc/mail/domaintable | 다중 메일 서버를 위한 도메인 기록 파일 |
/etc/mail/spamassassin/ | 스팸 메일 등록 설정 파일 위치 디렉토리 |
/var/spool/mqueue/ | 메일 송신측의 사용자 메일 임시 저장 디렉토리 |
/var/mail/<사용자이름> | 메일 수신측의 사용자 메일 저장 파일 읽으면 홈폴더의 mbox로 옮김 |
# vi /etc/mail/sendmail.cf /* 주설정 파일 */
-> 초기에 만들어진 프로그램이라 설정 파일이 굉장히 복잡하다. 자주 사용하는 몇가지만 알아보자
- 매일 호스트 지정
|
89 Cwlocalhost 90 # file containing names of hosts for which we receive email 91 Fw/etc/mail/local-host-names |
|
-> 호스트를 지정할수 있다. Cwmail.linux.example.com 처럼 하나하나 적어도된다.
-> 너무 많아질 경우 Fw /etc/mail/local-host-names 에 추가한다. 보통 Cw는 손대지 않고 local-host-names 파일을 편집한다.
- 메일 호스트 강제 지정
|
93 # my official domain name 94 # ... define this only if sendmail cannot automatically determine your domain 95 #Dj$w.Foo.COM |
|
-> sendmail 자신의 호스트명을 알아내지 못하는 실수가 있을 경우 지정된 도메인으로 작동될 수 있게 해주는 지정이다. 기본적으로 주석처리 되어 있으므로 주석을 제거한다. 보통 DNS 이름을 잘 찾지 못하는 경우 Dj를 자신의 도메인으로 지정한다.
|
120 # Hosts for which relaying is permitted ($=R) 121 FR-o /etc/mail/relay-domains |
|
-> /etc/mail/access 파일이 있어 보통 설정하지 않는다.
- 한글 처리 지정
|
170 # strip message body to 7 bits on input? 171 O SevenBitInput=False 172 173 # 8-bit data handling 174 #O EightBitMode=pass8 |
|
-> 8비트 데이터를 설정할 수 있도록 설정하면 한글을 사용할 수 있다. (174번째줄 주석 제거)
- 메일 엘리어스 지정
|
179 # location of alias file 180 O AliasFile=/etc/aliases |
|
-> 메일에 관한 엘리어스를 지정할 수 있다.
-> 엘리어스에 많은 계정을 포함시켜놓으면 한꺼번에 메일을 보낼 수 있다.
- 메일 용량 제한 지정
|
185 # maximum message size 186 #O MaxMessageSize=0 |
|
-> 한번에 전달할 수 싱는 메일 크기를 정한다. (단위는 Bytes) 0이면 제한이 없는것이다.
- SMTP 접속 메세지 지정
|
443 # SMTP initial login message (old $e macro) 444 O SmtpGreetingMessage=$j Sendmail $v/$Z; $b |
|
-> telnet 으로 메일 서버의 25번 포트로 접속 하였을때 sendmail 정보를 나타나도록 설정하는 옵션이다.
-> 보안상 버전정보를 노출하지 않는 것이 좋다.
# vi /etc/mail/sendmail.cf /* 변경 권장 */
DJmail.exampl.com
...
DZexampe.com
...
O SmtpGreetingMessage=$Z; $b
|
# Check the /usr/share/doc/sendmail/README.cf file for a description # of the format of this file. (search for access_db in that file) # The /usr/share/doc/sendmail/README.cf is part of the sendmail-doc # package. # # by default we allow relaying from localhost... Connect:localhost.localdomain RELAY Connect:localhost RELAY Connect:127.0.0.1 RELAY /* 릴레이 추가 */ Connect:example.com RELAY Connect:203.240.50 RELAY Connect:From:user01@example.com RELAY Connect:To:user02@example.com RELAY /* 스팸방지 ( 거부 ) */ Connect:spammer@linux104.example.com REJECT Connect:linux104.example.com REJECT Connect:TLD REJECT Connect:192.168.1 REJECT |
|
# makemap hash /etc/mail/access < /etc/mail/access /* access 파일을 access.db 파일로 저장 */
-> 서비스는 access 파일을 읽지 않고 access.db 파일을 읽어 설정한다.
-> access.db 파일은 바이너리 파일로 cat 명령어로 읽을 수 없기때문에 ls -l 명령어로 시간을 간단히 확인한다.
키워드 | 설 명 |
OK | 다른 규칙에 의해 거부되는 메일이더라도 받아들이도록 한다. 이러한 행위가 릴레이를 허용해 주는 것은 아니지만 도메인 이름 조회가 실패하거나 거부 규칙에 적용되는 메일이라고 해도 이 규칙에 적용된다면 이 서버가 수신하게 된다. -> 무조건 허용 |
RELAY | 메일서버가 수신한 메일을 다른 메일서버로 대신 전달해 주는 기능을 담당한다. -> 중계 기능 허용 |
REJECT | 이 규칙에 해당되는 메일은 상대편에게 거부 메세지를 출력해 주고 거부한다. -> 허용 거부, 사용자에게 알림 거부 메세지 0 |
DISCARD | 이 규칙에 해당되는 메일은 특별한 알림 작업 없이 거부된다. 스팸메일 거부에 가장 적당한 옵션이다. -> 허용 거부, 사용자에게 알림 거부 메세지 X |
SKIP | 도메인 이름과 IP 주소 규칙에 대해서만 사용할 수 있는 행동으로 메일에 대한 수신 규칙 탐색을 취소해 버린다. 즉 이 규칙에 적용되는 메일은 기본 수신 규칙에서 정의한 바를 따르게 된다. |
ERROR:### 반응문자열 | RFC 821에서 정의된 에러 번호를 ### 위치에 기록하는 방법으로 메일 발송자에게 필요한 거부 메세지를 보내 줄 수 있다. 예를 들자면 ERROR:550 "We Don't accept mail from spammers" 같은 규칙은 550 에러와 함께 스팸 메일을 수신하지 않는다는 메세지를 나타내 줄수 있다. |
- 메일 실습
|
........중략........ [수정전] 95 #Dj$w.Foo.COM [수정후] 95 Djmail.linux2XX.example.com <----- 주석 제거 후 내용 변경 ........중략........ [수정전] 163 DZ8.13.8 [수정후] 163 DZsmtp-information <----- 정보 변경 ........중략........ [수정전] 174 #O EightBitMode=pass8 [수정후] 174 O EightBitMode=pass8 <----- 주석 제거 ........중략........ [수정전] 265 O DaemonPortOptions=Port=smtp,Addr=127.0.0.1, Name=MTA <---- 'Addr=127.0.0.1' 삭제 [수정후] 265 O DaemonPortOptions=Port=smtp, Name=MTA ........중략........ [수정전] 444 O SmtpGreetingMessage=$j Sendmail $v/$Z; $b [수정후] 444 O SmtpGreetingMessage=$Z; $b <----- 정보 변경 ........중략....... |
|
# vi /etc/mail/local-host-names
|
# local-host-names - include all aliases for your machine here. linux.example.com mail.linux.example.com |
|
|
# Check the /usr/share/doc/sendmail/README.cf file for a description # of the format of this file. (search for access_db in that file) # The /usr/share/doc/sendmail/README.cf is part of the sendmail-doc # package. # # by default we allow relaying from localhost... Connect:localhost.localdomain RELAY Connect:localhost RELAY Connect:127.0.0.1 RELAY Connect:mail.linux.example.com RELAY /* 자기 서버 */ Connect:example.com RELAY Connect:192.168.17 RELAY |
|
# makemap hash /etc/mail/access < /etc/mail/access
-확인
# mailx user01
Subject : test
testset
.
Cc:<Enter>
# mailx -u user01
-메일 포워딩
# vi /etc/aliases /* 마지막 줄에 추가 */
mail01: mail02
-> mail01 에 메일을 보내면 mail02에 전송된다. (= mail01는 가상 유저로 useradd로 생성 안해도된다. mail02는 있어야함 )
# newaliases ( # makemap hash /etc/mail/aliases < /etc/mail/aliases )
-> access와 마찬가지로 aliases도 aliases.db 파일을 읽어 파일을 적어야한다.
-> makemap hash 를 쓸수도 있다.
# praliases | grep mail /* access.db 와 달리 aliases.db는 확인 해 볼수 있는 명령어가 존재한다. mail이 기록 되었는지 확인 */
# mailx mail01
# mailx -u mail02
-> mail01에게 보낸 메일이 온것을 알 수 있다.
# vi /etc/aliases /* 마지막 줄에 추가 */
teammain: team01,team02,user01@linux.example.com
teamsub: :include:/etc/mail/list/teamsub.list
- teammain 에게 메일을 보내면 team01, team02 , linux.example.com 서버의 user01 에게 메일이 전송된다.
- teamsub 에게 메일을 보내면 /etc/mail/list/teamsub.list 에 기록된 사용자 모두에게 메일이 전송된다.
# newaliases
# praliases | grep team
# mailx teammain /* teammain 에게 메일을 보낸다 ( teammain이라는 유저는 존재하지 않는다 )*/
# mailx -u team01
# mailx -u team02
# mailx -u user01@linux.example.com
# mkdir /etc/mail/list
# vi /etc/mail/list/teamsub.list /* teamsub로 메일을 보내면 받을 사용자를 추가한다. 한줄에 한 사용자씩 추가한다.*/
[참고] 모든 사용자 추가하기
# cat /etc/passwd | awk -F: '$3 > 499 && $3 < 60000 {print $1}' > /etc/mail/list/teamsub.list
# newaliases
# mailx teamsub
/* mailx -u USER 명령어로 몇몇 사용자를 확인한다. */
(실무 예) /etc/aliases 파일의 대표적인 사용 예(EX: 메일링 리스트)
공지 메일(회사내의 모든 사용자에게 공지 메일 발송)
(회사내의 특정 팀에게 공지 메일 발송)
- 메일 클라이언트 프로그램
'Linux > Linux Network' 카테고리의 다른 글
NFS (0) | 2017.09.14 |
---|---|
Web Mail Server (0) | 2017.09.13 |
FTP (0) | 2017.09.13 |
WEB Server ( Apache ) (0) | 2017.09.11 |
DNS_2 ( Master DNS / Slave DNS ) (0) | 2017.09.11 |