| DRAC 설치와 활용 가이드 - 첫번째 판 | 작성일 : 2003/08/05 10:54 |
| 조회수 : 10072 |
DRAC이란?DRAC은 Dynamic Relay Authorization Control 약어로 sendmail을 위한 릴레이 허용맵을 동적으로 갱신하는 데몬이다. 선의의 사용자가 SMTP 서버에 접근할 수 있도록 만들면서도 스패머 접근은 차단하는 특징이 있다.원리는 단순하다. 사용자가 POP3나 IMAP으로 접근할 때 사용자 IP를 맵에 동적으로 할당해놓고 향후 SMTP 서비스 요청이 들어올 때 이 IP가 직전 인증받은 IP인지 확인하는 과정을 밟는다. DRAC은 노트북을 들고 이리저리 옮겨다니는(roaming) 사용자에게 절대적으로 필요한 서비스다. POP으로 인증받은 직후 30분이 릴레이를 허용하는 임계 시각이지만 계속해서 갱신이 가능하다. POP 서버는 편지를 체크하기 위해 주기적으로 이러한 갱신 과정을 자동으로 밟으므로 실전에서 불편을 느끼지 않고 사용하기에 특별한 문제는 없다. 만일 반영구적으로 특정 IP 주소에 대한 릴레이를 허용하려면 효율을 높이기 위해 sendmail에서 제공하는 릴레이 허용 기법을 사용하자. 자 그러면 이제 본격적인 DRAC 탐험에 들어가자.
DRAC 설치 방법DRAC 설치를 위해 다음 절차를 따른다.DRAC 패키지 구하기DRAC 최신 버전은 1.11이며 압축된 tarball 파일로 존재한다. RPM을 가져올 경우에는 sendmail에서 사용하는 버클리 DB 라이브러리 버전과 동일한지 반드시 체크해야 한다(힌트: ldd 명령). tarball을 가져올 경우 DRAC 크기는 얼마되지 않지만 부가적으로 필요한 라이브러리가 존재하므로 컴파일 전에 다음 사항을 체크한다.
DRAC 컴파일DRAC는 sendmail과 qpopper와 비교하여 아주 작은 패키지이므로 configure 스크립트가 없다. 이 말은 필요한 환경 설정을 모두 자신이 해야 한다는(DIY, Do It Yourself) 사실을 의미한다. 절망적인가? 하지만 다행히도 컴파일을 위한 설정이 크게 어렵지않다.drac.tar.Z를 푼 다음에 Makefile을 수정해보자. drac.tar.Z를 풀면 별도 디렉토리를 만들지 않고 현재 디렉토리에 모든 파일을 풀어버리므로 drac이라는 디렉토리를 만든 다음 여기에 풀면 깨끗한 디렉토리 구조를 유지할 수 있다. Makefile을 열어서 몇몇 마크로를 수정한다. 리눅스라면 다음과 같이 고치면 문제 없을 것이다. 버클리 DB 설치 위치에 따라 CFLAGS와 LDLIBS 항목을 적절히 수정하기 바란다. 다른 운영체제를 사용한다면 DRAC 패키지 아래 INSTALL 파일을 참고하여 각자 환경에 맞게 설정한다. INSTALL = install EBIN = /usr/local/sbin MAN = /usr/local/man/man DEFS = -DSOCK_RPC -DFCNTL_LOCK -DGETHOST -DDASH_C CC = gcc RANLIB = : CFLAGS = $(DEFS) -g -I/usr/local/BerkeleyDB/include LDLIBS = -L/usr/local/BerkeleyDB/lib -ldb TSTLIBS = -L. -ldrac RPCGENFLAGS = -C -I MANLIB = 3 MANADM = 8 이제 전형적인 make, make install 과정을 밟는다. 메뉴얼이 필요하면 make install-man 과정을 밟기 바란다. DRAC 환경 설정DRAC 설치까지 끝났다면 각자 상황에 맞게 몇가지 환경 설정 작업을 수행한다. DRAC과 직접 관련이 없더라도 보안을 위해 필요한 작업도 있으므로 상황을 잘 판단하여 적용하기 바란다.POP서버와 DRAC 서버가 떨어져있을 경우 /etc/mail/dracd.allow 파일을 만들고 이 파일에 /var/yp/securenets 파일과 유사한 형식으로 허용 IP 범위를 지정한다. 예는 다음과 같다. 255.255.255.252 192.168.16.0 255.255.255.255 192.168.16.8 255.255.255.255 127.0.0.1192.168.16.0에서 8번까지 허용한다. localhost인 127.0.0.1을 추가한 사실에 주목하기 바란다. dracd와는 달리 portmap은 /etc/hosts.allow를 사용하고 있으므로, 이를 사용해서 접근을 열어줄 IP 주소를 제어할 수도 있다(여러분이 사용하고 있는 운영체제는 hosts.allow 기능을 제공하지 않을 수도 있다). portmap: 192.168.16.0/255.255.255.16 DRAC을 지원하도록 qpopper를 컴파일했다면, 설치 후 xinetd.d 아래 pop3나 inetd.conf를 열어서 qpopper 인수에 -D DRAC_host_ip 를 추가한다. -D 옵션 기본값은 localhost이므로 DRAC과 POP 서버가 같은 기계에 있다면 추가할 필요가 없다. 대부분 같은 기계에 존재할 가능성이 높으므로 그냥 넘어가도 무방하다. DRAC 시동드디어 DRAC를 시동할 시점이 왔다. 먼저 portmap이 떠 있지 않으면 portmap을 띄운다. 다음으로 DRAC을 시동할 스크립트를 적절한 위치에 가져다 놓는다. 운영체제마다 부팅 절차가 다르므로 메뉴얼을 참고한다. 리눅스라면 drac 패키지 디렉토리에 있는 dracd-setup.linux를 /etc/rc.d/init.d/dracd라는 이름으로 복사한다. 그리고 실행 단계 3에서 수행할 수 있도록 ln -s /etc/rc.d/init.d/dracd /etc/rc.d/rc3.d/S99dracd 명령을 내린다.주의: 여기서 dracd-setup.linux에 PATH가 걸려있지 않으므로 /etc/rc.d/init.d/dracd 파일 첫부분에 PATH=/usr/local/sbin:/sbin:/bin:/usr/bin:/usr/sbin를 추가하기 바란다. 준비가 끝났으면 시스템 관리자 권한으로 /etc/rc.d/rc3.d/S99dracd 명령을 실행한다. OK가 나오는가?
DRAC 테스트이제 DRAC과 관련한 환경을 제대로 잡았다면 DRAC 테스트에 들어가자.DRAC 자체 테스트이상의 과정을 마쳤다면 DRAC 데몬이 제대로 동작하는지 확인하는 과정을 밟는다. 가장 먼저 /etc/mail/dracd.db 파일이 생겼는지 확인한다. 만일 이 파일이 생기지 않았다면 dracd가 떠 있는지(중간에 죽지는 않았는지) 살펴야 한다.POP3 연동 테스트DRAC이 동작한다는 사실을 확인했다. 그렇다면 이번에는 POP3 연동 테스트를 할 차례이다. 다음과 같은 방법으로 테스트하자.[root@mail /etc/mail]# telnet localhost pop3 Trying 127.0.0.1... Connected to localhost. Escape character is '^]'. +OK QPOP (version 4.0.3) at mail.my.net starting. user foo +OK Password required for foo. pass bar +OK foo has 0 visible messages (0 hidden) in 0 octets. quit +OK Pop server at mail.my.net signing off.여기서 변경해야 할 내역은 user foo, pass bar, quit 세 행이다. foo 대신 여러분 계정을 bar 대신 foo 계정 암호를 입력해야 한다. 이상의 과정을 밟았다면 /etc/mail/dracd.db 파일 날짜를 확인해서 qpopper 데몬에 접속한 시각과 일치하는지 비교한다. 시각과 일치하면 다음과 같은 grep 명령으로 지역 호스트(127.0.0.1)가 잡히는지 살펴본다. [root@mail /etc/mail]# grep 127.0.0.1 dracd.db Binary file dracd.db matches여기까지 무사히 따라왔다면 DRAC 설치가 성공리에 끝났다고 볼 수 있다. 하지만, 여전히 큰 산이 하나 남아있다.
DRAC을 위한 sendmail 설정이제 DRAC 설치에서 가장 까다로운 강적을 상대로 한판 승부를 벌여야 한다. 바로 DRAC과 연동하기 위한 sendmail 설정이다. sendmail.cf 악명은 익히 알려져 있다. 이 파일을 변경하기 위한 여러가지 방법이 존재하지만 여기서는 수동으로 고치는 방법을 소개하겠다.먼저 sendmail.cf를 백업받자. sendmail.cf 위치는 /etc/, /etc/mail/을 살펴보기 바란다. sendmail.cf를 열어서 local info: 아래 적당한 위치에 다음 행을 넣는다. # dynamic relay authorization control map Kdrac btree /etc/mail/dracd그리고 SLocal_check_rcpt 바로 아래에 다음 행을 추가한다. 중간 여백은 반드시 탭으로 교체해야 한다. 이 사실을 망각하는 순간 블랙홀에 빠질지도 모른다.
# allow recent POP/IMAP mail clients to relay
R$* $: $&{client_addr}
R$+ $: $(drac $1 $: ? $)
R? $@ ?
R$+ $@ $#OK
통합 테스트험난한 과정을 거쳐 여기까지 왔다면 시간을 제법 많이 소비했을 것이다. 커피잔이 여기저기 엎어져 있고, 먹다 남은 피자 조각도 컴퓨터 책상 주위에 흩어져 있을지도 모르겠다. 이제 통합 테스트 과정만 넘기면 푹 쉴 수 있다. 조금만 더 힘내자.통합 테스트에 앞서 sendmail 데몬을 다시 띄우자. killall 명령이 없으면 ps 명령으로 프로세스 ID를 확인한 다음 kill 명령을 사용하기 바란다. [root@mail /etc/mail]# killall sendmail [root@mail /etc/mail]# sendmail -q30m -bd 이제 relay를 허용하지 않은 호스트 하나를 설정해서 이 곳에서 telnet으로 DRAC+sendmail+qpopper가 동작하는 호스트로 전자편지 요청을 시도해본다.
Trouble Shooting독자 여러분이 질문하는 내용에 따라 추후 내용을 보강하기로 약속한다. 일단 문제가 생기면 다음 사항을 먼저 검토해보기 바란다.각종 데몬이 모두 제대로 떠 있는가?DRAC, qpopper, sendmail이 제대로 동작하고 있는지 확인하기 바란다. ps 명령으로 DRAC과 sendmail을 확인할 수 있으며, telnet 명령으로 qpopper와 sendmail 동작을 확인할 수 있다.정말 제대로 DRAC 맵이 만들어 졌는가?DRAC, qpopper, sendmail이 모두 동작하고 있다. 그렇다고 DRAC 맵이 제대로 동작하고 있다는 보장은 하지 못한다. 그렇다면 어떻게 검사할까? 다음 방법을 한번 생각해보기 바란다.[root@bofh /root]# /usr/lib/sendmail -bt ADDRESS TEST MODE (ruleset 3 NOT automatically invoked) Enter <ruleset> <address> > /map drac 192.168.1.2 map_lookup: drac (192.168.1.2) returns 963532780 (0)여기서 no match가 나오면 해당 맵이 없다는 결론을 내릴 수 있다. qpopper에서 맵을 잘못 만드는지 sendmail이 맵을 잘못 읽는지 확인 작업에 나서기 바란다. 버클리 DB 2.x 계열을 사용한다면 db_dump 명령을 사용하면 DRAC 맵을 직접 읽을 수 있다. 다음과 같이 명령을 내려보자. [root@bofh /root]# db_dump -p /etc/mail/dracd.db여기서 맵을 제대로 출력하면 sendmail 쪽에 문제가 있다는 이야기이다. 그렇지 않다면 qpopper를 의심해야 한다. DRAC이 제대로 동작하는가?qpopper가 제대로 동작하는지 그렇지 않은지를 시험하는 비용보다 DRAC이 제대로 동작하는지 그렇지 않은지를 시험하는 비용이 훨씬 싸다. 다음과 같은 명령을 한번 내려보자.[root@bofh /root]# ./testing localhost 192.168.1.2testing 프로그램은 DRAC 패키지를 컴파일한 디렉토리에서 찾을 수 있다. 상기 명령을 내린 직후 맵을 한번 검사해보기 바란다. 맵에 192.168.1.2가 없으면, DRAC에 문제가 생겼다고 확신할 수 있다. qpopper가 제대로 동작하는가?컴파일 잘못등으로 인해 qpopper가 제대로 동작하지 않을 수 있다. 로그 파일등을 뒤져서(힌트: 로그 단계를 올리면 보다 세부적인 정보를 얻을 수 있다) 무엇이 문제인지 파악에 나서기 바란다.sendmail이 제대로 동작하는가?참으로 어려운 문제이다. 참고 URL에 제시한 "Debugging check_* in sendmail 8.8/8.9"를 참조하여 해결에 나서기 바란다.
참고 URL이 글을 적는데 참고한 URL은 다음과 같다.
기타
|
|||||||||
|
|