웹&컴퓨팅

sendmail setting

chihoon, An. (A.K.A 슈퍼스타) x2chi 2007. 11. 8. 13:18

### cyrus-sasl-1.5.27(smtp-auth기능 사용위해) 설치 ###

센드메일에서 SMTP-AUTH기능을 제외하고
설치하고자 하는유저는 거의 없을것이다.
그 기능을 설치하고자 한다면 반드시 이 소스가
필요하다 아래와 같은 과정으로 설치한다.

cyrus-sasl-1.5.27 소스를
ftp://ftp.andrew.cmu.edu/pub/cyrus-mail/
에서 다운 받는다.
소스를 /var/tmp로 옮긴다.
cd /var/tmp
소스 압축해제
tar xzpf cyrus-sasl-1.5.27.tar.gz
cd /var/tmp/cyrus-sasl-1.5.27

컴파일링을 위한 컨피그작업
./configure \
--prefix=/usr \
--bindir=/usr/bin \
--sbindir=/usr/sbin \
--libexecdir=/usr/libexec \
--localstatedir=/var \
--libdir=/usr/lib \
--includedir=/usr/include \
--mandir=/usr/share/man \
--with-openssl=/usr \
--enable-static \
--enable-shared \
--with-plugindir=/usr/lib/sasl2 \
--with-dblib=gdbm \
--disable-krb4 \
--with-rc4 \
--enable-anon \
--enable-cram \
--enable-digest \
--enable-plain \
--enable-login

컴파일
make

find /* > /root/cyrus-sasl1
(이작업은 하도 마니 말해서 알거다. ^^)
설치될 서버의 파일 목록을 작성하기 위해
설친전의 시스템에 존재하는 파일과
디렉토리 목록을 작성해두는 것이다.

컴파일된 파일 설치
make install

find /* > /root/cyrus-sasl2
(요놈도)설치하고 난뒤에 생긴 파일들 리스트 조사

diff /root/cyrus-sasl1 /root/cyrus-sasl2 > /root/cyrus-sasl-install
프로그램 설치전에 시스템에 존재하는 파일목록과
프로그램 설치후에 시스템에 존재하는 파일 목록을
비교하여 새로 시스템에 설치된 파일들을 추출한다.
이렇게 하면 새로 설치한 프로그램의 목록을 만들수 있다.
나중에 해당 프로그램을 삭제할때 아주 유용하다

다음의 내용의 팸을 작성한다.
echo "#%PAM-1.0
auth required /lib/security/pam_stack.so service=system-auth
account required /lib/security/pam_stack.so service=system-auth"
> /etc/pam.d/smtp

sasl의 설정파일이다. 센드메일이 이파일이 없으면
auth기능이 안된다.
echo "pwcheck_method:pam" > /usr/lib/sasl/Sendmail.conf
ln -s /usr/lib/sasl /usr/lib/sasl2
보통 링크를 거는것은 어떤 것은 첨에 설치된 장소를
참조하고 어떤것은 다른곳을 참조하는 경우가
있다. 이런 문제를 해결하기 위한것이다.

### sendmail-8.12.6 (중앙 메인 서버) 센드메일 설정법은 정규님의 강좌를
참조 ###

이번엔 중앙 메일 서버로 센드 메일을 사용할 경우의 설치법을 다룬다.

메일서버가 아닌 단독 서버에서 에러나 로그만 받아보기 위한 널클라이언트 센
드메일
설치는 다음에서 다루겠다.

센드메일을 설치하기전에 유동 아피 유저들도
아웃룩을 이용하여 자신의 아디와 패스워드 인증만으로
메일을 보내는것을 가능하게 하고 싶다면
앞의 cyrus-sasl설치를 먼저 보고 그대로
cyrus-sasl을 먼저 설치해라... 꼭 먼저 설치되어
있어야 유동아피 유저 인증기능을 이용할수 있다.
내 설치법을 보고 레드햇 7.3을 설치한 사용자는
아마 rpm이 없을것이다.
rpm으로 설치하지 말고 그냥 소스로 다시 설치하길 권한다.

http://www.sendmail.org에서
sendmail-8.12.6 소스를 다운 받아서 /var/tmp로 이동시킨다.

cd /var/tmp
압축해제한다.
tar xzpf sendmail-8.12.6.tar.gz

압축해제한 소스 디렉토리로 이동
cd /var/tmp/sendmail-8.12.6
기존의 메일널 유저를 제거하고 새로 메일 유저를 추가
userdel mailnull 2> /dev/null
groupdel mailnull 2> /dev/null
groupadd -g 12 mail
useradd -u 47 -d /var/spool/mqueue -r -s /bin/false smmsp
메일이라는 그룹의 smmsp라는 유저로 데몬을 실행할것이다.

이제부터는 소스 디렉토리에서 작업을 한다.
아래 수정할 파일들은 상대경로임을 주의 한다.

smrsh/smrsh.c 파일의 다음라인을 수정한다.
(유닉스 경로를 리눅스에 맞게 수정하는것이다.)

/usr/adm/sm.bin/ 을
/etc/smrsh 로 고친다.

/bin:/usr/bin:/usr/ucb 를
/bin:/usr/bin 로 고친다.

sendmail/daemon.c 파일의
nleft = sizeof ibuf - 1 을
nleft = sizeof (ibuf) - 1 로 고친다.
(센드메일의 버그인듯)

devtools/OS/Linux파일의 다음 라인을 수정
/usr/man/man 을
/usr/share/man/man 로 수정 (맨페이지 수정)


아래처럼 devtools/Site/site.config.m4 파일을 생성
아래에서 sasl이라는 문구가 포함된 라인은
센드메일의 auth기능을 포함시키는 설정이다.
(유동아피 릴레이 인증후 허용기능) sendmail-auth기능

echo "define(\`confMAPDEF', \`-DMAP_REGEX')
define(\`confENVDEF', \`-DPICKY_QF_NAME_CHECK -DXDEBUG=0')
APPENDDEF(\`confLIBDIRS', \`-L/usr/lib')
APPENDDEF(\`confINCDIRS', \`-I/usr/include')
APPENDDEF(\`confENVDEF', \`-DSASL')
APPENDDEF(\`conf_sendmail_LIBS', \`-lsasl')
define(\`confCC', \`gcc')
define(\`confOPTIMIZE', \`-O2 -march=i686 -funroll-loops -fomit-frame-
pointer')
define(\`confNO_HELPFILE_INSTALL')" > devtools/Site/site.config.m4

센드 메일 설정 과정은 위에 파일수정으로 끝이다.
따로 ./configure 과정이 없다.

꼭 쓰는데 필요한 파일들만 컴파일하기 위해
각 프로그램 디렉토리로 이동후 각각 컴파일해준다.
우선 데몬부터.
cd sendmail
./Build

cd ../mailstats/
./Build

cd ../smrsh
./Build

센드 메일 디비를 생성하는 프로그램 컴파일
cd ../makemap
./Build

얼라이어스 갱신 프로그램 컴파일
cd ../praliases
./Build

find /* > /root/sendmail1
설치될 서버의 파일 목록을 작성하기 위해
설친전의 시스템에 존재하는 파일과
디렉토리 목록을 작성해두는 것이다.

이제 부터는 센드 메일을 실제 설치하는 작업이다.
일반적인 make install과정이다.
이 과정도 각 프로그램 디렉토리로 이동후 작업한다.

cd ../sendmail
./Build install

cd ../mailstats/
./Build install

cd ../smrsh
./Build install

cd ../makemap
./Build install

cd ../praliases
./Build install

센드 메일 링크와 센드메일이 사용할수 있는 명령 제한하고 퍼미션 변경등 한
다.
ln -fs /usr/sbin/sendmail /usr/lib/sendmail
chmod 511 /usr/sbin/smrsh
install -d -m700 /var/spool/mqueue
chown 0.mail /var/spool/mail
chmod 1777 /var/spool/mail
mkdir /etc/smrsh
strip /usr/sbin/sendmail

find /* > /root/sendmail2
설치하고 난뒤에 생긴 파일들 리스트 조사

diff /root/sendmail1 /root/sendmail2 > sendmail-install
프로그램 설치전에 시스템에 존재하는 파일목록과
프로그램 설치후에 시스템에 존재하는 파일 목록을
비교하여 새로 시스템에 설치된 파일들을 추출한다.
이렇게 하면 새로 설치한 프로그램의 목록을 만들수 있다.
나중에 해당 프로그램을 삭제할때 아주 유용하다

아래 처럼 센드 메일 설정파일을 만드는 매크로 파일을 만든다.
/etc/mail/sendmail.mc (매크로 파일)

echo "VERSIONID(\`Mail server')dnl
OSTYPE(\`linux')dnl
DOMAIN(\`generic')dnl
define(\`confTRY_NULL_MX_LIST',true)dnl
define(\`PROCMAIL_MAILER_PATH',\`/usr/bin/procmail')dnl
define(\`confPRIVACY_FLAGS',
\`authwarnings,goaway,restrictmailq,restrictqrun')dnl
define(\`confSAFE_FILE_ENV',\`/home')dnl
FEATURE(\`smrsh',\`/usr/sbin/smrsh')dnl
FEATURE(\`mailertable',\`hash -o /etc/mail/mailertable')dnl
FEATURE(\`virtusertable',\`hash -o /etc/mail/virtusertable')dnl
FEATURE(\`redirect')dnl
FEATURE(\`always_add_domain')dnl
FEATURE(\`relay_hosts_only')dnl
FEATURE(\`use_cw_file')dnl
FEATURE(\`local_procmail')dnl
FEATURE(\`access_db')dnl
FEATURE(\`blacklist_recipients')dnl
FEATURE(\`dnsbl')dnl
MAILER(\`local')dnl
MAILER(\`smtp')dnl
MAILER(\`procmail')dnl
TRUST_AUTH_MECH(\`LOGIN PLAIN DIGEST-MD5 CRAM-MD5')dnl
define(\`confAUTH_MECHANISMS', \`LOGIN PLAIN DIGEST-MD5 CRAM-MD5')dnl"
> /etc/mail/sendmail.mc

위에서 마지막 두라인은 센드메일의 유동 아피유저들의
릴레이를 인증을 통해서 허용해주기 위해 필요하다.
센드메일8.12버전의 SENDMAIL-AUTH 기능이다.
(반드시 포함하는것이 좋다.)
이제 만든 매크로 파일로 실제 센드 메일 설정파일을 생성

cd /etc/mail
m4 /var/tmp/sendmail-8.12.6/cf/m4/cf.m4 sendmail.mc
> /etc/mail/sendmail.cf
설정 파일 퍼미션 조정
chmod 600 sendmail.cf
chown 0.0 sendmail.cf

메일 릴레이 호스트 설정
echo "127.0.0.1 RELAY
자신의 네트워크 아피 RELAY" > /etc/mail/access

아래와 같은 내용의 /etc/mail/aliases 파일을 생성
------------- 파일 내용 요기 부터 ---------------
# Basic system aliases -- these MUST be present.
MAILER-DAEMON: postmaster
postmaster: root

# General redirections for pseudo accounts.
bin: root
daemon: root
nobody: root
smmsp: root
------------- 요기 까지 -------------------

다음처럼 /etc/mail 디렉토리에서 나머지
설정파일들을 빈 파일들로 만들고
makemap으로 센드 메일 디비로 변환한다.

for map in access relay-domains aliases virtusertable domaintable
mailertable; do
touch /etc/mail/${map}
chmod 600 /etc/mail/${map}
makemap hash /etc/mail/${map}.db < /etc/mail/${map}
chmod 0600 /etc/mail/${map}.db
done

echo "mail.vitro.pe.kr
www.vitro.pe.kr" > /etc/mail/local-host-names
메일을 받아 들일 호스트 지정

chmod 600 /etc/mail/*

/etc/sysconfig 파일을 다음 두라인의 내용으로 생성

DAEMON=yes
QUEUE=1h

첨부된 센드메일 시작 스크립트를
/etc/rc.d/init.d/로 복사
chmod 700 /etc/rc.d/init.d/sendmail
chkconfig --level 2345 sendmail on
/etc/rc.d/init.d/sendmail start

메일을 보내고 받고 테스트 해본다.
메일 큐확인 명령 mailq
메일 보내기 mail 이멜 주소
메일 확인 mail (메일을 확인할 유저로 로그인후)
(출처 : '리눅스 SENDMAIL 질문요.' - 네이버 지식iN)