본문으로 바로가기

qmail - smtp 포트 추가

category 서버&시스템/QMail 2012. 2. 21. 16:33

25번 포트 외에 다른 포트로도 smtp 발송을 하기 위한 설정(본문에서는 26번 추가).

(outlook을 사용한다면 사용자 계정 설정에서 smtp 26번 포트 설정을 해야 한다)

 

포트 포워딩으로 처리하는 방법

qmail 설정 방법을 소개하기에 앞서, iptables를 사용한 포트 포워딩으로도 간단히 처리할 수 있다.

 

$ iptables -t nat -A PREROUTING -p tcp -d 서버ip --dport 26 -j REDIRECT --to-port 25
$ iptables-save

위 두줄만으로 간단하게 26번 포트와 25번 포트를 smtp로 함께 사용할 수 있다.

 

qmail 설정으로 처리하는 방법

이 방법은 qmail에 qmail-smtpd-auth-0.59 이상의 패치가 적용되어 있지 않으면 오류가 발생하는것 같다.

 

작업 순서

  1. run 스크립트 복사/수정
  2. /etc/services 파일 수정
  3. qmail 구동 스크립트 수정

 

run 스크립트 복사/수정

$ cp -Rfp qmail-smtpd qmail-smtpd-sub
$ cd qmail-smtpd-sub <- 서브 포트 디렉토리를 하나 더 만든다
$ vi run
#!/bin/sh
Q_UID=`id -u vpopmail`
Q_GID=`id -g vpopmail`
exec /usr/local/bin/softlimit -m 12000000 \
/usr/local/bin/tcpserver -vRHl 0 \
-x /home/vpopmail/etc/tcp.smtp.cdb \
-u $Q_UID -g $Q_GID 0 26 /var/qmail/bin/qmail-smtpd-sub 2>&1 # 25를 26으로 변경, 생성한 디렉토리명으로 변경
$ vi log/run
#!/bin/sh
exec /usr/local/bin/setuidgid qmaill \
/usr/local/bin/multilog t /var/log/qmail/smtpd-sub # 생성한 디렉토리명으로 변경

 

/etc/service 파일 수정

$ vi /etc/services
smtp            25/tcp          mail
smtp            25/udp          mail
smtp            26/tcp          mail # 26번 관련 라인 두줄 추가
smtp            26/udp          mail

 

qmail 구동 스크립트 수정

$ vi /etc/services
#!/bin/sh
# Comments to support chkconfig on RedHat Linux
# chkconfig: 2345 80 80
# description: sendmail을 대체하는 빠르며, 안정적이고, 유연한 MTA
# Source function library.
. /etc/rc.d/init.d/functions # Source networking configuration.
. /etc/sysconfig/network # Check that networking is up.
[ ${NETWORKING} = "no" ] && exit 0
 
PATH=/var/qmail/bin:/usr/local/bin:/usr/bin:/bin
export PATH case "$1" in
  start)
    echo "Starting qmail"
     if [ -e /service/qmail-send ] ; then
        if svok /service/qmail-send ; then
            svc -u /service/qmail-send
        else
            echo qmail-send supervise not running
        fi
     else
        ln -s /var/qmail/supervise/qmail-send /service/
     fi      if [ -e /service/qmail-smtpd ] ; then
        if svok /service/qmail-smtpd ; then
            svc -u /service/qmail-smtpd
        else
            echo qmail-smtpd supervise not running
        fi
     else
        ln -s /var/qmail/supervise/qmail-smtpd /service/
     fi
###587###
if [ -e /service/qmail-smtpd-sub ] ; then
        if svok /service/qmail-smtpd-sub ; then
            svc -u /service/qmail-smtpd-sub
        else
            echo qmail-submission supervise not running
        fi
     else
        ln -s /var/qmail/supervise/qmail-smtpd-sub /service/
     fi
#########
        if [ -e /service/vpop ] ; then
             if svok /service/vpop ; then
                   svc -u /service/vpop
             else
                   echo pop3 supervise not running
             fi
        else
             ln -s /var/qmail/supervise/vpop /service/
        fi
    if [ -d /var/lock/subsys ]; then
      touch /var/lock/subsys/qmail
    fi
### CentOS 계열등에서 readproctitle 에러 발생시 아래 주석 제거(기본제거) ###
    ;;
  stop)
    echo "Stopping qmail..."
    echo "  qmail-smtpd"
    svc -dx /service/qmail-smtpd /service/qmail-smtpd/log
    svc -dx /service/qmail-smtpd-sub /service/qmail-smtpd-sub/log
     rm -f /service/qmail-smtpd
     rm -f /service/qmail-smtpd-sub
    echo "  qmail-send"
    svc -dx /service/qmail-send /service/qmail-send/log
     rm -f /service/qmail-send
    echo "  qmail pop3"
    svc -dx /service/vpop /service/vpop/log
             rm -f /service/vpop
    if [ -f /var/lock/subsys/qmail ]; then
      rm /var/lock/subsys/qmail
    fi
killall tcpserver 2>/dev/null
    ;;
  stat)
    svstat /service/qmail-send
    svstat /service/qmail-send/log
    svstat /service/qmail-smtpd
    svstat /service/qmail-smtpd/log
    svstat /service/vpop
    svstat /service/vpop/log
    qmail-qstat
    ;;
  doqueue|alrm|flush)
    echo "Flushing timeout table and sending ALRM signal to qmail-send."
    /var/qmail/bin/qmail-tcpok
    svc -a /service/qmail-send
    ;;
  queue)
    qmail-qstat
    qmail-qread
    ;;
  reload|hup)
    echo "Sending HUP signal to qmail-send."
    svc -h /service/qmail-send
    ;;
  pause)
    echo "Pausing qmail-send"
    svc -p /service/qmail-send
    echo "Pausing qmail-smtpd"
    svc -p /service/qmail-smtpd
    ;;
  cont)
    echo "Continuing qmail-send"
    svc -c /service/qmail-send
    echo "Continuing qmail-smtpd"
    svc -c /service/qmail-smtpd
    ;;
  restart)
    echo "Restarting qmail:"
    echo "* Stopping qmail-smtpd."
    svc -d /service/qmail-smtpd
    echo "* Sending qmail-send SIGTERM and restarting."
    svc -t /service/qmail-send
    echo "* Restarting qmail-smtpd."
    svc -u /service/qmail-smtpd
    ;;
  cdb)
    tcprules /home/vpopmail/etc/tcp.smtp.cdb /home/vpopmail/etc/tcp.smtp.tmp < /home/vpopmail/etc/tcp.smtp
    chmod 644 /home/vpopmail/etc/tcp.smtp.cdb
    echo "Reloaded /home/vpopmail/etc/tcp.smtp."
    ;;
  help)
    cat <<HELP
   stop -- stops mail service (smtp connections refused, nothing goes out)
  start -- starts mail service (smtp connection accepted, mail can go out)
  pause -- temporarily stops mail service (connections accepted, nothing leaves)
   cont -- continues paused mail service
   stat -- displays status of mail service
    cdb -- rebuild the tcpserver cdb file for smtp
restart -- stops and restarts smtp, sends qmail-send a TERM & restarts it
doqueue -- schedules queued messages for immediate delivery
 reload -- sends qmail-send HUP, rereading locals and virtualdomains
  queue -- shows status of queue
   alrm -- same as doqueue
  flush -- same as doqueue
    hup -- same as reload
HELP
    ;;
  *)
    echo "Usage: $0 {start|stop|restart|doqueue|flush|reload|stat|pause|cont|cdb|queue|help}"
    exit 1
    ;;
esac
exit 0

 

iptables 등 26번 포트 차단을 해제해 주고,  재부팅하거나 qmail 재시작하면 끝.

 

'서버&시스템 > QMail' 카테고리의 다른 글

qmailadmin 설치  (0) 2012.01.12
qmail 설치 후 점검 사항  (0) 2012.01.11
vpopmail 설치  (0) 2012.01.11
qmail 설치  (0) 2012.01.06