달력

32024  이전 다음

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31

************************************
SendMail  (http://www.sendmail.org)
작성자 : 유희성
************************************


전자메일이 작동하는 방식은 일반편지와 유사하다.
일반 편지는 종이에 편지를 써서 우체통에 넣어 받는 사람, 보내는 사람의 주소, 이름을 적어 우체통에 넣는다.
그러면 우체통을 우체국 직원들이 체크해서 우체국으로 가져간다.
우체국에서는 해당지역으로 배달되는 것과 외부로 나가는 것을 분리한다.
관할 지역의 메일은 다시 우체부가 집으로 배달해 주고 외부 편지는 중앙 우체국으로 보낸다.

MUA(Mail User Agent) : 연필과 종이에 해당된다.
MDA(Mail Delivery Agent): 편지를 전달하는 우체부
MTA(Mail Transfer Agent): 외부로 메일을 보내는데 사용하는 트럭, 비행기, 기차 등등....

MTA 로는 sendmail, zmail, MMDF 등등이 있다.

Sendmail 은 크게 프로그램인 sendmail과 config 파일인 sendmail.cf로 구분할 수 있다.

Config 파일은 ----  sendmail.cf
       |--  Queue file
       |--  Aliases File 로 나누어 진다.


전송방식 =>>>>>  칠판에 그림 참조.


POP  : 메일서버에서 사용자의 편지를 자신의 MDA로 완전히 이동시킴.
IMAP : 메일서버에서 사용자의 편지를 자신의 MDA로 복사(참조).

먼저 자신의 PC에 메일 프로그램이 깔려있는지 확인하자.

rpm -qa | grep sendmail 이라고 해서 뭐가 나와야 한다. 없다면 깔아야 한다.

rpm -qi sendmail   ===> sendmail 정보확인.
rpm -ql sendmail   ===> sendmail이 어디에 설치되어있나???

그런데 메일 프로그램만 깔려있으면 안된다. 편지를 받아보려면 imap 이라는 패키지가 설치되어있어야 한다.
(pop3 와 imap이 동시에 설치됨)

rpm -qa | grep imap
rpm -qi imap  이라고 체크해보자... (없으면 linux 시디 넣고 깔던지 다운로드 해서 깔던지 해야한다)

뭔가 나왔다면 이녀석들을 돌릴 준비를 해줘야 한다.
일단 우리는 슈퍼데몬(xinetd) 환경에서 돌려줄 것이다.
슈퍼데몬에서 돌아가는지 확인해 보자.

vi /etc/xinetd.d/ipops  에 보면

disable=no 라고 되어있어야 한다.  yes 라면 no 로 바꾸어준다.

vi /etc/xinetd.d/imaps   파일도 위와 같이 고쳐준다.

이제 슈퍼데몬을 restart 시킨다.

/etc/rc.d/init.d/xinetd restart  라고 실행한다.

telnet localhost 110   이라고 쳐서 ok 뜨면 된거다. 110번은 pop3 이다.
안된다면 /etc/xinet.d/ 에 있는 위의 설정파일을 확인해보자

빠져 나올때는 quit 라고 입력한다.

만약 위의 테스트중 계속 에러발생시 포트가 막혀있을 가능성도 있을수 있다.
/etc/services  파일을 보면 그 안에 각 포트 설정이 되어있는데
해당 포트에 주석처리(#)가 되어있는지 잘 살펴보기 바란다.

이제 편지를 받을준비와 보낼 준비는 되었다.
그럼 이제 sendmail 을 설정 해 주자. 설정 파일은 /etc/sendmail.cf 이다.

**************************
SENDMAIL 설정하기
**************************

vi /etc/sendmail.cf

내용이 무쟈게 길다... 줄번호를 붙여서 본다. :set nu 라고 vi 명령창에 쓴다.. 그럼 줄번호 보인다.

여기서 sendmail.cf 파일의 설정 규칙을 잠깐 짚고 넘어가자.

1. 빈 행은 무시한다.
2. # 으로 시작하는 행은 주석처리로 무시한다.
3. C,D,F,H,K,M,O,P,R,S,V 로 시작하는 행은 설정행이며 이들은 각각 하나의 설정명령이다.
4. 하나의 빈 공간 또는 여러개의 빈 공간(TAB) 으로 시작하는 행은 앞 행의 연장이다.

********************
센드메일의 설정 명령어
********************

C : 클래스 정의
D : 매크로 정의
E : 환경변수 지정
F : 클래스 정의 (file, pipe)
H : Header 정의(Format of header)
K : Key file 정의(map 정의)
M : mailer 정의
O : 옵션
P : Message Precedences
R : 덮어쓰기(Rewrite)
S : Ruleset(새로운 규칙지시자)
T : Truseted users( 사용자 지정)
V : 설정 파일 버전


81번째 줄 정도에 Cwlocalhost 이라고 되어있는 부분이 보일것이다.
이 부분은 C설정 명령으로 localhost를 w 클래스로 정의하는 행이다. 기본적으로 localhost가 설정되어있다.
C 명령어는 문자열을 정의한다.

설정 예 : Cwlocalhost yadong.com dolpung.pe.kr
(이때 각 도메인은 진짜 등록되어있어야 한다. 요즘에는 진짜 도메인 아니면 메일이 안간다.
그리고 네임서버 상에서도 제대로 설정이 되어있어야 한다)


84번째 줄 정도에 보면  fw/etc/mail/local-host-names 라는 부분이 보일것이다.
이 부분은 메일을 수신할 호스트 이름을 명시할 파일의 위치를 설정이다.
주석처리되어있으면 절대 안된다. (sendmail 8.9 이하 버젼은 아마 sendmail.cw 파일로 되어있을것이다.)

179번째 줄 근처에 보면
#MaxMessageSize=1000000  이라는 부분이 있는데 여기는 메일의 최대크기를
지정해 주는 문장이다. 그런데 지금은 주석처리가 되어있다. 이렇게 주석처리가 되어있다면 메일크기의
제한이 없다는 것이다. 이부분을 주석을 풀고 용량을 조절하면 개인당 메일용량을 조정할 수 있게 된다.
이곳은 최대 메세지 크기 제한이다.

만약 메일 공간의 용량을 제한하고 싶다면 sendmail.cf 파일의 제일 아랫부분(1484번째 줄인가??)에

Mlocal,         P=/usr/bin/procmail, F=lsDFMAw5:/|@qSPfhn9, S=EnvFromL/HdrFromL, R=EnvToL/HdrToL,
                    M=10485760, T=DNS/RFC822/X-Unix,

이런 부분이 있을꺼다. 여러분의 현재 설정에서는 M=10485760 이라는 부분이 없을텐데
이 부분을 추가해준다. 쉼표도 찍어야겠죠?
이렇게 하면 받는 메일의 용량을 10Mb 로 제한을 하게된다.


274 번 째 줄 근처에
O QueueDirectory=/var/spool/mqueue   라는 부분이 있는데 이부분은 큐 디렉토리를 설정해준다.

293 번째 줄에 보면
O TimeOut.queuereturn=5d   라고 되어있는데 메일을 보내려는 호스트에 문제 발생시 큐 디렉토리에
                           저장하게 된다.

머 이밖에 많은 설정이 있지만 일단 생략하고 자세한것은 따로 책을 보기 바란다.

이제 sendmail.cf 파일의 설정은 대충(정말 대충이다 ㅡ,.ㅡ) 끝났다.

이제 해야할 일은 센드메일의 수신자를 설정하는 일이다. 위에서 sendmail.cf 파일을 설정할때 메일을 받을곳의
호스트 이름을 명시할 파일의 이름이 local-host-names 라는 파일이라는것을 우리는 알았다.
이 파일은 /etc/mail/ 디렉토리 안에 있다.
vi /etc/mail/local-host-names  라고 쳐서 아래와 같이 입력한다.

자기호스트.com      # yadong.com 이 되겠지요??

저장하고 나온다.

이렇게 하면 들어오는 메일의 수신자를 설정하게 된것이다.

이제 남은 설정은 센드메일로의 접근을 제어해 주는 일이 남았다.

/etc/mail/access 라는 파일이 그 역할을 해준다. 이 파일이 해주는 역할은 특정 호스트나 도메인의 접근을
허락, 거부 여부를 설정할수 있는 중요한 파일이다.

vi /etc/mail/access 라고 입력하자..

그럼 파일 내용중에 아래와 같은 부분이 있을것이다.

localhost.localdomain  RELAY
localhost   RELAY
127.0.0.1   RELAY

위의 상황은 자기 자신, 즉 localhost 에서 보내는 편지는 통과(RELAY) 시키겠다고 적어놓은 것이다(default값임)
위의 아랫쪽에 자기의 주소와 IP  번호를 입력하고 RELAY(통과) 시키자.

yadong.com   RELAY
211.108.242.host  RELAY

이렇게 해주게 됨으로써 yadong.com 에서 보내는 편지를 통과 시키겠다!!! 라고 설정이 끝났다.

만약 yadong.com   REJECT 라고 하면 어떻게 될까??
정답은 메일 수신이 안된다는 것이다... REJECT 는 특정호스트에서 오는 편지를 접근 못하게(REJECT) 하는 역할을 한다.

만약 스팸메일이나 받기 싫은 메일이 계속 오게 되면 이곳에 HOST 이름을 적어주던지 IP 번호를 적어주고 REJECT 시키면
메일이 거부된다.

참고로 이 파일(access)는 /etc/sendmail.cf 파일에서
'Kaccess hash -o /etc/mail/access' 로 지정되어있어야 한다.(default 값이니까 안건드려도 된당)

그리고 리눅스에서 센드메일은 기본적으로 localhost 이외의 모든 호스트에 대해서 RELAY 를 허용하지 않도록 설정
되어 있다. 그러니까 이 파일에 RELAY 시킬 호스트 이름과, REJECT 시킬 호스트 이름을 적어줘야 한다.


이제 수정이 끝난 access 파일을 데이터베이스화 시켜주어야 한다.
센드메일은 access 파일을 사용하지 않고 access.db  라는 dbm 파일을 이용한다.

cd /etc/mail
makemap hash /etc/mail/access < /etc/mail/access   라고 입력한다. 에러가 당연히 없어야겠징???

이렇게 다 했으면 센드메일 데몬을 다시 시작 시켜주자.

/etc/rc.d/init.d/sendmail stop
/etc/rc.d/init.d/sendmail start

라고 해주자... 물론 restart 해줘도 된다. 오케바리 떴으면 이제 메일을 보내보자.
수신자는 root@dolpung.pe.kr 로 보내주세요..

mail root@dolpung.pe.kr  이라고 입력한다.
subject:  <===  이부분에 제목을 입력하고 그냥 엔터친다.
프롬프트가 그냥 깜빡이고 있으면 내용을 좌아아아아악 적어준다.

다 입력을 하였으면 ctrl+d 를 살포시 눌러준다. 그럼 Cc:  라는 곳이 뜨는데 참조 이니까 그냥 엔터로 무시한다.


 

Posted by tornado
|