Unix/Solaris10

Postfix - Outlook과 같은 외부 클라이언트 연동 (SMTP AUTH)

ForceCore 2006. 12. 2. 03:10

qpopper는 sendmail환경에서 컴파일 했지만, postfix환경에서도 잘 된다.

그래서 Outlook으로 메일을 받기는 잘 된다.

IMAP도 postfix에서 지원하는 것 같던데...; qpopper가 있으니 지금은 skip -_-;;;

(qpopper 컴파일:http://blog.naver.com/hkh119/120020785728. 이 블로그에도 스크랩 되어있다.)

 

아웃룩을 통해서 메일을 보내는 것은, 서버 입장에서 보면 relaying이다.

그래서? 요즘 같은 스팸메일 시대에는 relay를 허용해 놓으면

자신의 서버가 스팸 릴레이 서버로 악용될 소지가 다분하다 -_-;;

postfix는 아무 컴퓨터나 릴레이 하게 허용되어 있지 않다.

 

그러면, 어떻게 선별적으로 릴레이를 허용하게 되는고 하니...

1. SMTP AUTH라는 것을 통해 하든지

2. IP등록을 통해 하게 된다.

 

2번은 유동 IP인 사용자가 있으면 무용지물 ㅡ,.ㅡ

대학교 내부라 IP가 고정되어있다면 모를까?

 

http://wiki.kldp.org/wiki.php/Postfix-SASL-HOWTO

....?!!!!!!! 이렇게 좋은 것이 있었다니 OTL;;

SASL auth를 써볼까나 ㅡ,.ㅡ;;

일단은... 재컴파일 해야 할 듯 ㅡ,.ㅡ

sunfreeware에서 SASL2를 받아 패키지로 설치.

라이브러리는

/usr/local/lib/sasl2/

에 설치된다.

# ln -s /usr/local/lib/sasl2 /usr/lib/sasl2

이렇게 해서 소프트링크도 잘 설정해줌.

 

$ make tidy

 

$ make makefiles CCARGS="-DUSE_CYRUS_SASL -DUSE_SASL_AUTH -I/usr/local/include/sasl" AUXLIBS="-L/usr/local/lib -lsasl2 -R/usr/local/lib"

 

$ make

 

# make install

 

ld.so.1: postconf: 치명적: libsasl2.so.2: 열기 실패: 해당 파일이나 디렉토리가 없음

라고 한다 OTL

 

make makefiles CCARGS="-DUSE_SASL_AUTH -I/usr/local/include/sasl -R/usr/local/lib" AUXLIBS="-L/usr/local/lib -lsasl2"

이렇게 옵션을 준 다음 make와 make install을 다시 해서 해결 -_-...

crle를 잘 쓰는 방법을 익히든지 해야 할 듯...;

현재는 아래와 같음.

# crle -l /usr/dt/lib:/usr/local/lib -l /usr/local/ssl/lib:/usr/ccs/lib -l /usr/sfw/lib:/opt/sfw/lib:/usr/X11R6/lib


중간중간에 있는 -l은 대문자 i가 아니라 소문자 L이다.

 

어쨌거나 컴파일은 되었다. -0-;;

 

saslauthd를 설정해야 하는데...

/usr/local/sbin/saslauthd

가 saslauthd이다. 여타 문서와 달리... saslauthd의 설정 파일 따위는... 없는듯 -_-;

 

/var/run/saslauthd 를 만들어주었다.

/usr/local/sbin/saslauthd -a pam으로 실행.

 

/var/state/saslauthd디렉토리가 없다고 하면 만들어준다.

 

init.d에 넣을 스크립트를 대충 만들었다.

#!/sbin/sh
#
# made by ssanzing
#

case "$1" in
'start')

       /usr/local/sbin/saslauthd -a pam
        ;;

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

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

그리고 부팅시에 실행되도록  하였다.

 

main.cf에 추가 된 내용

# SASL auth stuff
smtpd_sasl_auth_enable = yes
smtpd_sasl_security_options = noanonymous
smtpd_sasl_local_domain = $myhostname
smtpd_recipient_restrictions = permit_sasl_authenticated permit_mynetworks

 

# accept non standard clients
broken_sasl_auth_clients = yes

 

postfix를 재실행.

 

보내기: mail, mutt로는 되는데, pine은 실패한다 -_-;;. outlook도 아직 릴레이가 설정되지 않아 안 된다.

 

/opt/sfw/etc/Muttrc에서 약간 수정해야 한 것이, set hostname=yyy.xxx.ac.kr임. YYY.yyy.xxx.ac.kr로 개판으로 메일이 가서...;;

 

받기: pine, mutt, outlook 모두 잘 된다. 벗뜨... 외부에서 보내는 메일이 오질 않는다 -0-

 

dmesg를 치니 Dec  2 00:19:33 EEDOC postfix/smtpd[895]: [ID 947731 mail.crit] fatal: SASL per-process initialization failed 라고 있다. 아무래도... sasl을 컴파일로 설치해야 할듯 -_-;;

sunfreeware의 패키지 밑, 소스코드를 받았다. (공식 사이트 것도 있지만.. 그냥 더 잘 될 것 같아서)

http://blog.naver.com/neohawk5/140020167298

이 글도 컨닝함.

 

sasl2를 받았고,

configure옵션은,

$ ./configure --prefix=/usr/local --enable-login --enable-plain --with-saslauthd=/var/state/saslauthd

이다.

 

...............

 

일단 SASL 패키지를 삭제했다.

그런데 실수로 썬의 SUNWlibsasl을 삭제해버렸다.

sunfreeware에서 받은 sasl 2.뭐시기는 남기고;;

PAM모듈 로드도 안 되고 장난 아니었다 ㅠ.ㅠ;;;

결국 어찌어찌 해서 libsasl.so.1을 구해서 (다른 시스템에서 -_-)

복사하고 난리 쳤다....;

 

신기하게도, 컴파일 뒤에 postfix가 잘 되기 시작한다.

외부 서버와 메일 주고 받기: 잘 됨.

pop3: 잘 됨.

relay: 아직...;

 

smtpd_sasl_auth_enable = yes

왜인고 하니... 이것이

smtpd_sasl2_auth_enable = yes

로 변경 되었기 때문이다. (이런 옵션은 있지도 않다.)

즉... sasl문제...;

 

테스트.

$ telnet localhost 25

라고 해본다.

EHLO zzz.xxx.ac.kr라고 해보자. zzz는 yyy(메일 서버)와 다른 도메인.

 

smtpd_sasl_auth_enable = yes

로 된 경우 아무것도 뜨지 않는다. -_-^

그렇다고 no로 하면

AUTH

가 보이지 않는다.

 

250-PIPELINING
250-SIZE 10240000
250-VRFY
250-ETRN
250-ENHANCEDSTATUSCODES
250-8BITMIME
250 DSN

 

AUTH가 보여야만 인증이 되는데 OTL

 

Cyrus SASL을 재컴파일 하기로 했다.

$ CFLAGS=-DOPENSSL_DISABLE_OLD_DES_SUPPORT=1 ./configure --prefix=/usr/local --enable-login --enable-plain --with-saslauthd=/var/state/saslauthd

이렇게 했더니 성공했다.

그런데, "digestmd5.c", line 279: warning: initialization type mismatch
이런 식의 에러가 나면서 컴파일이 안 될 수도 있다.
그런 경우는 openssl라이브러리가 설치되어 있는지 확인하고, 컴파일 옵션을

$ CFLAGS=-DOPENSSL_DISABLE_OLD_DES_SUPPORT=1 ./configure --prefix=/usr/local --enable-login --enable-plain --with-saslauthd=/var/state/saslauthd --with-openssl=/usr/local/ssl

(뒤에 --with-openssl을 수동으로 지정) 히주면 된다.


http://www.brandonhutchinson.com/Installing_Cyrus_SASL_with_sendmail_on_Solaris.html

이 글을 컨닝하여 성공할 수 있었다.

실패할 수도 있다.

 

아,,, 그냥 하면 configure가 실패하는데, 그건

$ make distclean

으로 해결했다.

 

# make install

훼훼훼 성공.

 

$ testsaslauthd -u ID -p 비번

으로 테스트 해봐서... 성공했다.

 

0: OK "Success."

 

성공하면 이런 식으로 나올 것이다.

connect() 가 실패한다고 나왔을 때, saslauthd를 재시작 해주었다.

 

그래도 안됨...;

dmesg를 보면 SASL per-process initialization failed

라고 뜬다.

 

같은 현상을 겪는 사람이 있음:

http://archives.neohapsis.com/archives/postfix/2001-09/0571.html

 

-DUSE_CYRUS_SASL
옵션을 CCARGS에 또 주어 컴파일을 다시 해보란 말도 보았다.

(위의 make makefiles CCARGS="-DUSE_CYRUS_SASL -DUSE_SASL_AUTH -I/usr/local/include/sasl" AUXLIBS="-L/usr/local/lib -lsasl2 -R/usr/local/lib"는 수정된 것이라 처음부터 따라한 사람은 아마 잘 될 것이다.)

http://mail-index.netbsd.org/pkgsrc-bugs/2006/07/18/0012.html

 

재컴파일 --);;

 

OK 성공!

250-PIPELINING
250-SIZE 10240000
250-VRFY
250-ETRN
250-AUTH LOGIN PLAIN GSSAPI CRAM-MD5
250-AUTH=LOGIN PLAIN GSSAPI CRAM-MD5
250-ENHANCEDSTATUSCODES
250-8BITMIME
250 DSN

 

아마 SASL은 컴파일 안 해도 될 것이다....; 아마도...

 

# SASL auth stuff
smtpd_sasl_auth_enable = yes
smtpd_sasl_security_options = noanonymous
# 아래 것은 = 하고 아무것도 안 넣어야 함.

smtpd_sasl_local_domain =

broken_sasl_auth_clients = yes

smtpd_recipient_restrictions =
                permit_sasl_authenticated,
                check_relay_domains,
                reject_unauth_destination,
                reject

 

이렇게 해놓았는데, 아웃룩으로 메일을 보내려고 하는 경우...

안 된다 ㅡ,.ㅡ;; 비번 넣으라는 창이 뜨는 것으로는 보아서

인증 시스템이 동작은 하는데 인증에 성공하지는 못한다.

 

테스트를 해보자.

 

$ telnet localhost 25

AUTH PLAIN c3lzYWRtaW4Ac3lzYWRtaW4icjgwbnRoMzgweA==

이런 식으로 해보자.

c3lzYWRtaW4Ac3lzYWRtaW4icjgwbnRoMzgweA== 부분은

http://makcoder.sourceforge.net/demo/base64.php

이곳에서

ID\0ID\0비번

이렇게 입력하고 bas64 인코딩을 한 것이다.

ex) test\0test\0password

 

535 5.7.0 Error: authentication failed: bad protocol / cancel

이렇게 뜬다.

 

그리고, AUTH LOGIN

을 해보니...... 실패한다 ㄱ-

authentication failure가 뜬다.

 

saslauthd를 죽인 다음, 똑같이 해보았는데

dmesg를 쳐도 에러 메시지가 없다.

아무래도, saslauthd가 있든 없든 지멋대로인 것 같다 -_-;;;;

 

웃기게도... 모든 가이드들이

smtp.conf를 말하고 있었는데...

그걸 만들어야 한다는 말은 여태 못 보았었다;;

# cd /usr/local/lib/sasl2
# echo "pwcheck_method: saslauthd" > smtpd.conf

이렇게 하니까 된다...;