#################
📌 Mail 서버 📌
#################

메일 서버 포트: 25
MTA(Mail Transfer Agent): 메일을 보내는 프로그램 ( 메일 서버 )
SMTP(Simple Mail Transfer Protocol): 메일 전송 프로토콜
MUA(Mail User Agent): 메일 송수신 프로그램
웹메일: 웹브라우저를 이용해서 메일을 주고받는 프로그램
webmaster@sbs.com 사용자가 webmaster@kbs.com 에게 메일을 발송한다.
메일을 전송하는 프로그램을 이용해서 전송한다. (아웃룩, 썬더버드 ...)
메일은 DNS와 연동해야 하므로 메일을 주고 받기 위해서는
도메인이 등록되어 있어야 하고 메일서버의 RR 에 MX에 대한 설정을 해야한다.
네임서버에서 메일에 대한 설정
MX(Mail eXchanger)레코드는 메일서버를 설정할 때 사용한다.
도메인명 IN MX 우선순위 메일서버호스트명

실습> 메일 서버 확인하기
dig 을 이용하는 경우
사용법:
dig 도메인명 mx
dig mx 도메인명
[root@ns1 ~]# dig naver.com mx
; <<>> DiG 9.11.4-P2-RedHat-9.11.4-26.P2.el7_9.10 <<>> naver.com mx
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 37783
;; flags: qr rd ra; QUERY: 1, ANSWER: 3, AUTHORITY: 2, ADDITIONAL: 3
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;naver.com. IN MX
;; ANSWER SECTION:
naver.com. 300 IN MX 10 mx1.naver.com.
naver.com. 300 IN MX 10 mx2.naver.com.
naver.com. 300 IN MX 10 mx3.naver.com.
;; AUTHORITY SECTION:
naver.com. 155398 IN NS ns2.naver.com.
naver.com. 155398 IN NS ns1.naver.com.
;; ADDITIONAL SECTION:
ns2.naver.com. 144798 IN A 125.209.249.6
ns1.naver.com. 144798 IN A 125.209.248.6
;; Query time: 5 msec
;; SERVER: 200.200.200.3#53(200.200.200.3)
;; WHEN: 목 1월 26 20:23:26 KST 2023
;; MSG SIZE rcvd: 166
[root@ns1 ~]# nslookup
> set type=mx
> naver.com
Server: 200.200.200.3
Address: 200.200.200.3#53
Non-authoritative answer:
naver.com mail exchanger = 10 mx3.naver.com.
naver.com mail exchanger = 10 mx1.naver.com.
naver.com mail exchanger = 10 mx2.naver.com.
Authoritative answers can be found from:
naver.com nameserver = ns1.naver.com.
naver.com nameserver = ns2.naver.com.
ns2.naver.com internet address = 125.209.249.6
ns1.naver.com internet address = 125.209.248.6
실습> 네임서버 설정하기
메일서버 설정은 DNS 서버를 구축한 후에 설정한다.
여기서는 이미 위에서 구축했기 때문에 생략한다.
실습> sbs.com 에 대한 메일 설정하기
DNS1 : 200.200.200.3
DNS2 : 200.200.200.4
DNS 에서 메일서버를 설정하는 형식:

sbs.com 도메인을 추가하고 포워드존 파일을 생성한다.
[root@ns1 ~]# cd /var/named/
[root@ns1 named]# vi /etc/named.rfc1912.zones
zone "sbs.com" IN { type master; file "sbs.com.zone"; allow-update { none; }; };
sbs.com 도메인에 대한 포워드존 파일에 메일(MX) 설정을 추가한다.
[root@ns1 named]# vi sbs.com.zone

[root@ns1 ~]# systemctl restart named
실습> kbs.com 에 대한 메일 설정하기
DNS1 : 200.200.200.3
DNS2 : 200.200.200.4

kbs.com 도메인을 추가하고 포워드존 파일을 생성한다.
[root@ns1 ~]# cd /var/named/
[root@ns1 named]# vi /etc/named.rfc1912.zones
zone "kbs.com" IN { type master; file "kbs.com.zone"; allow-update { none; }; };
kbs.com 도메인에 대한 포워드존 파일에 메일(MX) 설정을 추가한다.
[root@ns1 named]# vi kbs.com.zone

[root@ns1 ~]# systemctl restart named
실습> 방화벽에서 메일서버 허용하기
1. 방화벽 룰 설정
ns1에서 방화벽에서 메일서비스를 허용할 수 있도록 룰을 설정한다.
[root@ns1 ~]# vi /etc/sysconfig/iptables

[root@ns1 ~]# iptables-restore /etc/sysconfig/iptables
[root@ns1 ~]# iptables -nL

2. 방화벽 룰 설정
ns2에서 방화벽에서 메일서비스를 허용할 수 있도록 룰을 설정한다.
[root@ns2 ~]# vi /etc/sysconfig/iptables

[root@ns2 ~]# iptables-restore /etc/sysconfig/iptables
[root@ns2 ~]# iptables -nL

실습> 메일 서버 다운로드
메일서버는 Qmail을 사용한다.
cd
mkdir qmail; cd qmail
yum -y install wget
wget linuxmaster.net/Qmail/daemontools-0.76.tar.gz
wget linuxmaster.net/Qmail/qmail-1.03.tar.gz
wget linuxmaster.net/Qmail/qmail-ej-cocktail-14.tar.gz
wget linuxmaster.net/Qmail/ucspi-tcp-0.88.tar.gz
wget linuxmaster.net/Qmail/vpopmail-5.4.13.tar.gz
qmail 설치 서버 : 200.200.200.3
-- 전체 설치 순서 --
1. 프롤로그
2. ucspi-tcp 설치
3. daemontools 설치
4. qmail 설치
5. qmail 부트 스크립트
6. DNS 등록
7. 메일 발송 테스트
8. vpopmail + cdb 설치
9. vpopmail + mysql 설치
10. qmail과 vpopmail 시작
-- 전체 설치 순서 --
1. 프롤로그
o qmail 이란?
일반적으로 Unix/Linux 기반의 MTA는 Sendmail을 많이 사용하고 있습니다.
그러나 Sendmail은 프로그램이 단일화 되어 보안에 상당히 취약하며
사용함에 있어서도 불편한점이 많고 또 많은 전문지식을 필요로 합니다.
하지만 qmail은 모듈방식을 채택하여 사용하기 편리하며 그 기능또한 매우 다양 합니다.
o qmail 제작자와 제작 의도
qmail은 D. J. Bernstein 교수가 제작했으며 큐메일은 보안에 매우 강력합니다.
또한 하루에 수십, 수백 만통의 메일을 배달해야만 하는 대형 서버들의 qmail 사용과
제작자의 보안에 대한 보장은 그 신뢰도를 더해 주고 있습니다.
o qmail 메일의 특징과 장점
-안전성
qmail을 통해 시스템에 침입할 수 없습니다.
실제 qmail은 발표된 이후로 아직까지 알려진 보안 사고가 없으며 Bernstein 교수가 qmail을
만들게 된 동기 역시 정기적으로 알려지곤 하는 Sendmail이나 다른 MTA의 보안홀 때문이라고 합니다.
-신뢰성
qmail은 메세지를 절대 잃어버리는 일이 없습니다.
qmail은 NFS 파일 시스템상에서도 안전한 Maildir 형태 메일함의 선구자입니다.
Maildir 형태는 qmail에서 처음으로 사용하기 시작한 메일함 형식으로 배달이 이루어 지고 있는 동안에
시스템이 다운되더라도 파일 시스템에 문제가 생기지 않는 유일한 메일함이며 NFS 파일 시스템상에서
동시에 여러개의 메일이 배달되고 있는 동안에도 사용자가 메일을 읽을 수 있는 안전한 메일함입니다.
-속도
qmail은 메세지를 Sendmail보다 빠르게 처리하면서 안정성을 잃지 않습니다.
특히 수 많은 메일을 동시에 배달해야 하는 메일링 리스트의 경우 가장 빠른 성능을 보이게 됩니다.
한 예를 들면 1000개 이상의 각기 다른 호스트에 메일을 배달하는데 76초 밖에 걸리지 않기도 합니다.
-간단함
qmail은 다른 어떠한 MTA(Mail Transfer Agent 메일서버) 보다도 작습니다.
포워딩, 알리아싱, 메일링 리스트 메카니즘을 독립적으로 가지고 있는 다른 MTA들과는 다르게
qmail은 한가지의 간단한 포워딩 메카니즘을 사용해 모든 기능을 구현하였습니다.
다른 MTA가 "빠르고 불안전한 -> 느린 큐" 방식의 배달 방식을 사용하는것 과는 달리
qmail은 새로운 아이템을 즉시 큐에 넣으므로 "빠른 큐"라는 하나의 배달 방식만을 사용합니다.
-능률
qmail은 오래된 486 16M 시스템에서 하루에 70,000통 이상의 메일을 처리하는데
무리가 없을 정도로 그 성능과 능률이 뛰어납니다.
-메일링 리스트
qmail은 일반유저가 메일링 리스트를 제어할 수 있기 때문에 관리자의 업무가 줄어드는데 도움을 줍니다.
-가상 호스트 구축
쉬운 가상 호스트 구축으로 qmail은 다중 도메인 지원의 선구자입니다.
-직관적인 관리
qmail은 최소한의 작업으로 관리가 손쉽습니다.
-유연한 배달 프로그램
qmail은 외부 메일 프로세서를 위한 강력한 인터페이스를 제공합니다.
-다양한 OS 지원
qmail은 동일한 소스로 포팅이 필요 없이 대부분의 UNIX 시스템을 지원합니다.
AIX, BSD/OS, FreeBSD, HP/UX, Irix, Linux, NetBSD, OpenBSD, OSF/1, SunOS, Solaris, 기타..
o qmail의 모듈화 디자인
qmail은 Bernstein 교수의 다른 소프트웨어들 처럼 특정한 목적을 가지고 있는 작은 프로그램들의
모음이라 할 수 있는데 예를 들어 네트워크로 부터의 메일 수신은 qmail-smtpd가
외부로의 전송은 qmail-remote가 메일큐의 관리는 qmail-queue가 전담하는 식입니다.
o 다양한 애드언과 패치
qmail의 모듈화된 구조는 새로운 기능을 추가하기 위한 다양한 에드언들의 개발을 쉽게 함으로써
이미 수많은 에드언들이 개발/제공되고 있으며, 관련 프로젝트도 많이 진행되고 있습니다.
몇가지 예를 들어 보겠습니다.
-vpopmail
vpopmail은 qmail하에서 가상 도메인/유저를 쉽게 관리하는 통합 관리 도구로 qmailadmin과 같이 사용함으로써 모든 관리를 웹으로 편리하게 할 수 있는 소프트웨어 입니다.
-qmail-ldap
LDAP와 qmail의 연동을 위한 패키지와 문서와 qmail이 어떻게 메세지를 처리하는지 이해하는데 큰 도움이 되는 그림 (big qmail picture)을 제공합니다.
-qmail + mysql
qmail은 mysql과 연동해서 사용할 수 있으므로 손쉬운 웹기반 인터페이스를 제작하는데 유용합니다.
-qmail-Scanner
qmail용 메일 바이러스 검사기로 대부분의 유료 바이러스 검사기와 연동하여 사용할 수 있습니다.
-Maildrop
procmail을 대체하는 로컬 MDA, 필터링 도구와 연동하여 강력한 필터링 서비스가 가능합니다.
-ezmlm
qmail의 제작자가 만든 메일링 리스트 관리 도구로 설정과 관리가 매우 간단하고 쉽습니다.
-qmail-smtpd-auth
유동 IP 사용자들의 SMTP 릴레이 지원을 위한 패치
이 외에도 필요에 따라 사용할 수 있는 수많은 에드언과 패치가 존재하며, 관련 정보와 뉴스들은 http://qmail.org (영문)의 웹 사이트와 qmail 메일링 리스트등과 한국 qmail 홈페이지에서
찾아 볼 수 있으며 qmail과 MySQL을 연동한 한글 웹메일 프로젝트도 진행중입니다.
qmail 메일링 리스트의 주소는 qmailannounce-subscribe(at)list.cr.yp.to 입니다.
o qmail 설치
qmail 을 설치할 때 구성할 수 있는 경우의 수는 매우 다양합니다.
어떤 인증 모듈을 사용하는지, IMAP 지원 여부, 스팸 필터링 기능 지원 여부, qmailAdmin 지원 여부, Webmail 지원 여부 등등에 따라 수많은 경우가 있을 수 있습니다.
2. ucspi-tcp 설치
최신버전 : http://cr.yp.to/ucspi-tcp/install.html
소스에 있는 README 파일을 참고한다.
CentOS 에서는 gcc 버전 4 이상을 사용하기 때문에 소스를 그대로 설치하면 에러가 나므로 헤더파일을 수정해야 된다.
큐메일은 혼자서 작동하지 않기 때문에 다른 데몬과 연계해서 실행을 해야만 한다.
큐메일의 실행은 xinetd와 tcpserver로 할 수 있으나 보안과 속도면에서 큐메일과 잘 맞는 tcpserver로 구축을 하도록 한다.
ucspi-tcp는 UNIX Client-Server Program Interface 로써 tcpserver와 tcpclient 전송제어 프로토콜(TCP client-server)을 구축하는데 좀더 편리하게 사용할 수 있도록 제작된 command-line 툴 이다.
이 프로그램의 자세한 정보는 http://cr.yp.to/ucspi-tcp.html 이곳을 참조하시면 된다.
-- 설치 순서 --
0. 컴파일러 설치
1. 소스 다운로드
2. 압축 해제
3. 헤더파일 수정
4. 소스 컴파일
5. 바이너리 설치
6. 설치 파일 확인
-- 설치 순서 --
0. 컴파일러 설치
[root@ns1 qmail]# yum -y install gcc make
1. 소스 다운로드
ucspi-tcp 소스 : http://cr.yp.to/ucspi-tcp/ucspi-tcp-0.88.tar.gz
여기서는 이미 다운로드했으므로 다운로드 할 필요가 없다.
2. 압축 해제
업로드한 소스 파일의 압축을 해제한다.
[root@ns1 qmail]# tar xzf ucspi-tcp-0.88.tar.gz
[root@ns1 qmail]# cd ucspi-tcp-0.88
3. 헤더파일 수정
gcc 버전이 3(or 4)이상으로 업그레이드가 되었으므로 소스를 그대로 설치하면 에러가 나므로 헤더파일을 아래처럼 수정해야 된다.
[root@ns1 ucspi-tcp-0.88]# vi error.h
-- error.h --
#include <errno.h> // <-- 추가
#ifndef ERROR_H
#define ERROR_H
// extern int errno; // <-- 주석처리
:
:
-- error.h --
4. 소스 컴파일
make 명령어를 이용해서 소스를 컴파일 한다.
[root@ns1 ucspi-tcp-0.88]# make
5. 바이너리 설치
make setup check 를 이용해서 컴파일된 바이너리 파일을 시스템에 설치한다.
[root@ns1 ucspi-tcp-0.88]# make setup check
6. 설치 파일 확인
아래와 같은 파일들이 설치가 되었다면 시스템에 정상적으로 설치된 것이다.
[root@ns1 ucspi-tcp-0.88]# ll /usr/local/bin
합계 296
-rwxr-xr-x. 1 root root 10568 1월 26 21:05 addcr
-rwxr-xr-x. 1 root root 14640 1월 26 21:05 argv0
-rwxr-xr-x. 1 root root 157 1월 26 21:05 date@
-rwxr-xr-x. 1 root root 10568 1월 26 21:05 delcr
-rwxr-xr-x. 1 root root 203 1월 26 21:05 finger@
-rwxr-xr-x. 1 root root 18832 1월 26 21:05 fixcrio
-rwxr-xr-x. 1 root root 287 1월 26 21:05 http@
-rwxr-xr-x. 1 root root 149 1월 26 21:05 mconnect
-rwxr-xr-x. 1 root root 14696 1월 26 21:05 mconnect-io
-rwxr-xr-x. 1 root root 35608 1월 26 21:05 rblsmtpd
-rwxr-xr-x. 1 root root 18896 1월 26 21:05 recordio
-rwxr-xr-x. 1 root root 143 1월 26 21:05 tcpcat
-rwxr-xr-x. 1 root root 43544 1월 26 21:05 tcpclient
-rwxr-xr-x. 1 root root 22984 1월 26 21:05 tcprules
-rwxr-xr-x. 1 root root 18824 1월 26 21:05 tcprulescheck
-rwxr-xr-x. 1 root root 51864 1월 26 21:05 tcpserver
-rwxr-xr-x. 1 root root 157 1월 26 21:05 who@
소스 설치가 완료되면 ucspi-tcp-0.88 디렉토리에서 상위디렉토리로 이동한다.
[root@ns1 ucspi-tcp-0.88]# cd ..
3. daemontools 설치
-- 설치 순서 --
1. 소스 다운로드
2. /package 디렉토리 생성
3. 압축 해제
4. 헤더파일 수정
5. 소스 컴파일 & 바이너리 설치
6. 설치 파일 확인
7. 설정 리로드
8. 설치된 파일 확인
-- 설치 순서 --
1. 소스 다운로드
daemontools 소스 : http://cr.yp.to/daemontools/install.html
http://cr.yp.to/daemontools/daemontools-0.76.tar.gz
여기서는 이미 다운로드했으므로 다운로드 할 필요가 없다.
2. /package 디렉토리 생성
/package 디렉토리를 생성한다.
[root@ns1 qmail]# mkdir -m 1755 /package
[root@ns1 qmail]# ls -ld /package/
drwxr-xr-t. 2 root root 6 1월 26 21:09 /package/
3. 압축 해제
/package 디렉토리에 압축을 해제한다.
[root@ns1 qmail]# tar xzf daemontools-0.76.tar.gz -C /package
4. 헤더파일 수정
gcc 버전이 3(or 4)이상으로 업그레이드가 되었으므로 소스를 그대로 설치하면 에러가 나므로 헤더파일을 아래처럼 수정해야 된다.
[root@ns1 qmail]# cd /package/admin/daemontools-0.76
[root@ns1 daemontools-0.76]# vi src/error.h
-- src/error.h --
/ Public domain. /
#include <errno.h> // <-- 추가
#ifndef ERROR_H
#define ERROR_H
// extern int errno; <-- 주석처리
:
: (생략)
-- src/error.h --
5. 소스 컴파일 & 바이너리 설치
package/install 명령어를 이용해서 소스를 컴파일하고 컴파일된 바이너리 파일을 설치한다.
[root@ns1 daemontools-0.76]# package/install
6. init 수정
CentOS 6.x 부터는 SysV init 스크립트를 Upstart 라는 새로운 스크립트 시스템이 적용되어 설정파일을 /etc/inittab 에 두지 않고 /etc/init 디렉토리에 파일로 둔다.
형식은 서비스명.conf 라는 파일로 만들고 스크립트를 실행한다.
스크립트 실행방법은 2가지로 reboot, /sbin/initctl 명령어를 이용한다.
[root@ns1 daemontools-0.76]# tail /etc/inittab
:
: (생략)
SV:123456:respawn:/command/svscanboot <-- 여기에 자동으로 추가되지만 의미없다.
CentOS 7 에서는 이 부분이 systemd로 변경되었기 때문에 아래처럼 사용한다.
[root@ns1 daemontools-0.76]# vi /etc/systemd/system/daemontools.service
-- /etc/systemd/system/daemontools.service --
[Unit]
Description=daemontools Start supervise
After=getty.target
[Service]
Type=simple
User=root
Group=root
Restart=always
ExecStart=/command/svscanboot /dev/ttyS0
TimeoutSec=0
[Install]
WantedBy=multi-user.target
-- /etc/systemd/system/daemontools.service --
daemontools 를 시작하고 활성화 시킨다.
[root@ns1 daemontools-0.76]# systemctl start daemontools.service
[root@ns1 daemontools-0.76]# systemctl status daemontools.service
[root@ns1 daemontools-0.76]# systemctl enable daemontools.service
8. 설치 프로세스 확인
ps로 확인해서 readproctitle 프로세스가 있으면 정상적으로 설치된 것이다.
#ps auxww | grep readproctitle
root 28124 0.0 0.1 1608 256 ? S 02:11 0:00 readproctitle service errors: ................................................................................................................................................................................................................................................................................................................................................................................................................
4. qmail 설치하기
qmail 소스 : http://www.qmail.org/qmail-1.03.tar.gz
qmail 한글 홈페이지 : http://qmail.kldp.net/phpbb/
-- 설치 순서 --
1. 소스 다운로드
2. 압축 해제
3. 칵테일 패치
4. concurrency limit 파일 수정
5. 유저, 그룹 추가
6. 소스코드 수정
7. 소스 컴파일
8. 시스템 설치
9. 도메인 등록
10. 설치된 파일 확인
11. 큐메일 데몬을 위한 디렉토리와 스크립트 파일 생성
12. rc 파일 생성
13. qmail 실행에 관련된 디렉토리 생성
14. qmail 실행에 관련된 4개의 run 파일 생성
15. 큐메일을 위한 로그 디렉토리 생성
16. 큐메일을 위한 Alias 파일 생성
17. sendmail 패키지 삭제
18. sendmail 링크 생성
19. 릴레이파일 생성
20. qmail 시작
21. qmail 서버 확인
22. qmail 부트 스크립트 생성
23. 데몬 시작/중지 확인
24. 메일 수신 설정
25. 메일 수신함 설정
27. MUA 프로그램 설치
26. 메일 사용자 추가
-- 설치 순서 --
큐메일은 AUTH 릴레이를 여러가지와 연동해서 사용을 할 수 있고 여기서는
AUTH 릴레이를 vchkpw에 맡기고, 큐메일은 사용만 가능하도록 설치를 할 것이다.
-시스템계정 (/etc/passwd)
-cmd5checkw (/etc/poppasswd)
-checkpassword + mysql (유저 데이터를 db에 저장)
-vchkpw (vpopmail pop 유저 데이터를 사용, db 또는 vpasswd)
칵테일패치 (최신버전 : http://people.kldp.org/~eunjea/qmail/patch/)
칵테일 패치는 qmail.kldp.org의 운영자인 임은재 님께서 제작하신 패치이며
큐메일을 사용하는데 있어 여러가지 편리한 패치가 종합적으로 되어 있기 때문에
여기서는 일일히 패치를 하나씩 찾아 해주는 번거로움을 줄이기 위해 칵테일 패치를 한다.
1. 소스 다운로드
공식 사이트에서 소스를 다운로드 한다.
http://www.qmail.org/qmail-1.03.tar.gz
http://people.kldp.org/~eunjea/qmail/patch/qmail-ej-cocktail-14.tar.gz
여기서는 이미 다운로드했으므로 다운로드 할 필요가 없다.
2. 압축 해제
압축된 파일들을 해제한다.
[root@ns1 daemontools-0.76]# cd -
[root@ns1 qmail]# tar xzf qmail-1.03.tar.gz
[root@ns1 qmail]# tar xzf qmail-ej-cocktail-14.tar.gz
3. 칵테일 패치
압축이 풀린 qmail 디렉토리로 이동해서 칵테일 패치를 한다.
만약 패치도중 hunk나 fail이 나온다면 큐메일 바닐라 소스(순정파일)가
아니므로 반드시 큐메일 바닐라 소스(순정파일)를 이용해야 한다.
만약 patch 명령어가 없으면 yum 으로 설치한다. (yum -y install patch)
[root@ns1 qmail]# cd qmail-1.03
[root@ns1 qmail-1.03]# yum -y install patch
[root@ns1 qmail-1.03]# patch -p1 < ../qmail-ej-cocktail-14/cocktail.patch
patching file Makefile
patching file Makefile-cert.mk
patching file TARGETS
patching file base64.c
patching file base64.h
patching file cdb_seek.c
patching file chkspawn.c
patching file conf-cc
patching file conf-spawn
patching file date822fmt.c
patching file dns.c
patching file error.3
patching file error.h
patching file ipalloc.h
patching file ipme.c
patching file qmail-control.9
patching file qmail-local.c
patching file qmail-remote.8
patching file qmail-remote.c
patching file qmail-send.9
patching file qmail-send.c
patching file qmail-smtpd.8
patching file qmail-smtpd.c
patching file qmail.c
patching file received.c
patching file sendmail.c
patching file spawn.c
patching file ssl_timeoutio.c
patching file ssl_timeoutio.h
patching file tls.c
patching file tls.h
4. concurrency limit 파일 수정
concurrency limit 파일을 수정한다.
큐메일 설치작업을 하기전 수정할 소스가 있다.
바로 위에서 패치했던 파일중 conf-spawn 파일이다.
이 파일의 기본값은 1000 이지만 각 OS에 따라서 설정값이 다르다.
여기서는 레드햇계열의 CentOS를 이용하고 있기 때문에 1000을 509로 수정 하도록 한다.
[root@ns1 qmail-1.03]# vi conf-spawn
-- conf-spawn --
509
This is a silent concurrency limit. You can't set it above 255. On some
systems you can't set it above 125. qmail will refuse to compile if the
limit is too high.
-- conf-spawn --
5. 유저, 그룹 추가
qmail 운영을 위한 유저와 그룹을 생성한다.
각 OS에 필요한 유저및 그룹은 INSTALL.ids 파일에 명시되어 있다.
아래 -r 옵션은 시스템 계정(uid 1000미만)으로 유저를 생성하겠다는 의미이다.
groupadd -r nofiles
useradd -r -g nofiles -d /var/qmail/alias alias
useradd -r -g nofiles -d /var/qmail qmaild
useradd -r -g nofiles -d /var/qmail qmaill
useradd -r -g nofiles -d /var/qmail qmailp
groupadd -r qmail
useradd -r -g qmail -d /var/qmail qmailq
useradd -r -g qmail -d /var/qmail qmailr
useradd -r -g qmail -d /var/qmail qmails
생성된 사용자를 확인한다.
[root@ns1 qmail-1.03]# tail /etc/passwd
sbsuser:x:1002:100::/home/sbsuser:/bin/bash
tomcat:x:53:53:Apache Tomcat:/usr/share/tomcat:/sbin/nologin
saslauth:x:997:76:Saslauthd user:/run/saslauthd:/sbin/nologin
alias:x:996:994::/var/qmail/alias:/bin/bash
qmaild:x:995:994::/var/qmail:/bin/bash
qmaill:x:994:994::/var/qmail:/bin/bash
qmailp:x:993:994::/var/qmail:/bin/bash
qmailq:x:992:993::/var/qmail:/bin/bash
qmailr:x:991:993::/var/qmail:/bin/bash
qmails:x:990:993::/var/qmail:/bin/bash
[root@ns1 qmail-1.03]# tail -5 /etc/group
mysql:x:27:
tomcat:x:53:
saslauth:x:76:
nofiles:x:994:
qmail:x:993:
6. 소스코드 수정
칵테일 패치를 해도 아래 내용의 코드를 수정해야 한다.
make 시 오류가 발생하므로 const 를 extern 으로 변경하면 된다.
여기서는 이전 코드는 주석으로 처리하고 새로운 코드를 추가한다.
mail# vi +12 tls.c
-- tls.c --
:
//const char *strerror(int); <-- 주석
extern char *strerror(int); // <-- 추가
:
-- tls.c --
7. 소스 컴파일
openssl-devel 패키지를 설치하고 qmail을 컴파일한다.
[root@ns1 qmail-1.03]# yum -y install openssl-devel
[root@ns1 qmail-1.03]# make
8. 시스템 설치
qmail을 시스템에 설치한다.
만약 nroff 파일이 없다면 groff 패키지를 설치한다.
[root@ns1 qmail-1.03]# yum -y install groff
[root@ns1 qmail-1.03]# make setup check
설치가 완료되면 /var/qmail/ 디렉터리에 관련 파일들이 설치된다.
tree 를 이용해서 설치된 /var/qmail/ 디렉터리를 확인한다.
[root@ns1 qmail-1.03]# yum -y install tree
[root@ns1 qmail-1.03]# tree -p -L 1 /var/qmail/
/var/qmail/
├── [drwxr-sr-x] alias
├── [drwxr-xr-x] bin
├── [drwxr-xr-x] boot
├── [drwxr-xr-x] control
├── [drwxr-xr-x] doc
├── [drwxr-xr-x] man
├── [drwxr-x---] queue
└── [drwxr-xr-x] users
8 directories, 0 files
[root@ns1 qmail-1.03]# ls -ld /var/qmail/
drwxr-xr-x. 10 root qmail 105 1월 26 21:57 /var/qmail
9. 도메인 등록
실제 서버에서는 ./config 명령어로 도메인을 등록하면 되지만 우리는 가짜로 설정했으므로 ./config-fast 명령어를 실행한다.
[root@ns1 qmail-1.03]# ./config-fast sbs.com
10. 설치된 파일 확인
큐메일이 정상적으로 설치되면 /var/qmail 과 /var/qmail/control/ 디렉토리에 각종 설정파일이 생성된다.
/var/qmail: qmail의 메인 디렉터리
/var/qmail/control: 설정파일이 모여있는 디렉터리
[root@ns1 qmail-1.03]# ls -F /var/qmail/
alias/ bin/ boot/ control/ doc/ man/ queue/ users/
[root@ns1 qmail-1.03]# ll /var/qmail/
합계 8
drwxr-sr-x. 2 alias qmail 6 1월 26 21:57 alias
drwxr-xr-x. 2 root qmail 4096 1월 26 21:57 bin
drwxr-xr-x. 2 root qmail 147 1월 26 21:57 boot
drwxr-xr-x. 2 root qmail 86 1월 26 22:02 control
drwxr-xr-x. 2 root qmail 4096 1월 26 21:57 doc
drwxr-xr-x. 10 root qmail 102 1월 26 21:57 man
drwxr-x---. 11 qmailq qmail 118 1월 26 21:57 queue
drwxr-xr-x. 2 root qmail 6 1월 26 21:57 users
[root@ns1 qmail-1.03]# ls -l /var/qmail/control
합계 20
-rw-r--r--. 1 root root 8 1월 26 22:02 defaultdomain
-rw-r--r--. 1 root root 8 1월 26 22:02 locals
-rw-r--r--. 1 root root 8 1월 26 22:02 me
-rw-r--r--. 1 root root 8 1월 26 22:02 plusdomain
-rw-r--r--. 1 root root 8 1월 26 22:02 rcpthosts
[root@ns1 qmail-1.03]# cd /var/qmail/control/
[root@ns1 control]# cat *
sbs.com
sbs.com
sbs.com
sbs.com
sbs.com
----- 참고 -----
컨트롤 파일 수정 참고 : qmail은 설정파일을 /var/qmail/contol 디렉터리에 파일로 저장
에러가 발생해서 파일의 내용이 sbs.com이 안들어 갔다면 아래 명령어로 넣어주고 잘 들어갔다면 실행하지 않아도 된다.
mail# echo sbs.com > defaultdomain
mail# echo sbs.com > locals
mail# echo sbs.com > me
mail# echo sbs.com > plusdomain
mail# echo sbs.com > rcpthosts
----- 참고 -----
11. 큐메일 데몬을 위한 디렉터리와 스크립트 파일 생성
qmail 의 데몬을 띄우기 위해서 실행파일 5개를 생성한다.
실행파일 5개의 경로는 아래와 같다.
5개의 파일은 반드시 실행권한을 가지고 있어야 한다.
첫 번째 실행파일 : /var/qmail/rc
두 번째 실행파일 : /var/qmail/supervise/qmail-send/run
세 번째 실행파일 : /var/qmail/supervise/qmail-smtpd/run
네 번째 실행파일 : /var/qmail/supervise/qmail-send/log/run
다섯 번째 실행파일 : /var/qmail/supervise/qmail-smtpd/log/run
12. rc 파일 생성
-rc 파일을 생성하고 그 안에 스크립트의 내용을 넣는다.
[root@ns1 control]# cd /var/qmail
[root@ns1 qmail]# install /dev/null rc
mail# vi rc
-- /var/qmail/rc --
#!/bin/sh
exec env - PATH="/var/qmail/bin:$PATH" qmail-start ./Maildir/
-- /var/qmail/rc --
13. qmail 실행에 관련된 디렉토리 생성
mkdir -p /var/qmail/supervise/qmail-send/log
mkdir -p /var/qmail/supervise/qmail-smtpd/log
chmod 1755 /var/qmail/supervise/qmail-send
chmod 1755 /var/qmail/supervise/qmail-smtpd
[root@ns1 qmail]# tree -p supervise

14. qmail 실행에 관련된 4개의 run 파일 생성
install /dev/null supervise/qmail-send/run
cat << EOF > supervise/qmail-send/run
#!/bin/sh
exec /var/qmail/rc
EOF
install /dev/null supervise/qmail-send/log/run
cat << EOF > supervise/qmail-send/log/run
#!/bin/sh
exec /usr/local/bin/setuidgid qmaill \
/usr/local/bin/multilog t /var/log/qmail
EOF
install /dev/null supervise/qmail-smtpd/run
cat << EOF > supervise/qmail-smtpd/run
#!/bin/sh
Q_UID=`id -u qmaild`
Q_GID=`id -g qmaild`
exec /usr/local/bin/softlimit -m 70000000 \
/usr/local/bin/tcpserver -vRHl 0 \
-x /etc/tcp.smtp.cdb \
-u $Q_UID -g $Q_GID 0 25 /var/qmail/bin/qmail-smtpd 2>&1
EOF
install /dev/null supervise/qmail-smtpd/log/run
cat << EOF > supervise/qmail-smtpd/log/run
#!/bin/sh
exec /usr/local/bin/setuidgid qmaill /usr/local/bin/multilog t /var/log/qmail/smtpd
EOF
15. 큐메일을 위한 로그 디렉토리 생성
큐메일을 위한 로그 디렉토리를 /var/log 디렉토리에 생성하고 qmaill 의 권한으로 디렉토리 권한을 변경한다.
qmaill 사용자: 로그(메일을 보낼 때/받을 때 기록하는 파일)를 저장하는 qmail 사용
이 로그 디렉토리는 메일을 주고 받을 때 디버깅 용도로도 사용된다.
예를 들어서 메일이 보냈는데 안온다라고 하면 이 로그를 확인해봐야 한다.
로그에 기록도 안되어 있다: DNS 설정 문제일 수 있다.
로그에 기록되었는데 에러가 발생했다: Qmail 서버의 설정 문제일 수 있다.
[root@ns1 qmail]# mkdir -p /var/log/qmail/smtpd
qmaill 사용자의 허가권을 변경하기 전
[root@ns1 qmail]# ls -ld /var/log/qmail /var/log/qmail/smtpd
drwxr-xr-x. 3 root root 19 1월 7 17:20 /var/log/qmail
drwxr-xr-x. 2 root root 6 1월 7 17:20 /var/log/qmail/smtpd
qmaill 사용자로 소유권을 변경한다.
[root@ns1 qmail]# chown qmaill /var/log/qmail /var/log/qmail/smtpd
qmaill 사용자의 소유권을 변경한 후
[root@ns1 qmail]# ls -ld /var/log/qmail /var/log/qmail/smtpd
drwxr-xr-x. 3 qmaill root 19 1월 26 22:32 /var/log/qmail
drwxr-xr-x. 2 qmaill root 6 1월 26 22:32 /var/log/qmail/smtpd
16. 큐메일을 위한 Alias 파일 생성
큐메일을 위한 Alias 파일을 생성한다.
큐메일은 root로 메일을 배달하지 않으므로 반드시 알리아스를 만들어야 한다.
그리고 postmaster, mailer-daemon으로 오는 메일도 알리아스로 사용한다.
아래는 webmaster@sbs.com 이란 주소로 알리아스 시킨 것이다.
echo webmaster@sbs.com > /var/qmail/alias/.qmail-root
echo webmaster@sbs.com > /var/qmail/alias/.qmail-postmaster
echo webmaster@sbs.com > /var/qmail/alias/.qmail-mailer-daemon
chmod 644 /var/qmail/alias/.qmail-*
17. postfix 패키지 삭제
시스템에 설치된 postfix 메일 패키지를 중지한다.
postfix 패키지는 CentOS 7을 설치하면 기본적으로 설치되는 메일서버 패키지이다.
systemctl stop postfix
systemctl disable postfix
systemctl status postfix
전통적으로 sendmail 은 많이 사용하는 프로그램이므로 postfix 라는 메일서버를
설치해도 sendmail 이라는 이름으로 존재(심볼릭링크)한다.
[root@ns1 qmail]# ls -l /usr/sbin/sendmail
lrwxrwxrwx. 1 root root 21 10월 20 10:17 /usr/sbin/sendmail -> /etc/alternatives/mta
[root@ns1 qmail]# ls -l /usr/lib/sendmail
lrwxrwxrwx. 1 root root 30 10월 20 10:17 /usr/lib/sendmail -> /etc/alternatives/mta-sendmail
18. sendmail 링크 생성
sendmail 심볼릭 링크를 걸어준다.
MTA를 필요로 하는 많은 프로그램이 아직까지 sendmail 이라는 이름으로 사용하고 있기 때문에
이전의 sendmail 이름의 파일을 sendmail.bak 파일명으로 변경하고
qmail 바이너리 파일을 sendmail로 심볼릭 링크로 걸어준다.
mv /usr/sbin/sendmail /usr/sbin/sendmail.bak
mv /usr/lib/sendmail /usr/lib/sendmail.bak
ln -s /var/qmail/bin/sendmail /usr/sbin
ln -s /var/qmail/bin/sendmail /usr/lib
심볼릭 링크를 생성한 후 확인한다.
[root@ns1 qmail]# ls -l /usr/lib/sendmail
lrwxrwxrwx. 1 root root 23 1월 26 22:36 /usr/lib/sendmail -> /var/qmail/bin/sendmail
[root@ns1 qmail]# ls -l /usr/lib/sendmail
lrwxrwxrwx. 1 root root 23 1월 26 22:36 /usr/lib/sendmail -> /var/qmail/bin/sendmail
19. 릴레이파일 생성
릴레이파일을 생성한다.
/etc/tcp.smtp -> /etc/tcp.smtp.cdb 파일을 생성하고 strings 로 확인한다.
tcprules: usage: tcprules rules.cdb rules.tmp
cat << EOF > /etc/tcp.smtp
127.0.0.1:allow,RELAYCLIENT=""
200.200.:allow,RELAYCLIENT=""
EOF
tcprules /etc/tcp.smtp.cdb /etc/tcp.smtp.tmp < /etc/tcp.smtp
[root@ns1 qmail]# ll /etc/tcp.smtp.cdb
-rw-r--r--. 1 root root 2141 1월 7 17:26 /etc/tcp.smtp.cdb
/etc/tcp.smtp.cdb 파일은 data 파일이므로 cat 으로 보면 깨지므로 strings 명령어로 확인한다.
[root@ns1 qmail]# strings /etc/tcp.smtp.cdb
127.0.0.1+RELAYCLIENT=
200.200.+RELAYCLIENT=
20. qmail 시작
qmail을 시작한다.
/var/qmail 디렉토리가 가끔씩 권한이 644로 변경되므로 변경이 되었다면 755로 변경해준다.
[root@ns1 qmail]# ls -ld /var/qmail
drwxr-xr-x. 11 root qmail 132 1월 26 22:10 /var/qmail
권한이 644면 아래 755로 수정한다. 만약 755면 아래 명령어는 건너뛴다.
[root@ns1 qmail]# chmod 755 /var/qmail
아래처럼 심볼릭 링크를 걸면 데몬이 뜬다.
[root@ns1 qmail]# ln -s /var/qmail/supervise/qmail-send /service/
[root@ns1 qmail]# ln -s /var/qmail/supervise/qmail-smtpd /service/
[root@ns1 qmail]# ll /service/
합계 0
lrwxrwxrwx. 1 root root 31 1월 26 22:41 qmail-send -> /var/qmail/supervise/qmail-send
lrwxrwxrwx. 1 root root 32 1월 26 22:41 qmail-smtpd -> /var/qmail/supervise/qmail-smtpd
21. qmail 서버 확인
qmail 서버가 동작하는지 열린 포트를 확인한다.
메일서버는 25번 포트를 사용하므로 25번 포트가 열렸는지 확인한다.
[root@ns1 qmail]# yum -y install net-tools
[root@ns1 qmail]# netstat -nltp | grep 25
tcp 0 0 0.0.0.0:25 0.0.0.0:* LISTEN 10248/tcpserver
ps 명령어로 에러를 확인할 때
이때 체크해야 할 부분은 두가지다 ....... 부분에 에러가 안나거나 좀비 프로세스가 없다면 성공이다.
[root@ns1 qmail]# ps -efww | grep readproc
root 7066 7063 0 06:58 ? 00:00:00 readproctitle service errors: ...................
qmail 서버가 정상적으로 동작이 되는지 telnet 명령어로 25번 포트로 접속해서 확인한다.
telnet 을 이용한 포트 접속 형식 :
telnet IP주소 or 도메인명 포트번호
ex)
telnet localhost 22
telnet localhost 80
[root@ns1 qmail]# yum -y install telnet
[root@ns1 qmail]# telnet localhost 25
Trying ::1...
telnet: connect to address ::1: Connection refused
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
220 sbs.com ESMTP <-- /var/qmail/control/me 파일
<-- 멈추면 qmail 서버 구축을 성공한 것이다.
^]
telnet> quit
Connection closed.
22. qmail 부트 스크립트 생성
RedHat 의 데몬 시작/중지 스크립트를 생성한다.
이 스크립트를 이용해서 데몬을 시작하고 종료할 수 있다.
[root@ns1 qmail]# install /dev/null /etc/init.d/qmail
[root@ns1 qmail]# vi /etc/init.d/qmail
#!/bin/sh
# For Red Hat chkconfig
# chkconfig: - 80 30
# description: the qmail MTA
PATH=/var/qmail/bin:/bin:/usr/bin:/usr/local/bin:/usr/local/sbin
export PATH
case "$1" in
start)
echo "Starting qmail"
if [ -e /service/qmail-send ] ; then
if svok /service/qmail-send ; then
svc -u /service/qmail-send
else
echo qmail-send supervise not running
fi
else
ln -s /var/qmail/supervise/qmail-send /service/
fi
if [ -e /service/qmail-smtpd ] ; then
if svok /service/qmail-smtpd ; then
svc -u /service/qmail-smtpd
else
echo qmail-smtpd supervise not running
fi
else
ln -s /var/qmail/supervise/qmail-smtpd /service/
fi
if [ -d /var/lock/subsys ]; then
touch /var/lock/subsys/qmail
fi
;;
stop)
echo "Stopping qmail..."
echo " qmail-smtpd"
svc -dx /service/qmail-smtpd /service/qmail-smtpd/log
rm -f /service/qmail-smtpd
echo " qmail-send"
svc -dx /service/qmail-send /service/qmail-send/log
rm -f /service/qmail-send
if [ -f /var/lock/subsys/qmail ]; then
rm /var/lock/subsys/qmail
fi
;;
stat)
svstat /service/qmail-send
svstat /service/qmail-send/log
svstat /service/qmail-smtpd
svstat /service/qmail-smtpd/log
qmail-qstat
;;
doqueue|alrm|flush)
echo "Flushing timeout table and sending ALRM signal to qmail-send."
/var/qmail/bin/qmail-tcpok
svc -a /service/qmail-send
;;
queue)
qmail-qstat
qmail-qread
;;
reload|hup)
echo "Sending HUP signal to qmail-send."
svc -h /service/qmail-send
;;
pause)
echo "Pausing qmail-send"
svc -p /service/qmail-send
echo "Pausing qmail-smtpd"
svc -p /service/qmail-smtpd
;;
cont)
echo "Continuing qmail-send"
svc -c /service/qmail-send
echo "Continuing qmail-smtpd"
svc -c /service/qmail-smtpd
;;
restart)
echo "Restarting qmail:"
echo "* Stopping qmail-smtpd."
svc -d /service/qmail-smtpd
echo "* Sending qmail-send SIGTERM and restarting."
svc -t /service/qmail-send
echo "* Restarting qmail-smtpd."
svc -u /service/qmail-smtpd
;;
cdb)
tcprules /etc/tcp.smtp.cdb /etc/tcp.smtp.tmp < /etc/tcp.smtp
chmod 644 /etc/tcp.smtp.cdb
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 -- schedules queued messages for immediate delivery
reload -- sends qmail-send HUP, rereading locals and virtualdomains
queue -- shows status of queue
alrm -- same as doqueue
flush -- same as doqueue
hup -- same as reload
HELP
;;
*)
echo "Usage: $0 {start|stop|restart|doqueue|flush|reload|stat|pause|cont|cdb|queue|help}"
exit 1
;;
esac
exit 0
자신의 런레벨을 확인한다.
[root@ns1 qmail]# runlevel
N 3
qmail 서비스를 등록하고 확인한다.
chkconfig --add qmail
chkconfig qmail on
chkconfig --list qmail
23. 데몬 시작/중지 확인
stop 하면 25번 포트가 없어야 한다.
[root@ns1 qmail]# service qmail stop
[root@ns1 qmail]# netstat -nltp | grep tcpserver
start 하면 25번 포트가 열려야 한다.
[root@ns1 qmail]# service qmail start
[root@ns1 qmail]# netstat -nltp | grep tcpserver
tcp 0 0 0.0.0.0:25 0.0.0.0:* LISTEN 4955/tcpserver
>>> 여기까지가 Qmail 설치의 끝이다. <<<
24. 메일 수신 설정
sbs.com의 도메인을 /var/qmail/control/{locals,rcpthosts} 파일에 넣어준다.
메일을 받기 위해 반드시 필요한 설정이다.
이 파일에 메일을 받을 해당 도메인이 없다면 메일을 받을 수가 없으므로 반드시 확인한다.
[root@ns1 qmail]# cat /var/qmail/control/{locals,rcpthosts}
sbs.com
sbs.com
[root@ns1 qmail]# service qmail restart
estarting qmail:
* Stopping qmail-smtpd.
* Sending qmail-send SIGTERM and restarting.
* Restarting qmail-smtpd.
25. 메일 수신함 설정
사용자를 생성하면 자신의 디렉토리에 메일박스(Maildir) 디렉토리가 생성될 수 있도록 샘플 디렉토리를 생성한다.
메일박스: 메일을 받는 곳
메일박스 종류: Maildir, mail
Maildir 구조
|-- cur : 메일을 확인하면 저장되는 디렉토리
|-- new : 새로운 메일이 오면 저장되는 디렉토리
`-- tmp : 메일을 발송하면 임시적으로 저장되는 디렉토리
[root@ns1 qmail]# ll /var/qmail/bin/maildirmake
-rwxr-xr-x. 1 root qmail 14624 1월 26 21:57 /var/qmail/bin/maildirmake
[root@ns1 qmail]# /var/qmail/bin/maildirmake /etc/skel/Maildir
[root@ns1 qmail]# ls -l /etc/skel/
합계 0
drwx------. 5 root root 39 1월 26 23:04 Maildir
drwxr-xr-x. 2 root root 6 1월 25 17:37 public_html
[root@ns1 qmail]# tree /etc/skel/Maildir/
/etc/skel/Maildir/
├── cur
├── new
└── tmp
3 directories, 0 files
26. 메일 사용자 추가
메일을 주고 받을 테스트 사용자를 생성한다.
여기서는 webmaster 와 testuser 사용자 두 명을 생성한다.
[root@ns1 qmail]# useradd -g users webmaster
[root@ns1 qmail]# useradd -g users testuser
[root@ns1 qmail]# tree ~webmaster
/home/webmaster
├── Maildir
│ ├── cur
│ ├── new
│ └── tmp
└── public_html
5 directories, 0 files
[root@ns1 qmail]# tree ~testuser
/home/testuser
├── Maildir
│ ├── cur
│ ├── new
│ └── tmp
└── public_html
5 directories, 0 files
27. MUA 프로그램 설치
MUA (Mail User Agent): 클라이언트가 메일박스에서 메일을 가져오는 프로그램
mutt: 리눅스 텍스트용 MUA 프로그램
mail 명령어로 자신에게 또는 testuser에게 메일을 발송해본다.
mail 사용 형식: mail -v -s 제목 이메일 < 보낼파일명
[root@ns1 qmail]# yum -y install mailx mutt bind-utils
DNS서버가 200.200.200.3, 200.200.200.4로 되어있는지 확인하고 설정이 안되어 있으면 nmtui에서 설정한다.
[root@ns1 qmail]# cat /etc/resolv.conf
#Generated by NetworkManager
search server.com
nameserver 200.200.200.3
nameserver 200.200.200.4
영구적으로 DNS서버를 변경하기 위해서는 nmtui를 실행시켜서 변경한다.
[root@ns1 qmail]# nmtui
DNS 서버: 200.200.200.3, 200.200.200.4
메일을 보내기 위해서 DNS 설정을 확인한다.
[root@ns1 qmail]# dig sbs.com mx +short
10 mail.sbs.com.
[root@ns1 qmail]# dig mail.sbs.com +short
200.200.200.3
mail 명령어로 간단하게 명령행에서 사용자에게 메일을 발송한다.
-s : 제목
webmaster@sbs.com 사용자와 testuser@sbs.com 에게 메일을 발송한다.
[root@ns1 qmail]# mail -s testmail webmaster@sbs.com < /etc/fstab
[root@ns1 qmail]# mail -s testmail webmaster@sbs.com < /etc/fstab
[root@ns1 qmail]# mail -s testmail testuser@sbs.com < /etc/fstab
아래처럼 Maildir/new 디렉터리에 메일이 오면 아래처럼 나올 것이다.
만약 메일이 안온다면 실패이고 DNS, Qmail을 확인해서 어디에 문제가 있는지 잡아야 한다.
[root@ns1 qmail]# tree ~webmaster/Maildir
/home/webmaster/Maildir
├── cur
├── new
│ ├── 1674742216.10179.ns1.server.com
│ └── 1674742218.10185.ns1.server.com
└── tmp
3 directories, 2 files
아래처럼 Maildir/new 디렉터리에 메일이 오면 아래처럼 나올 것이다.
[root@ns1 qmail]# tree ~testuser/Maildir
/home/testuser/Maildir
├── cur
├── new
│ └── 1674742224.10191.ns1.server.com
└── tmp
3 directories, 1 file
여기까지 설치하면 qmail 서버는 시스템에 잘 설치된 것이다.
하지만 문제는 시스템 사용자가 메일을 받는 것이 문제이다.
그래서 vpopmail을 이용하면 시스템의 계정을 생성하지 않고도 가상 유저를 생성해서 메일을 주고 받을 수 있다.
실습> MUA로 메일 확인하기
mutt: 리눅스 콘솔용 MUA 프로그램
[root@ns1 ~]# cd
[root@ns1 ~]# yum -y install mutt
webmaster@sbs.com 사용자의 메일을 확인하기 위한 설정을 한다.
[root@ns1 ~]# vi .muttrc
set mbox_type=Maildir
set spoolfile="/home/webmaster/Maildir/"
set check_new=yes
[root@ns1 qmail]# tree ~webmaster/Maildir
/home/webmaster/Maildir
├── cur
├── new
│ ├── 1674742216.10179.ns1.server.com
│ └── 1674742218.10185.ns1.server.com
└── tmp
3 directories, 2 files
[root@ns1 ~]# mutt
/root/Mail가 없음. 만들까요? ([yes]/no):
q:종료 d:삭제 u:복구 s:저장 m:메일 r:답장 g:그룹 ?:도움말
1 N Jan 26 root@sbs.com (0.5K) testmail
2 N Jan 26 root@sbs.com (0.5K) testmail
번호에서 엔터치면 메일의 내용이 보여진다.
q를 눌러서 mutt 종료한다.
[root@ns1 ~]# mutt
2개 보관, 0개 삭제
실습> kbs.com MTA(Qmail) 설치하기
1. Qmail 관련 파일 다운로드
메일서버는 Qmail을 사용한다.
cd
mkdir qmail; cd qmail
yum -y install wget
wget linuxmaster.net/Qmail/daemontools-0.76.tar.gz
wget linuxmaster.net/Qmail/qmail-1.03.tar.gz
wget linuxmaster.net/Qmail/qmail-ej-cocktail-14.tar.gz
wget linuxmaster.net/Qmail/ucspi-tcp-0.88.tar.gz
wget linuxmaster.net/Qmail/vpopmail-5.4.13.tar.gz
qmail 설치 서버 : 200.200.200.4
2. 스크립트 다운로드
200.200.200.4에서 다운로드하고 실행한다.
wget linuxmaster.net/Qmail/qmailInstall.sh
chmod 755 qmailInstall.sh
./qmailInstall.sh kbs.com
[root@ns2 qmail]# yum -y install net-tools
[root@ns2 qmail]# netstat -nltp|grep tcpserver
tcp 0 0 0.0.0.0:25 0.0.0.0:* LISTEN 6887/tcpserver
[root@ns2 qmail]# yum -y install telnet
[root@ns2 qmail]# telnet localhost 25
Trying ::1...
telnet: connect to address ::1: Connection refused
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
220 kbs.com ESMTP
^]
telnet> quit
Connection closed.
3. MX 레코드 확인
[root@ns2 qmail]# dig kbs.com mx +short
10 mail.kbs.com.
[root@ns2 qmail]# dig mail.kbs.com +short
200.200.200.4
4. 사용자 생성
메일을 받을 샘플 디렉터리를 /etc/skel 디렉터리에 생성한다.
[root@ns2 qmail]# /var/qmail/bin/maildirmake /etc/skel/Maildir
[root@ns2 qmail]# cd
[root@ns2 ~]# useradd -g users webmaster
[root@ns2 ~]# yum -y install tree
[root@ns2 ~]# tree ~webmaster/
/home/webmaster/
├── Maildir
│ ├── cur
│ ├── new
│ └── tmp
└── public_html
5 directories, 0 files
[root@ns2 ~]# mail -s testmail webmaster@kbs.com < /etc/resolv.conf
[root@ns2 ~]# mail -s testmail webmaster@kbs.com < /etc/hosts
[root@ns2 ~]# tree ~webmaster/
/home/webmaster/
├── Maildir
│ ├── cur
│ ├── new
│ │ ├── 1674748604.7018.ns2.server.com
│ │ └── 1674748609.7024.ns2.server.com
│ └── tmp
└── public_html
5 directories, 2 files
[root@ns2 ~]# yum -y install mutt
[root@ns2 ~]# vi .muttrc
set mbox_type=Maildir
set spoolfile="/home/webmaster/Maildir/"
set check_new=yes
[root@ns2 ~]# mutt
/root/Mail가 없음. 만들까요? ([yes]/no): <-- 엔터
q:종료 d:삭제 u:복구 s:저장 m:메일 r:답장 g:그룹 ?:도움말
1 N Jan 27 root@kbs.com (0.1K) testmail
2 N Jan 27 root@kbs.com (0.2K) testmail
q를 눌러서 mutt를 종료한다.
[root@ns2 ~]# tree ~webmaster/
/home/webmaster/
├── Maildir
│ ├── cur
│ │ ├── 1674748604.7018.ns2.server.com:2,S
│ │ └── 1674748609.7024.ns2.server.com:2,S
│ ├── new
│ └── tmp
└── public_html
5 directories, 2 files
실습> MTA간 메일 전송하기
sbs.com -> kbs.com 으로 메일을 전송한다.
메일 발송과 메일 수신은 아래 5개의 조건이 만족해야 한다.
1. DNS에서 도메인이 설정되어 있어야 한다.
2. 도메인에 대한 MX 레코드를 설정해야 한다.
3. 메일서버가 세팅되어 있어야 한다.
4. 방화벽에 메일서버 포트인 25번 포트가 열려있어야 한다.
5. 시스템에 사용자가 있어야 한다.
1. 메일 발송
sbs.com에서 메일을 발송한다.
[root@ns1 ~]# mutt
m 을 눌러서 메일을 작성한다.
To: webmaster@kbs.com
Subject: sbs.com에서 보내는 메일입니다.
-------------- vi 창이 실행된다. --------------
웹마스터님 안녕하세요.
mutt 에서 메일을 발송합니다.
오늘 하루도 화이팅하세요!
:wq
-------------- vi 창이 실행된다. --------------
vi 에서 메일 내용을 쓰고 저장하고 종료하면 메일 발송 화면이 나오고
y를 눌러서 메일을 발송한다.
2. 메일 수신
kbs.com에서 메일함을 확인하면 new에 sbs.com에서 보낸 메일을 확인할 수 있다.
[root@ns2 ~]# tree ~webmaster/
/home/webmaster/
├── Maildir
│ ├── cur
│ │ ├── 1674748604.7018.ns2.server.com:2,S
│ │ └── 1674748609.7024.ns2.server.com:2,S
│ ├── new
│ │ └── 1674748979.7057.ns2.server.com
│ └── tmp
└── public_html
5 directories, 3 files
[root@ns2 ~]# mutt
q:종료 d:삭제 u:복구 s:저장 m:메일 r:답장 g:그룹 ?:도움말
1 Jan 27 root@kbs.com (0.1K) testmail
2 Jan 27 root@kbs.com (0.2K) testmail
3 N Jan 27 root (0.1K) sbs.com에서 보내는 메일입니다.
실습> 메일 발송/수신 패킷 확인하기
tcpdump: 패킷 덤프 프로그램
1. tcpdump 설치
패킷 덤프 프로그램을 설치한다.
[root@ns1 ~]# yum -y install tcpdump
[root@ns2 ~]# yum -y install tcpdump
2. 패킷 모니터링
패킷을 모니터링 한다.
[root@ns1 ~]# tcpdump -i ens33 -nn port 25
[root@ns2 ~]# tcpdump -i ens33 -nn port 25
3. 메일 발송
[root@ns1 ~]# mail -s TestMail webmaster@kbs.com < /etc/hosts
4. 패킷 확인
[root@ns1 ~]# tcpdump -i ens33 -nn port 25
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on ens33, link-type EN10MB (Ethernet), capture size 262144 bytes
01:33:53.787601 IP 200.200.200.3.55638 > 200.200.200.4.25: Flags [S], seq 889820421, win 29200, options [mss 1460,sackOK,TS val 53186347 ecr 0,nop,wscale 7], length 0
01:33:53.788232 IP 200.200.200.4.25 > 200.200.200.3.55638: Flags [S.], seq 1986055039, ack 889820422, win 28960, options [mss 1460,sackOK,TS val 53227752 ecr 53186347,nop,wscale 7], length 0
01:33:53.788268 IP 200.200.200.3.55638 > 200.200.200.4.25: Flags [.], ack 1, win 229, options [nop,nop,TS val 53186348 ecr 53227752], length 0
01:33:53.791418 IP 200.200.200.4.25 > 200.200.200.3.55638: Flags [P.], seq 1:20, ack 1, win 227, options [nop,nop,TS val 53227755 ecr 53186348], length 19: SMTP: 220 kbs.com ESMTP
01:33:53.791434 IP 200.200.200.3.55638 > 200.200.200.4.25: Flags [.], ack 20, win 229, options [nop,nop,TS val 53186352 ecr 53227755], length 0
01:33:53.791601 IP 200.200.200.3.55638 > 200.200.200.4.25: Flags [P.], seq 1:15, ack 20, win 229, options [nop,nop,TS val 53186352 ecr 53227755], length 14: SMTP: EHLO sbs.com
01:33:53.792403 IP 200.200.200.4.25 > 200.200.200.3.55638: Flags [.], ack 15, win 227, options [nop,nop,TS val 53227756 ecr 53186352], length 0
01:33:53.792410 IP 200.200.200.4.25 > 200.200.200.3.55638: Flags [P.], seq 20:139, ack 15, win 227, options [nop,nop,TS val 53227756 ecr 53186352], length 119: SMTP: 250-kbs.com
01:33:53.793195 IP 200.200.200.3.55638 > 200.200.200.4.25: Flags [P.], seq 15:25, ack 139, win 229, options [nop,nop,TS val 53186353 ecr 53227756], length 10: SMTP: STARTTLS
01:33:53.795780 IP 200.200.200.4.25 > 200.200.200.3.55638: Flags [P.], seq 139:240, ack 25, win 227, options [nop,nop,TS val 53227759 ecr 53186353], length 101: SMTP: 454 TLS missing certificate: error:02001002:system library:fopen:No such file or directory (#4.3.0)
01:33:53.796011 IP 200.200.200.3.55638 > 200.200.200.4.25: Flags [P.], seq 25:51, ack 240, win 229, options [nop,nop,TS val 53186356 ecr 53227759], length 26: SMTP: MAIL FROM:root@sbs.com
01:33:53.796995 IP 200.200.200.4.25 > 200.200.200.3.55638: Flags [P.], seq 240:248, ack 51, win 227, options [nop,nop,TS val 53227760 ecr 53186356], length 8: SMTP: 250 ok
01:33:53.797153 IP 200.200.200.3.55638 > 200.200.200.4.25: Flags [P.], seq 51:80, ack 248, win 229, options [nop,nop,TS val 53186357 ecr 53227760], length 29: SMTP: RCPT TO:webmaster@kbs.com
01:33:53.798023 IP 200.200.200.4.25 > 200.200.200.3.55638: Flags [P.], seq 248:256, ack 80, win 227, options [nop,nop,TS val 53227762 ecr 53186357], length 8: SMTP: 250 ok
01:33:53.798124 IP 200.200.200.3.55638 > 200.200.200.4.25: Flags [P.], seq 80:86, ack 256, win 229, options [nop,nop,TS val 53186358 ecr 53227762], length 6: SMTP: DATA
01:33:53.800226 IP 200.200.200.4.25 > 200.200.200.3.55638: Flags [P.], seq 256:270, ack 86, win 227, options [nop,nop,TS val 53227763 ecr 53186358], length 14: SMTP: 354 go ahead
01:33:53.800542 IP 200.200.200.3.55638 > 200.200.200.4.25: Flags [P.], seq 86:676, ack 270, win 229, options [nop,nop,TS val 53186361 ecr 53227763], length 590: SMTP: Received: (qmail 10294 invoked by uid 0); 27 Jan 2023 01:33:53 +0900
01:33:53.803050 IP 200.200.200.4.25 > 200.200.200.3.55638: Flags [P.], seq 270:297, ack 676, win 236, options [nop,nop,TS val 53227767 ecr 53186361], length 27: SMTP: 250 ok 1674750820 qp 7103
01:33:53.803253 IP 200.200.200.3.55638 > 200.200.200.4.25: Flags [P.], seq 676:682, ack 297, win 229, options [nop,nop,TS val 53186363 ecr 53227767], length 6: SMTP: QUIT
01:33:53.803528 IP 200.200.200.3.55638 > 200.200.200.4.25: Flags [F.], seq 682, ack 297, win 229, options [nop,nop,TS val 53186364 ecr 53227767], length 0
01:33:53.803713 IP 200.200.200.4.25 > 200.200.200.3.55638: Flags [P.], seq 297:310, ack 683, win 236, options [nop,nop,TS val 53227768 ecr 53186363], length 13: SMTP: 221 kbs.com
01:33:53.803731 IP 200.200.200.3.55638 > 200.200.200.4.25: Flags [R], seq 889821104, win 0, length 0
[root@ns2 ~]# tcpdump -i ens33 -nn port 25
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on ens33, link-type EN10MB (Ethernet), capture size 262144 bytes
01:33:40.229579 IP 200.200.200.3.55638 > 200.200.200.4.25: Flags [S], seq 889820421, win 29200, options [mss 1460,sackOK,TS val 53186347 ecr 0,nop,wscale 7], length 0
01:33:40.229624 IP 200.200.200.4.25 > 200.200.200.3.55638: Flags [S.], seq 1986055039, ack 889820422, win 28960, options [mss 1460,sackOK,TS val 53227752 ecr 53186347,nop,wscale 7], length 0
01:33:40.230294 IP 200.200.200.3.55638 > 200.200.200.4.25: Flags [.], ack 1, win 229, options [nop,nop,TS val 53186348 ecr 53227752], length 0
01:33:40.232772 IP 200.200.200.4.25 > 200.200.200.3.55638: Flags [P.], seq 1:20, ack 1, win 227, options [nop,nop,TS val 53227755 ecr 53186348], length 19: SMTP: 220 kbs.com ESMTP
01:33:40.233743 IP 200.200.200.3.55638 > 200.200.200.4.25: Flags [.], ack 20, win 229, options [nop,nop,TS val 53186352 ecr 53227755], length 0
01:33:40.233747 IP 200.200.200.3.55638 > 200.200.200.4.25: Flags [P.], seq 1:15, ack 20, win 229, options [nop,nop,TS val 53186352 ecr 53227755], length 14: SMTP: EHLO sbs.com
01:33:40.233751 IP 200.200.200.4.25 > 200.200.200.3.55638: Flags [.], ack 15, win 227, options [nop,nop,TS val 53227756 ecr 53186352], length 0
01:33:40.233875 IP 200.200.200.4.25 > 200.200.200.3.55638: Flags [P.], seq 20:139, ack 15, win 227, options [nop,nop,TS val 53227756 ecr 53186352], length 119: SMTP: 250-kbs.com
01:33:40.235311 IP 200.200.200.3.55638 > 200.200.200.4.25: Flags [P.], seq 15:25, ack 139, win 229, options [nop,nop,TS val 53186353 ecr 53227756], length 10: SMTP: STARTTLS
01:33:40.237131 IP 200.200.200.4.25 > 200.200.200.3.55638: Flags [P.], seq 139:240, ack 25, win 227, options [nop,nop,TS val 53227759 ecr 53186353], length 101: SMTP: 454 TLS missing certificate: error:02001002:system library:fopen:No such file or directory (#4.3.0)
01:33:40.238093 IP 200.200.200.3.55638 > 200.200.200.4.25: Flags [P.], seq 25:51, ack 240, win 229, options [nop,nop,TS val 53186356 ecr 53227759], length 26: SMTP: MAIL FROM:root@sbs.com
01:33:40.238266 IP 200.200.200.4.25 > 200.200.200.3.55638: Flags [P.], seq 240:248, ack 51, win 227, options [nop,nop,TS val 53227760 ecr 53186356], length 8: SMTP: 250 ok
01:33:40.239174 IP 200.200.200.3.55638 > 200.200.200.4.25: Flags [P.], seq 51:80, ack 248, win 229, options [nop,nop,TS val 53186357 ecr 53227760], length 29: SMTP: RCPT TO:webmaster@kbs.com
01:33:40.239294 IP 200.200.200.4.25 > 200.200.200.3.55638: Flags [P.], seq 248:256, ack 80, win 227, options [nop,nop,TS val 53227762 ecr 53186357], length 8: SMTP: 250 ok
01:33:40.240105 IP 200.200.200.3.55638 > 200.200.200.4.25: Flags [P.], seq 80:86, ack 256, win 229, options [nop,nop,TS val 53186358 ecr 53227762], length 6: SMTP: DATA
01:33:40.241201 IP 200.200.200.4.25 > 200.200.200.3.55638: Flags [P.], seq 256:270, ack 86, win 227, options [nop,nop,TS val 53227763 ecr 53186358], length 14: SMTP: 354 go ahead
01:33:40.242385 IP 200.200.200.3.55638 > 200.200.200.4.25: Flags [P.], seq 86:676, ack 270, win 229, options [nop,nop,TS val 53186361 ecr 53227763], length 590: SMTP: Received: (qmail 10294 invoked by uid 0); 27 Jan 2023 01:33:53 +0900
01:33:40.244321 IP 200.200.200.4.25 > 200.200.200.3.55638: Flags [P.], seq 270:297, ack 676, win 236, options [nop,nop,TS val 53227767 ecr 53186361], length 27: SMTP: 250 ok 1674750820 qp 7103
01:33:40.245087 IP 200.200.200.3.55638 > 200.200.200.4.25: Flags [P.], seq 676:682, ack 297, win 229, options [nop,nop,TS val 53186363 ecr 53227767], length 6: SMTP: QUIT
01:33:40.245221 IP 200.200.200.3.55638 > 200.200.200.4.25: Flags [F.], seq 682, ack 297, win 229, options [nop,nop,TS val 53186364 ecr 53227767], length 0
01:33:40.245284 IP 200.200.200.4.25 > 200.200.200.3.55638: Flags [P.], seq 297:310, ack 683, win 236, options [nop,nop,TS val 53227768 ecr 53186363], length 13: SMTP: 221 kbs.com
01:33:40.245411 IP 200.200.200.3.55638 > 200.200.200.4.25: Flags [R], seq 889821104, win 0, length 0
실습> SMTP 명령어 사용하기
telnet으로 접속해서 SMTP 명령어를 직접 이용해서 메일을 발송한다.
[root@ns1 ~]# telnet 200.200.200.4 25
Trying 200.200.200.4...
Connected to 200.200.200.4.
Escape character is '^]'.
220 kbs.com ESMTP
mail from: webmaster@sbs.com
250 ok
rcpt to: webmaster@kbs.com
250 ok
data
354 go ahead
Subject: Hi~ webmaster
Hello~~
.
250 ok 1674752679 qp 7150
quit
221 kbs.com
Connection closed by foreign host.
[root@ns2 ~]# tcpdump -i ens33 -nn port 25
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on ens33, link-type EN10MB (Ethernet), capture size 262144 bytes
02:07:28.029896 IP 200.200.200.3.55646 > 200.200.200.4.25: Flags [S], seq 3273330857, win 29200, options [mss 1460,sackOK,TS val 55214148 ecr 0,nop,wscale 7], length 0
02:07:28.029936 IP 200.200.200.4.25 > 200.200.200.3.55646: Flags [S.], seq 2542660771, ack 3273330858, win 28960, options [mss 1460,sackOK,TS val 55255552 ecr 55214148,nop,wscale 7], length 0
02:07:28.031376 IP 200.200.200.3.55646 > 200.200.200.4.25: Flags [.], ack 1, win 229, options [nop,nop,TS val 55214149 ecr 55255552], length 0
02:07:28.032828 IP 200.200.200.4.25 > 200.200.200.3.55646: Flags [P.], seq 1:20, ack 1, win 227, options [nop,nop,TS val 55255555 ecr 55214149], length 19: SMTP: 220 kbs.com ESMTP
02:07:28.033897 IP 200.200.200.3.55646 > 200.200.200.4.25: Flags [.], ack 20, win 229, options [nop,nop,TS val 55214152 ecr 55255555], length 0
02:09:06.289836 IP 200.200.200.3.55646 > 200.200.200.4.25: Flags [P.], seq 1:17, ack 20, win 229, options [nop,nop,TS val 55312408 ecr 55255555], length 16: SMTP: ehlo 127.0.0.1
02:09:06.289883 IP 200.200.200.4.25 > 200.200.200.3.55646: Flags [.], ack 17, win 227, options [nop,nop,TS val 55353812 ecr 55312408], length 0
02:09:06.290055 IP 200.200.200.4.25 > 200.200.200.3.55646: Flags [P.], seq 20:139, ack 17, win 227, options [nop,nop,TS val 55353812 ecr 55312408], length 119: SMTP: 250-kbs.com
02:09:06.291037 IP 200.200.200.3.55646 > 200.200.200.4.25: Flags [.], ack 139, win 229, options [nop,nop,TS val 55312409 ecr 55353812], length 0
02:09:18.393201 IP 200.200.200.3.55646 > 200.200.200.4.25: Flags [P.], seq 17:49, ack 139, win 229, options [nop,nop,TS val 55324511 ecr 55353812], length 32: SMTP: mail from: webmaster@sbs.com
02:09:18.393275 IP 200.200.200.4.25 > 200.200.200.3.55646: Flags [P.], seq 139:147, ack 49, win 227, options [nop,nop,TS val 55365916 ecr 55324511], length 8: SMTP: 250 ok
02:09:18.394180 IP 200.200.200.3.55646 > 200.200.200.4.25: Flags [.], ack 147, win 229, options [nop,nop,TS val 55324512 ecr 55365916], length 0
02:09:23.835877 IP 200.200.200.3.55646 > 200.200.200.4.25: Flags [P.], seq 49:79, ack 147, win 229, options [nop,nop,TS val 55329954 ecr 55365916], length 30: SMTP: rcpt to: webmaster@kbs.com
02:09:23.836044 IP 200.200.200.4.25 > 200.200.200.3.55646: Flags [P.], seq 147:155, ack 79, win 227, options [nop,nop,TS val 55371358 ecr 55329954], length 8: SMTP: 250 ok
02:09:23.836289 IP 200.200.200.3.55646 > 200.200.200.4.25: Flags [.], ack 155, win 229, options [nop,nop,TS val 55329955 ecr 55371358], length 0
02:09:30.400510 IP 200.200.200.3.55646 > 200.200.200.4.25: Flags [P.], seq 79:85, ack 155, win 229, options [nop,nop,TS val 55336518 ecr 55371358], length 6: SMTP: data
02:09:30.402013 IP 200.200.200.4.25 > 200.200.200.3.55646: Flags [P.], seq 155:169, ack 85, win 227, options [nop,nop,TS val 55377924 ecr 55336518], length 14: SMTP: 354 go ahead
02:09:30.403687 IP 200.200.200.3.55646 > 200.200.200.4.25: Flags [.], ack 169, win 229, options [nop,nop,TS val 55336522 ecr 55377924], length 0
02:09:34.942552 IP 200.200.200.3.55646 > 200.200.200.4.25: Flags [P.], seq 85:109, ack 169, win 229, options [nop,nop,TS val 55341061 ecr 55377924], length 24: SMTP: Subject: Hi~ webmaster
02:09:34.985326 IP 200.200.200.4.25 > 200.200.200.3.55646: Flags [.], ack 109, win 227, options [nop,nop,TS val 55382508 ecr 55341061], length 0
02:09:35.875022 IP 200.200.200.3.55646 > 200.200.200.4.25: Flags [P.], seq 109:118, ack 169, win 229, options [nop,nop,TS val 55341993 ecr 55382508], length 9: SMTP: Hello~~
02:09:35.875050 IP 200.200.200.4.25 > 200.200.200.3.55646: Flags [.], ack 118, win 227, options [nop,nop,TS val 55383397 ecr 55341993], length 0
02:09:37.078177 IP 200.200.200.3.55646 > 200.200.200.4.25: Flags [P.], seq 118:121, ack 169, win 229, options [nop,nop,TS val 55343196 ecr 55383397], length 3: SMTP: .
02:09:37.078202 IP 200.200.200.4.25 > 200.200.200.3.55646: Flags [.], ack 121, win 227, options [nop,nop,TS val 55384601 ecr 55343196], length 0
02:09:37.081986 IP 200.200.200.4.25 > 200.200.200.3.55646: Flags [P.], seq 169:196, ack 121, win 227, options [nop,nop,TS val 55384604 ecr 55343196], length 27: SMTP: 250 ok 1674752977 qp 7158
02:09:37.082925 IP 200.200.200.3.55646 > 200.200.200.4.25: Flags [.], ack 196, win 229, options [nop,nop,TS val 55343201 ecr 55384604], length 0
02:09:38.430689 IP 200.200.200.3.55646 > 200.200.200.4.25: Flags [P.], seq 121:127, ack 196, win 229, options [nop,nop,TS val 55344549 ecr 55384604], length 6: SMTP: quit
02:09:38.430779 IP 200.200.200.4.25 > 200.200.200.3.55646: Flags [P.], seq 196:209, ack 127, win 227, options [nop,nop,TS val 55385953 ecr 55344549], length 13: SMTP: 221 kbs.com
02:09:38.431100 IP 200.200.200.3.55646 > 200.200.200.4.25: Flags [.], ack 209, win 229, options [nop,nop,TS val 55344550 ecr 55385953], length 0
02:09:38.431138 IP 200.200.200.4.25 > 200.200.200.3.55646: Flags [F.], seq 209, ack 127, win 227, options [nop,nop,TS val 55385953 ecr 55344550], length 0
02:09:38.431776 IP 200.200.200.3.55646 > 200.200.200.4.25: Flags [F.], seq 127, ack 210, win 229, options [nop,nop,TS val 55344550 ecr 55385953], length 0
02:09:38.431790 IP 200.200.200.4.25 > 200.200.200.3.55646: Flags [.], ack 128, win 227, options [nop,nop,TS val 55385954 ecr 55344550], length 0
^C
32 packets captured
32 packets received by filter
0 packets dropped by kernel
실습> vpopmail 설치하기
시스템 사용자로 메일을 받을 때의 문제점: 시스템 사용자를 생성해야 한다.
가상메일 프로그램이 시스템 사용자 1명만 필요하고 메일 사용자는 프로그램 내에서 내부적으로 사용자를 생성한다.
여러 개의 도메인의 메일을 수신
가상 유저(vpopmail) 사용으로 변경 시스템계정 X <-- 이유는 보안상 + vpopmail 이 좋으므로
시스템 유저로 메일이 잘 받아졌다면 이제는 가상도메인을 사용할 수 있게 vpopmail 을 구축한다.
가상도메인의 장점: 사용자를 얼마든지 추가/삭제할 수 있고
서버의 시스템에 사용자를 생성할 필요가 없으므로 부담이 없다.
-- 설치 순서 --
1. vpopmail 관련 사용자와 그룹 추가
2. vpopmail 설치
3. 기본 도메인 설정 및 SMTP 릴레이 설정
4. clearopensmtp 설정
5. qmail smtp 스크립트 변경
6. 도메인 추가
7. vpopmail을 위한 디렉토리와 스크립트 생성
8. pop3 서버 실행
9. pop3 서비스 포트 확인
10. pop3 서비스 연결
11. pop3 데몬 스크립트 작성
-- 설치 순서 --
최신버전 : http://sourceforge.net/projects/vpopmail
참고 문서 : https://wiki.kldp.org/KoreanDoc/html/Qmail%2Bvpopmail-KLDP/index.html
1. vpopmail 관련 사용자와 그룹 추가
vpopmail 관련 사용자와 그룹을 추가한다.
vpopmail 운영을 위한 유저와 그룹을 만들어주어야 한다.
아래 -r 옵션은 시스템 계정(uid 1000미만)으로 유저를 생성한다.
vpopmail의 기본디렉토리는 /home/vpopmail/ 입니다.
groupadd -r vchkpw
useradd -r -g vchkpw vpopmail
mkdir -p /home/vpopmail/etc/
chmod 777 /home/vpopmail/etc/
[root@ns1 qmail]# tail -1 /etc/passwd
vpopmail:x:989:992::/home/vpopmail:/bin/bash
[root@ns1 qmail]# tail -1 /etc/group
vchkpw:x:992:
2. vpopmail 설치
vpopmail을 설치한다.
이전에 시스템 사용자로 메일을 받을 때의 릴레이 파일을 복사한다.
mv /etc/tcp.smtp* /home/vpopmail/etc/
tar xzf vpopmail-5.4.13.tar.gz
cd vpopmail-5.4.13
=============================================================
환경설정 설명
--enable-roaming-users=y : 로밍 서비스를 사용하는 옵션
--enable-tcprules-prog : tcprules 프로그램 path
--enable-tcpserver-file : 릴레이설정 파일
--enable-relay-clear-minutes : pop3 인증후 15분 동안 아무런 서버 사용이
없으면 자동으로 relay를 닫아 open relay가 되어 스패머들의 타겟이 되는것을 막도록 한다.
--enable-logging : vpopmail pop 서버의 로그 조절 옵션
--enable-auth-logging :
=============================================================
./configure 를 실행해서 컴파일하기 위한 환경설정을 한다.
[root@ns1 vpopmail-5.4.13]# ./configure \
--enable-roaming-users=y \
--enable-tcprules-prog=/usr/local/bin/tcprules \
--enable-tcpserver-file=/home/vpopmail/etc/tcp.smtp \
--enable-relay-clear-minutes=15 \
--enable-auth-logging=y \
--enable-logging=e
:
: (생략)
vpopmail 5.4.13
Current settings
---------------------------------------
vpopmail directory = /home/vpopmail
uid = 491
gid = 497
roaming users = ON --enable-roaming-users
tcpserver file = /home/vpopmail/etc/tcp.smtp
open_smtp file = /home/vpopmail/etc/open-smtp
rebuild tcpserver file = ON --enable-rebuild-tcpserver-file (default)
password learning = OFF --disable-learn-passwords (default)
md5 passwords = ON --enable-md5-passwords (default)
file locking = ON --enable-file-locking (default)
vdelivermail fsync = OFF --disable-file-sync (default)
make seekable = ON --enable-make-seekable (default)
clear passwd = ON --enable-clear-passwd (default)
user dir hashing = ON --enable-users-big-dir (default)
address extensions = OFF --disable-qmail-ext (default)
ip alias = OFF --disable-ip-alias-domains (default)
auth module = cdb --enable-auth-module=cdb (default)
auth inc = -Icdb
auth lib =
system passwords = OFF --disable-passwd (default)
pop syslog = show only failed attempts
--enable-logging=e (default)
auth logging = ON --enable-auth-logging (default)
vpopmail을 컴파일 한다.
[root@ns1 vpopmail-5.4.13]# make
컴파일한 vpopmail을 시스템에 설치한다.
[root@ns1 vpopmail-5.4.13]# make install-strip
설치한 디렉토리와 파일을 확인한다.
[root@ns1 vpopmail-5.4.13]# tree /home/vpopmail/

디렉토리의 권한을 변경하기 전
[root@ns1 vpopmail-5.4.13]# ls -ld ~vpopmail/etc
drwxrwxrwx. 2 root root 97 1월 27 02:25 /home/vpopmail/etc/
[root@ns1 vpopmail-5.4.13]# chown vpopmail.vchkpw /home/vpopmail/etc/
[root@ns1 vpopmail-5.4.13]# chown vpopmail.vchkpw /home/vpopmail
디렉토리의 권한을 변경한 후
[root@ns1 vpopmail-5.4.13]# chmod 750 ~vpopmail
[root@ns1 vpopmail-5.4.13]# chmod 755 ~vpopmail/etc/
[root@ns1 vpopmail-5.4.13]# ls -ld /home/vpopmail/
drwxr-x---. 8 vpopmail vchkpw 80 1월 27 02:25 /home/vpopmail/
참고로 vpopmail을 사용하면 릴레이 파일이 /home/vpopmail/etc/ 디렉토리에 존재한다.
[root@ns1 vpopmail-5.4.13]# ls -l /home/vpopmail/etc/tcp.smtp*
-rw-r--r--. 1 root root 63 1월 26 22:39 /home/vpopmail/etc/tcp.smtp
-rw-r--r--. 1 root root 2141 1월 26 22:39 /home/vpopmail/etc/tcp.smtp.cdb
위 configure 옵션으로 pop3 인증 후 15분 동안 아무런 서버 사용이 없으면
자동으로 relay를 닫아 open relay가 되어 스패머들의 타겟이 되는것을 막도록 한다.
그리고 tcp.smtp 릴레이 파일을 임시생성하는 이유는 위 옵션에 파일경로를 지정해줬기 때문이다.
굳이 tcpserver-file을 지정해주는 이유는 옵션으로 넣어주지 않으면
시스템에서 자동으로 찾게되는데 정상적으로 smtp 릴레이 파일을 찾는
경우도 있지만 릴레이 파일을 정상적으로 찾지 못하는 머신을 간혹 세팅해본 경험이 있기 때문이다.
3. 기본 도메인 설정 및 SMTP 릴레이 설정
기본 도메인 설정 및 SMTP 릴레이를 설정한다.
default-domain의 파일은 ~vpopmail/etc/defaultdomain 이다.
[root@ns1 vpopmail-5.4.13]# cd
[root@ns1 ~]# echo "sbs.com" > /home/vpopmail/etc/defaultdomain
[root@ns1 ~]# chown vpopmail.vchkpw /home/vpopmail/etc/defaultdomain
[root@ns1 ~]# ll ~vpopmail/etc/defaultdomain
-rw-r--r--. 1 vpopmail vchkpw 8 1월 8 13:23 /home/vpopmail/etc/defaultdomain
mail# chmod 640 /home/vpopmail/etc/defaultdomain
[root@ns1 ~]# chmod 640 /home/vpopmail/etc/defaultdomain
[root@ns1 ~]# ll /home/vpopmail/etc/defaultdomain
-rw-r--r--. 1 vpopmail vchkpw 8 1월 27 02:33 /home/vpopmail/etc/defaultdomain
clearopensmtp를 해주는 이유는 tcp.smtp를 이용해 tcp.smtp.cdb 파일을 생성하기 위함이다.
[root@ns1 ~]# /home/vpopmail/bin/clearopensmtp
[root@ns1 ~]# tcprules /home/vpopmail/etc/tcp.smtp.cdb /home/vpopmail/etc/tcp.smtp.tmp < /home/vpopmail/etc/tcp.smtp
4. clearopensmtp 설정
clearopensmtp 를 위해 crontab 을 설정한다.
15분에 한번씩 clearopensmtp를 실행해주기 위해 사용자 크론에 등록한다.
시스템크론에 (/etc/crontab) 등록해도 상관없다.
[root@ns1 ~]# crontab -e
*/15 * * * * /home/vpopmail/bin/clearopensmtp
등록된 예약을 확인한다.
[root@ns1 ~]# crontab -l
*/15 * * * * /home/vpopmail/bin/clearopensmtp
5. qmail smtp 스크립트 변경
qmail smtp 스크립트를 변경한다.
qmail + vpopmail 을 연동하면 tcp.smtp 파일이 /etc/tcp.smtp 에서
/home/vpopmail/etc/tcp.smtp 파일로 변경되었으므로 qmail을 설치할 때
작성한 run script중 하나를 수정해줘야 된다.
[root@ns1 ~]# vi /var/qmail/supervise/qmail-smtpd/run
-- /var/qmail/supervise/qmail-smtpd/run --
#!/bin/sh
Q_UID=`id -u qmaild`
Q_GID=`id -g qmaild`
exec /usr/local/bin/softlimit -m 70000000 \
/usr/local/bin/tcpserver -vRHl 0 \
-x /home/vpopmail/etc/tcp.smtp.cdb \
-u $Q_UID -g $Q_GID 0 25 /var/qmail/bin/qmail-smtpd 2>&1
-- /var/qmail/supervise/qmail-smtpd/run --
vpopmail 관련 실행파일 디렉토리에 존재하는 모든 실행파일을 PATH에 설정된 /usr/bin 디렉토리에 링크를 생성한다.
[root@ns1 ~]# ln -s /home/vpopmail/bin/* /usr/bin
[root@ns1 ~]# ls /home/vpopmail/bin/
clearopensmtp valias vdelivermail vkill vpopbull
dotqmail2valias vchangepw vdeloldusers vmkpasswd vsetuserquota
vaddaliasdomain vchkpw vdeluser vmoddomlimits vuserinfo
vadddomain vconvert vdominfo vmoduser
vadduser vdeldomain vipmap vpasswd
6. 도메인 추가
* 중요 *
sbs.com 의 도메인이 locals 파일에는 없고 rcpthosts 파일에는 들어가 있어야 메일이 정상적으로 송수신이 된다.
관리자 알고만 있고 도메인을 등록할 때 명령어가 알아서 처리하기 때문에 신경쓸 필요가 없다.
시스템 사용자 메일 수신:
vpopmail을 사용하지 않을 경우
수신할 도메인이 저장될 파일: /var/qmail/control/rcpthosts, /var/qmail/control/locals
vpopmai을 사용할 경우
수신할 도메인이 저장될 파일: /var/qmail/control/rcpthosts
💥💥💥💥💥 중요 💥💥💥💥💥
vadddomain: 가상도메인을 생성하는 명령어
vadduser : 가상 메일 유저를 생성하는 명령어
vadddomain: usage: vadddomain [options] virtual_domain [postmaster password]
options: -v prints the version
-q quota_in_bytes (sets the quota for postmaster account)
-b (bounces all mail that doesn't match a user, default)
-e email_address (forwards all non matching user to this address [*])
-u user (sets the uid/gid based on a user in /etc/passwd)
-d dir (sets the dir to use for this domain)
-i uid (sets the uid to use for this domain)
-g gid (sets the gid to use for this domain)
-O optimize adding, for bulk adds set this for all
except the last one
-r[len] (generate a len (default 8) char random postmaster password)
[*] omit @-sign to deliver directly into user's Maildir: '-e postmaster'
~vpopmail/domains/ : vpopmail 의 사용자 홈디렉리 밑에 domains 디렉터리를 의미한다.
vadddomain 명령어로 sbs.com 도메인을 생성한다.
[root@ns1 ~]# vadddomain sbs.com
Please enter password for postmaster: <-- 이메일 관리자 비번 111111 을 입력한다.
enter password again: <-- 이메일 관리자 비번 111111 을 입력한다.
sbs.com 도메인은 vpopmail 사용자 디렉터리 밑에 domains 디렉터리에 위치한다.
[root@ns1 ~]# ls -l ~vpopmail/domains/
합계 0
drwx------. 3 vpopmail vchkpw 121 1월 27 02:58 sbs.com
[root@ns1 ~]# tree /home/vpopmail/domains/

vadduser 명령어로 사용자를 생성한다.
vadduser: usage: [options] email_address [passwd]
options: -v (print the version)
-q quota_in_bytes (sets the users quota, use NOQUOTA for unlimited)
-c comment (sets the gecos comment field)
-e standard_encrypted_password
-n no_password
-r[len] (generate a len (default 8) char random password)
가상유저인 webmaster@sbs.com 사용자를 생성한다.
[root@ns1 ~]# vadduser webmaster@sbs.com
Please enter password for webmaster@sbs.com: <-- webmaster@sbs.com 사용자 비번 111111 을 입력한다.
enter password again: <-- webmaster@sbs.com 사용자 비번 111111 을 입력한다.
[root@ns1 ~]# tree /home/vpopmail/domains/

vpopmail을 사용하면 /var/qmail/control/locals 디렉토리에 도메인이 없다.
참고로 /var/qmail/control/locals 에 도메인이 있다면 메일을 받을 수 없으므로
vadddomain 명령어가 그 파일의 내용에 도메인을 자동으로 삭제한다.
[root@ns1 ~]# cat /var/qmail/control/locals
[root@ns1 ~]# cat /var/qmail/control/rcpthosts
sbs.com
[root@ns1 ~]# cat /var/qmail/control/virtualdomains
sbs.com:sbs.com
시스템 계정으로 테스트한 webmaster는 삭제한다.
[root@ns1 ~]# userdel -r webmaster
vpopmail을 사용하기 때문에 /etc/skel/Maildir/ 디렉터리를 삭제한다.
[root@ns1 ~]# rm -rf /etc/skel/Maildir/
vpopmail을 사용한 경우
vpopmail 을 연동해서 사용하면 시스템 계정으로 메일이 안가고 vpopmail이 메일을 대신 받는다.
그러므로 webmaster@sbs.com의 메일 수신이
/home/vpopmail/domains/sbs.com/webmaster/Maildir/ 디렉토리에 저장된다.
[root@ns1 ~]# tree ~vpopmail/domains/sbs.com/webmaster/Maildir/
/home/vpopmail/domains/sbs.com/webmaster/Maildir/
├── cur
├── new
└── tmp
3 directories, 0 files
webmaster@sbs.com 사용자로 메일을 발송하고 수신을 확인한다.
[root@ns1 ~]# mail -s testmail webmaster@sbs.com < /etc/fstab
[root@ns1 ~]# tree ~vpopmail/domains/sbs.com/webmaster/Maildir/
/home/vpopmail/domains/sbs.com/webmaster/Maildir/
├── cur
├── new
│ └── 1674756336.13071.ns1.server.com,S=873
└── tmp
3 directories, 1 file
7. vpopmail을 위한 디렉토리와 스크립트 생성
vpopmail을 위한 디렉토리와 스크립트를 생성한다.
/var/qmail/supervise 디렉터리에 qmail-vpop 디렉터리와 qmail-vpop/log 디렉터리를 생성한다.
[root@ns1 ~]# mkdir -p /var/qmail/supervise/qmail-vpop/log
pop3 서버를 위한 run 파일을 생성한다.
[root@ns1 ~]# install /dev/null /var/qmail/supervise/qmail-vpop/run
[root@ns1 ~]# vi /var/qmail/supervise/qmail-vpop/run
#!/bin/sh
VPOP_UID=`id -u vpopmail`
VPOP_GID=`id -g vpopmail`
exec /usr/local/bin/softlimit -m 70000000 \
tcpserver -vRHl 0 -u $VPOP_UID -g $VPOP_GID 0 110 \
/var/qmail/bin/qmail-popup sbs.com \
/home/vpopmail/bin/vchkpw /var/qmail/bin/qmail-pop3d Maildir 2>&1
pop3 서버의 로그에 관련된 run 파일을 생성한다.
[root@ns1 ~]# install /dev/null /var/qmail/supervise/qmail-vpop/log/run
[root@ns1 ~]# vi /var/qmail/supervise/qmail-vpop/log/run
#!/bin/sh
exec /usr/local/bin/setuidgid qmaill \
/usr/local/bin/multilog t /var/log/qmail/pop3d
pop3 서버의 로그 디렉터리를 생성한다.
-o: 소유자
-d: 디렉터리
[root@ns1 ~]# install -o qmaill -d /var/log/qmail/pop3d
[root@ns1 ~]# ls -ld /var/log/qmail/pop3d
drwxr-xr-x. 2 qmaill root 6 1월 27 03:18 /var/log/qmail/pop3d
mailcheck.sh 수정한다.
[root@ns1 ~]# mkdir bin
[root@ns1 ~]# install /dev/null bin/mailcheck.sh
[root@ns1 ~]# vi bin/mailcheck.sh
-- bin/mailcheck.sh --
#!/bin/sh
#파일명: mailcheck.sh
#프로그램 설명: 사용자의 메일 수신을 체크하는 프로그램
#작성자: 리눅스마스터넷
#$#: 인수의 개수
if [ $# -ne 2 ]
then
echo
echo "Usage: $0 "
echo "e.g. $0 webmaster sbs.com"
echo
exit 1
fi
if [ ! -x /usr/bin/tree ]
then
echo "tree 패키지를 설치중..."
yum -y install tree > /dev/null 2>&1
fi
user=$1
domain=$2
mail -s testmail domain < /etc/fstab
echo "메일 발송 완료"
echo
sleep 1
echo "메일 수신 확인"
tree /home/vpopmail/domains/user/Maildir
-- bin/mailcheck.sh --
이전에 수신한 메일을 모두 삭제한다.
[root@ns1 ~]# rm -f ~vpopmail/domains/sbs.com/webmaster/Maildir/new/*
인수 체크를 확인한다.
-사용자, 도메인이 들어오지 않으면 에러를 발생하고 프로세스를 종료한다.
[root@ns1 ~]# mailcheck.sh
Usage: /root/bin/mailcheck.sh <mailuser> <domain>
e.g. /root/bin/mailcheck.sh webmaster sbs.com
인수 체크를 확인한다.
- 도메인이 들어오지 않으면 에러를 발생하고 프로세스를 종료한다.
[root@ns1 ~]# mailcheck.sh webmaster
Usage: /root/bin/mailcheck.sh <mailuser> <domain>
e.g. /root/bin/mailcheck.sh webmaster sbs.com
인수 체크를 확인한다.
-사용자, 도메인이 들어왔으므로 메일을 발송하고 메일 수신을 확인한다.
[root@ns1 ~]# mailcheck.sh webmaster sbs.com
메일 발송 완료
메일 수신 확인
/home/vpopmail/domains/sbs.com/webmaster/Maildir
├── cur
├── new
│ └── 1673155323.10457.ns1.sbs.com,S=872
└── tmp
3 directories, 1 file
8. pop3 서버 실행
pop3 서비스를 실행한다.
/var/qmail/supervise/vpop 파일을 /service 디렉터리에 심볼릭 링크를 걸면 daemontools가
자동으로 감지하여 110번 포트(pop3)를 오픈한다.
** 참고 ****
pop3 서비스를 중지하는 방법
#rm -f /service/qmail-vpop
#svc -dx /var/qmail/supervise/qmail-vpop /var/qmail/supervise/qmail-vpop/log
pop3 서비스를 시작하는 방법
#ln -s /var/qmail/supervise/qmail-vpop /service
[root@ns1 ~]# ln -s /var/qmail/supervise/qmail-vpop /service
[root@ns1 ~]# ll /service/
합계 0
lrwxrwxrwx. 1 root root 31 1월 26 22:52 qmail-send -> /var/qmail/supervise/qmail-send
lrwxrwxrwx. 1 root root 32 1월 26 22:52 qmail-smtpd -> /var/qmail/supervise/qmail-smtpd
lrwxrwxrwx. 1 root root 31 1월 27 03:26 qmail-vpop -> /var/qmail/supervise/qmail-vpop
[root@ns1 ~]# netstat -nltp|grep tcpserver
tcp 0 0 0.0.0.0:110 0.0.0.0: LISTEN 13125/tcpserver
tcp 0 0 0.0.0.0:25 0.0.0.0: LISTEN 10078/tcpserver
------ 테스트로 연습 -----
[root@ns1 ~]# netstat -nltp | grep 110
tcp 0 0 0.0.0.0:110 0.0.0.0: LISTEN 10473/tcpserver
[root@ns1 ~]# netstat -nlt | grep 110
tcp 0 0 0.0.0.0:110 0.0.0.0: LISTEN
[root@ns1 ~]# ll /service/
합계 0
lrwxrwxrwx. 1 root root 31 1월 26 22:52 qmail-send -> /var/qmail/supervise/qmail-send
lrwxrwxrwx. 1 root root 32 1월 26 22:52 qmail-smtpd -> /var/qmail/supervise/qmail-smtpd
lrwxrwxrwx. 1 root root 31 1월 27 03:26 qmail-vpop -> /var/qmail/supervise/qmail-vpop
pop3 서비를 중지하는 방법
-/service/qmail-vpop 파일을 삭제한다.
-svc -dx /var/qmail/supervise/vpop /var/qmail/supervise/qmail-vpop/log 종료한다.
[root@ns1 ~]# rm -fv /service/qmail-vpop
removed `/service/vpop'
[root@ns1 ~]# ll /service/
합계 0
lrwxrwxrwx. 1 root root 31 1월 7 17:35 qmail-send -> /var/qmail/supervise/qmail-send
lrwxrwxrwx. 1 root root 32 1월 7 17:35 qmail-smtpd -> /var/qmail/supervise/qmail-smtpd
[root@ns1 ~]# netstat -nlt | grep 110
tcp 0 0 0.0.0.0:110 0.0.0.0:* LISTEN
[root@ns1 ~]# svc -dx /var/qmail/supervise/qmail-vpop /var/qmail/supervise/qmail-vpop/log
[root@ns1 ~]# netstat -nlt | grep 110
[root@ns1 ~]# ll /service/
합계 0
lrwxrwxrwx. 1 root root 31 1월 7 17:35 qmail-send -> /var/qmail/supervise/qmail-send
lrwxrwxrwx. 1 root root 32 1월 7 17:35 qmail-smtpd -> /var/qmail/supervise/qmail-smtpd
------ 테스트로 연습 -----
9. pop3 서비스 포트 확인
pop3 포트를 확인한다.
[root@ns1 ~]# ln -s /var/qmail/supervise/qmail-vpop /service
[root@ns1 ~]# ll /service/
합계 0
lrwxrwxrwx. 1 root root 31 1월 26 22:52 qmail-send -> /var/qmail/supervise/qmail-send
lrwxrwxrwx. 1 root root 32 1월 26 22:52 qmail-smtpd -> /var/qmail/supervise/qmail-smtpd
lrwxrwxrwx. 1 root root 31 1월 27 03:32 qmail-vpop -> /var/qmail/supervise/qmail-vpop
[root@ns1 ~]# netstat -nlt | grep 110
tcp 0 0 0.0.0.0:110 0.0.0.0:* LISTEN
10. pop3 서비스 연결
pop3 서비스로 연결한다.
접속 형식1 : nc <domain or ipaddr> port
접속 형식2 : telnet <domain or ipaddr> port
110 포트로 접속시 멈추고 엔터를 치면 아래처럼 ERR 메세지가 나오면 된다.
[root@ns1 ~]# telnet localhost 110
Trying ::1...
telnet: connect to address ::1: Connection refused
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
+OK <10503.1673156141@sbs.com>
<-- 멈추면 pop3 서버도 설치 성공!!!
-ERR authorization first
-ERR authorization first
-ERR authorization first
quit <-- pop3 연결을 종료한다.
+OK
Connection closed by foreign host.
11. pop3 데몬 스크립트 추가
-/etc/init.d/qmail 에 pop3 데몬을 시작하고 중지하는 부분을 추가한다.
#vi /etc/init.d/qmail
-- /etc/init.d/qmail --
#!/bin/sh
#For Red Hat chkconfig
#chkconfig: - 80 30
#description: the qmail MTA
PATH=/var/qmail/bin:/bin:/usr/bin:/usr/local/bin:/usr/local/sbin
export PATH
case "$1" in
start)
echo "Starting qmail"
if [ -e /service/qmail-send ] ; then
if svok /service/qmail-send ; then
svc -u /service/qmail-send
else
echo qmail-send supervise not running
fi
else
ln -s /var/qmail/supervise/qmail-send /service/
fi
if [ -e /service/qmail-smtpd ] ; then
if svok /service/qmail-smtpd ; then
svc -u /service/qmail-smtpd
else
echo qmail-smtpd supervise not running
fi
else
ln -s /var/qmail/supervise/qmail-smtpd /service/
fi
# qmail-vpop 서비스 추가
echo "Starting qmail-vpop"
if [ -e /service/qmail-vpop ] ; then
if svok /service/qmail-vpop ; then
svc -u /service/qmail-vpop
else
echo qmail-vpop supervise not running
fi
else
ln -s /var/qmail/supervise/qmail-vpop /service/
fi
# qmail-vpop 서비스 추가
if [ -d /var/lock/subsys ]; then
touch /var/lock/subsys/qmail
fi
;;
stop)
echo "Stopping qmail..."
echo " qmail-smtpd"
svc -dx /service/qmail-smtpd /service/qmail-smtpd/log
rm -f /service/qmail-smtpd
echo " qmail-send"
svc -dx /service/qmail-send /service/qmail-send/log
rm -f /service/qmail-send
# qmail-vpop 서비스 추가
echo "Stopping qmail-vpop..."
svc -dx /service/qmail-vpop /service/qmail-vpop/log
rm -f /service/qmail-vpop
# qmail-vpop 서비스 추가
if [ -f /var/lock/subsys/qmail ]; then
rm /var/lock/subsys/qmail
fi
;;
stat)
svstat /service/qmail-send
svstat /service/qmail-send/log
svstat /service/qmail-smtpd
svstat /service/qmail-smtpd/log
# qmail-vpop 서비스 추가
svstat /service/qmail-vpop
svstat /service/qmail-vpop/log
# qmail-vpop 서비스 추가
qmail-qstat
;;
doqueue|alrm|flush)
echo "Flushing timeout table and sending ALRM signal to qmail-send."
/var/qmail/bin/qmail-tcpok
svc -a /service/qmail-send
;;
queue)
qmail-qstat
qmail-qread
;;
reload|hup)
echo "Sending HUP signal to qmail-send."
svc -h /service/qmail-send
;;
pause)
echo "Pausing qmail-send"
svc -p /service/qmail-send
echo "Pausing qmail-smtpd"
svc -p /service/qmail-smtpd
# qmail-vpop 서비스 추가
echo "Pausing qmail-vpop"
svc -p /service/qmail-vpop
# qmail-vpop 서비스 추가
;;
cont)
echo "Continuing qmail-send"
svc -c /service/qmail-send
echo "Continuing qmail-smtpd"
svc -c /service/qmail-smtpd
echo "Continuing qmail-vpop"
svc -c /service/qmail-vpop
;;
restart)
echo "Restarting qmail:"
echo "* Stopping qmail-smtpd."
svc -d /service/qmail-smtpd
echo "* Sending qmail-send SIGTERM and restarting."
svc -t /service/qmail-send
echo "* Restarting qmail-smtpd."
svc -u /service/qmail-smtpd
# qmail-vpop 서비스 추가
echo "* Restarting qmail-vpop."
svc -u /service/qmail-vpop
;;
cdb)
tcprules /home/vpopmail/etc/tcp.smtp.cdb /home/vpopmail/etc/tcp.smtp.tmp < /home/vpopmail/etc/tcp.smtp
chmod 644 /home/vpopmail/etc/tcp.smtp.cdb
echo "Reloaded /home/vpopmail/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 -- schedules queued messages for immediate delivery
reload -- sends qmail-send HUP, rereading locals and virtualdomains
queue -- shows status of queue
alrm -- same as doqueue
flush -- same as doqueue
hup -- same as reload
HELP
;;
*)
echo "Usage: $0 {start|stop|restart|doqueue|flush|reload|stat|pause|cont|cdb|queue|help}"
exit 1
;;
esac
exit 0
-- /etc/init.d/qmail --
[root@ns1 ~]# service qmail stop
[root@ns1 ~]# netstat -nltp | grep -E '25|110'
[root@ns1 ~]# service qmail start
[root@ns1 ~]# netstat -nltp | grep -E '25|110'
tcp 0 0 0.0.0.0:110 0.0.0.0: LISTEN 10530/tcpserver
tcp 0 0 0.0.0.0:25 0.0.0.0: LISTEN 10528/tcpserver
** 여기까지가 vpopmail 을 이용한 가상도메인 설치가 끝나는 것이다. *
실습> telnet 을 이용해서 메일을 체크하기
telnet 을 이용해서 110번 포트로 접근하면 아래 명령어를 통해서 메일을 체크할 수 있다.
user 사용자 : 사용자 전송
pass 비밀번호 : 비밀번호 전송
list : 메일 리스트 확인
retr 메일번호 : 메일 확인
dele 메일번호 : 메일 삭제
quit : pop3 종료
1. 메일 초기화
[root@ns1 ~]# rm -f ~vpopmail/domains/sbs.com/webmaster/Maildir/new/*
[root@ns1 ~]# tree ~vpopmail/domains/sbs.com/webmaster/Maildir/
/home/vpopmail/domains/sbs.com/webmaster/Maildir/
├── cur
├── new
└── tmp
3 directories, 0 files
2. 메일 발송
[root@ns1 ~]# mail -s TestMail webmaster@sbs.com < /etc/hosts
[root@ns1 ~]# tree ~vpopmail/domains/sbs.com/webmaster/Maildir/
/home/vpopmail/domains/sbs.com/webmaster/Maildir/
├── cur
├── new
│ └── 1674760346.33469.ns1.server.com,S=632
└── tmp
3 directories, 1 file
[root@ns1 ~]# ll ~vpopmail/domains/sbs.com/webmaster/Maildir/new/
합계 4
-rw-------. 1 vpopmail vchkpw 632 1월 27 04:12 1674760346.33469.ns1.server.com,S=632
3. 110번 포트 접속
user 사용자 : 사용자 전송
pass 비밀번호 : 비밀번호 전송
list : 메일 리스트 확인
retr 메일번호 : 메일 확인
dele 메일번호 : 메일 삭제
quit : pop3 종료
[root@ns1 ~]# telnet localhost 110
Trying ::1...
telnet: connect to address ::1: Connection refused
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
+OK <33515.1674760573@kbs.com>
user webmaster@sbs.com
+OK
pass 111111
+OK
list
+OK
1 632
.
retr 1
+OK
Return-Path: <root@sbs.com>
Delivered-To: webmaster@sbs.com
Received: (qmail 33467 invoked by uid 0); 27 Jan 2023 04:12:26 +0900
Message-ID: <20230126191226.33466.qmail@sbs.com>
From: root@sbs.com
Date: Fri, 27 Jan 2023 04:12:26 +0900
To: webmaster@sbs.com
Subject: TestMail
User-Agent: Heirloom mailx 12.5 7/5/10
MIME-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Content-Transfer-Encoding: 7bit
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
200.200.200.3 ns1.server.com ns1
200.200.200.4 ns2.server.com ns2
.
quit
+OK
Connection closed by foreign host.
실습> MUA 프로그램을 설치하고 메일 확인하기
mutt: 리눅스 콘솔용 MUA 프로그램
[root@ns1 ~]# vi .muttrc
set mbox_type=Maildir
set spoolfile="~vpopmail/domains/sbs.com/webmaster/Maildir/"
set check_new=yes
[root@ns1 ~]# mail -s TestMail webmaster@sbs.com < /etc/hosts
[root@ns1 ~]# mail -s TestMail2 webmaster@sbs.com < /etc/hosts
[root@ns1 ~]# mail -s TestMail3 webmaster@sbs.com < /etc/hosts
[root@ns1 ~]# mutt
q:종료 d:삭제 u:복구 s:저장 m:메일 r:답장 g:그룹 ?:도움말
1 O Jan 27 root@sbs.com (0.2K) TestMail
2 N Jan 27 root@sbs.com (0.2K) TestMail
3 N Jan 27 root@sbs.com (0.2K) TestMail2
4 N Jan 27 root@sbs.com (0.2K) TestMail3
q를 눌러서 종료한다.
[root@ns1 ~]# tree ~vpopmail/domains/sbs.com/webmaster/Maildir/
/home/vpopmail/domains/sbs.com/webmaster/Maildir/
├── cur
│ ├── 1674760346.33469.ns1.server.com,S=632:2,
│ ├── 1674760999.33552.ns1.server.com,S=632:2,
│ ├── 1674761003.33557.ns1.server.com,S=633:2,
│ └── 1674761007.33562.ns1.server.com,S=633:2,
├── new
└── tmp
3 directories, 4 files
실습> vpopmail 설치하기
1. 스크립트 실행
[root@ns2 ~]# cd qmail/
[root@ns2 qmail]# wget linuxmaster.net/Qmail/vpopmailInstall.sh
[root@ns2 qmail]# chmod 755 vpopmailInstall.sh
[root@ns2 qmail]# ./vpopmailInstall.sh
Usage: ./vpopmailInstall.sh DomainName
ex) ./vpopmailInstall.sh linuxmaster.net
[root@ns2 qmail]# ./vpopmailInstall.sh kbs.com
2. 서버 재시작
[root@ns2 qmail]# /etc/init.d/qmail stop
[root@ns2 qmail]# netstat -nltp|grep tcpserver
<-- 아무것도 나오지 않아야 한다.
[root@ns2 qmail]# /etc/init.d/qmail start
[root@ns2 qmail]# netstat -nltp|grep tcpserver
tcp 0 0 0.0.0.0:110 0.0.0.0: LISTEN 14965/tcpserver
tcp 0 0 0.0.0.0:25 0.0.0.0: LISTEN 14963/tcpserver
3. 메일 발송
[root@ns2 qmail]# rm -f /home/vpopmail/domains/kbs.com/webmaster/Maildir/new/*
[root@ns2 qmail]# mail -s testmail webmaster@kbs.com < /etc/hosts
[root@ns2 qmail]# tree /home/vpopmail/domains/kbs.com/webmaster/
/home/vpopmail/domains/kbs.com/webmaster/
├── Maildir
│ ├── cur
│ ├── new
│ │ └── 1674761643.14985.ns2.server.com,S=632
│ └── tmp
└── lastauth
4 directories, 2 files
4. pop3 로 수동 접속
user 사용자 : 사용자 전송
pass 비밀번호 : 비밀번호 전송
list : 메일 리스트 확인
retr 메일번호 : 메일 확인
dele 메일번호 : 메일 삭제
quit : pop3 종료
[root@ns2 qmail]# telnet localhost 110
Trying ::1...
telnet: connect to address ::1: Connection refused
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
+OK <14988.1674761704@kbs.com>
user webmaster@kbs.com
+OK
pass 111111
+OK
list
+OK
1 632
.
retr 1
+OK
Return-Path: <root@kbs.com>
Delivered-To: webmaster@kbs.com
Received: (qmail 14983 invoked by uid 0); 27 Jan 2023 04:34:03 +0900
Message-ID: <20230126193403.14982.qmail@kbs.com>
From: root@kbs.com
Date: Fri, 27 Jan 2023 04:34:03 +0900
To: webmaster@kbs.com
Subject: testmail
User-Agent: Heirloom mailx 12.5 7/5/10
MIME-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Content-Transfer-Encoding: 7bit
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
200.200.200.3 ns1.server.com ns1
200.200.200.4 ns2.server.com ns2
.
quit
+OK
Connection closed by foreign host.
[root@ns2 qmail]# tree /home/vpopmail/domains/kbs.com/webmaster/
/home/vpopmail/domains/kbs.com/webmaster/
├── Maildir
│ ├── cur
│ │ └── 1674761643.14985.ns2.server.com,S=632:2,
│ ├── new
│ └── tmp
└── lastauth
4 directories, 2 files
실습> MUA 프로그램을 설치하고 메일 확인하기
mutt: 리눅스 콘솔용 MUA 프로그램
1. MUTT 프로그램 설정
[root@ns2 qmail]# cd
[root@ns2 ~]# vi .muttrc
set mbox_type=Maildir
set spoolfile="~vpopmail/domains/kbs.com/webmaster/Maildir/"
set check_new=yes
2. 메일 발송
/home/vpopmail/domains/kbs.com/webmaster/Maildir 파일을 모두 삭제한다.
[root@ns2 ~]# find /home/vpopmail/domains/kbs.com/webmaster/Maildir -type f -exec rm -f {} \;
메일 3개를 발송한다.
[root@ns2 ~]# mail -s TestMail1 webmaster@kbs.com < /etc/hosts
[root@ns2 ~]# mail -s TestMail2 webmaster@kbs.com < /etc/hosts
[root@ns2 ~]# mail -s TestMail3 webmaster@kbs.com < /etc/hosts
3. 메일 확인
[root@ns2 ~]# mutt
q:종료 d:삭제 u:복구 s:저장 m:메일 r:답장 g:그룹 ?:도움말
1 N Jan 27 root@kbs.com (0.2K) TestMail1
2 N Jan 27 root@kbs.com (0.2K) TestMail2
3 N Jan 27 root@kbs.com (0.2K) TestMail3
q를 눌러서 종료한다.
실습> sbs.com에서 kbs.com 으로 메일 발송하기
[root@ns1 ~]# mail -s '안녕하세요. 즐거운 금요일입니다.' webmaster@kbs.com < /etc/hosts
[root@ns2 ~]# mutt
q:종료 d:삭제 u:복구 s:저장 m:메일 r:답장 g:그룹 ?:도움말
1 O Jan 27 root@kbs.com (0.2K) TestMail1
2 O Jan 27 root@kbs.com (0.2K) TestMail2
3 O Jan 27 root@kbs.com (0.2K) TestMail3
4 O Jan 27 root@sbs.com (0.2K) 안녕하세요. 즐거운 금요일입니다.
q
실습> qmail 로그 확인
로그 파일은 텍스트 파일로 되어 있으므로 cat, tail 명령어로 확인할 수 있다.
[root@ns1 ~]# cat /var/log/qmail/current
[root@ns1 ~]# cat /var/log/qmail/smtpd/current
[root@ns1 ~]# cat /var/log/qmail/pop3d/current