qmail 의 queue(큐) 를 삭제하는 방법

몇가지 방법이 있다.


/var/qmail/queue 를 통채로 삭제하고 qmail-fix 등으로 디렉토리 구조를 재설정하는 방법.

이건 별로 추천하지 않는다.


가장 좋은 방법은 qmHandle 을 이용.

다운주소 : http://sourceforge.net/projects/qmhandle/  (perl 로 되어 있어 바로 사용가능하다)

몇가지 사용법은

qmHandle -s : 상태

qmHandle -D : 전체삭제

qmHandle -l : 리스트

qmHandle -d번호 : -l 의 리스트에 나온 번호 의 큐 개별 삭제



반응형

WRITTEN BY
1day1
하루하루 즐거운일 하나씩, 행복한일 하나씩 만들어 가요.

,
기존에 qmail + vpopmail 을 cdb 방식으로 사용하다가 mysql 방식으로 바꿔서 설치해봤다.
특별한 차이는 없고, 계정정보를 mysql db 에 저장하여 사용한다.

그런데, 기존의 계정정보를 mysql 으로 옮기는 방법을 설명한다.
vpopmail 에 관련 명령이 있다. vconvert

vconvert 는 /etc/passwd 의 계정정보(기존 sendmail 방식이나, qmail + checkpasswd 방식) 를 옮길 수도 있고, cdb 방식 , mysql 방식등 서로간의 계정정보를 옮길 수 있다.

-e 는 /etc/passwd  에 해당하는 옵션이다.
-c 는 cdb 방식 , -m 은 mysql 방식(정확히는 sql)이다.

그래서 변환 방식은
vconvert -c -m  또는  vconvert -c -m {도메인명}
방식으로 변환하면 된다. ( FROM -c TO -m 의 순서라고 생각하면 된다.)

이때 변환시 vconvert 가 참조하는 파일은 /var/qmail/users/ 의 cdb 파일을 참조한다.
계정을 옮길때  기존의  ~vpopmail/domains 폴더와  /var/qmail/users 폴더를 백업해놓는다.
이 데이터를 기준으로 변환된다. 새서버 세팅후에 해당 디렉토리를 교체해준다.
위 명령으로 옮기면 된다. 이때 vpopmail.mysql 세팅이 되어 있어야 한다.
바로 mysql 에 연결해서 vpopmail 테이블에 계정정보를 저장하기 때문이다.


한가지 주의할 사항이 있다.
/var/qmail/users 를 옮겨올때,  vpopmail/vchkpw 의 UID/GID 가 동일하다면 상관없지만, 다르다면 바꿔줘야 한다.
+mydomain.com-:mydomain.com:108:107:/home/vpopmail/domains/mydomain.com:-::
108:107 부분을 새 시스템에 맞게 바꿔준다.
바꿔준후에 적용하는 방법은  /var/qmail/bin/qmail-newu  를 실행시켜주면 cdb 파일이 재 설정된다.


주의사항 하나더.
vconvert 하면  control 의 rcpthosts , virtualdomains 등의 설정도 자동갱신해주는 줄 알았는데.
수동으로 넣어줘야 한다. /var/qmail/control 도 같이 백업해 주는 것이 좋겠다.

반응형

WRITTEN BY
1day1
하루하루 즐거운일 하나씩, 행복한일 하나씩 만들어 가요.

,
지난번 qmail + vpopmail 은 cdb 를 이용하는 방법이었다.(http://blog.1day1.org/329)
즉, 사용자 계정정보를 txt 형태로 저장하는 것이었다.

사용자 계정정보를 mysql 을 이용한  디비에 저장하는 방법을 사용해보자.

기존 cdb 방식에서 " --with cdb " 를 빼고 SRPM 빌드를 하면된다.
rpmbuild --rebuild knetqmail-0.0.3.src.rpm

빌드전에 mysql-devel 패키지를 설치해준다.

mysql 이 /usr/local/mysql 에 설치가 되어 있지 않다면..
yum install mysql-devel
그리고, /usr/local/mysql/include , /usr/local/mysql/lib 를 각각  심볼릭 링크해준다. (64bit 환경)
ln -s /usr/include /usr/local/mysql/include
ln -s /usr/lib64 /usr/local/mysql/lib

빌드하고 설치 후에 mysql DB 생성 해준다.
mysql> create databases vpopmail ;
mysql>  GRANT  ALL PRIVILEGES ON vpopmail.* TO 'vpopmail'@'localhost'  IDENTIFIED BY '계정암호' WITH GRANT OPTION ;
mysql> flush privileges;
vpopmail 이 mysql 계정에 접근할 수 있도록 설정을 바꿔준다.
/home/vpopmai/etc/vpopmail.mysql 을 편집한다.
아래와 같은 라인을 DB 명및 계정/암호 등을 맞게 수정한다.
# host|port|user|password|database
#
localhost|0|root|secret|vpopmail
기본값이 root 계정을 이용하는 것인데, vpopmail 계정을 생성해서 해당 계정으로 바꿔주어도 된다.
계정및 DB 는 자신이 원하는 값으로 바꾸면 된다.
localhost|0|vpopmail|계정암호|vpopmail


vadddomain 등 명령을 내렸을때 다음과 같은 에러가 난다면...
Error - no authentication database connection. Initial open
vpopmail 에서 mysql 으로 연결이 정상적으로 이뤄지지 않는다.
64bit 환경에서 빌드한 경우 위와 같은 에러가 날 수 있다.
strace vadddomain mydomain.com >& debug.txt  
등으로 체크해보면...

위와 비슷한 메세지를 볼 수 있다.(처음 부분)
open("/usr/local/mysql/lib/mysql/tls/x86_64/libmysqlclient.so.15", O_RDONLY) = -1 ENOENT (No such file or directory)
stat("/usr/local/mysql/lib/mysql/tls/x86_64", 0x7fff9dba66c0) = -1 ENOENT (No such file or directory)
open("/usr/local/mysql/lib/mysql/tls/libmysqlclient.so.15", O_RDONLY) = -1 ENOENT (No such file or directory)
stat("/usr/local/mysql/lib/mysql/tls", 0x7fff9dba66c0) = -1 ENOENT (No such file or directory)
open("/usr/local/mysql/lib/mysql/x86_64/libmysqlclient.so.15", O_RDONLY) = -1 ENOENT (No such file or directory)
stat("/usr/local/mysql/lib/mysql/x86_64", 0x7fff9dba66c0) = -1 ENOENT (No such file or directory)
open("/usr/local/mysql/lib/mysql/libmysqlclient.so.15", O_RDONLY) = 3
진한 부분이 mysql 라이브러리를 불러오는 부분인데, 좀 이상하다.
윗부분에서 x86_64 에서 불러오지 못한다.  해당 위치를 확인해보면.(/usr/local/mysql/lib/mysql)
-rw-r--r-- 1 root root  21408 Sep 22  2008 libdbug.a
-rw-r--r-- 1 root root  73040 Sep 22  2008 libheap.a
-rw-r--r-- 1 root root 465624 Sep 22  2008 libmyisam.a
-rw-r--r-- 1 root root  41978 Sep 22  2008 libmyisammrg.a
-rw-r--r-- 1 root root 872012 Sep 22  2008 libmysqlclient.a
-rwxr-xr-x 1 root root    879 Sep 22  2008 libmysqlclient.la
lrwxrwxrwx 1 root root     24 Sep 22  2008 libmysqlclient.so -> libmysqlclient.so.15.0.0
lrwxrwxrwx 1 root root     24 Sep 22  2008 libmysqlclient.so.15 -> libmysqlclient.so.15.0.0
-rwxr-xr-x 1 root root 640162 Sep 22  2008 libmysqlclient.so.15.0.0
-rw-r--r-- 1 root root 493164 Sep 22  2008 libmystrings.a
-rw-r--r-- 1 root root 448720 Sep 22  2008 libmysys.a
-rw-r--r-- 1 root root  11890 Sep 22  2008 libvio.a
이런식이다. x86_64 같은 경로는 없다.(위의 라이브러리는 rpm 설치시 복사되는 듯 하다. 혹은 rpmbuild 시)
즉, 64bit 환경에서는 x86_64 에서 불러와야 하는데, 아무도 32bit 라이브러리를 불러오기 때문인 듯 싶다.

/usr/local/mysql/lib 를 libx 로 이름을 바꿔보고 다시 테스트 해봤다.
open("/usr/local/mysql/lib/mysql/tls/x86_64/libmysqlclient.so.15", O_RDONLY) = -1 ENOENT (No such file or directory)
stat("/usr/local/mysql/lib/mysql/tls/x86_64", 0x7fffbebbde90) = -1 ENOENT (No such file or directory)
open("/usr/local/mysql/lib/mysql/tls/libmysqlclient.so.15", O_RDONLY) = -1 ENOENT (No such file or directory)
stat("/usr/local/mysql/lib/mysql/tls", 0x7fffbebbde90) = -1 ENOENT (No such file or directory)
open("/usr/local/mysql/lib/mysql/x86_64/libmysqlclient.so.15", O_RDONLY) = -1 ENOENT (No such file or directory)
stat("/usr/local/mysql/lib/mysql/x86_64", 0x7fffbebbde90) = -1 ENOENT (No such file or directory)
open("/usr/local/mysql/lib/mysql/libmysqlclient.so.15", O_RDONLY) = -1 ENOENT (No such file or directory)
stat("/usr/local/mysql/lib/mysql", 0x7fffbebbde90) = -1 ENOENT (No such file or directory)
open("/etc/ld.so.cache", O_RDONLY)      = 3
fstat(3, {st_mode=S_IFREG|0644, st_size=84051, ...}) = 0
mmap(NULL, 84051, PROT_READ, MAP_PRIVATE, 3, 0) = 0x2b05b2aa7000
close(3)                                = 0
open("/usr/lib64/mysql/libmysqlclient.so.15", O_RDONLY) = 3
역시 마지막줄의  /usr/lilb64/mysql 에서 불러오는 것을 볼 수 있다.
이렇게 하면 정상적으로 에러없이 계정이 생성된다.

또는  /usr/local/mysql/lib/mysql/  에  심볼릭 링크를 걸어줘도 된다.
ln -s /usr/lib64/mysql  x86_64
아무튼 /usr/local/mysql/lib/mysql/libmysqlclient.so.15 을 불러오면 64bit 에서는 정상실행(연결)되지 않는다.

ps. 일반적으로  /usr/local/mysql 에는 아무것도 없을 것이다.
 (mysql 을 소스컴파일 해서 해당 위치를 지정하지 않는이상)
 가상머신에 깔려있는 VM 이미지가  mysql 이 설치되어 있는 것 같다.



근데 궁금한 것이 있다.
과연 vpopmail 을 mysql 연결이 어떤 이점이 있을까?
아무래도 파일보다는 DB 가 관리상 편하긴 할 것이다.
그런데, 메일의 잦은 접속때문에 DB connect 문제가 생기지 않을까?
계정확인을 위한 select 가 거의 대부분을 차지 하기 때문에 큰 문제가 아닐까?
메일서버가 DB서버도 겸하고 있을때는 한쪽의 부하가 다른 쪽에 영향을 주지 않을까?
아니면 vpopmail 의 컨넥션은 한번 이루어지고 계속 연결상태를 유지하나?(소스를 들여다 봐야 겠다)


반응형

WRITTEN BY
1day1
하루하루 즐거운일 하나씩, 행복한일 하나씩 만들어 가요.

,
qmail + vpopmail  으로 운영중이다. mysql 을 쓰지않는 cdb 방식을 사용한다.
운영중인 메일 서버를 이전한다거나, OS 를 업그레이드 한다거나 해서 재설치하는 경우 기존의 설정된 메일계정을 옮기는 방법이다. 어렵지 않다.

옮기기 전에 기존 메일서버의 데이터를 확인한다.

1) vpopmail 의 domains 는 무조건 백업하자
실제 각 도메인별로 메일이 쌓이는 곳이다. 이 데이터를 통채로 옮기는 방법이니 백업하자.
최악의 상황을 대비해 domains 는 백업하자.

2) 옮길 domain 을 확인한다.
 혹시모르니, /var/qmail/ 의 control , users 등을 백업해준다. 옮길도메인을 체크한다.


qmail+vpopmail 을 재설치 한후에는

1) 옮길 도메인을 vadddomain 으로 생성해준다.
 그러면 vpopmail / domains 에 해당 도메인계정이 생성될 것이다.
 기존 도메인의 설정그대로 옮긴다면, qmail/control 의 설정파일, qmail/users/assign 등을 통채로 복사해서 사용해도 될 듯 하지만, 구분해서 옮긴다면, 각각의 파일을 수정해줘야 하기때문에 번거롭다. 그래서 vadddomain 으로 생성해 주는 것이 좋을 듯 하다.

2) 백업한 domains 를 교체해준다.
 vadddomain 으로 생성되면, vpopmail/domains 에 각 도메인이 생성된다. 생성된 domains 는 domains.bak  등으로 이름을 바꿔주고, 백업한 domains 를 그대로 넣어주면 된다.



추가로 imap 서버가 달라지는 경우 처리해줄 각 서버별 설정이 차이가 나는 부분이 있다.
내 경우 기존 bincimap 에서 dovecot 으로 교체를 했는데, 몇가지 주의할 점이 있었다.
그 부분은 따로 글을 올릴 예정이다.

반응형

WRITTEN BY
1day1
하루하루 즐거운일 하나씩, 행복한일 하나씩 만들어 가요.

,
큐메일(qmail) 에서는 여러가지 방법의 필터링을 사용한다.
유명한 rblsmtpd , spamassassin , clamav , procmail , maildrop , simscan , qmail-scanner 등 다양하다.

필터링 단계에 따라 방법도 달라진다.
크게 qmail-smtpd 단에서 필터링 하는 방법과 사용자의 메일박스에 도착하기 전에 필터링하는 방법으로 나눌 수 있다.

1) spf (Sender Policy Framework) 를 이용한 필터링
참조 : http://qmail.kldp.net/wiki/wiki.php/qmail_antispam#s-4.1

도메인 설정시 이런 설정을 본적이 있을 것이다.
; spf - kisarbl.or.kr
        IN      TXT     "v=spf1 ip4:111.222.123.234 ip4:122.222.123.234 ~all"
위의 IP 주소는 메일발송하는 서버의 IP 를 지정하게 된다.
~all , -all 등이 있는데, 각각 softfail , fail 등의 spf 값을 리턴하게 된다.

지난번 qmail SRPM 빌드 하는 글에서 언급한 패키지는 spf 패치가 적용되어 있다.
그래서 spf 필터링을 활성화 시켜주면 된다.

/var/qmail/control/spfbehavior  를 3 또는 4 로 해주면 된다.(0 은 비활성화)

특정도메인에 대해서 spf 설정을 확인하는 방법은
dig mydomain.com  txt 
로 확인할 수 있다.

예를 들어 mydomain.com 이 A 사의 웹호스팅을 이용한다고 하자.
이때 mydomain.com 에서 웹어플(폼메일,예약,문의등)로 메일을 보낼 때 spf 를 설정하지 않으면 받는 메일서버에서 거부당할 수 있다.(대부분의 포털은 설정이 되어 있다고 봐야 한다)
"v=spf1 ip4:{웹호스팅IP주소} ~all"
도메인 설정에 추가해준다.

dnsever 의 경우  "호스트 설명 텍스트(TXT) 추가" 항목에 넣어주면 된다.

2) rblsmtpd 를 이용한 필터링.

rbl 은 Real-time Blocking List 라고 한다.
한마디로 스팸발송IP 들을  블랙리스트, 화이트리스트 로 만들어서 블랙리스트에 등록된 IP 주소로 오는 메일을 거부하는 필터링 방법이다.

역시나 qmail SRPM 패키지에는 rblsmtpd 가 포함되어 있다.

/var/qmail/supervise/qmail-smtpd/run 파일을 직접수정해서 rblsmtpd 설정을 할 수 있다.
SRPM 패키지에는 /var/qmail/control/conf-knetqmail 을 수정해서 할 수 있도록 미리 설정되어 있다.
USE_RBL="no"
RBL_DNS="-r bl.spamcop.net -r rbl.linuxstudy.pe.kr"
다음과 같은 항목인데, USR_RBL 의 값을 yes 로 바꿔준다.
RBL_DNS 부분은 rbl 사이트를 지정하는 부분이다.
현재 rbl.linuxstudy.pe.kr 은 잠정중단된 상태이니 뺀다.
USE_RBL="yes"
RBL_DNS="-b -r bl.spamcop.net -r sbl.spamhaus.org -r spamlist.or.kr"
위와 같이 바꿔준다. (spamhaus 와 kisarbl 을 추가했다)
그리고 -b 옵션을 추가해 줬는데, 해당 옵션은 메일거부시 바로 failure notice 응답을 해준다.
그래야 발송IP 가 블랙리스트에 등록이 되어 있는지 바로 알 수 있게 된다.


반응형

WRITTEN BY
1day1
하루하루 즐거운일 하나씩, 행복한일 하나씩 만들어 가요.

,
기존에 qmail + vpopmail(with cdb) 를 사용했었다.
pop3 는 vpopmail 을 이용했다. 그리고, imap 은 bincimap 을 사용했다.
그런데, squirrelmail 을 사용하려고 테스트 하는 중 bincimap 1.2.x 버전에 없는 기능때문에 사용할 수 없다. 1.3.x 버전은 사용이 가능한 듯 하지만, 컴파일 에러가 생겨서 dovecot 을 쓰기로 했다.
요즘 추세(?)가 dovecot 인것 같다. (bincimap 도 가벼워서 괜찮긴한데)

http://www.dovecot.org/download.html

소스 RPM 을 이용.(vpopmail 적용이 안되나?)

vpopmail 을 적용하기 위해서는 직접 소스컴파일을 해야 하는 듯 하다.
SRPM , spec 을 수정해서도 할 수 있겠지만, 고칠 부분이 많아서 별 의미가 없을 듯 함.


직접 소스 컴파일
wget http://dovecot.org/releases/1.2/dovecot-1.2.4.tar.gz
configure --with-vpopmail
make
make install

설정은 다음과 같이 한다.
http://wiki.dovecot.org/#Dovecot_installation
http://wiki.dovecot.org/BasicConfiguration

dovecot  계정을 생성한다.
useradd -d /usr/local/libexec/dovecot -s /sbin/nologin dovecot

기본적으로 /usr/local/etc 에 설정 파일이 저장된다.
mv dovecot-example.conf dovecot.conf
로 샘플설정파일을 기준으로 자신의 환경에 맞게 설정한다.(주석을 해제해 준다)

protocols = imap
pop3 를 쓸경우 pop3 도 추가

disable_plaintext_auth = no
ssl = no
SSL 을 쓰지 않고, 평문으로 인증하는 것을 허용한다.

auth default {
}
부분의 vpopmail 부분을 해제/추가한다
userdb vpopmail{
}
passdb vpopmail{
}
user = vpopmail
vpopmail 계정 uid, gid 설정
# id -u vpopmail
# id -g vpopmail
를 확인해서 아래 처럼 설정값을 넣어준다.
first_valid_uid = 100
last_valid_uid = 100
first_valid_gid = 101
last_valid_gid = 101

dovecot 실행하기
dovecot 실행스크립트를 복사한다.
cp {소스디렉토리}/doc/dovecot-initd.sh  /etc/init.d/dovecot
chmod 755 /etc/init.d/dovecot




[추가 - 18-06-20]  centos 6 에서 추가

1. centos 6 에서 package 로 설치해봤다. 설정은 검색해서 참조.

2. telnet localhost 143  해보면 원하는 메시지가 안나온다.

* OK Waiting for authentication process to respond


원래 기대하던 메시지는

* OK [CAPABILITY IMAP4rev1 LITERAL+ SASL-IR LOGIN-REFERRALS ID ENABLE AUTH=PLAIN]  Dovecot Ready

로그 메시지를 확인해보니.

Jun 20 05:46:01 auth: Fatal: Support not compiled in for passdb driver 'vpopmail'

Jun 20 05:46:01 master: Error: service(auth): command startup failed, throttling

패키지가 vpopmail 지원되도록 컴파일 되지 않은 듯 하다.

즉, 소스로 설치해야 할 듯 함. ㅜㅜ

yum groupinstall "Development Tools"


몇가지 imap 체크 방법


LOGIN [username] [password] LIST [flags] [folder separator] [search term] STATUS [mailbox] [flags] SELECT [mailbox] FETCH [first]:[last] flags FETCH [mail number] body[header] FETCH [mail number] body[text] LOGOUT


로그인시 혹시 이런 메시지가 나온다면, vpopmail 사용시

NO [AUTHENTICATIONFAILED] Authentication failed

/home/vpopmail/domains/도메인/vpasswd

이 파일의 권한을 체크해본다. ( vpopmail 으로 되어 있어야 한다) - 원인중 하나일 수 있다.

또는 vpasswd {메일계정}  으로 암호를 재설정 해준다.
(domains 를 복사한 경우 - 재설정이 필요한 듯 하다)

반응형

WRITTEN BY
1day1
하루하루 즐거운일 하나씩, 행복한일 하나씩 만들어 가요.

,
지난글에서 Centos 에서 빌드했었다.(http://blog.1day1.org/329)

우분투(9.04)에서 빌드를 해봤다. SPEC 파일의 몇몇 설정 부분을 수정해야 한다.


SPEC 의 어느 부분을 바꾸나?
1. /var/qmail 디렉토리 관련.

SPEC 에서 qmaild 계정을 만들때  useradd -m  옵션으로 /var/qmail 을 홈으로 지정해서 같이 생성하는데, alias 계정을 먼저 생성하기에 /var/qmail/alias  디렉토리를 생성할 수 없다는 에러가 발생한다.
그래서 qmaild 계정을 먼저 생성해준다.

또는 계정생성 앞부분에 /var/qmail 을 생성해준다.
if [ ! -d %{qmaildir} ]; then
        mkdir %{qmaildir}
fi

2. useradd 옵션 변경
우분투에서는 옵션이 -M 이 아니라, -m 이다.
useradd 의 버전차이인지 배포판 차이인지는 모르겠다

3. /sbin/nologin  을  /usr/sbin/nologin  으로 바꾼다 (배포판 차이)

4. {_initrddir} 위치 /etc/init.d 가 생성되지 않는다.
우분투는 /etc/init.d 에 위치한다. 
rpm --eval %{_initrddir}
으로 확인한다.

5. pushd , popd 명령이 안 먹나?
ubuntu 에서 /bin/sh 가 dash 라는 놈에 링크되어 있다.
pushd,popd 는 bash 에서 동작한다.  기존것을 지우고,
ln -s /bin/bash /bin/sh
으로 링크해준다.

chkconfig 대신에 update-rc.d 를 이용한다.
우분투는 update-rc.d 를 이용한다. (chkconfig 부분을 찾아서 다음처럼 바꾼다)
update-rc.d -f qmaild defaults
update-rc.d -f pop3d defaults

다 바꿨으니, SRPM 을 다시 만들어야지.
여기까지 변경후 다시 SRPM 을 생성한다.
rpmbuild --bs --with cdb SPEC/knetmail.spec

몇몇 패키지가 필요하다. 해당 패키지가 설치되어 있지 않으면 설치해준다.
apt-get install libssl-dev

모든 준비끝.
rpmbuild --rebuild --with cdb SRPMS/knetqmail-0.0.1-3.src.rpm

우분투에서도 쉽게 설치하자.


수정된 SPEC 파일이다.(참조) - 기존 spec 파일과 비교해서 직접 확인하기 바란다.



반응형

WRITTEN BY
1day1
하루하루 즐거운일 하나씩, 행복한일 하나씩 만들어 가요.

,
메일서버 qmail 을 설치/설정하는 것을 설명했다.(http://blog.1day1.org/329)

qmail + vpopmail(with cdb) 의 조합에서  vpopmail 콘솔 명령으로 관리할 수 있다.
그런데, 웹으로 관리하고 싶을때는 qmailadmin 을 설치한다.
http://www.inter7.com/index.php?page=qmailadmin

다운 받은 압축파일을 풀고, configure 설정을 해준다.
./configure --disable-ezmlmdir --disable-autoresponder-path
따로 ezmlm (메일링리스트) , autoresponder 가 필요없어서 위처럼 disable 옵션을 줬다.

설정이 끝나면 컴파일하고 설치한다.
make
make install-strip
Centos 의 apache 의 경우  /var/www/cgi-bin  , /var/www/html  등에 관련 파일들이 설치된다.

http://localhost/cgi-bin/qmailadmin  으로 접속을 하면 다음과 같은 화면이 나온다.
계정 생성, 삭제 등을 웹인터페이스 상에서 할 수 있다.


ps. 그런데, 간단한 설정만 되어 있어, 콘솔화면에서 명령내리는 것과 큰 차이는 없다.
  둘중 편한 것을 쓰면 될 듯 하다. 도메인에 대해 별도 관리자가 직접하도록 할때는 유용할 듯 하다.


반응형

WRITTEN BY
1day1
하루하루 즐거운일 하나씩, 행복한일 하나씩 만들어 가요.

,

메일서버에는 다양한 어플들이 있다.
흔히(?) 쓰는 sendmail 부터, 요즘 우분투쪽에서 밀고 있는 듯한 postfix.
지금은 어떤지 모르겠지만, 예전에는 sendmail 의 보안문제에 대해서 말이 많았다.

그렇다 보니 다른 대안을 찾아다니게 된다.
그 중에 유명한 메일서버가 qmail 이 아닐까 한다.
큐메일.
그런데, 문제가 컴파일 해서 사용해야 하기때문에 비경험자에게는 쉽지않은 난이도를 가지고 있었다.
그리고 환경에 따라 다양한 방법이 존재한다.(각종 패치는 더욱 많다)
다양한 요구를 만족시킬 수 있다는 장점은 다른 면에서 복잡성을 나타내기 때문에 어려워진다.

서버의 실제 계정을 활용하는 가장 기본적인 방법과 (qmail 기본)
파일로 관리하는 가상계정을 사용하는 방법(qmail + vpopmail)
DB 로 관리하는 가상계정을 사용하는 방법(qmail + vpopmail + mysql)

등 여러방법이 존재한다.
기타 자세한 정보는 http://qmail.kldp.net  를 참조한다.

지금 설명하려는 부분은 qmail + vpopmail 의 가상계정을 이용하는 방법이다.
지금까지 qmail 기본 설정을 사용했었다. 원래 sendmail 으로 운영했었는데(몇년전) 관리의 어려움이 있어 qmail 로 변경을 했다. 그당시 설정이 어려운부분이 많아서, 제일 간단한 방법이면서, 기존의 설정을 그대로 가져갈 수 있기 때문에 qmail 기본을 사용했었다.

그리고 몇년이 지난후 서버의 운영체제를 업그레이드 하다보니, 메일서버가 문제였다.
예전의 컴파일 하던 방식이 새운영체제에 맞지 않는 것이었다.
여러 방법을 찾아보다가 qmail + vpopmail 로 이전하는 것으로 결론을 내렸다.
그 사이에 쉽게 처리할 수 있는 방법이 나왔기 때문이다.

Centos 에서 SRPM 으로 빌드하는 방법이다.
http://qmail.kldp.net/phpbb/viewtopic.php?t=7887

1. 해당 SRPM 패키지를 받아서. 빌드한다.

rpmbuild --rebuild --with cdb knetqmail-0.0.1-3.src.rpm

이때 /var/qmail 디렉토리가 없다는 에러가 나온다. ( mkdir /var/qmail 로 만들어 준다.)
빌드된 rpm 파일은 /usr/src/redhat/RPMS/x86_64 에 위치한다. ( x86_64 또는 i386 )

2. 빌드된 rpm 패키지를 설치한다.
centos 는 기본 sendmail 이 설치가 되어 있어, 먼저 제거를 해준다.

rpm -e sendmail --nodeps
rpm -Uvh /usr/src/redhat/RPMS/x86_64/knetqmail-0.0.1-3.x86_64.rpm

(빌드된 rpm 파일명은 본인의 것을 확인한다.)

3. qmail 실행

/etc/init.d/qmaild start
/etc/init.d/pop3d start

위 처럼 실행하면 /service 에 다음처럼 링크가 된다.

ll /service/
합계 0
lrwxrwxrwx 1 root root 31  8월 27 17:46 qmail-pop3 -> /var/qmail/supervise/qmail-pop3
lrwxrwxrwx 1 root root 31  8월 27 17:45 qmail-send -> /var/qmail/supervise/qmail-send
lrwxrwxrwx 1 root root 32  8월 27 17:45 qmail-smtpd -> /var/qmail/supervise/qmail-smtpd

위와 같이 나오고, ps ax 에

# ps ax|grep qmail
27800 ?        S      0:00 supervise qmail-smtpd
27802 ?        S      0:00 supervise qmail-send
27803 ?        S      0:00 /usr/bin/tcpserver -vRHl0 -x/etc/tcp.smtp.cdb -c 100 -u 108 -g 106 0 smtp /var/qmail/bin/qmail-smtpd /home/vpopmail/bin/vchkpw /bin/true
27804 ?        S      0:00 /usr/bin/multilog t s2500000 n10 /var/log/qmail/smtpd
27805 ?        S      0:00 qmail-send
27812 ?        S      0:00 /usr/bin/multilog s2500000 n10 /var/log/qmail/send
27813 ?        S      0:00 qmail-lspawn ./Maildir/
27815 ?        S      0:00 qmail-rspawn
27816 ?        S      0:00 qmail-clean
27824 ?        S      0:00 supervise qmail-pop3
27826 ?        S      0:00 /usr/bin/multilog n10 s2500000 /var/log/qmail/pop3
27827 ?        S      0:00 /usr/bin/tcpserver -vRHl0 -u 108 -g 106 0 pop3 /var/qmail/bin/qmail-popup mymail.mydomain.com /home/vpopmail/bin/vchkpw /var/qmail/bin/qmail-pop3d Maildir

위와 같이 관련 데몬이 뜨는 것을 볼 수 있다.

telnet localhost 25   (smtp)
telnet localhost 110   (pop3)

등으로 테스트를 해본다.

http://www.abuse.net/relay.html  나
http://people.kldp.org/~eunjea/relay-test.php

에서 릴레이 테스트도 해본다.

4. vpopmail 계정관리

vadddomain blahblah.com

도메인 추가.

vdeldomain blahblah.com

도메인 삭제. 조심하자. 아주 깨끗히 삭제한다.

vadduser foo@blahblah.com 

메일사용자 계정을 추가한다. 전체 메일주소를 쓴다.

vdeluser foo@blahblah.com

메일사용자 계정 삭제. 역시 조심. 그냥 삭제한다.

vpasswd foo@blahblah.com

암호변경. 암호는 바꾸고 써야지.

vaddaliasdomain newblah.com  blahblah.com

기존쓰던 도메인 계정그대로 다른 도메인으로도 메일을 같이 받고 싶을때.

자세한 사항은  http://ejlabs.net/txt/vpopmail  를 참조한다.


여기까지 기본적인 설치와 설정에 관한 부분이다.
예전에 qmail 써봤던 분들은 SRPM 빌드 방법을 해보면 정말 편해졌다는 것을 느낄 것이다.

다음에는 기존 /etc/passwd 의 계정을 vpopmail 가상계정으로 가져오는 방법과
그에 따라 간단하게 만든 실행 스크립트를 소개한다.


[추가] : yum update 시의 conflict 문제.

yum update 를 했을때. 

knetqmail ... conflicts with exim

이런식의 메세지가 나오면서 진행이 되지 않으면, 관련 패키지를 빼고 업데이트한다.

yum update -x exim -x postfix -x sendmail


위에서 sendmail 을 삭제할 때. rpm -e  보다는 yum remove  를 쓰는것이 좋을 듯 싶다.
(문제가 생길지는 모르겠다 - 테스트 필요.)

 

[추가-18-06-20] : centos6 에서 추가조치

1. rpmbuild 설치

yum install rpm-build

yum install gcc openssl-devel

# 기타 추가 패키지
yum install procmail

 

2. 진행도중 다음과 같은 에러.

chkuser.c:38:22: error: vpopmail.h: No such file or directory

chkuser.c:39:19: error: vauth.h: No such file or directory

chkuser.c:40:29: error: vpopmail_config.h: No such file or directory

chkuser.c: In function 'realrcpt':

chkuser.c:746: warning: comparison between pointer and integer

chkuser.c:875: warning: assignment makes pointer from integer without a cast

chkuser.c:885: warning: assignment makes pointer from integer without a cast

chkuser.c:896: error: dereferencing pointer to incomplete type

chkuser.c:896: error: 'BOUNCE_MAIL' undeclared (first use in this function)

chkuser.c:896: error: (Each undeclared identifier is reported only once

chkuser.c:896: error: for each function it appears in.)

chkuser.c:901: error: dereferencing pointer to incomplete type

chkuser.c:902: error: dereferencing pointer to incomplete type

chkuser.c:906: error: dereferencing pointer to incomplete type

make: *** [chkuser.o] Error 1

오류: /var/tmp/rpm-tmp.cZvvkq의 잘못된 종료 상황 (%build)

 

 

RPM 제작 오류:

    /var/tmp/rpm-tmp.cZvvkq의 잘못된 종료 상황 (%build)

 

 

3. 기존 srpm 버전이 centos 6 에 대응이 안된 듯 하다.  

knetqmail-0.0.1-3.src.rpm  대신에
knetqmail-0.0.1-5.src.rpm  버전을 구해서 해보니 rebuild 잘된다.

(생성된 rpm 위치는 /root/rpmbuild/RPMS/x86_64/  => 사용자 계정에 생성 )

4. 리빌드 후 설치 시 centos 6 - postfix 를 제거  ( centos 6 는 아마도 sendmail 이 아닌 postfix 가 기본인 듯 하다)

rpm -e postfix --nodeps

 

5. /etc/initab 의 /command/svscanboot 이 실행되지 않을 때

# cat /etc/init/svscan.conf 
start on runlevel [12345]
respawn
exec /command/svscanboot
반응형

WRITTEN BY
1day1
하루하루 즐거운일 하나씩, 행복한일 하나씩 만들어 가요.

,