Sendmail 8.12.10 + Berkeley DB 4.1.25 컴파일 메뉴얼 (Ver 1.0)


Official distribution site : http://jkkang.net/
Technical Info : jkkang65@hanmail.net

Last Updated in September 28th, 2003
Written by Kang Jul Ki



   본 문서는 AIX 5.1 환경에서 Sendmail 8.12.10 버전을 컴파일해서 설치하는 방법을 설명하기 위해서 만들어졌다. Sendmail 8.12.10은 2003년 9월 27일 현재 최신버전이며, Berkeley DB 4.1.25와 함께 컴파일을 하였다.

S/WVersion비고
AIX5.1ML #3
sendmail8.12.10
GNU gcc3.3.1or higher
GNU make3.8.0or higher
GNU groff1.11.1
GNU m41.4반드시 GNU m4를 컴파일/설치해서 사용하기 바란다.
AIX에 기본적으로 깔려있는 m4를 사용하게 되면 Parsing 에러가 발생한다.


   위 파일중에서 Sendmail 8.12.10은 당연히 소스코드를 다운로드해서 컴파일을 할 것이고, GNU m4는 www.bullfreeware.com에서 binary 버전을 구할수 없으므로, 소스코드를 다운로드 받아서 컴파일을 해야만 한다. 그외에 gcc, make, groff는 위 웹싸이트에서 바이너리 파일을 다운로드 받아서 컴파일이아닌 인스톨을 해주면 된다. C 컴파일러는 꼭 GNU gcc를 사용하도록 하자.


1. Sendmail 최신버전


  2003/9/27 8.12.10 버전 (약 1.8 MB)



2. 컴파일 및 설치환경


OS는 AIX 5.1.0 & ML #3,
C 컴파일러는 GNU gcc 3.3.1 for AIX 5.1,
Make는 GNU make 3.79.1 or higher,
GNU groff,
GNU m4 (AIX 에서 제공해주는 m4는 sendmail의 .mc 파일을 인식할때 문제가 있었다. 그래서 필자는 GNU m4를 설치하여 이 문제를 해결하였다. 이 문제는 sendmail의 메뉴얼 파일에도 언급이 되어 있다.)

위의 툴들은 꼭 필요하므로 미리 설치토록 하자. 그리고 다음과 같이 환경변수를 설정해서 컴파일을 하도록 하자. 만약에 ksh을 사용한다면 .profile의
PATH=/usr/local/bin:.............................
이런식으로 /usr/local/bin을 가장 앞에 주면 될것이다.

mail :/> which gcc
/usr/local/bin/gcc

mail :/> which make
/usr/local/bin/make

mail :/> which groff
/usr/local/bin/groff

mail :/> which m4
/usr/local/bin/m4

mail :/> id
uid=0(root) gid=0(system)


3. Berkeley DB 4.1.25 컴파일 및 설치 (root로 설치)


  sendmail 프로그램은 DB 관리를 Berkeley DB를 사용하여 관리할 수가 있다. 따라서, Berkeley DB사용하고자 한다면, sendmail의 인스톨 이전에 컴파일해서 설치를 해줘야 한다. Berkeley DB를 공식적으로 배포하는 웹싸이트는 http://www.sleepycat.com/ 이고, 이는 Open Source로서 누구나 자유롭게 사용이 가능하다. 2003년 3월 9일 현재 최신버전은 4.1.25 버전이다. 필자는 AIX 4.3.3에서 4.1.24 버전을 사용해서 sendmail의 컴파일을 시도하였으나, db->open() 함수의 인자의 갯수가 일치하지 않는 문제로 인해서 실패하였다. 이 문제는 news group 에서도 그 사례가 여러번 언급이 되어 있었다. 그래서 AIX 4.3.3에서 컴파일할때는 Berkeley DB 3.3.11 버전을 사용했지만, 4.1.25 버전에서는 이 부분이 다행스럽게도 잘 해결이 된듯해서 4.1.25 버전을 사용해서 컴파일을 하였다.

Download Site: http://www.sleepycat.com/download/patchlogs.shtml

mail :/gnu> ls -l
-rw-r-----   1 root     sys         3080234 Sep 19 21:31 db-4.1.25.tar.gz
-rw-r-----   1 root     sys         1892497 Sep 19 21:31 sendmail.8.12.10.tar.gz

mail :/gnu> gzip -dc db-4.1.25.tar.gz | tar xvf -
Tip) GNU tar를 쓰면 다음과 같이 한Q에도 가능하다.
mail :/gnu> tar zxvf db-4.1.25.tar.gz


mail :/gnu> cd db-4.1.25
mail :/gnu/db-4.1.25> more README
꼬오옥 메뉴얼은 읽는습관을 갖자.

mail :/gnu/db-4.1.25> cd dist
mail :/gnu/db-4.1.25/dist> ./configure CC=gcc
mail :/gnu/db-4.1.25/dist> make
mail :/gnu/db-4.1.25/dist> make install
mail :/gnu/db-4.1.25/dist> cd /usr/local
mail :/usr/local> ls -l
...
drwxr-xr-x   6 root     system          256 Sep 28 11:03 BerkeleyDB.4.1
...



4. sendmail 디렉토리의 보안관련 퍼미션 확인


mail :/> chmod go-w / /etc /etc/mail /usr /var /var/spool /var/spool/mqueue
mail :/> chown root / /etc /etc/mail /usr /var /var/spool /var/spool/mqueue
컴파일을 하고, 인스톨을 완료한 후에 디렉토리 설정이 제대로 되어 있는지 확인하기 위하여 다음의 명령어를 실행시킨다.
mail :/> sendmail -v -bi

WARNING: writable directory /etc
WARNING: writable directory /var/spool/mqueue

와 같은 메시지를 뿌려줄 것이다. 그러면, 다시 퍼미션을 확인해서 올바르게 설정을 하기를 바란다.



5. Sendmail 8.12.10 압축풀기


  Unix 에서 프로그램을 컴파일할때 가장 중요한 것은 컴파일을 하기전에 꼭 README 파일을 읽어 보는것이다. 대부분의 사용자들이 이것이 귀찮아서 건너뛸려고 하지만, 이건 정말 잘못된 것이다. 꼭 읽어보기 바란다.

mail :/> cd /gnu
mail :/gnu> gzip -dc sendmail.8.12.10.tar.gz | tar xvf -
mail :/gnu> cd sendmail-8.12.10
mail :/gnu/sendmail-8.12.10> cd sendmail
mail :/gnu/sendmail-8.12.10/sendmail> more SECURITY (강력히 읽어볼것을 권고, 읽기싫으면 컴파일 그만 둘것...)

sendmail : a set-group-ID (default group: smmsp, recommended
gid: 25) 로 설정한다. 그리고 다음과 같이 chmod, chown 을 갖게된다.

-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

[주의사항: 몇몇 OS에서는 'wheel' 이 없는대신, bin, root 가 대신 쓰여도 된다. 이점은 중요치 않다. 따라서, AIX에서도 wheel 대신 bin 을 사용하여 group을 지정하도록 하자.] 그리고, sendmail 데몬은 root 로 실행이 되어야만 한다.
# /usr/lib/sendmail -L sm-mta -bd -q1h
or
# /usr/sbin/sendmail -L sm-mta -bd -q1h

[주의사항: inetd 모드(좋은 방법은 아님)로 sendmail 을 돌린다면, -bs 옵션외에 -Am 옵션을 줘야만 한다.]
메일이 queue에 많이 쌓이는 경우, crontab에서 다음과 같이 clean 시켜주는게 좋다.

/usr/lib/sendmail -L sm-msp-queue -Ac -q30m

@ Summary

* sendmail.cf (MTA: Mail Transmission agent)
* submit.cf (MSP : Mail Submission Program)

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

mail :/gnu/sendmail/sendmail-8.12.8/sendmail> vi README (강력히 읽어볼것을 권고, 읽기싫으면 컴파일 그만 둘것...)



6. Sendmail 8.12.10 컴파일하기


  Unix 에서 프로그램을 컴파일할때 가장 중요한 것은 컴파일을 하기전에 꼭 README 파일을 읽어 보는것이다. 대부분의 사용자들이 이것이 귀찮아서 건너뛸려고 하지만, 이건 정말 잘못된 것이다. 꼭 읽어보기 바란다.

@ GNU gcc를 사용하고자 할때,

PATH에 /usr/local/bin 경로를 미리 설정해두자.
mail :/gnu/sendmail-8.12.10/sendmail> vi ../devtools/OS/AIX.5.1
...
define(`confCC', `/usr/bin/xlc')
를
define(`confCC', `/usr/local/bin/gcc')
으로 고치고,
Berkeley DB.4.1를 위해서 다음을 추가 (물론 Berkeley DB 4.1는 다음의 디렉토리에 미리 인스톨이 되어 있어야 한다.)

APPENDDEF(`confINCDIRS', `-I/usr/local/BerkeleyDB.4.1/include')
APPENDDEF(`confLIBDIRS', `-L/usr/local/BerkeleyDB.4.1/lib')

이제는 다음과 같이 Build 프로그램을 돌리기 바란다.

mail :/gnu/sendmail-8.12.8/sendmail> sh Build -c -f ../devtools/OS/AIX.5.1

필자는 GNU gcc를 선호하는 까닭에 gcc 옵션을 사용토록 선언을 해줬다. gcc를 사용하기 위해서는 GNU make도 설치되어 있어야한다. 왜냐하면, GNU gcc는 GNU make하고 궁합이 잘 맞는다. 그 밖에 GNU groff, GNU m4 프로그램도 꼭 미리 설치해 둬야만 한다. 특히 groff는 필수적이다. GNU m4도 ifdef 파싱할때 문제가 발견되어 꼭 AIX m4가 아닌, GNU m4를 /usr/local/bin 에 깔아서 사용하기 바란다. 그리고, 초보자들이 실수하기 쉬운 경우는 꼭 환경변수 PATH의 가장 처음에 /usr/local/bin 이 오도록 하여서 /usr/local/bin/m4, make가 실행되도록 하여야만한다. 그렇지 않으면 AIX 내에 있는 m4, make를 호출할 것이다.
필자는 이번 메뉴얼을 AIX 5.1에서 만들면서 AIX 5.1용으로 컴파일된 gcc-3.3.1을 사용하였습니다. gcc-2.95.3은 AIX 4.3.3용으로 나온것이라서 필자는 더이상 AIX 5.1에서는 그 버전을 사용하지 않고 있다. 이런상황에서 sendmail을 컴파일하면서 뜻하지 않은 컴파일에러 2건이 발생했다. 이제부터 그것을 풀어가보자. 컴파일/링크에러를 푸는기술은 C/C++ 프로그래밍을 Unix에서 makefile을 만들면서 해본 사람이면 그다지 어렵지 않게 찾을수 있다.


1. 첫번째 컴파일에러 (gcc -b 옵션)

...
ranlib  libsm.a
/usr/local/bin/gcc -O3 -qstrict -I. -I../../include  -I/usr/local/BerkeleyDB.4.1/include -I/usr/local/BerkeleyDB.4.1/inc
lude -DNEWDB -DNDBM -DNIS -DMAP_REGEX -D_AIX5=50100      -c -o t-event.o t-event.c
gcc: unrecognized option `-qstrict'
/usr/local/bin/gcc -o t-event -blibpath:/usr/lib:/lib  -L/usr/local/BerkeleyDB.4.1/lib -L/usr/local/BerkeleyDB.4.1/lib t
-event.o libsm.a   -ldb -lbind -ldbm
gcc: `-b' must come at the start of the command line
make[1]: *** [t-event] Error 1
make[1]: Leaving directory `/gnu/sendmail-8.12.10/obj.AIX.5.1.0.PPC/libsm'
make: *** [/gnu/sendmail-8.12.10/obj.AIX.5.1.0.PPC/libsm/libsm.a] Error 2
mail:/gnu/sendmail-8.12.10/sendmail>

@ 해결책
mail :/gnu/sendmail-8.12.10/sendmail> vi ../devtools/OS/AIX.5.1
...
define(`confLDOPTS', `-blibpath:/usr/lib:/lib')
...
위 라인을 comment 처리(다음과같이)
dnl define(`confLDOPTS', `-blibpath:/usr/lib:/lib')

mail :/gnu/sendmail-8.12.10/sendmail> sh Build -c -f ../devtools/OS/AIX.5.1


2. 첫번째 컴파일 링크에러 (.pthread)

...
/usr/local/BerkeleyDB.4.1/lib/libdb.a(mut_pthread.o)(.pr+0x540):../mutex/mut_pthread.c: undefined reference to `.pthread
_mutex_lock'
/usr/local/BerkeleyDB.4.1/lib/libdb.a(mut_pthread.o)(.pr+0x55c):../mutex/mut_pthread.c: undefined reference to `.pthread
_cond_signal'
/usr/local/BerkeleyDB.4.1/lib/libdb.a(mut_pthread.o)(.pr+0x5f8):../mutex/mut_pthread.c: undefined reference to `.pthread
_mutex_destroy'
collect2: ld returned 1 exit status
make: *** [sendmail] Error 1
mail :/gnu/sendmail-8.12.10/sendmail>

@ 해결책
mail :/gnu/sendmail-8.12.10/sendmail> vi ../devtools/OS/AIX.5.1
...
dnl define(`confLIBS', `-ldbm')
define(`confLIBS', `-ldbm -lpthread')
...
처럼 원래 문장을 comment 처리하고 -lpthread를 추가해준다.

mail :/gnu/sendmail-8.12.10/sendmail> sh Build -c -f ../devtools/OS/AIX.5.1
...
Successfullty compiled...
...



7. Sendmail.cf 생성하기


mail :/gnu/sendmail-8.12.10/sendmail> cd ../cf/cf
mail :/gnu/sendmail-8.12.10/cf/cf> more README

  Sendmail 배포본에는 애석하게도 cf/cf/aix510.mc 파일이 없다. 이 파일은 AIX 5.1.0에서 /usr/samples/tcpip/sendmai/cf/aixsample.mc의 예제파일을 복사해서 쓰면 해결할 수 있다. 그리고 다음과 같이 편집을 해서 사용하기 바란다.

mail :/gnu/sendmail-8.12.10/cf/cf> cp /usr/samples/tcpip/sendmail/cf/aixsample.mc ./aix5.mc
mail :/gnu/sendmail-8.12.10/cf/cf> vi aix5.mc
# @(#)80        1.1  src/bos/usr/samples/tcpip/sendmail/cf/aixsample.mc, tcpsamp, bos510 10/24/00 16:08:36
# Sample AIX file
divert(0)dnl
OSTYPE(aix5)dnl
FEATURE(allmasquerade)dnl
FEATURE(`access_db', `hash -T /etc/mail/access')dnl
DOMAIN(generic)dnl
MAILER(local)dnl
MAILER(smtp)dnl
MAILER(uucp)

위에서처럼 필자가 만든 위 내용과 같이 필요없는건 모조리 지워버린다. sendmail 에 복잡한 기능이 많은것도 불필요하다. 해킹의 여지만 줄수 있다.

와 같이 뺄건 빼고, 수정을 한 다음에 모조리 지운다. 지우지 않고 # 로 comment 처리 해서는 안된다. 필자가 해본 바로는 # 처리를 해도 있는것으로 인식을한다. OSTYPE(aix51)dnl 은 OSTYPE(aix4)dnl 으로 바꾼다. 그 이유는 이곳에서는 ./ostype/aix5.m4의 파일을 참조하게 되는데, 파일명을 잘 찾도록 하기 위함이다. 특히, FEATURE(promiscuous_relay)dnl 부분은 relay-host 를 enable 하는것으로서 절대 삽입시켜서는 안된다. 이것을 삽입하게되면, 컴파일된 sendmail 은 relay-host를 허용하게 되어 수많은 스팸메일의 중간 경유지로 고스란히 사용되게 되고, 어느날 갑자기 국정원으로부터 전화가 올수도 있다. 실제, 이런 사례가 많다. FEATURE(`access_db', `hash -T /etc/mail/access')dnl 부분은 Berkeley DB를 사용해서 /etc/mail/access 파일을 사용하도록 하기 위함이다. 필자는, 이 부분을 빼먹고 해서, access 에 등록한 RELAY 가 잘 되질 않아서 많은 고생을 하였다.

mail :/gnu/sendmail-8.12.10/cf/cf> cd ..
mail :/gnu/sendmail-8.12.10/cf> m4 ./m4/cf.m4 ./cf/aix5.mc > sendmail.cf
mail :/gnu/sendmail-8.12.19/cf> ls -l sendmail.cf
-rw-r--r--   1 root     system        57736 Sep 28 11:24 sendmail.cf

* 주의사항
/usr/bin/m4:./m4/cf.m4:29 can't open file
include(../m4/cfhead.m4)

와 같이 에러가 발생하면, /bin/m4가 'ifdef'를 제대로 처리치 못하는 AIX m4의 메커니즘 문제이다. 이 문제를 해결하기 위해서는 위에서도 필자가 많이 언급하였듯이 ftp.gnu.org/pub/gnu에서 GNU m4를 다운로드 받아서 소스 컴파일을 하고, 그 m4를 쓴다. 초보자들은 GNU m4를 컴파일하는게 어려울 수도 있을것이다. 간단하다. 다음과 같이 하기 바란다.

# gzip -dc m4-1.4.tar.gz | tar xvf -
# cd m4-1.4
# ./configure CC=gcc
# make
# make install

끝~~~. 이 얼마나 간단한가!!! GNU S/W 들은 autoconf 로 컴파일을 하게끔 되어 있어서 무척 편리하다. 그래서 필자가 Compile을 좋아하는 듯 하다.

GNU m4를 설치한후,

# which m4
/usr/local/bin/m4

이렇게 나오게 하기위해서는 PATH=/usr/local/bin 과같이 맨 앞에 환경변수를 넣어줘야 한다...
자, 이제부터는 sendmail.cf를 만들어보자.
mail :/gnu/sendmail-8.12.10/cf> cd cf
mail :/gnu/sendmail-8.12.10/cf/cf> cp ../sendmail.cf .

mail :/gnu/sendmail-8.12.10/cf/cf> sh Build install-cf
Using M4=/usr/local/bin/m4
../../devtools/bin/install.sh -c -o root -g bin -m 0444 sendmail.cf /etc/mail/sendmail.cf
../../devtools/bin/install.sh -c -o root -g bin -m 0444 submit.cf /etc/mail/submit.cf

mail :/gnu/sendmail-8.12.10/cf/cf> ls -l /etc/mail
-rw-r--r--   1 root     system          900 Jun 30 10:24 aliases
-rw-r--r--   1 root     system        12288 Jun 30 10:24 aliases.db
-r--r--r--   1 root     bin           57736 Sep 28 11:25 sendmail.cf
-rw-r--r--   1 root     system           34 Aug  6 08:32 sendmail.pid
-r--r--r--   1 root     bin           38881 Sep 28 11:25 submit.cf

이렇게 해서 sendmail.cf, submit.cf 의 생성이 끝났다.



8. Sendmail 보안관련 디렉토리 설정 및 유저, 그룹 설정하기



User ID 생성: smmsp, id # : 25
Group ID 생성: smmsp, gid # : 25

mail :/gnu/sendmail-8.12.8/cf/cf> id smmsp
uid=25(smmsp) gid=25(smmsp)

와 같이 생성을 해서 아래의 권한을 설정한다. 위에서 25번의 의미는 sendmail port를 일컫는다. 그냥 쉽게 이해하기 위해서 이 번호를 사용토록 하는 것 같다.
smmsp ID가 없으면 위와같이 생성해주기 바란다.

-r-xr-sr-x      root   smmsp    ... /usr/sbin/sendmail
drwxrwx---      smmsp  smmsp    ... /var/spool/clientmqueue
drwx------      root   bin    ... /var/spool/mqueue
-r--r--r--      root   bin    ... /etc/mail/sendmail.cf
-r--r--r--      root   bin    ... /etc/mail/submit.cf



9. Sendmail 인스톨하기


  Unix 에서 프로그램을 컴파일할때 가장 중요한 것은 컴파일을 하기전에 꼭 README 파일을 읽어 보는것이다. 대부분의 사용자들이 이것이 귀찮아서 건너뛸려고 하지만, 이건 정말 잘못된 것이다. 꼭 읽어보기 바란다.

mail :/gnu/sendmail-8.12.10/cf/cf> cd ../..
mail :/gnusendmail-8.12.10> sh Build install

10. Sendmail utility(makemap, mailstats) 설정


  makemap은 스팸 메일을 차단하거나 relay를 허용하는데 사용하는 accessDB를 생성하는 프로그램이다. 필자가 위에서도 말했듯이, sendmail은 Berkeley DB를 사용해서 DB를 관리한다.

mail :/gnu/sendmail-8.12.10> cd makemap
mail :/gnu/sendmail-8.12.10/makemap> sh Build -c -f ../devtools/OS/AIX.5.1

mail :/gnu/sendmail-8.12.10/makemap> mkdir -p /usr/share/man/cat8
mail :/gnu/sendmail-8.12.10/makemap> sh Build install
Configuration: pfx=, os=AIX, rel=5.1.0, rbase=5, rroot=5.1, arch=PPC, sfx=, variant=optimized
Making in /gnu/sendmail-8.12.10/obj.AIX.5.1.0.PPC/makemap
/usr/ucb/install -c -o bin -g bin -m 555 makemap /usr/sbin
/usr/ucb/install -c -o bin -g bin -m 444 makemap.0 /usr/share/man/cat8/makemap.8

mail :/gnu//sendmail-8.12.10/makemap> cd ../mailstats
mail :/gnu/sendmail-8.12.10/mailstats> sh Build -c -f ../devtools/OS/AIX.5.1
mail :/gnu/sendmail/sendmail-8.12.8/mailstats> sh Build install
...
/usr/local/bin/gcc -O3 -qstrict -I. -I../../sendmail   -I../../include  -I/usr/local/BerkeleyDB.4.1/include -I/usr/local
/BerkeleyDB.4.1/include -DNEWDB -DNDBM -DNIS -DMAP_REGEX -D_AIX5=50100 -DNOT_SENDMAIL      -c -o mailstats.o mailstats.c
gcc: unrecognized option `-qstrict'
/usr/local/bin/gcc -o mailstats  -L/usr/local/BerkeleyDB.4.1/lib -L/usr/local/BerkeleyDB.4.1/lib mailstats.o      /gnu/s
endmail-8.12.10/obj.AIX.5.1.0.PPC/libsmutil/libsmutil.a /gnu/sendmail-8.12.10/obj.AIX.5.1.0.PPC/libsm/libsm.a  -ldb -lbi
nd -ldbm -lpthread
nroff -man mailstats.8 > mailstats.0 || cp mailstats.0.dist mailstats.0

이제는 access, relay-domains 파일을 생성한다.
mail :/gnu/sendmail-8.12.10/mailstats> cd /etc/mail
mail :/etc/mail> touch access relay-domains

access : spam relay를 ip, hostname으로 제어하기 위한것.
relay-domain : domain name 별로 relay를 허용하기 위한것.

mail :/etc/mail> vi local-host-names
mail
mail.jkkang.net

위의 hostname 란에 자신의 hostname을 기록한다. local-host-names 파일은 sendmail에서 받아들일 메일의 도메인과 호스트이름을 말한다. 이 파일은 여러주소로 오는 메일을 지정한 수신자가 받도록 설정하는 기능이다. 반드시 sendmail 데몬을 restart 시켜줘야 한다. sendmail은 이 파일에 있는 도메인의 메일은 자기가 최종수신지라고 인식하게된다. 따라서 웹호스팅을 할때에는 고객의 도메인을 반드시 이 파일에 등록을 해줘야 한다.
mail :/etc/mail> vi access
jkkang65@hanmail.net    OK
jkkang65@mail.com       REJECT
sendmail.domain         REJECT
210.117.132.23          RELAY
203.254.121				REJECT

위의 내용을 간단히 설명하자면, OK 왼쪽에 있는 메일로 부터 오는 메일을 허용하고, REJECT는 왼쪽에 있는 메일주소로부터 오는 메일을 불허한다. 그리고, RELAY는 왼쪽 IP Zone의 sendmail relay를 허용한다. 만약에 PC에서 Outlook같은것으로 pop3를 사용할려면 마찬가지로 RELAY를 허용해야만 사용이 가능하다. pop3를 사용하는것도 일종의 RELAY를 하는것과 같기때문이다. 위의 파일을 편집할때는 Tab 키를 사용해야만 한다. 자, 다음은 sendmail이 인식할수 있도록 access 파일을 Berkeley DB로 생성하는 단계이다. 꼭 hash를 쓰도록 한다.

mail :/etc/mail> makemap hash /etc/mail/access < /etc/mail/access

access파일이 수정될때마다 위의 명령을 실행시켜 access DB에 반영시켜야한다. 그리고, sendmail 데몬을 다시 실행시켜 줄 필요는 없다. 다음은 access contrlo option 부분을 살펴보자.

OK 지정된 호스트나 사용자가 보낸메일은 다른 설정 rule 이 거부하는 경우에도 받아들인다.
RELAY 지정된 호스트에 대해 SMTP 메일 중계 역할을 한다. 즉 지정된 도메인에 는 사용자에게 오는 메일을 받고 그 도메인에있는 사용자가 서버를 통해 메일을 보낼수 있도록 한다. 지정된 도메인에서 오는 메일은 다른 룰이 거부하는 경우에도 받아 들인다.
REJECT 지정된 도메인과 관련된 모든 메일(수신/발신)을 거부한다.
DISCARD $#discard mailer를 사용해 메세지를 완전히 폐기한다. 메세지를 받기는 하지만 배달은 하지않고 발신자에게 폐기사실을 알리지 않기 때문에, 발신자는 배달되었다고 생각하게 된다.
501 <message> 지정된 user@host 와 발신자의 주소가 전체 혹은 부분적으로 일치할경우 이메일을 받지 않는다. 뒤의 예는 return mail에 포함될 에러 메세지 구문을 지정하여 넣을수 있다.
553 <message> 발신자의 주소에 호스트명이 없을 경우 메일을 받지 않는다.
550 <message> 지정된 도메인과 관련된 메일을 받지 않는다.

mail :/etc/mail> vi relay-domains
210.117.198.133
jkkang.net

와 같이 해서 relay 를 허용하는 도메인을 설정할 수가 있다. 그리고 sendmail 데몬을 다시 실행시켜 줄 필요는 없다. relay 에 관련된것은 /etc/mail/relay-domains 파일에 허용하는 범위를 지정해 주는것이 관리차원에서 더 편하다. 그리고 허용을 불허하는 리스트는 access 파일을 활용하면 좋다. 필자는, 이방법을 추천하고 싶다. 그리고 다음과 같은 방법으로 sendmail이 relay를 허용하는 도메인의 리스트를 볼 수 있다.

mail :/etc/mail> echo '$=R' | sendmail -bt
ADDRESS TEST MODE (ruleset 3 NOT automatically invoked)
Enter <ruleset> <address>
> jkkang.net

위 에서 보면, 필자의 홈페이지인 jkkang.net 이 relay 가 허용되고 있음을 볼수 있다.

mail :/etc/mail> makemap -l
dbm
hash
btree

위의 명령어는 Data type 이다.

mail :/etc/mail> ls -l access*
-rw-r--r--   1 root     system           10 Sep 28 11:31 access
-rw-r-----   1 root     system        12288 Sep 28 11:32 access.db




11. Database Alias 초기화하기


mail :/etc/mail> touch aliases
mail :/etc/mail> sendmail -bi
mail :/etc/mail> chmod 0640 aliases



12. Sendmail 실행 및 버전보기


mail :/etc/mail> /usr/lib/sendmail -bd -q25m
mail :/etc/mail> ps -ef|grep sendmail
    root 34610  4038   1 11:33:06  pts/0  0:00 grep sendmail
    root 40660     1   0 11:33:03      -  0:00 sendmail: accepting connections

mail :/etc/mail> telnet localhost 25
Trying...
Connected to loopback.
Escape character is '^]'.
220 mail.jkkang.net ESMTP Sendmail 8.12.10/8.12.10; Sun, 28 Sep 2003 11:33:19 +0900

13. Sendmail의 relay-host 기능 테스트


  sendmail을 실행시킨 상태에서 다음과 같이 접속한다. 또는 http://www.abuse.net/relay.html 싸이트에서 쉽게 테스트를 할수 있다. 각자 취향에 맞게 테스트를 해보기 바란다.

# telnet relay-test.mail-abuse.org
...
Tested host banner: 220 a.b.c.d ESMTP Sendmail 8.12.6/8.12.6; Mon, 30 Sep 2002 17:05:38 +0900
System appeared to reject relay attempts
Connection closed.
...

이렇게 나오면 relay-host 기능을 disable 하게끔 설정된 것이다. 지금까지 Sendmail 8.12.10을 컴파일해서 인스톨 하는 과정을 설명을 해봤다. 필자는 Spam Mail Relay에 대해서 비교적 간단히 설명을 하였다. 그외에도 Sendmail은 스팸메일을 제목별로 걸러내는 기능도 있으니, 이러한 좋은 기능은 인터넷을 뒤지던가, 아니면 가장 좋은 메뉴얼인 README 파일을 천천히 읽어보기 바란다. 그 위에 유즈넷의 sendmail 관련 뉴스그룹을 활용하면 많은 정보를 얻을수 있을것이다. Spam 메일을 걸러내는 방법에 대한 설명은 곧 시간을 쪼개서 메뉴얼을 만들도록 하겠다. 아무쪼록, sendmail을 AIX 에서도 쉽게 인스톨을 할수 있도록 작은 보탬이 되었으면 한다.

꼭, README 파일을 읽는것을 습관화 하자...

아~~~ 잠온다...
필자의 컴파일 문서가 sendmail을 설치하는 분들께 많은 도움이 되었으면 합니다.



Copyleft (c) 1996 - 2003, Kang Jul Ki. All rights were not reserved.
Powered by http://jkkang.net since 1996