redhat sendmail server 구축방법

2010. 1. 7. 03:3899. 정리전 - IT/13. Unix 얇팍지식


출처
(http://www.digimoon.net/)

소스는 아래 사이트에서 구한다.

http://dovecot.org/ 

# wget http://dovecot.org/releases/1.1/dovecot-1.1.2.tar.gz
# tar xvfz dovecot-1.1.2.tar.gz
# cd dovecot-1.1.2
# ./configure --prefix=/usr --localstatedir=/var --with-pam --with-gssapi --with-mysql
# make
# make install
# cp /usr/etc/dovecot-example.conf /usr/etc/dovecot.conf
# groupadd -g 97 dovecot
# useradd -u 97 -g 97 -d /usr/libexec/dovecot -s /sbin/nologin dovecot



편집기로 환경설정 파일인 dovecot.conf 을 아래와 같이 내용 작성한다.
# vi /usr/etc/dovecot.conf
protocols = imap pop3
disable_plaintext_auth = no
ssl_disable = yes
protocol imap {
}
protocol pop3 {
}
auth default {
mechanisms = plain
passdb passwd {
}
passdb shadow {
}
userdb passwd {
}
user = root
}
plugin {
}
mail_privileged_group = mail


실행 커맨드는 아래와 같다.
# /usr/sbin/dovecot

아래와 같이 출력된다면 dovecot이 잘 올라온 상태이다.
[root@digimoon modules]# netstat -nlp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address               Foreign Address             State       PID/Program name
tcp        0      0 0.0.0.0:50022               0.0.0.0:*                   LISTEN      18505/xinetd
tcp        0      0 0.0.0.0:873                 0.0.0.0:*                   LISTEN      18505/xinetd
tcp        0      0 0.0.0.0:3306                0.0.0.0:*                   LISTEN      18313/mysqld
tcp        0      0 0.0.0.0:139                 0.0.0.0:*                   LISTEN      3523/smbd
tcp        0      0 0.0.0.0:110                 0.0.0.0:*                   LISTEN      21245/dovecot
tcp        0      0 0.0.0.0:143                 0.0.0.0:*                   LISTEN      21245/dovecot
tcp        0      0 0.0.0.0:21                  0.0.0.0:*                   LISTEN      18505/xinetd
tcp        0      0 0.0.0.0:25                  0.0.0.0:*                   LISTEN      19307/sendmail: acc
tcp        0      0 0.0.0.0:445                 0.0.0.0:*                   LISTEN      3523/smbd
tcp        0      0 :::80                       :::*                        LISTEN      4562/httpd
udp        0      0 192.168.0.100:137           0.0.0.0:*                               3528/nmbd
udp        0      0 0.0.0.0:137                 0.0.0.0:*                               3528/nmbd
udp        0      0 192.168.0.100:138           0.0.0.0:*                               3528/nmbd
udp        0      0 0.0.0.0:138                 0.0.0.0:*                               3528/nmbd
udp        0      0 0.0.0.0:161                 0.0.0.0:*                               2832/snmpd
Active UNIX domain sockets (only servers)
Proto RefCnt Flags       Type       State         I-Node PID/Program name    Path
unix  2      [ ACC ]     STREAM     LISTENING     5738801 21245/dovecot       /var/run/dovecot/dict-server
unix  2      [ ACC ]     STREAM     LISTENING     5738803 21245/dovecot       /var/run/dovecot/login/default
unix  2      [ ACC ]     STREAM     LISTENING     5738812 21245/dovecot       /var/run/dovecot/auth-worker.21246

unix  2      [ ACC ]     STREAM     LISTENING     1535445 28839/saslauthd     /var/run/saslauthd/mux
unix  2      [ ACC ]     STREAM     LISTENING     5976316 18313/mysqld        /tmp/mysql.sock
[root@digimoon modules]#


실행 스크립트는 아래와 같이 작성 (레드햇 계열)
# vi /etc/rc.d/init.d/dovecot
#!/bin/bash
#
#   /etc/rc.d/init.d/dovecot
#
# Starts the dovecot daemon
#
# chkconfig: - 65 35
# description: Dovecot Imap Server
# processname: dovecot
# Source function library.
. /etc/init.d/functions

test -x /usr/sbin/dovecot || exit 0

RETVAL=0
prog="Dovecot Imap"

start() {
        echo -n $"Starting $prog: "
    daemon /usr/sbin/dovecot
    RETVAL=$?
    [ $RETVAL -eq 0 ] && touch /var/lock/subsys/dovecot
    echo
}

stop() {
    echo -n $"Stopping $prog: "
    killproc /usr/sbin/dovecot
    RETVAL=$?
    [ $RETVAL -eq 0 ] && rm -f /var/lock/subsys/dovecot
    echo
}

#
#   See how we were called.
#
case "$1" in
  start)
    start
    ;;
  stop)
    stop
    ;;
  reload|restart)
    stop
    start
    RETVAL=$?
    ;;
  condrestart)
    if [ -f /var/lock/subsys/dovecot ]; then
        stop
        start
    fi
    ;;
  status)
    status /usr/sbin/dovecot
    RETVAL=$?
    ;;
  *)
    echo $"Usage: $0 {condrestart|start|stop|restart|reload|status}"
    exit 1
esac

exit $RETVAL
# chmod 700 /etc/rc.d/init.d/dovecot
# chkconfig --add dovecot
# chkconfig --level 345 dovecot on
# /etc/init.d/dovecot start|stop|restart



우분투용 init 스크립트는 아래와 같다.
( http://ubuntuforums.org/showthread.php?t=282688 )

# vi /etc/init.d/dovecot

#!/bin/sh
# Dovecot IMAP server

PATH=/sbin:/bin:/usr/sbin:/usr/bin

. /lib/lsb/init-functions
DISTRO=$(lsb_release -is 2>/dev/null || echo Debian)

case "$1" in
'start')
        log_daemon_msg "Starting Dovecot IMAP server..."
        /usr/sbin/dovecot
        RETVAL=$?
        log_end_msg 0
        ;;
'stop')
        log_daemon_msg "Stopping Dovecot IMAP server..."
        kill `cat /var/run/dovecot/master.pid`
        RETVAL=$?
        log_end_msg 0
        ;;
'restart')
        log_daemon_msg "Restarting Dovecot IMAP server..."
        $0 stop && $0 start
        RETVAL=$?
        log_end_msg 0
        ;;
*)
        echo "Usage: $0 { start | stop | restart }"
        RETVAL=1
        ;;
esac
exit $RETVAL

# chmod 700 /etc/init.d/dovecot
# update-rc.d dovecot defaults
# /etc/init.d/dovecot start|stop|restart



실제 사용 시 인증 관련 에러를 비롯해서 한 번에 성공 안 되고 답답하다면 구글 검색 밖에 답 없음... ^^
하지만 위 dovecot.conf 샘플 내용을 그대로 적용한다면 분명히 성공할 겁니다. ㅎ

2008/08/12 22:31 2008/08/12 22:31
Trackback Address :: http://www.digimoon.net/blog/trackback/316
simonban | 2008/11/22 22:47 | PERMALINK | EDIT/DEL | REPLY
안녕하세요...
압축풀고... ./configure --prefix=/usr --localstatedir=/var --with-pam --with-gssapi --with-mysql
했는데...
checking for mysql_init in -lmysqlclient... no
configure: error: Can't build with MySQL support: libmysqlclient not found

애러 메시지가 나오면서 멈춥니다. mysql을 /usr/local/server/mysql에 설치했거던요.
혹시 해결방법 알려 주시면 고맙겠습니다.
email: simonbanz@gmail.com
디지문 | 2008/11/23 11:52 | PERMALINK | EDIT/DEL
dovecot이 mysql의 라이브러리와 의존성이 있습니다. 이 라이브러리가 존재하지 않아 발생하는 에러 같군요.
CentOS 리눅스 구축관리실무 책으로 공부하시는 거 같네요.
mysql을 소스로 설치하셨다면 /usr/local/server/mysql/lib/mysql/libmysqlclient.so.15 파일 또는 이와 유사한 파일이 있을 겁니다. dovecot이 설치될 때 쉘 환경변수에 등록된 경로를 뒤져서 libmysqlclient.so.15 파일을 찾는데 이걸 찾지 못해 에러가 난 겁니다.

/etc/ld.so.conf 파일에 아래 한 줄 내용 추가하고

/usr/local/server/mysql/lib/mysql

ldconfig 실행한 뒤 다시 진행해 보세요.
simonban | 2008/11/23 12:21 | PERMALINK | EDIT/DEL | REPLY
[ centos]# CPPFLAGS=-I/usr/local/include/mysql LDFLAGS=-L/usr/local/lib/mysql ./configure --prefix=/usr/local --with-pam --with-gssapi --with-mysql --sysconfdir=/etc





8. 서버 데몬 확인 및 서비스 확인
  이렇게 설치 하셨다면, 간단한 메일 서버는 셋팅은 끝입니다.  이제 서비스를 확인해야 합니다.
[root@test mail]# netstat -an | grep LISTEN
tcp        0      0 0.0.0.0:32769               0.0.0.0:*                   LISTEN
tcp        0      0 0.0.0.0:111                 0.0.0.0:*                   LISTEN
tcp        0      0 0.0.0.0:631                 0.0.0.0:*                   LISTEN
tcp        0      0 127.0.0.1:5335              0.0.0.0:*                   LISTEN
tcp        0      0 0.0.0.0:25                  0.0.0.0:*                   LISTEN
tcp        0      0 :::110                      :::*                        LISTEN
tcp        0      0 :::22                       :::*                        LISTEN

현재 열려있는 포트입니다. 다른 것들은 서비스에 따라 다를 수 있으니 신경쓰지 마시구요, 110 포트(pop3),  25번 포트(smtp 그러니까 sendmail)입니다. 위와같아야 합니다.



9. 메일큐 내용 확인하기
  홈 페이지 운영하다 메일링 리스트에서 메일을 보내게 되면, 정상적인 메일주소로는 메일이 가지만, 정상적인 메일주소가 아닌 경우 가지도 않고 메일큐(/var/spool/mqueue)에 쌓여서 서버의 부하를 주는 경우가 있습니다.. sendmail은 기본설치된 것이 1시간마다 메일큐를 비우게 되어 있고, 한 번 보낸 메일은 7일동안 메일을 보내려고 시도하게 됩니다.. 메일큐에 보내지 못한 메일이 많으면 서버에 부하만 늘어납니다.  이런 경우 mailq라는 명령어로 큐 내용을 확인하여 지워줘야 합니다..

[root@study root]# mailq
/var/spool/mqueue is empty
                Total requests: 0
 위와 같은 경우 메일큐가 비어있는 상태입니다.
큐를 지우는 방법은
[root@study root]# rm -rf /var/spool/mqueue/* 
이렇게 해서 메일큐를 비울 수 있습니다.. 모두 지웠다면 반드시 sendmail을 재시작 해 주기 바랍니다.



10. 도메인 셋팅 스크립트
  서 버를 많이 관리하다보면 파일 하나 하나 열어서 셋팅하는 일이 귀찮고도 시간이 많이 걸립니다. 항상 스크립트를 작성해두고 설정하는 것이 실수를 줄이고, 작업 시간도 줄일 수 있습니다. 다음과 같이 간단 한 스크립트를 작성해서 저장합니다.

#!/bin/bash
echo "간단한 메일 셋팅 프로그램 by doly엣superuser.co.kr "
if [ "$1" == "" -o "$2" == "" ] ; then
        echo -e "\n ############ 사용법 ############## "
        echo -e "$0 아이디 도메인 \n"
        exit 0
fi

echo "webmaster@$2 으로 들어오는 메일은 $1@$2 메일계정으로 받습니다."
echo -e "$2 \t\t\t RELAY" >> /etc/mail/access
echo "$2" >> /etc/mail/local-host-names
echo -e "webmaster@$2 \t\t\t $1" >> /etc/mail/virtusertable
echo "1. db 생성중.."
cd /etc/mail
make
echo "2. 센드메일 재 시작중 "
/etc/rc.d/init.d/sendmail restart


파일을 만들어서 위 내용을 붙여 넣은 다음에 실행 권한을 줍니다. 그리구 아래와같이 실행하면,
[root@test root]# ./mailsetup.sh
간단한 메일 셋팅 프로그램 by doly엣superuser.co.kr

 ############ 사용법 ##############
./mailsetup.sh 아이디 도메인

위와같이 실행시키면 간단한 사용법이 나옵니다.

[root@test root]# ./mailsetup.sh doly gnux.co.kr
간단하 메일 셋팅 프로그램 by doly엣superuser.co.kr
webmaster@gnux.co.kr 으로 들어오는 메일은 doly@gnux.co.kr 메일계정으로 받습니다.
1. db 생성중..
2. 센드메일 재 시작중
sendmail를 종료하고 있습니다:                              [  확인  ]
sm-client을 종료하고 있습니다:                             [  확인  ]
sendmail (을)를 시작합니다:                                [  확인  ]
sm-client을 시작하고 있습니다:                             [  확인  ] 

위와같이 id : doly , gnux.co.kr으로 입력하면 위와같이 자동 셋팅됩니다.
/etc/mail/access 파일, /etc/mail/local-host-names, /etc/mail/virtusertable 파일이 변경되고, db 갱신되며, sendmail 재시작 됩니다.