Superkkt Blog

오래전에 작성한 내용이라서 틀린 부분이 있을수도 있고 현재 상황에 맞지 않는 내용도 있을 수 있다.

@ cyrus-sasl

센드메일에서 보내는 메일을 위한 사용자 인증을 위해 sasl을 설치해야 한다. 그렇지 않은 경우에는
고정 IP를 가진 사용자들만 IP를 센드메일에 등록해서 보내는 메일을 사용 할 수 있게 하는 방법 밖에 없다.

cyrus-sasl은 현재 2.x버전이 있으나 컴파일시 커베로스 부분에서 에러가 난다. 그러므로 아래와 같이 사용하지 않는 인증모듈은 모두 disable 시킨다.

아카이브를 해제한 디렉토리에서 아래의 명령으로 설치한다. (GNU make 사용해야 에러 안난다!!!!)

# cd cyrus-sasl-2.1.18/include
# cp /usr/include/sys/des.h ./ <--- 이 헤더파일 때문에 에러가 나서 복사한다.
# cd ..
# ./configure --enable-login --with-pwcheck --disable-digest --disable-srp --disable-krb4 --disable-gssapi --disable-anon
# gnu-make; gnu-make install (GNU make 사용)

위의 configure 옵션은 아웃룩등에서 사용자 인증을 하는 LOGIN을 enable시키는 것이다.
--with-pwcheck는 사용자 인증에서 sasldb를 사용하지 않고 shadow password를 사용하는 것이다.
즉, 따로 보내는 메일 인증 패스워드가 필요 없고 계정의 패스워드로 메일을 보낼 수 있게 해준다.

make install까지 마친 후에, 아래의 명령을 실행한다.

# ln -s /usr/local/lib/sasl2 /usr/lib/sasl2
# vi /usr/local/lib/sasl2/Sendmail.conf
pwcheck_method: pwcheck

# mkdir /var/pwcheck
# chmod 700 /var/pwcheck
# /usr/local/sbin/pwcheck

위의 /usr/local/sbin/pwcheck는 root권한으로 실행 되어야 한다.(데몬으로 떠있는다.)
아래의 파일들을 생성 해서 부팅시마다 pwcheck 파일이 실행 되도록 설정 한다.

# vi /etc/init.d/pwcheck
#!/sbin/sh
#
# made by Ki-Tae, Kim
#

case "$1" in
'start')
/usr/local/sbin/pwcheck
;;

'stop')
/usr/bin/pkill pwcheck
;;

*)
echo "Usage: $0 { start | stop }"
exit 1
;;

esac
exit 0
~
~
#
# ln pwcheck /etc/rc2.d/S87pwcheck
# ln pwcheck /etc/rc1.d/K35pwcheck
# ln pwcheck /etc/rcS.d/K35pwcheck
# chown root:sys pwcheck
# chmod 744 pwcheck


아래는 sasldb password를 생성 하는 것에 대한 참조 글이다. (--with-pwcheck를 사용할 경우는 아래의 db생성 과정은 필요 없다.)

-sasldb의 생성

이 파일은 인증을 통해 센드메일 사용자를 추가해 주는 파일입니다.
salspasswd를 사용해서 사용자를 추가합니다.

# saslpasswd -c -u uez.codns.com admin

위와 같이하면 /etc/sasldb.pag , /etc/sasldb.dir라는 파일이 생기면서 사용자가 등록이
됩니다. -c는 패스워드 파일을 최초 생성 할 때만 사용 한다.
-u 옵션은 도메인을 말합니다.

사용자 등록의 여부는 아래처럼 확인합니다.

# sasldblistusers

user: rockhard realm: rockhard.domain.net mech: DIGEST-MD5
user: rockhard realm: rockhard.domain.net mech: PLAIN
user: rockhard realm: rockhard.domain.net mech: CRAM-MD5

저의 경우 위와 같은 결과가 나옵니다. 말그대로 user는 사용자고
realm은 호스트의 FQDN입니다. 자세히는 모르겠으나 넷스케이프의
인증 방법인 PLAIN과 PINE의 인증 방법인 CRAM-MD5를 사용하기 위해
saslpasswd에서 -u 옵션으로 호스트의 FQDN을 추가해야 합니다. 이를
빼먹으면 사용자 인증에 실패합니다.

* 여기서 중요한 점이 있는데 우선 saslpasswd명령을 실행하기 전에
sasldblistusers를 먼저 한번 실행시켜야 합니다. 물론 아무런 결과도
나오지 않습니다. 원인은 모르겠으나 이와 같이 하지 않으면 사용자
생성에 실패한다는 에러가 나옵니다. 좀더 자세히 말하자면 생성은 되는데
"mech: PLAIN" 항목이 나타나지 않습니다. 이는 넷스케이프에서의 인증
실패를 초래하게 될것입니다.

* 위에서 말했듯이, Netscape에서는 아직까지 PLAIN방법을 통한 인증만이
지원됩니다. MUA들의 인증 지원여부는 아래의 URL에서 확인해 보시기
바랍니다.

http://www.sendmail.org/~ca/email/mel/SASL_ClientRef.html

* 한가지 더 중요한 점은 /etc/sasldb파일이 생성되고 나면 권한을
600 모드로 바꾸어 주어야 합니다. 소유자이외에는 읽기,쓰기 권한을
가질 수 없습니다.





@ Berkeley-DB

sendmail 설정 파일들(access, aliases, virtusertable 등)의 DB 만들때 사용한다.
기존에는 DBM이라는 방식을 사용했으나 현재는 더이상 지원하지 않고 NEWDB 옵션을 사용해서
버클리 DB를 사용한다. 리눅스에서는 기본 설치된 버클리 DB가 있어서 따로 설치할 필요가 없고
솔라리스에서는 설치를 해줘야지 makemap hash 등을 사용할 수 있다.

http://www.sleepycat.com/download/db/index.shtml

여기 주소에서 최신 버전과 함께 Patch도 함께 다운 받는다.

# cp patch.4.2.52.* ./db-4.2.52.NC/
# cd db-4.2.52.NC
# patch -p0 < patch.4.2.52.1
# patch -p0 < patch.4.2.52.2
# cd build_unix --> 이 디렉토리에서 아래와 같이 configure를 실행시켜야 한다.

* 만약 gcc를 이용한다면, /usr/ucb/cc 와 cc 를 다른이름으로 바꾼다.

# ../dist/configure
# make
# make install

* 모두 설치되었다면 /usr/local/BerkeleyDB.4.2/lib 을 LD_LIBRARY_PATH 에 포함시킨다.








@ Sendmail

!! 필독 !!

http://www.sendmail.org/secure-install.html (8.12.x 버전대의 인스톨 방법)



먼저 솔라리스 8의 기본 센드메일을 제거 한다.

# pkgrm SUNWsndmr
# pkgrm SUNWsndmu

아카이브를 해재한 디렉토리에서 아래의 파일을 수정(생성)한다.
아래의 내용은 cyrus-sasl과의 연동(with SSL)을 위해서 추가로 설정되는 설정 파일의 내용도 포함되어 있다.TLS를 사용하기 때문에 보내는 메일 설정에서 SSL을 사용할 수 있다. 아래 내용 중에서 ssl의 include/lib디렉토리 지정과 DHASURANDOMDEV 옵션은 리눅스에서는 제거해야 할것 같은데 테스트 해보지는 않았다.


# cd devtools/Site
# vi site.config.m4
APPENDDEF(`confINCDIRS', `-I/usr/local/BerkeleyDB.4.2/include -I/usr/local/include/sasl -I/usr/local/ssl/include')
APPENDDEF(`confLIBDIRS', `-L/usr/local/BerkeleyDB.4.2/lib -L/usr/lib/sasl2 -L/usr/local/ssl/lib')
APPENDDEF(`conf_sendmail_ENVDEF', `-DSASL -DSTARTTLS -DHASURANDOMDEV')
APPENDDEF(`conf_sendmail_LIBS', `-lsasl2 -lssl -lcrypto')
APPENDDEF(`confLIBDIRS', `-R/usr/local/lib -R/usr/local/BerkeleyDB.4.2/lib -R/usr/lib/sasl2')


!!주의!! 위에서 `-lsasl'에서 l은 L의 소문자인것에 주의한다.
!!참고!! 리눅스는 기본 설치된 버클리-DB가 있기 때문에 컴파일 할 때 위에서 Berkeley-DB 들어간것과 맨 마지막 줄은 빼고 한다.

# cd ../..
# sh Build
컴파일..

아래의 명령으로 sendmail.cf를 생성한다.

# cd cf/cf
# vi generic-solaris.mc (아래와같이 변경한다.) (리눅스의 경우는 generic-linux.mc)

divert(0)dnl
VERSIONID(`$Id: generic-solaris.mc,v 8.13 2001/06/27 21:46:30 gshapiro Exp $')
OSTYPE(solaris2)dnl
DOMAIN(generic)dnl
define(`confAUTH_MECHANISMS',`LOGIN PLAIN CRAM-MD5 DIGEST-MD5')dnl
TRUST_AUTH_MECH(`LOGIN PLAIN CRAM-MD5 DIGEST-MD5')dnl
define(`confPRIVACY_FLAGS', `authwarnings,noexpn,novrfy')dnl
define(`confCACERT_PATH', `/etc/mail/certs')dnl
define(`confCACERT', `/etc/mail/certs/CA.crt')dnl
define(`confSERVER_CERT', `/etc/mail/certs/server.crt')dnl
define(`confSERVER_KEY', `/etc/mail/certs/server.key')dnl
define(`confPRIVACY_FLAGS', `goaway')dnl
FEATURE(`virtusertable')dnl
FEATURE(`access_db')dnl
FEATURE(`dnsbl', `list.dsbl.org', `"550 Email rejected due to sending server misconfiguration - see http://dsbl.org/listing?" $&{client_addr}')dnl
MAILER(local)dnl
MAILER(smtp)dnl


위에서 dnsbl 엔트리는 dsbl.org에서 스패머로 등록된 IP로부터는 메일을 받지 않기 위한 설정이다. 단, dsbl에 등록된 IP중에는 ADSL 유동IP도 포함이 되어 있어서 고객들이 메일을 보낼때 가끔 스패머로 리젝트 되는 경우도 발생한다. 호스팅 서버에서는 dsbl을 사용하는걸 고려해봐야 한다.또 위에서 CA.crt는 루트 CA 인증서(내가 발행한..), server.crt는 메일서버 인증서, server.key는 메일서버 비밀키 파일 이다. 이 파일들을 만드는 방법은 qpopper + ssl 도큐먼트를 참조한다.

그리고 /etc/mail/certs 디렉토리는 root 소유에 600 퍼미션을 가지고 있어야만 한다.


# mkdir /etc/mail (없을 경우만..)
# m4 ../m4/cf.m4 generic-solaris.mc > sendmail.cf (리눅스의 경우는 generic-linux.mc)
# make install-cf

그리고 설치를 한다.

# cd ../..
# mkdir /usr/share/man/cat1; mkdir /usr/share/man/cat5; mkdir /usr/share/man/cat8
# sh Build install
.
. (반복)

이로서 센드메일의 설치가 끝났다. 그러나 이러한 방법으로 정상적으로 설치가 안되는 명령어가 있다.
mail.local이 대표적인 예인데 이 파일이 없으면 메일을 받지를 못한다.
아카이브를 해재한 디렉토리에서 아래의 명령으로 이 파일을 설치한다.

# cd obj.SunOS.5.8.sun4
# cd mail.local
# cp mail.local /usr/lib

아카이브를 해재한 디렉토리에서 alias파일을 생성 한다.

# cd sendmail
# cp aliases /etc/mail
# cd /etc/mail
# makemap hash /etc/mail/aliases < /etc/mail/aliases
# newaliases
/etc/mail/aliases: 14 aliases, longest 10 bytes, 152 bytes total


aliases 파일에서 virtuser 이메일로 들어온것도 아래와 같이 컨트롤 할 수 있다.

search@man2002.co.kr: ktkim, ykkim, superkkt@nate.com


search@man2002.co.kr로 온 메일을 3명의 유저가 받아보는 것이다.


# vi local-host-names
localhost
unixedu.org
#
#

만약 /var/spool/mqueue 디렉토리가 없으면 생성 후 퍼미션을 아래와 같이 할당 한다.

drwxr-x--- 2 root bin 512 Dec 1 17:27 mqueue

그외의 퍼미션들..

-r-xr-sr-x root smmsp ... /PATH/TO/sendmail
drwxrwx--- smmsp smmsp ... /var/spool/clientmqueue
drwx------ root wheel ... /var/spool/mqueue
-r--r--r-- root wheel ... /etc/mail/sendmail.cf
-r--r--r-- root wheel ... /etc/mail/submit.cf

[Notice: On some OS "wheel" is not used but "bin" or "root" instead, however, this is not important here.]


그리고 /etc/mail/submit.cf 파일에서 UseMSP가 True로 되어있고 QueueFileMode가 0660으로 되어 있는지 확인한다.

만약 Procmail을 사용한다면 sendmail.cf에서 mail.local을 찾아서 procmail의 절대경로로 바꿔준다.


센드메일을 구동 한다.

# /usr/lib/sendmail -L sm-mta -bd -q1h
# /usr/lib/sendmail -L sm-msp-queue -Ac -q30m


테스트를 한다.

(외부로 보내는 메일 테스트)
# mailx -v superp4@hanafos.com
subject: hi
hi
.
EOT
.
.
.
. (발송 메시지)
. SENT.

위와같이 SENT라고 나오면 정상이다.

(내부로 보내는 메일 테스트)
# mail root
hi
.
EOT
#
# ls /var/mail
:saved lost+found root
#

위와 같이 root에 관련한 메일박스가 생성되면 정상이다.


(sasl+ssl과의 연동 테스트)
# telnet 0 25
Trying 0.0.0.0...
Connected to 0.
Escape character is '^]'.
220 unixedu.org ESMTP Sendmail 8.13.0/8.13.0; Mon, 28 Jun 2004 23:59:32 +0900 (KST)
ehlo localhost
250-unixedu.org Hello localhost [127.0.0.1], pleased to meet you
250-ENHANCEDSTATUSCODES
250-PIPELINING
250-8BITMIME
250-SIZE
250-DSN
250-ETRN
250-AUTH LOGIN PLAIN CRAM-MD5
250-STARTTLS
250-DELIVERBY
250 HELP

위에서 EHLO unixedu.org를 입력 했을때 250-AUTH LOGIN PLAIN이라는 메세지와 250- STARTTLS가 보여야 정상이다.


아래의 설정 파일을 변경 해서 보내고 받는 메일의 사이즈를 제한한다.

# vi /etc/mail/sendmail.cf
(파일의 맨끝에 SMTP Mailer 부분을 설정한다.)
Msmtp, P=[IPC], F=mDFMuX, S=EnvFromSMTP/HdrFromSMTP, R=EnvToSMTP, E=\r\
n, L=990,
T=DNS/RFC822/SMTP, M=10485760,
A=TCP $h
Mesmtp, P=[IPC], F=mDFMuXa, S=EnvFromSMTP/HdrFromSMTP, R=EnvToSMTP, E=\r
\n, L=990,
T=DNS/RFC822/SMTP, M=10485760,
A=TCP $h

Mlocal, P=/usr/lib/mail.local, F=lsDFMAw5:/|@qfSmn9, M=52400000
S=EnvFromL/HdrFromL, R=EnvToL/HdrToL,
T=DNS/RFC822/X-Unix,
A=mail.local -d $u

위에서 Msmtp와 Mesmtp는 원래 있는것에 M=엔트리만 추가해준 것이고 Mlocal은 맨밑에다 추가해주는 것이다.
위의 설정은 보내는 메일은 최대 10메가, 받는 메일은 최대 50메가로 설정 한 것이다.


아래와 같은 파일들을 생성해서 부팅시 자동으로 센드메일이 실행되도록 한다.

# vi /etc/init.d/sendmail
#!/sbin/sh
#
# made by Ki-Tae, Kim
#

case "$1" in
'start')
/usr/lib/sendmail -L sm-mta -bd -q1h
/usr/lib/sendmail -L sm-msp-queue -Ac -q30m
;;

'stop')
/usr/bin/pkill -9 sendmail
;;

*)
echo "Usage: $0 { start | stop }"
exit 1
;;

esac
exit 0

#
# ln /etc/init.d/sendmail /etc/rc2.d/S88sendmail
# ln /etc/init.d/sendmail /etc/rc1.d/K36sendmail
# ln /etc/init.d/sendmail /etc/rcS.d/K36sendmail
# chown root:sys sendmail
# chmod 744 sendmail

위와 같이 해도 어떠한 에러가 발생 하는 경우는 /var/log/syslog를 참조해서 트러블 슈팅을 한다.


- virtual email 설정

sendmail.cf를 생성할때부터 virtual email이 가능하도록 설정을 하였었다.
/etc/mail/virtusertable이라는 파일을 만들고 아래와 같은 형식으로 작성한다.
#
# <가상주소> <포워딩될 실제주소>
#
webmaster@aaa.com aaa
webmaster2@aaa.com testuser@hanmail.net
webmaster@admin.unixedu.org admin
master@admin.unixedu.org superp4@hanafos.com

위와 같이 가상주소로 온 메일을 계정으로 포워딩 할수도 있고 다른 메일주소로 보낼수도 있다.

# makemap hash /etc/mail/virtusertable < /etc/mail/virtusertable

위의 명령어로 virtusertable.pag, *.dir 파일이 생성된다.

/etc/mail/local-host-names에 virtual email을 사용할 도메인 네임을 적는다.
aaa.com
admin.unixedu.org

그리고 센드메일을 리스타트하면 된다.
(그후부터 virtusertable에 추가된 내용이 있어도 센드메일 리스타트 하지 않아도 된다. 단, makemap은 해줘야 한다.)




- expn, vrfy 사용금지 설정

root# telnet targethost 25
Trying...
Connected to targethost.
Escape character is '^]'.
220 targethost ESMTP Sendmail 8.9.3 (PHNE_18979)/8.7.3; Wed, 6 Dec

expn admin -> admin 사용자 존재확인
vrfy admin -> admin 사용자 존재확인

sendmail에서 expn, vrfy등을 통하여 사용자 정보 노출을 막기를 권고한다.
우리는 이미 generic-solaris.mc에서 이 부분을 모두 지정했다.

만약 여기서 지정을 안했을 경우에는 sendmail.cf를 직접 수정하면 된다.
/etc/mail/sendmail.cf 의 Options을 지정한 부분에 다음 항목이 존재한다.

O PrivacyOptions=authwarnings
이 항목에 좀더 추가를 하여 다음과 같이 변경한다.

O PrivacyOptions=authwarnings, noexpn,novrfy

그 후, 아래와 같이 sendmail을 restart 하면 된다.

# pkill -HUP sendmail








@ qpopper


패키지를 선프리웨어에서 다운 받아서 설치 한다.
아래의 파일을 수정(추가) 한다.

(qpopper를 쓸때 로그를 다른 파일로 기록하는 방법.)

/etc/inetd.conf를 편집

pop3 stream tcp nowait root /usr/local/lib/popper qpopper -s -t /var/adm/pop3

# touch /var/adm/pop3
# chmod 600 /var/adm/pop3


*참고

-s This enables statistics logging. After each session
ends, a statistics record is written to the log.
This record looks like:
Stats: randy 0 0 1 385 randy.example.org 192.168.2.4
Username----^ ^ ^ ^ ^ ^ ^
Deleted msgs-----! ! ! ! ! !
Deleted octets-----! ! ! ! !
Msgs left on server--! ! ! !
Octets left on server---! ! !
Name of client machine-------------! !
IP address of client machine-----------------------!

-t logfile If debug and trace files are defined, output
from logging goes to the trace file instead of
syslog.


#
# vi /etc/services
pop3 110

위 파일에서 pop3관련 엔트리가 있는지 확인 한다.


# pkill -HUP inetd

2006/03/19 00:44 2006/03/19 00:44

trackbacks

trackbacks rss

이 글에는 트랙백을 보낼 수 없습니다

Leave a Comment