[강좌][웹서버] Redhat Linux 를 이용한 인터넷 통합 서비스 구축하기
=============================================================================
Redhat 9 Linux Ineternet Service System 구축하기
=============================================================================
* 위 문서는 클루닉스 기술부 세미나용으로 제작된 문서 입니다.
* 외부 유출은 금합니다.
*
* 작성날짜 : 2004년 6월 6일
* 작성자 : 서 진우 ( alang@sysmng.com )
* 사용된 패키지
———————————————————————
OS : Redhat Linux 9
bind
sendmail
proftpd
realserver
apache
php
mysql
tomcat
tomcat-connectors
Zend
zlib
tiff
libpng
clibpdf
pdflib
swf
freetype
jpeg
libungif
gd
———————————————————————
1. BIND9 를 이용한 DNS 서버 구축 하기
[root@ns /etc]# rndc-confgen > /etc/rndc.conf
[root@ns /etc]# cat /etc/rndc.conf
——————————————————–
key “rndc-key” {
algorithm hmac-md5;
secret “n+h/daGNTmmEKimn25/h4g==”;
};
options {
default-key “rndc-key”;
default-server 127.0.0.1;
default-port 953;
};
——————————————————–
[root@ns root]# vi /etc/rndc.conf
——————————————————–
key “syszone-key” {
algorithm hmac-md5;
secret “e05yfVyzq/Y8HN+fmk7g9w==”;
};
options {
default-key “syszone-key”;
default-server 127.0.0.1;
default-port 953;
};
——————————————————–
rndc-key 값을 자기 사이트에 맞게 수정한다. ( 보안상 문제 )
[root@ns root]# vi /etc/named.conf
——————————————————–
options {
directory “/var/named”;
};
controls {
inet 127.0.0.1 allow { localhost; } keys { “syszone-key”; };
};
key “syszone-key” {
algorithm hmac-md5;
secret “e05yfVyzq/Y8HN+fmk7g9w==”;
};
logging {
category lame-servers { null; };
category unmatched { null; };
category network { null; };
category notify { null; };
};
zone “.” IN {
type hint;
file “named.ca”;
};
zone “localhost” IN {
type master;
file “localhost.zone”;
allow-update { none; };
};
zone “41.238.211.in-addr.arpa” IN {
type master;
file “syszone.rev”;
};
zone “0.0.127.in-addr.arpa” IN {
type master;
file “named.local”;
allow-update { none; };
};
zone “syszone.co.kr” IN {
type master;
file “syszone.zone”;
allow-update { none; };
};
———————————————————-
[root@ns root]# vi /var/named/syszone.zone
———————————————————
$TTL 86400
@ IN SOA ns.syszone.co.kr. root.ns.syszone.co.kr. (
1997092700 ; Serial
28800 ; Refresh
900 ; Retry
360000 ; Expire
3600 ) ; Minimum
IN NS ns.syszone.co.kr.
IN MX 10 mail
IN A 211.238.41.180
;
ns IN A 211.238.41.180
;
www IN CNAME ns
mail IN CNAME ns
db IN CNAME ns
ftp IN CNAME ns
———————————————————–
[root@ns root]# vi /var/named/syszone.rev
———————————————————–
$TTL 86400
@ IN SOA ns.syszone.co.kr. root.ns.syszone.co.kr. (
1997022700 ; Serial
28800 ; Refresh
14400 ; Retry
3600000 ; Expire
86400 ) ; Minimum
IN NS ns.syszone.co.kr.
IN MX 10 mail.syszone.co.kr.
180 IN PTR syszone.co.kr.
180 IN PTR mail.syszone.co.kr.
————————————————————
[root@ns root]# cat /etc/resolv.conf
————————————————————
search syszone.co.kr
nameserver 211.238.41.180
————————————————————
;;; search 의 의미 ;;;
resolv.conf 파일에 search domain 을 적어 주는 이유는
여기에 적힌 도메인은 보통 자기 자신의 도메인을 주로 적고
여기에 적힌 도메인의 sub name 은 그냥 hostname 만으로도
찾을수 있게 한다.
[root@ns root]# nslookup mail
———————————————————–
Server: 211.238.41.180
Address: 211.238.41.180#53
mail.syszone.co.kr canonical name = ns.syszone.co.kr.
Name: ns.syszone.co.kr
Address: 211.238.41.180
———————————————————–
이제 설정한 도메인을 검색해 보자
[root@ns root]# nslookup syszone.co.kr
————————————————————
Server: 211.238.41.180
Address: 211.238.41.180#53
Name: syszone.co.kr
Address: 211.238.41.180
————————————————————
[root@ns root]# nslookup 211.238.41.180
————————————————————
Server: 211.238.41.180
Address: 211.238.41.180#53
180.41.238.211.in-addr.arpa name = mail.syszone.co.kr.
180.41.238.211.in-addr.arpa name = syszone.co.kr.
————————————————————
;; 주의 점 ;;
DNS 서버가 방화벽 안쪽에 있을 경우 반드시 tcp 53 port 와 udp 953 port 를 open
시켜 두어야 한다.
2. Sendmail 로 메일 서버 구축 하기
인터넷이 대중화되면서 편지를 주고받는 것보다 E-Mail(전자우편)을 주고 받는 것이
일상적인 일이 되었습니다. 이번 주 테마에서는 E-Mail(전자우편)이 어떻게 전달되는지의
개념과 메일서버로 가장 많이 사용되고 있는 Sendmail의 설치방법과 사용법에 대해서
알아보도록 하겠습니다.
E-mail(전자우편)과 메일서버
————————————————————————————
Sendmail의 설치와 사용법을 배우기 전에 E-Mail(전자우편)이 어떠한 경로를 통해
전달되고 어떻게 사용되는지에 대해 살펴보겠습니다. 메일서버란 인터넷에서
E-Mail(전자우편)을 주고 받는 기능을 수행하는 서버를 말하며, E-Mail(전자우편)은 크게
두 종류의 프로그램과 프로토콜에 의해 전달됩니다. 여기서 두 종류의 프로그램이란
MUA(Mail User Agent)와 MTA(Mail Transfer Agent)를 말합니다. MUA로는
사용자가 직접 메일을 작성하거나 보낼 때 사용하는 넷스케이프 메신저, 마이크로소프트
아웃룩, 유도라 등의 프로그램이 있고, MTA는 실제로 메일을 전송해주는 Sendmail,
Qmail등의 프로그램이 있습니다.
아래의 그림과 같이 Sendmail이 설치된 메일서버는 SMTP(Simple Mail Transfer
Protocol) 프로토콜을 사용하여 메일을 전송하고, 호스트로부터 받은 메일을 클라이언트로
전달할 때는 POP3 또는 IMAP등의 프로토콜을 사용합니다. 예를 들어
aroma@mail.linuxul.com이라는 메일주소를 가진 사람이 다른 서버에 계정을 가진
nea@yahoo.co.kr이라는 친구에게 메일을 보낸다고 가정하면, 아래와 같은 과정을 거쳐
메일이 전달됩니다.
1. aroma@mail.linuxul.com이라는 사람이 넷스케이프 메신저와 같은 MUA
프로그램에서 보낸 메일은 먼저 SMTP 프로토콜을 통해 mail.linuxul.com 메일서버에
전달됩니다.
2. mail.linuxul.com에서 대기하고 있던 MTA데몬(Sendmail)은 메일을 메일큐
디렉토리(/var/spool/mqueue)에 임시 저장한 후 SMTP 프로토콜을 통해 다시
yahoo.co.kr메일서버로 전송하고 큐디렉토리에 저장했던 메일을 삭제합니다.
yahoo.co.kr에서는 sendmail 데몬이 대기하고 있다가 mail.linuxul.com 메일서버가
보내온 메일의 도착지가 자신의 것인지 확인 한 후 맞으면 메일박스(/var/mail
디렉토리)에 nea라는 파일로 저장합니다.
3. nea@yahoo.co.kr의 사용자는 마이크로소프트 아웃룩이나 유도라와 같은 MUA를
통해 메일을 확인하며, 이때에는 POP3나 IMAP등의 프로토콜을 통해 메일이
전송됩니다.
Sendmail
———————————————————————————–
Sendmail은 메일서버로 가장 많이 사용되고 있는 MTA프로그램으로 공식사이트는
http://www.sendmail.org입니다. 대부분의 리눅스 배포판에 기본적으로 설치가 되어
있으므로 자신의 시스템에 맞는 환경설정을 한 후 사용하시면 됩니다. Sendmail의 최신
버전은 sendmail 8.11.2이며 아래의 사이트에서 다운받을 수 있습니다.
Sendmail 공식 미러사이트 – ftp://ftp.sendmail.org
Sendmail 미러사이트 – http://www.sendmail.org/mirrors.html
국내 미러사이트 : ftp://ftp.linux.co.kr/server/sendmail
POP3와 IMAP
———————————————————————————–
앞에서도 설명했듯이 넷스케이프 메신저나 마이크로소프트 아웃룩과 같은 클라이언트
프로그램에서 메일을 가져오려면 메일서버에 POP3 또는 IMAP등의 데몬이 설치되어
있어야 합니다. POP3(Post Office Protocol version 3)와 IMAP(Internet
Message Access Protocol)데몬은 사용자의 인증절차를 거친 후 메일을
클라이언트에 보내는 기능을 수행합니다. RedHat 리눅스 배포판에서는 IMAP과 POP
데몬을 하나의 패키지(UW IMAP)로 제공하고 있어 누구나 쉽게 설치할 수 있으며
최신버전은 아래의 사이트에서 다운받으시면 됩니다.
UW IMAP 공식 홈페이지 – http://www.washington.edu/imap/
UW IMAP 미러사이트 – ftp://ftp.cac.washington.edu/imap
국내 미러사이트 – ftp://ftp.linux.co.kr/server/imap
Sendmail과 IMAP 설치하기
대부분의 리눅스 배포판에는 Sendmail이 기본적으로 내장되어 있으므로 최신버전이나 보안문제로
인해 다시 설치해야 하는 경우를 제외하면 소스를 사용해 설치하는 경우는 드물고 배포판에
들어있는 RPM 패키지를 사용해 설치합니다.
Sendmail 설치하기
와우 리눅스 7.0 까치버전을 기본 OS로 하여 Sendmail을 설치하는 방법에 대해
알아보겠습니다. 먼저 CD-ROM을 마운트한 후 /RedHat/RPMS 디렉토리에 있는
sendmail을 확인합니다. 기본적으로 제공하는 Sendmail은 Sendmail-8.11.0입니다.
# mount /dev/cdrom
# cd /mnt/cdrom/RedHat/RPMS
# ls sendmail*
sendmail-8.11.0-8.i386.rpm
sendmail-cf-8.11.0-8.i386.rpm
sendmail-doc-8.11.0-8.i386.rpm
Sendmail에 관련된 rpm패키지를 모두 설치합니다.
# rpm -Uvh sendmail*
sendmail #############################
sendmail-cf #############################
sendmail-doc #############################
Sendmail을 실행하기전에 /etc/services 파일을 열고 smpt 프로토콜에 주석처리가 되어
있는지 확인한 후 Sendmail 서버를 실행합니다.
# cat /etc/services | grep smtp
smtp25/tcp mail
smtp25/udp mail
smtps 465/tcp # SMTP over SSL (TLS)
Sendmail 서버가 정상적으로 실행되었는지 확인하기 위해 telnet을 사용해 25번 포트(smpt)로
접속해봅니다. 아래와 같은 메시지가 출력되면 Sendmail이 정상적으로 실행된 것입니다.
Sendmail 서버가 정상적으로 실행되었는지 확인하기 위해 telnet을 사용해 25번 포트(smpt)로
접속해봅니다. 아래와 같은 메시지가 출력되면 Sendmail이 정상적으로 실행된 것입니다.
# telnet 0 25
Trying 0.0.0.0…
Connected to 0 (0.0.0.0).
Escape character is ‘^]’.
220 xxxxxx.net ESMTP Sendmail 8.11.2/8.11.2; Sat, 21 Jul 2001 14:28:12 +0900
만약 레드헷 버젼이 7.1 이상부터는 relay 보안 기능이 강화 되어서 초기 셋팅상태에서는
내부 사용자 끼리만 메일을 보내고 받을수 있다. 원격지에서는 이 서버를 통해서 메일을
주고 받을수가 없다. 일단..새로 sendmail.cf 파일을 만들어야 한다.
# cd /etc/mail
/etc/mail/sendmail.mc 파일을 수정한후 m4 를 이용하여 새로운 sendmail.cf
파일을 만든다. (redhat 7.1 부터 변경된 사항)
# vi sendmail.mc
——————————————————————
.
.
아래 설정 부분 제일 앞에 “dnl” 을 붙여준다.
dnl DAEMON_OPTIONS(`Port=smtp,Addr=127.0.0.1, Name=MTA’)
.
.
——————————————————————
# m4 sendmail.mc > /etc/sendmail.cf
# /etc/rc.d/init.d/sendmail restart
확인 하도록 하자.
# telnet 25
Trying x.x.x.x…
Connected to 0.
Escape character is ‘^]’.
220 xxxxxxx.net ESMTP Sendmail 8.11.2/8.11.2; Wed, 27 Jun 2001 01:29:51 +0900
Washington IMAP설치하기
————————————————————————————-
Washington IMAP 역시 RPM 패키지로 제공하고 있으므로 CD-ROM을 마운트한 후 쉽게
설치할 수 있습니다. 먼저 CD-ROM에 있는 UW IMAP 패키지를 확인 해 보겠습니다.
# mount /mnt/cdrom
# cd /mnt/cdrom/RedHat/RPMS
# ls imap*
imap-2000-3.i386.rpm
Washington IMAP는 imap-2000-3이라는 파일명으로 패키징되어 있으며, POP3와 IMAP
데몬이 모두 설치됩니다.
# rpm -Uvh imap-2000-3.i386.rpm
이제 설치한 imap과 pop3 데몬을 클라이언트에서 접속할 수 있도록 실행시켜야 합니다.
먼저 /etc/services 파일을 열어 pop3와 imap의 주석을 제거하고 아래와 같이 설정되었
는지 확인합니다.
pop3 110/tcp pop-3 # POP version 3
pop3 110/udp pop-3
imap2 143/tcp imap # Interim Mail Access Proto v2
imap2 143/udp imap
레드햇 7.0 버전부터는 슈퍼데몬이 inetd에서 xinetd로 변경되었고, inetd.conf 설정파일이
xinetd.conf 파일로 변경되었습니다. xinetd의 기본적인 설정파일들은 /etc/xinetd.d에
위치하므로 설치한 ipop3와 imaps 파일을 열고 disable = no를 추가하여 아래의 그림과 같이
설정합니다.
# vi /etc/xinetd.d/ipop3
# default: on
service pop3
{
disable = no
socket_type = stream
protocol = tcp
wait = nowait
user = root
server = /usr/sbin/ipop3d
log_on_success += USERID
log_on_failure += USERID
}
다음에는 슈퍼 데몬을 다시 재시작합니다.
# /etc/rc.d/init.d/xinetd restart
이제 마지막으로 설치한 POP3와 IMAP이 제대로 가동되었는지 확인해 보겠습니다. telnet을
이용하여 25번 포트(POP3)와 143번 포트(IMAP)로 접속한 후 아래와 같이 테스트 해봅니다.
여기까지 제대로 되었다면 설치는 성공한 것입니다.
이밖에 pop 프로그램으로 많이 사용하는 qpopper 의 설치에 대해 알아보자.
pop 데몬으로 qpopper 를 사용할것이기 때문에 최신 소스를 다운 받는다.
다운 받은 소스를 풀고 그 디렉토리로 이동한 다음…
# ./configure –enable-specialauth –enable-servermode –enable-shy
# make
# cp popper/popper /usr/local/lib
inetd.conf 파일을 redhat 7.1 부터는 쓰지 않으므로 xinetd 방식으로 전환 한다.
먼저 inetd.conf 파일을 /etc 밑에 만들고 pop 설정 부분을 적어준다.
# vi inetd.conf
—————————————————————————
pop-3 stream tcp nowait root /usr/local/lib/popper
—————————————————————————
# inetdconvert -d /etc/xinetd.d pop-3
# /etc/rc.d/init.d/xinetd restart
확인 하자.
# telnet 0 110
Trying 0.0.0.0…
Connected to 0.
Escape character is ‘^]’.
+OK ready
이것으로 센드메일에 관련되어 smtp, pop 모든 셋팅을 마쳤다.
Sendmail 설정하기
——————————————————————————————-
Sendmail에서 가장 중요하고도 어려운 부분이 sendmail.cf 파일의 설정입니다. O’Reilly사에서
Sendmail에 대한 전문서적이 나올 정도로 방대하고 다양한 기능을 가지고 있으며 사용법도 매우
다양합니다. Sendmail을 사용하기 위해 기본적으로 알아야 할 설정 파일들에 대해 살펴보겠습니다.
/etc/sendmail.cf
Sendmail의 가장 중요한 설정파일로 /etc 또는 /etc/mail 디렉토리에 자동으로 설치되어
있습니다. Sendmail.cf에 대한 자세한 내용은 Bryan Costales 와 Eric Allman이 집필한
O’Reilly의 Sendmail을 참고하시거나 이상로님의 홈페이지
http://trade.chonbuk.ac.kr/~leesl/mail/을 참고하시기 바랍니다. 여기서는 간단히
메일서버를 관리하기 위한 몇 가지 설정에 대해서만 다루겠습니다.
Fw/etc/mail/local-host-names
메일을 수신할 호스트 이름을 명시한 파일의 위치를 설정합니다.
FR-o /etc/mail/relay-domains
relay-domains파일에는 Relay를 허용할 호스트의 이름을 설정합니다. 주석으로 처리하면
모든 IP에 대해서 Relay가 허용되므로 스팸메일과 같은 문제가 발생할 수도 있으므로
주의하시기 바랍니다.
DnMAILER-DAEMON
Sendmail 서버가 에러메시지를 보내야 할 경우 보낸 사람의 이름을 결정합니다. 잘못된
메일이 되돌아 온 경우 FROM : Mail Delivery Subsystem
<MAILER-DAEMON>과 같은 메시지를 보신적이 있을 것입니다.
Kaccess hash /etc/mail/access
Relay를 허용하거나 거부할 특정 IP와 도메인을 설정하는 파일입니다.
relay-domains보다 사용이 편리하므로 많이 사용됩니다.
O ForwardPath=$z/.forward.$w:$z/.forward
여러 개의 메일을 가진 경우, 특정 메일계정으로 들어온 메일을 다른 메일로 곧바로 보내주는
포워딩파일을 설정합니다. 사용자의 홈 디렉토리에 .forward라는 파일을 만들고 포워딩시킬
메일 주소를 입력하면 됩니다.
# O MaxMessageSize=1000000
메일의 최대 크기를 결정합니다. 주석을 제거하면 설정한 크기(Byte단위)보다 큰 메일은
전송할 수 없게 됩니다. 지금 써준 1000000은 1메가로 제한한 메일 용량입니다.
O QueueDirectory=/var/spool/mqueue
큐 디렉토리를 설정합니다.
O Timeout.queuereturn=5d
메일을 보내려는 호스트에 문제가 생기면 메일은 큐 디렉토리에 저장됩니다. Sendmail
서버는 쌓인 메일을 상대방 호스트에 보내기 위해 주기적으로 접속을 시도하며, 일정한
기간이 지나면 메일을 다시 발송한 사람에게 되돌려 보냅니다. Sendmail이 메일을 보내려고
시도하는 기간을 설정하는 옵션으로 5d는 5일을 의미합니다.
O Timeout.queuewarn=4h
큐 디렉토리에 쌓인 메일이 지정한 시간안에 전송되지 못할 경우 메일을 보낸 사람에게 경고
메일을 보냅니다. 기본값은 4h로 4시간안에 전송되지 못하면 보낸 사람에게 경고의 메일을
보냅니다.
Mlocal,
P=/usr/bin/procmail, F=lsDFMAw5u:/|@qSPfhn9,
S=EnvFromL/HdrFromL, R=EnvToL/HdrToL,
T=DNS/RFC822/X-Unix,
A=procmail -Y -a $h -d $u
사용자계정에 대문자가 있는 경우에도 메일을 받을 수 있도록 설정하려면 Mlocal로
시작하는 부분을 찾아 F= 부분에 ‘u’를 추가합니다.
/etc/mail/access
스팸메일을 방지하기 위해 Relay를 허용할 호스트의 IP와 도메인을 설정하는 매우 중요한
파일입니다. Relay에 대한 자세한 내용은 [Relay에 대하여]를 참고하시기 바랍니다.
먼저 vi에디터나 emacs를 사용해 /etc/mail/access파일을 열고 릴레이를 허용하거나
거부할 IP 주소를 아래와 같이 입력합니다.
[root@zzang911 /root]# cat /etc/mail/access
# Check the /usr/share/doc/sendmail-8.11.2/README.cf file for a description
# of the format of this file. (search for access_db in that file)
# The /usr/share/doc/sendmail-8.11.2/README.cf is part of the sendmail-doc
# package.
#
# by default we allow relaying from localhost…
localhost.localdomain RELAY
localhost RELAY
127.0.0.1 RELAY
xxx.xxx.xxx.xxx RELAY
spam.com REJECT
위는 localhost 나 xxx.xxx.xxx.xxx 의 특정 IP 에서는 릴레이를 허용하나 spam.com
에서는 오는 모든 메일은 릴레이를 거부한다는 뜻이다.
이와 같이 허용이나 거부 대역을 지정후 access.db 파일을 갱신시켜주면 바로 적용이
된다.
[root@zzang911 /root]# makemap hash /etc/mail/access < /etc/mail/access
[Relay에 대하여]
그럼 간단하게 Relay에 대한 개념을 알아보겠습니다.
예를 들어 A라는 사람은 IP주소가 203.243.88.21이라는 컴퓨터에서
aroma@mail.linuxul.com이라는 메일을 사용한다고 가정하고, B라는 사람은 IP주소가
168.211.106.34인 컴퓨터에서 nea@yahoo.co.kr이라는 메일을 사용한다고 가정합니다.
B가 A에게 메일을 보내면 메일은 203.249.88.21로 가는 것이 아니라 mail.linuxul.com서버의
/var/mail 디렉토리 밑에 aroma라는 파일로 복사가 됩니다. 그러면 A는 MUA 프로그램을
사용해 메일을 확인할 수 있지요. 그런데 여기서 중대한 문제점이 생겨나게 됩니다. 아무나 주소를
맞게 보내면 그냥 /var/mail에 쌓이게 되는 것이죠. 그래서 하드디스크가 메일로 꽉 차버리거나,
네트워크 전송량의 증가로 네트워크가 마비되는 경우가 생겨나게 됩니다. 이 문제를 막기 위해서
고안된 방법이 바로 Relay라는 방법입니다.
Relay에는 두 가지 방식이 있습니다.
o 첫 번째는 메일을 보내는[송신] 컴퓨터의 제한
o 두 번째는 메일을 받는[수신] 컴퓨터의 제한
Relay로 주로 쓰이는 방법은 메일을 확인하는 컴퓨터는 제한하지 않고 메일을 보내는 것을
제한하는 것입니다. 즉, 위의 그림과 같이 /etc/mail/access파일에 203.243.88의
C클래스를 허용 가능하게 해주면 203.243.88.21처럼 허용 그룹에 들어 있는 컴퓨터에서는
메일을 보내고/받을 수가 있지만, 그룹에 들지 않은 168.211.106.34라는 컴퓨터에서는
메일을 확인할 수만 있습니다. 또한 spam.com이라는 도메인에 속한 호스트에서 오는
메일은 보내기와 받기가 모두 거부됩니다.
/etc/mail/relay-domains을 사용해도 됩니다. 하지만, 차이점은 relay-domains을
사용하면sendmail데몬을 다시 실행시켜 주어야 하지만 /etc/mail/access파일을 사용하면
다시 실행할 필요 없이 makemap hash /etc/mail/access < /etc/mail/access라고
실행만 시켜주면 됩니다.
/etc/mail/local-host-names
메일을 수신할 호스트의 이름을 입력하는 파일로, Sendmail 8.9.x 버전이하에서 사용되었던
sendmail.cw 파일의 명칭이 Sendmail 8.10.x 버전부터는 local-host-names로
변경되었습니다. Sendmail 서버는 이곳에 적힌 호스트의 이름으로 메일이 들어오면 더 이상
다른 서버로 메일을 보내지 않고 자신의 메일박스에 저장합니다. 아래와 같이 메일서버의
호스트이름을 입력하거나 여러 개의 가상호스트를 사용한다면 모두 입력해야 합니다.
etc/aliases
특정 사용자에게 온 메일을 다른 사람에게 보내주거나, 메일링리스트를 작성해야 하는 경우에
사용되는 파일로 보안에 주의하여 사용해야 합니다. aliases 파일을 열어보면 시스템 계정들이
아래와 같이 root로 alias되어 있습니다. 또한 특정 사용자를 다른 사용자로 alias 시킬 수도
있습니다.
메일링 리스트 작성하기
——————————————————————————————
메일링리스트란 동일한 메일을 여러 사람에게 보내야 할 경우 사용되며, 그룹을 지정해 구성원들의
목록을 써주거나 특정 파일을 지정하는 방법 등으로 사용됩니다. 예를 들어 aroma, bulpeng,
bibi와 같은 사용자들을 test1라는 그룹으로 지정해 보겠습니다.
vi편집기로 /etc/aliases 파일을 열고 아래의 라인을 추가한 후 저장합니다. 앞으로 test1에게
메일을 보내면 지정된 모든 사용자들에게 메일이 도착하게 됩니다.
test1: aroma, bulpeng, bibi
다른 하나는 특정파일을 지정해 주는 방법으로 include 지시자를 사용한 후에 파일의 경로와
파일이름을 입력합니다.
test2: :include:/etc/maillist/test2
# cat /etc/maillist/test2
aroma
bulpeng
bibi
파일을 수정한 후에는 newaliases 명령으로 aliases.db를 만들어 줍니다.
# newaliases
/etc/aliases: 40 aliases, longest 28 bytes, 434 bytes total
이제 test1 또는 test2로 메일을 보내면 지정된 사용자들(aroma, bulpeng, bibi)이 모두 메일을
받아볼 수 있습니다.
sendmail 기본 보안
—————————————————————————————-
설정파일 속성 변경하기
# chattr +i /etc/mail/sendmail.cf or /etc/sendmail.cf
# chattr +i /etc/mail/local-host-nameds
# chattr +i /etc/mail/aliases or /etc/aliases
# chattr +i /etc/mail/access
Sendmail deamon을 실행하는 쉘을 바꾸어주기
Sendmail의 보안을 위해서는 보통 프로그램의 /bin/sh을 smrsh program으로 바꾸어 주어야
합니다. /bin/sh로 실행이 되었을 경우에 해킹의 우려가 있으므로, 이를 제한하기 위해서
Sendmail 프로그램의 실행을 제한할 필요가 있기 때문입니다.
하지만, 레드햇의 RPM으로 설치했을 경우에는 Default로 설정이 되어 있습니다.
/etc/mail/sendmail.cf 또는 /etc/sendmail.cf 파일에서
Mprog,
P=/bin/sh, F=lsDFMoqeu9, S=EnvFromL/HdrFromL,
R=EnvToL/H drToL, D=$z:/,
T=X-Unix/X-Unix/X-Unix,
A=sh -c $u
의 굵게 쓴 파일을 아래와 같이 바꾸어주고
Mprog,
P=/usr/sbin/smrsh, F=lsDFMoqeu9, S=EnvFromL/HdrFromL,
R=EnvToL/H drToL, D=$z:/,
T=X-Unix/X-Unix/X-Unix,
A=smrsh -c $u
sendmail.cf 파일을 저장하고 아래와 같이 sendmail deamon을 재시작합니다.
# /etc/rc.d/init.d/sendmail restart
인증되지 않은 사용자의 Sendmail Deamon사용을 제한하기
Sendmail에는 Anti-Spam Feature를 포함하고 있습니다. 이 기능을 제대로 사용하기
위해서는 /etc/mail/sendmail.cf 또는 /etc/sendmail.cf파일에서 옵션을 바꾸어 주어야
합니다.
# privacy flags
O PrivacyOptions=authwarnings, goaway
Sendmail에서 goaway 옵션을 사용할 경우에 SMTP의 EXPN, VRFY명령어를 제한하게
됩니다. 이로 인해서 VERB명령어도 더불어 제한하게 됩니다. 처음 SMTP에 접하시는 분들은
이 명령어에 대해서 생소할 수 있으므로 약간의 설명을 덧붙이겠습니다. STMP에 접속하여서
MAIL을 전달하기 위해서는 여러 가지 명령어를 사용하게 되어 있습니다.
아래와 같이 접속 후 HELP 명령어를 타이핑하면 HELO, EHLO, MAIL, RCPT, DATA,
RSET, NOOP, QUIT, HELP, VRFY, EXPN, VERB ETRN, DSN, AUTH,
STARTTLS등의 사용 가능한 명령어를 보실 수 있습니다.
자세한 사용법과 내용은 HELP <Command>하시면 알 수 있습니다.
HELP AUTH <- 입력
214-2.0.0 AUTH mechanism [initial-response]
214-2.0.0 Start authentication.
214 2.0.0 End of HELP info
EXPN aroma <- 입력 (Mail list의 관계된 메일 계정을 보여줄 수 있는 명령어입니다.)
250 2.1.5 <sweetness@linux.co.kr>
VRFY aroma <- 입력(Alias에 관계된 메일 계정을 보여줄 수 있는 명령어입니다.)
250 2.1.5 <aroma@mail.linuxul.com>
보안설정 후에는 아래와 같은 메시지가 나타납니다.
EXPN aroma <- 입력
502 5.7.0 Sorry, we do not allow this operation
mailq command의 제한하기
/usr/bin/mailq 명령어를 제한하기 위해서는 /etc/mail/sendmail.cf or /etc/sendmail.cf파일에서
옵션을 바꾸어 주어야 합니다.
# privacy flags
O PrivacyOptions=authwarnings, goaway, restrictmailq
또한, queue디렉토리를 root권한으로 막아주고 재시작합니다.
#chmod 0700 /var/spool/mqueue
#/etc/rc.d/init.d/sendmail restart
mailq명령어를 실행시키면 아래와 같은 메시지가 나타납니다.
aroma$ mailq
You are not permited to see the queue
Queue 프로세스를 root권한으로 제한하기
Queue프로세스를 root권한으로 제한하기 위해서는 /etc/mail/sendmail.cf 또는
/etc/sendmail.cf파일에서 아래와 같이 옵션을 바꾸어 줍니다.
# privacy flags
O PrivacyOptions=authwarnings, goaway, restrictmailq,
restrictqrun
파일을 저장후 재시작합니다.
#/etc/rc.d/init.d/sendmail restart
SMTP Greeting Message를 수정하기
Sendmail의 Version 정보라든지 여러 가지 이유로 Connected중에 보여주는 아래와 같은
메시지들을 바꾸어주므로, 불필요한 정보를 숨길 수 있습니다.
[root@mail /root]# telnet mail.linuxul.com 25
Trying 211.106.100.89…
Connected to mail.linuxul.com.
Escape character is ‘^]’.
220 mail.linuxul.com ESMTP Sendmail 8.11.0/8.11.0; Wed, 21 Feb 2001
22:50:51 +0900
/etc/mail/sendmail.cf 또는 /etc/sendmail.cf파일에서 옵션을 바꾸어 주어야 합니다.
# SMTP initial login message (old $e macro)
O SmtpGreetingMessage=$j Sendmail $v/$Z; $b
를 아래와 같이 수정합니다.
# SMTP initial login message (old $e macro)
O SmtpGreetingMessage=$j
파일을 저장후 Sendmail을 재시작합니다.
#/etc/rc.d/init.d/sendmail restart
수정후에는 아래와 같은 메시지가 출력됩니다.
# telnet mail.linuxul.com 25
220 localhost.localdomain ESMTP
Sendmail 모니터링
[Sendmail의 프로세스 상태보기]
# ps aux|grep sendmail
root 21094 0.0 0.3 3244 1504 ? S 08:43 0:00 sendmail: accepti
[Sendmail의 mail 상태를 모니터링하기]
[root@ns /root]# mailstats
Statistics from Wed Jan 23 04:02:04 1980
M msgsfr bytes_from msgsto bytes_to msgsrej msgsdis Mailer
5 361145 14357435K 89312 3671483K 16983 0 esmtp
8 236772 11571389K 661786 20775066K 8687 0 local
=============================================================
T 597917 25928824K 751098 24446549K 25670 0
[메일큐값 모니터링 하기]
[root@ns /root]# mailq
Mail Queue (5 requests)
–Q-ID– –Size– —–Q-Time—– ————Sender/Recipient————
LAA21970 2375 Sat Jul 21 11:40 MAILER-DAEMON
8BITMIME (Deferred: Connection refused by web.kdlp.org.)
QAA29807 11059 Fri Jul 20 16:58 MAILER-DAEMON
8BITMIME (Deferred: Connection refused by tmail.simmani.com.)
OAA05202 3153 Wed Jul 18 14:43 MAILER-DAEMON
8BITMIME (Deferred: Connection refused by web.kdlp.org.)
PAA19364* (no control file)
praliases명령은 현재 메일 시스템의 Aliases상태를 보여줍니다.
# praliases
3. Proftpd Server 구축하기
ftp://ftp.oops.org 에서 proftpd 를 다운 받는다
# rpm -Uvh proftpd-1.2.9-xkr.ixx.rpm –force
# rpm -Uvh proftpd-doc-1.2.9-xkr.ixx.rpm –force
[root@ns root]# vi /etc/proftpd/proftpd.conf
—————————————————————————-
ServerName “ALANG1 FTP Server For CLUNIX”
#
ServerType standalone
#ServerType inetd
DefaultServer on
ServerAdmin root@localhost
# 요즘에는 inverse domain 이 거의 지원되지 않으니, 이 설정은 필수라고 생각
# 하고 수정하지 않는다.
#
UseReverseDNS off
IdentLookups off
# Server 에 접속했을 경우 보내주는 Defualt 메세지를 설정한다. Off 로 지정
# 하였을 경우 Proftpd Server Ready ServerName 이 출력된다.
#
ServerIdent On “ProFTPd Account Server ready .. ”
# User login 을 했을시에 user 들이 자신의 홈상위 디렉토리들을 마음대로 돌
# 아다니지 못하게 chroot() 를 설정한다. group 별로 설정을 하게 되며 “!”는
# 제외하라는 의미를 가지게 된다.
#
DefaultRoot ~ !wheel
# ServerType이 standalone이면 이 항목의 주석을 풀어 줘야 한다. inetd로 작
# 동을 시킬시에는 /etc/services에서 port를 지정한다.
#
Port 21
# root login 을 허락할지의 여부를 지정한다. PAM modules를 사용한다면 먼저
# /etc/proftpd/ftpusers에서 root를 삭제해야 한다.
# http://www.oops.org/SERVICE/jsboard/read.php?table=ProftpdTip&no=10 참조
#
RootLogin off
# Global section은 proftpd의 전체적인 설정에 모두 적용시킨다.
<Global>
# group 과 world writable 로 부터 새로운 dir 과 file 들을 생성하는 것을
# 막기위하여 기본적으로 umask는 022로 설정을 한다.
Umask 022
# ftpusers file을 이용하여 PAM 인증을 하기를 원하면 이 지시자의 값을 on
# 으로 한다. default 값은 off 이다.
AuthPAMAuthoritative on
# service를 시작하고 마칠 시간을 24시간 표기법으로 지정을 한다. 이 설정
# 은 Korea User Group 의 time limit 패치가 적용이 되어 있어야 사용이 가
# 능하다.
#
# UpTime 10
# DownTime 23
# Server 의 Ftpd 시간을 지역시간으로 고정한다. on 으로 했을 경우 GMT 시
# 간을 표시 하기 때문에 한국의 경우 9시간의 오차가 발생한다.
TimesGMT off
# 1.2.1 이하 버젼에서의 버그를 위한 설정
DenyFilter \\*.*/
</Global>
# 회선의 Bandwidth를 특정 속도로 제한을 한다. 단위는 Byte per Sec 이다.
# 다운로드와 업로드를 16KB/s (128Kb/s) 로 제한
TransferRate RETR,STOR 102400
# 최대 접속 인원수를 지정한다.
MaxClients 10
# 하나의 호스트로 부터 동시에 접근할 수 있는 수를 지정한다. 아래의 기본
# 설정으로는 하나의 호스트에서 한번의 접근만 허용한다.
MaxClientsPerHost 3 “Sorry, %m connection allow per one host”
# 하나의 계정 ID 로 동시에 접근할 수 있는 호스트 수를 지정 한다. 아래의
# 기본 설정으로는 하나의 계정 하나 호스트에서만 접근만 허용한다. 하나의
# 계정에 하나의 접근만을 허락하려면 위의 MaxClientsPerHost의 값과
# MaxHostsPerUser의 값이 둘다 1이면 된다.
#MaxHostsPerUser 1 “Sorry, %m hosts allow per one user”
# 접속 대기시간을 설정한다. user 가 접속후 아무 작동도 안할때 일정 시간후
# 에 접속이 종료되게 한다
TimeoutIdle 900
TimeoutNoTransfer 900
TimeoutLogin 300
# DeferWelcome 는 client가 인증을 하기 전에 servername을 display하는 것을
# 방지한다.
DeferWelcome off
# ‘welcome.msg 는 login 시에 보여지고, ‘message’ 는 각 하위 디렉토리에 접
# 속 했을때 보여지게 된다.
DisplayLogin /etc/proftpd/welcome.msg
DisplayFirstChdir .message
# DoS(Denial Of Service) 공격을 막기 위해, 자식 process 의 maximun number
# 를 30 으로 설정한다. 만약 30이상의 접속을 허락할 필요가 있다면 간단하게
# 이 치수를 증가 시키도록 한다. 이것은 오직 standalone mode 에서만 가능하
# 다. inetd mode 에서는 service 당 maximun number를 제한 하는 것을 허락하
# 는 inetd server에서 설정을 해야 한다.(xinetd 역시 마찬가지 이다)
# MaxInstances 30
User nobody
Group nobody
# 일반적으로 file들을 overwrite를 가능하게 한다.
<Directory /*>
AllowOverwrite on
</Directory>
# ls 명령어의 -a option으로 hidden file을 볼수 있게 한다.
# LsDefaultOptions “-a”
<Anonymous ~ftp>
User ftp
Group ftp
# /etc/shells 에 등록되어 있는 shell 이 지정되어 있는 유저들만 로그인이
# 가능하게 한다. ftp user 의 shell 이 보통 /bin/false 로 지정이 되어 있
# 으므로 이 값을 off 로 해준다.
RequireValidShell off
# 익명 접근시의 패스워드 체크정도 여부를 결정을 한다. AnonPassType 지시
# 자는 Korean User Group 의 독자적인 패치이다.
# none -> 아무런 체크를 하지 않는다.
# trivial -> 패스워드에 @ 문자가 존재하는지만 체크한다.
# complete-email -> 패스워드가 완전한 형태의 이메일 주소형식을 가지는지
# 체크한다.
AnonPassType none
# 익명 접근시 사용하지 못하게 할 패스워드를 정규표현식으로 설정한다. 이
# 지시자는 Korean User Group 의 독자적인 패치이다.
#
#AnonRejectPasswords ^(IEUser|mozilla|username|test)@?
# 익명 접근을 할때 특정 password를 지정할수 있다. 단 위의 User 지시자의
# name이 passwd file에 등록이 되어져 있어야 한다. 이 지시자가 on일 경우
# 이메일 주소로 login을 할수 없다.
#
# 이 지시자가 설정되면, AnonPassType 이 무시된다.
#
# AnonRequirePassword on
# 링크된 실 경로 출력 여부
# ShowSymlinks off
# User name “ftp”로 anonymous login을 할수 있도록 한다
UserAlias anonymous ftp
<Limit LOGIN>
Order allow,deny
Allow from 211.238.41.
Allow from 192.168.123.
Deny from all
</Limit>
DisplayLogin welcome.msg
DisplayFirstChdir .message
# 최대 접속 인원수를 지정한다.
MaxClients 10
# 하나의 호스트로 부터 동시에 접근할 수 있는 수를 지정한다. 아래의 기본
# 설정으로는 하나의 호스트에서 한번의 접근만 허용한다.
MaxClientsPerHost 3 “Sorry, %m connection allow per one host”
# 소유권이 root인 file이나 directory들을 보여주지 않는다
#HideUser root
# 그룹권한이 root인 file이나 directory들을 보여주지 않는다
#HideGroup root
# upload/download 비율을 지원한다.
# http://www.oops.org/SERVICE/jsboard/read.php?table=ProftpdTip&no=9 참조
#
# Ratios on
# HostRatio foobar.net 100 10 5 100000
# 서버를 시간대로 운영하는 것을 지정한다. 아래의 예는 오후 3 시 부터 오
# 후 6시까지만 서버의 접속을 가능하게 한다.
#
# Korean User Group 의 time limit 패치가 적용이 되어 있어야 한다.
#
# UpTime 15
# DownTime 18
<Limit WRITE>
DenyAll
</Limit>
<Limit READ>
DenyALL
</Limit>
# anonymous 계정으로 접근할수 있는 디렉토리별로의 허가권 설정..
# 일단은 모든 디렉토리에 쓰기 권한은 주지 않는설정이다.
<Directory *>
<Limit WRITE>
DenyAll
</Limit>
</Directory>
# incoming 디렉토리에 읽기권한을 주기않고..upload 권한만 부여.
<Directory upload>
<Limit READ>
DenyAll
</Limit>
<Limit STOR MKD>
AllowAll
</Limit>
</Directory>
<Directory pub>
<Limit READ>
AllowALL
</Limit>
<Limit STOR MKD>
Order allow,deny
Allow from 211.238.41.
Allow from 192.168.123.
Deny from all
</Limit>
</Directory>
</Anonymous>
——————————————————————————
[root@ns root]# ncftp -u alang syszone.co.kr
Connecting to 211.238.41.180…
ProFTPd Account Server ready ..
Logging in…
Password requested by 211.238.41.180 for user “alang”.
Password required for alang.
Password:
#################################################################
# #
# ProFTPD Korea User Groups #
# http://proftpd.oops.org #
# #
# This file is printed when account ftp user login #
# from /etc/proftpd/welcome.msg #
# #
#################################################################
User alang logged in.
Logged in to syszone.co.kr.
ncftp /home/alang >
4. Real Server 셋팅법
먼저 일정한 디렉토리에 realserver 프로그램을 옮겨놓는다.
그런뒤 실행파일인 g2p3-linux-c6.bin 에 실행 퍼미션을 준다.
[root@alang realserver]# chmod 755 g2p3-linux-c6.bin
실행 시킨다.
[root@alang realserver]# ./g2p3-linux-c6.bin
Welcome to the realserver Setup for UNIX
Setup will help you get realserver running on your computer.
Setup will step you through the installation process by displaying
informational screens. Please follow the navigational controls
below:
Key Behavior
=== ========
N Next
P Previous
X Exit
F Finish (Express Installation)
Each input requires the execution of the key above
followed by the [ENTER] key. Enter [N]ext to continue:( 그냥 엔터 친다.)
If a realserver license key file has been sent to you,
please enter its directory path below. If you have not
received a realserver license key file, then this server
will default to a Basic RealServer. /usr/local/src/apmj/RealPlayServer/license.txt
( 여기는 라이센스키가 있는 위치를 적어준다. )
Installation and use of realserver requires
acceptance of the following terms and conditions:
Press [Enter] to display the license text… (엔터 친다.)
그럼 라이센스 정보가 나온다.
REALNETWORKS, INC.
END USER LICENSE AGREEMENT
REALNETWORKS BASIC SERVER VERSION G2
REDISTRIBUTION NOT PERMITTED
Software License for RealNetworks Basic Server
Version G2
IMPORTANT — READ CAREFULLY: This RealNetworks
License Agreement (“License Agreement”) is a legal
agreement between you (either an individual or an
entity) and RealNetworks, Inc. and its suppliers
and licensors (collectively “RN”) for RN’s Basic
Server Version G2 software (“Software”). You may
install only ONE copy of the Software. By
clicking on the “I Accept” button, installing,
copying or otherwise using the Software, you agree
to be bound by the terms of this License
Agreement. If you do not agree to the terms of
this License Agreement, click on the “I Do Not
Accept” button and/or do not install the Software.
ANY THIRD PARTY SOFTWARE, INCLUDING ANY NON-RN
PLUG-IN, THAT MAY BE PROVIDED WITH THE SOFTWARE IS
INCLUDED FOR USE AT YOUR OPTION. IF YOU CHOOSE TO
USE SUCH SOFTWARE, THEN SUCH USE SHALL BE GOVERNED
BY SUCH THIRD PARTY’S LICENSE AGREEMENT, AN
ELECTRONIC COPY OF WHICH WILL BE INSTALLED IN THE
“realserver” DIRECTORY ON YOUR COMPUTER, UPON
INSTALLATION OF THE SOFTWARE.
1. SOFTWARE OWNERSHIP. This is a license
agreement and NOT an agreement for sale. This
Software and the Documentation is proprietary to
RN, and is protected by the copyright and other
intellectual property laws of the United States
and international treaties. The Software is
licensed, not sold. RN continues to own the
Software, and other content provided or
–More–(13%)
중간 생략 ………………
rbitration Association. The arbitrator’s award
shall be binding and may be entered as a judgment
in any court of competent jurisdiction. This
License Agreement will not be governed by the
United Nations Convention of Contracts for the
International Sale of Goods, the application of
which is hereby expressly excluded.
Copyright (c) 1995-1998 RealNetworks, Inc. and/or
its suppliers. 1111 Third Avenue, Suite 2900,
Seattle, Washington 98101 U.S.A. All rights
reserved. RealNetworks, RealSystem, RealAudio,
RealVideo, and RealPlayer, are trademarks or
registered trademarks of RealNetworks.
Basic Server Gold EULA 11-17-981
1
Choose “Accept” to accept the terms of this
license agreement and continue with realserver setup.
If you do not accept these terms, enter “No”
and installation of realserver will be cancelled.
(라이센스 동의을 묻는곳이다…그냥 엔터)
Enter the complete path to the directory where you want
to be installed. You must specify the full
pathname of the directory and have write privileges to
the chosen directory: /usr/local/real
(리얼서버가 인스톨되는 디렉토리를 적어준다.)
Please enter a username and password that you will use
to access the web-based RealSystem Administrator, the
RealSystem monitors, and RealSystem live encoders:
Username: admin
(설치후 웹상에서 관리할 수 있는데 사용할 관리자 아이디를 적는다.)
Password: (패스워드)
Please enter a port on which realserver will listen for
PNA connections. These connections have URLs that begin
with “pnm://”: (Default: 7070)
(PNA 접속에 port를 적어준다. – 디폴트 권장 )
Please enter a port on which realserver will listen for
RTSP connections. These connections have URLs that begin
with “rtsp://”: (Default: 554)
( RTSP 접속에 사용할 port – 디폴트 권장 )
Please enter a port on which realserver will listen for
HTTP connections. These connections have URLs that begin
with “http://”: (Default: 8080)
( HTTP 접속에 사용할 port – 디폴트 권장 -> 만일 tomcat 설치 시에는 다른
포트를 사용한다. 8880)
realserver will listen for RealSystem Administrator
requests on the port shown. This port has been
initialized to a random value for security. Please
verify now that this pre-assigned port will not interfere
with ports already in use on your system; you can
change it if necessary. (Default: 1278) 1975
(웹상에서 관리자 페이지로 접속할때 사용할 포트 번호)
You have selected the following realserver configuration:
Admin Username: admin
Admin Password: xxxxxxx
Monitor Password: xxxxxxx
Encoder Username: admin
Encoder Password: xxxxxxx
PNA Port: 7070
RTSP Port: 554
HTTP Port: 8080
Admin Port: 1975
Enter [F]inish to begin copying files, or [P]revious
to go back to the previous prompts: F
(환경설정사항을 확인한다. F 를 눌려서 계속 진행 )
Copying RealNetworks program files…………
realserver installation is complete.
The RealSystem Administrator allows you to configure
and maintain realserver through an intuitive
web-based interface. Please note that realserver
must be running in order to use the Administrator.
Would you like to start realserver now and launch
the RealSystem Administrator? (Default: Yes)
(리얼서버 설치 완료 . 서버를 실행하고 관리자 모드를 실행하겠냐는
메세지 입니다. – 엔터)
설치가 완료 되었습니다.
웹에서 http://도메인:관리자포트번호/admin/index.html
으로 접속 하면 관리 도구가 나옵니다. 여기서 서비스를 관리하시면
됩니다.
부팅시 실행방법은 /etc/rc.d/rc.local 파일 안에 다음을 추가
/usr/local/real/Bin/rmserver /usr/local/real/rmserver.cfg -m 64 &
설정 추가는 웹에서도 할수 있고 바로 설정 파일을 수정할수도 있다.
vi /usr/local/real/rmserver.cfg
——————————————————————
..
</List>
<List Name=”syszone”>
<Var MountPoint=”/syszone/”/>
<Var ShortName=”pn-local”/>
<Var BasePath=”/home/www/www”/>
</List>
..
——————————————————————
cd /home/www/www
vi rmtest.html
——————————————————————
<html>
<body>
<a href=./realtest.ram>테스트</a>
</body>
</html>
——————————————————————
vi realtest.ram
——————————————————————
rtsp://211.238.41.180/syszone/realdb/Yesterday.rm
pnm://211.238.41.180/syszone/realdb/Yesterday.rm
——————————————————————
5. Mysql + Apache + PHP + JSP + Library
5.1. mysql setting
cd /usr/local/src/apmj
tar xzvf mysql-4.0.20.tar.gz
cd mysql-4.0.20
./configure –prefix=/usr/local/mysql –localstatedir=/usr/local/mysql/data –with-mysqld-user=mysql –with-charset=euc_kr
make
make install
/usr/local/mysql/bin/mysql_install_db
userdel -r mysql
groupdel mysql
groupadd mysql
adduser -g mysql -d /usr/local/mysql/data -s /bin/false mysql
chown -R mysql. /usr/local/mysql/data
cp /usr/local/src/apmj/mysql-4.0.20/support-files/my-medium.cnf /etc/my.cnf
vi /usr/local/mysql/share/mysql/mysql.server
——————————————————————–
$bindir/mysqld_safe –datadir=$datadir –pid-file=$pid_file
위 행을 찾아서 뒤에 아래 옵션을 추가로 붙여준다.
–language=korean –safe-show-database &
——————————————————————–
cp /usr/local/mysql/share/mysql/mysql.server /etc/rc.d/init.d/mysqld
ln -s /etc/rc.d/init.d/mysqld /etc/rc.d/rc3.d/S90mysqld
/etc/rc.d/init.d/mysqld start
mysql root password 설정하기
초기에는 mysql root 패스워드가 Null 상태로 셋팅된다. 보안을 위해 Mysql 설치 후에 반드시
mysql root 암호를 변경해 주어야 한다.
# mysqladmin -u root password ‘패스워드’
5.2. lib setting
– zlib
# rpm 으로 zlib 가 설치 되었다면 삭제
rpm -e –nodeps zlib
rpm -e –nodeps zlib-devel
http://www.gzip.org/zlib/ 에서
zlib 을 다운 받습니다.
cd /usr/local/src/apmj
tar zxvf zlib-1.2.1.tar.gz
cd zlib-1.2.1
./configure -s // libz.so 생성
make
./configure && make test && make install //libz.a 생성
cp libz.so* /usr/local/lib
cd /usr/local/lib
rm -rf libz.so
rm -rf libz.so.1
ln -s libz.so.1.2.1 libz.so
ln -s libz.so.1.2.1 libz.so.1
vi /etc/ld.so.conf
————————————————–
/usr/local/lib
/usr/lib
…
————————————————–
추가 함
ldconfig // 추가된 LIB 환경설정을 적용함
– tiff
cd /usr/local/src/apmj
tar xzvf tiff-v3.5.7.tar.gz
cd tiff-v3.5.7
./configure && make && make install
– libpng
rpm -e –nodeps libpng
rpm -e –nodeps libpng-devel
http://www.libpng.org/pub/png/libpng.html 에서 다운..
cd /usr/local/src/apmj
tar zxvf libpng-1.2.5.tar.gz
cd libpng-1.2.5
cp scripts/makefile.linux Makefile
make test && make install
– clibpdf
http://www.fastio.com 에서 다운..
cd /usr/local/src/apmj
mv clibpdf202r1.tar.tar clibpdf202r1.tar.gz
tar zxvf clibpdf202r1.tar.gz
cd ClibPDF/source
mv Makefile Makefile.orig
cp Makefile.Linux Makefile
make lib && make install
– pdflib
http://www.pdflib.com 에서 다운..
cd /usr/local/src/apmj
tar zxvf pdflib-4.0.3.tar.gz
cd pdflib-4.0.3
./configure
make && make install
/etc/ld.so.conf 에 다음 추가
—————————————-
/usr/share/tcl8.3/pdflib
—————————————-
cd /usr/local/src/apmj
– swf
ftp://ftp.sgi.com/sgi/graphics/grafica/flash 에서 다운..
cd /usr/local/src/apmj
tar zxvf dist.99.linux.tar.Z
mkdir /usr/local/swf
cd dist
mkdir /usr/local/swf/include
mkdir /usr/local/swf/lib
mkdir /usr/local/swf/fonts
mkdir /usr/local/swf/psfonts
mkdir /usr/local/swf/bin
cp swf.h /usr/local/swf/include
cp libswf.a /usr/local/swf/lib
cp bin/* /usr/local/swf/bin
cp fonts/* /usr/local/swf/fonts
cp psfonts/* /usr/local/swf/psfonts
– freetype
http://freetype.sourceforge.net
cd /usr/local/src/apmj
tar xzvf freetype-2.1.3.tar.gz
cd freetype-2.1.3
./configure && make && make install
– jpeg
cd /usr/local/src/apmj
tar xzvf jpegsrc.v6b.tar.gz
cd jpeg-6b
./configure –enable-shared –enable-static
make && make test && make install
– libungif
rpm -e –nodeps libungif
rpm -e –nodeps libungif-devel
ftp://sunsite.unc.edu/pub/Linux/libs/graphics 에서 다운..
cd /usr/local/src/apmj
tar zxvf libungif-4.1.0.tar.gz
cd libungif-4.1.0
./configure && make && make install
– gd
rpm -e –nodeps gd
rpm -e –nodeps gd-devel
http://www.boutell.com/gd/http/ 에서 다운 ..
cd /usr/local/src/apmj
tar zxvf gd-2.0.21.tar.gz
cd gd-2.0.21
./configure
make && make install
– imap
rpm -qa |grep imap
설치 확인후 설치 되 있다면 삭제…
ftp://ftp.cac.washington.edu
에서 다운..
cd /usr/local/src/apmj
tar xzvf imap-2004.tar.Z
mv imap-2004 /usr/local/imap
cd /usr/local/imap
make slx
//ssltype 관련 error 발생 시 ..
Makefile 의 SSLTYPE을 nopwd 에서 none 으로 변경한다.
vi Makefile
vi src/osdep/unix/Makefile
컴파일이 무사히 끝났다면…
cp imapd/imapd /usr/sbin
cp ipopd/ipop3d /usr/sbin
vi /etc/xinetd.d/imapd <=아래의 내용을 새로 적던지.. 복사 붙여넣기 한다..
service imap
{
disable = no
socket_type = stream
wait = no
user = root
server = /usr/sbin/imapd
log_on_success += DURATION USERID
log_on_failure += USERID
}
저장후 빠져나옴
vi /etc/xinetd.d/ipop3d <= 아래의 내용을 추가..
service pop3
{
disable = no
socket_type = stream
wait = no
user = root
server = /usr/sbin/ipop3d
log_on_success += USERID
log_on_failure += USERID
}
cp c-client/c-client.a /usr/lib
cp c-client/mail.h /usr/local/include
cp c-client/rfc822.h /usr/local/include
cp c-client/linkage.h /usr/local/include
/etc/rc.d/init.d/xinetd restart
// test //
telnet localhost 110
telnet localhost 143
5.3 J2SDK 설치
cd /usr/local/src/apmj
rpm -Uvh j2sdk-1_4_1_01-fcs-linux-i586.rpm
cd /usr/java
ln -s j2sdk1.4.1_01/jre jre
ln -s j2sdk1.4.1_01 java
vi /etc/profile
—————————————————-
.
.
# j2sdk config
PATH=”$PATH:/usr/java/java/bin”
export JAVA_HOME=”/usr/java/java”
—————————————————-
source /etc/profile
// 확인 //
# java -version
java version “1.4.1_01”
Java(TM) 2 Runtime Environment, Standard Edition (build 1.4.1_01-b01)
Java HotSpot(TM) Client VM (build 1.4.1_01-b01, mixed mode)
5.4 apache 1차 설치
cd /usr/local/src/apmj
tar xzvf apache_1.3.31.tar.gz
cd apache_1.3.31
./configure –prefix=/usr/local/apache
5.5 jakarta-tomcat 설치
cd /usr/local/src/apmj
tar xzvf jakarta-tomcat-4.1.30.tar.gz
mv jakarta-tomcat-4.1.30 /usr/local/tomcat
tar xzvf jakarta-tomcat-connectors-4.1.30-src.tar.gz
cd jakarta-tomcat-connectors-4.1.30-src/jk/native
./buildconf.sh
./configure –with-apache=/usr/local/src/apmj/apache_1.3.31
make && make install
// 확인 //
ls -al /usr/local/src/apmj/apache_1.3.31/src/modules
drwxr-xr-x 3 root root 4096 5월 31 21:35 jk
5.6 PHP 설치 하기
cd /usr/local/src/apmj
tar xzvf php-4.3.7.tar.gz
cd php-4.3.7
./configure –with-apache=/usr/local/src/apmj/apache_1.3.31 –with-mysql=/usr/local/mysql –with-imap=/usr/local/imap –with-jpeg-dir=/usr/local/lib –with-png-dir=/usr/local/lib –with-gif-dir=/usr/lib –with-zlib-dir=/usr/local/lib –with-gd –with-freetype-dir=/usr/include/freetype2 –with-zlib –with-tiff-dir=/usr/local/lib –with-pdflib –with-cpdflib –with-gettext –with-swf=/usr/local/swf –with-mod_charset –with-language=korean –with-charset=euc_kr –with-xml –enable-ftp –enable-sockets –disable-debug –enable-system –enable-track-vars –enable-calendar –enable-magic-quotes
make && make install
cp libs/libphp4.a /usr/local/src/apmj/apache_1.3.31/src/modules/php4/
cp php.ini-dist /usr/local/lib/php.ini
5.7 apache 2차 셋팅
cd /usr/local/src/apmj/apache_1.3.31
./configure –prefix=/usr/local/apache –activate-module=src/modules/php4/libphp4.a –activate-module=src/modules/jk/libjk.a –enable-module=so –enable-rule=SHARED_CORE –enable-shared=max
make && make install
vi /usr/local/apache/conf/httpd.conf
——————————————————————————-
간단히 ServerName 의 주석을 풀고 현 시스테의 도메인이나 IP 를 적어준다.
800 줄 근처에 AddType allplcation/x-httpd-php 로 시작하는 부분을 찾아서..
AddType application/x-httpd-php .html .php3 .php4 .inc .phtml .php .ph <= 요렇게
AddType application/x-httpd-php-source .phps
바꿉니다. ( 혹은 위 2줄을 추가합니다. )
——————————————————————————-
/usr/local/apache/bin/apachectl restart
5.8 Zend 설치 하기
cd /usr/local/src/apmj
tar xzvf ZendOptimizer-2\\[1\\].5.2-Linux_glibc21-i386.tar.gz
cd ZendOptimizer-2.5.2-Linux_glibc21-i386
./install
5.9 Apache httpd.conf 설정
——————————————————————————–
ServerType standalone
ServerRoot “/usr/local/apache”
#LockFile /usr/local/apache/logs/httpd.lock
PidFile /usr/local/apache/logs/httpd.pid
ScoreBoardFile /usr/local/apache/logs/httpd.scoreboard
#ResourceConfig /usr/local/apache/conf/srm.conf
#AccessConfig /usr/local/apache/conf/access.conf
Timeout 300
KeepAlive On
MaxKeepAliveRequests 100
KeepAliveTimeout 15
MinSpareServers 20
MaxSpareServers 40
StartServers 20
MaxClients 150
MaxRequestsPerChild 0
#Listen 3000
#Listen 12.34.56.78:80
#BindAddress *
# Dynamic Shared Object (DSO) Support
# LoadModule foo_module libexec/mod_foo.so
LoadModule env_module libexec/mod_env.so
LoadModule config_log_module libexec/mod_log_config.so
LoadModule mime_module libexec/mod_mime.so
LoadModule negotiation_module libexec/mod_negotiation.so
LoadModule status_module libexec/mod_status.so
LoadModule includes_module libexec/mod_include.so
LoadModule autoindex_module libexec/mod_autoindex.so
LoadModule dir_module libexec/mod_dir.so
LoadModule cgi_module libexec/mod_cgi.so
LoadModule asis_module libexec/mod_asis.so
LoadModule imap_module libexec/mod_imap.so
LoadModule action_module libexec/mod_actions.so
LoadModule userdir_module libexec/mod_userdir.so
LoadModule alias_module libexec/mod_alias.so
LoadModule access_module libexec/mod_access.so
LoadModule auth_module libexec/mod_auth.so
LoadModule setenvif_module libexec/mod_setenvif.so
LoadModule php4_module libexec/libphp4.so
LoadModule jk_module libexec/libjk.so
ClearModuleList
AddModule mod_env.c
AddModule mod_log_config.c
AddModule mod_mime.c
AddModule mod_negotiation.c
AddModule mod_status.c
AddModule mod_include.c
AddModule mod_autoindex.c
AddModule mod_dir.c
AddModule mod_cgi.c
AddModule mod_asis.c
AddModule mod_imap.c
AddModule mod_actions.c
AddModule mod_userdir.c
AddModule mod_alias.c
AddModule mod_access.c
AddModule mod_auth.c
AddModule mod_so.c
AddModule mod_setenvif.c
AddModule mod_php4.c
AddModule mod_jk.c
#ExtendedStatus On
Port 80
User nobody
Group nobody
ServerAdmin alang@syszone.co.kr
ServerName 211.238.41.180
DocumentRoot “/usr/local/apache/htdocs”
<Directory />
Options FollowSymLinks
AllowOverride None
</Directory>
<Directory “/usr/local/apache/htdocs”>
Options Indexes FollowSymLinks MultiViews
AllowOverride None
Order allow,deny
Allow from all
</Directory>
<Directory “/home”>
Options FollowSymLinks ExecCGI
AllowOverride All
Order allow,deny
Allow from all
Deny from env=go_out
Deny from export=go_out
</Directory>
<IfModule mod_userdir.c>
UserDir www
</IfModule>
#<Directory /home/*/public_html>
# AllowOverride FileInfo AuthConfig Limit
# Options MultiViews Indexes SymLinksIfOwnerMatch IncludesNoExec
# <Limit GET POST OPTIONS PROPFIND>
# Order allow,deny
# Allow from all
# </Limit>
# <LimitExcept GET POST OPTIONS PROPFIND>
# Order deny,allow
# Deny from all
# </LimitExcept>
#</Directory>
<IfModule mod_dir.c>
DirectoryIndex index.html index.htm index.php index.phtml index.php3 index.jsp
</IfModule>
AccessFileName .htaccess
<Files ~ “^\\.ht”>
Order allow,deny
Deny from all
Satisfy All
</Files>
<Files ~ “^\\.ht”>
Order allow,deny
Deny from all
</Files>
<Files ~ “*Chat*”>
Order allow,deny
Deny from all
</Files>
<Files ~ “*CHAT*”>
Order allow,deny
Deny from all
</Files>
#CacheNegotiatedDocs
UseCanonicalName On
<IfModule mod_mime.c>
TypesConfig /usr/local/apache/conf/mime.types
</IfModule>
DefaultType text/plain
<IfModule mod_mime_magic.c>
MIMEMagicFile /usr/local/apache/conf/magic
</IfModule>
HostnameLookups Off
ErrorLog /usr/local/apache/logs/error_log
LogLevel warn
LogFormat “%h %l %u %t \\”%r\\” %>s %b \\”%{Referer}i\\” \\”%{User-Agent}i\\”” combined
LogFormat “%h %l %u %t \\”%r\\” %>s %b” common
LogFormat “%{Referer}i -> %U” referer
LogFormat “%{User-agent}i” agent
CustomLog /usr/local/apache/logs/access_log common
ServerSignature On
# > AddType text/html .ahtml
# > EBCDICConvert Off=InOut .ahtml
#
# EBCDICConvertByType On=InOut text/* message/* multipart/*
# EBCDICConvertByType On=In application/x-www-form-urlencoded
# EBCDICConvertByType On=InOut application/postscript model/vrml
# EBCDICConvertByType Off=InOut */*
<IfModule mod_alias.c>
Alias /icons/ “/usr/local/apache/icons/”
<Directory “/usr/local/apache/icons”>
Options Indexes MultiViews
AllowOverride None
Order allow,deny
Allow from all
</Directory>
Alias /manual/ “/usr/local/apache/htdocs/manual/”
<Directory “/usr/local/apache/htdocs/manual”>
Options Indexes FollowSymlinks MultiViews
AllowOverride None
Order allow,deny
Allow from all
</Directory>
ScriptAlias /cgi-bin/ “/usr/local/apache/cgi-bin/”
<Directory “/usr/local/apache/cgi-bin”>
AllowOverride None
Options None
Order allow,deny
Allow from all
</Directory>
</IfModule>
<IfModule mod_autoindex.c>
IndexOptions FancyIndexing
AddIconByEncoding (CMP,/icons/compressed.gif) x-compress x-gzip
AddIconByType (TXT,/icons/text.gif) text/*
AddIconByType (IMG,/icons/image2.gif) image/*
AddIconByType (SND,/icons/sound2.gif) audio/*
AddIconByType (VID,/icons/movie.gif) video/*
AddIcon /icons/binary.gif .bin .exe
AddIcon /icons/binhex.gif .hqx
AddIcon /icons/tar.gif .tar
AddIcon /icons/world2.gif .wrl .wrl.gz .vrml .vrm .iv
AddIcon /icons/compressed.gif .Z .z .tgz .gz .zip
AddIcon /icons/a.gif .ps .ai .eps
AddIcon /icons/layout.gif .html .shtml .htm .pdf
AddIcon /icons/text.gif .txt
AddIcon /icons/c.gif .c
AddIcon /icons/p.gif .pl .py
AddIcon /icons/f.gif .for
AddIcon /icons/dvi.gif .dvi
AddIcon /icons/uuencoded.gif .uu
AddIcon /icons/script.gif .conf .sh .shar .csh .ksh .tcl
AddIcon /icons/tex.gif .tex
AddIcon /icons/bomb.gif core
AddIcon /icons/back.gif ..
AddIcon /icons/hand.right.gif README
AddIcon /icons/folder.gif ^^DIRECTORY^^
AddIcon /icons/blank.gif ^^BLANKICON^^
DefaultIcon /icons/unknown.gif
#AddDescription “GZIP compressed document” .gz
#AddDescription “tar archive” .tar
#AddDescription “GZIP compressed tar archive” .tgz
ReadmeName README
HeaderName HEADER
IndexIgnore .??* *~ *# HEADER* README* RCS CVS *,v *,t
</IfModule>
<IfModule mod_mime.c>
AddLanguage da .dk
AddLanguage nl .nl
AddLanguage en .en
AddLanguage et .ee
AddLanguage fr .fr
AddLanguage de .de
AddLanguage el .el
AddLanguage he .he
AddCharset ISO-8859-8 .iso8859-8
AddLanguage it .it
AddLanguage ja .ja
AddCharset ISO-2022-JP .jis
AddLanguage kr .kr
AddCharset ISO-2022-KR .iso-kr
AddLanguage nn .nn
AddLanguage no .no
AddLanguage pl .po
AddCharset ISO-8859-2 .iso-pl
AddLanguage pt .pt
AddLanguage pt-br .pt-br
AddLanguage ltz .lu
AddLanguage ca .ca
AddLanguage es .es
AddLanguage sv .sv
AddLanguage cs .cz .cs
AddLanguage ru .ru
AddLanguage zh-TW .zh-tw
AddCharset Big5 .Big5 .big5
AddCharset WINDOWS-1251 .cp-1251
AddCharset CP866 .cp866
AddCharset ISO-8859-5 .iso-ru
AddCharset KOI8-R .koi8-r
AddCharset UCS-2 .ucs2
AddCharset UCS-4 .ucs4
AddCharset UTF-8 .utf8
<IfModule mod_negotiation.c>
LanguagePriority kr en da nl et fr de el it ja no pl pt pt-br ru ltz ca es sv tw
</IfModule>
AddType application/x-tar .tgz
AddEncoding x-compress .Z
AddEncoding x-gzip .gz .tgz
#AddType application/x-compress .Z
#AddType application/x-gzip .gz .tgz
AddType application/x-httpd-php .html .php3 .php4 .inc .phtml .php .ph .jsp .xtm
AddType application/x-httpd-php-source .phps
AddHandler cgi-script .cgi
#AddType text/html .shtml
#AddHandler server-parsed .shtml
#AddHandler send-as-is asis
#AddHandler imap-file map
#AddHandler type-map var
</IfModule>
#MetaDir .web
#MetaSuffix .meta
# Customizable error response (Apache style)
# these come in three flavors
#
# 1) plain text
#ErrorDocument 500 “The server made a boo boo.
# n.b. the single leading (“) marks it as text, it does not get output
#
# 2) local redirects
#ErrorDocument 404 /missing.html
# to redirect to local URL /missing.html
#ErrorDocument 404 /cgi-bin/missing_handler.pl
# N.B.: You can redirect to a script or a document using server-side-includes.
#
# 3) external redirects
#ErrorDocument 402 http://www.example.com/subscription_info.html
# N.B.: Many of the environment variables associated with the original
# request will *not* be available to such a script.
#
# Customize behaviour based on the browser
#
<IfModule mod_setenvif.c>
BrowserMatch “Mozilla/2” nokeepalive
BrowserMatch “MSIE 4\\.0b2;” nokeepalive downgrade-1.0 force-response-1.0
BrowserMatch “RealPlayer 4\\.0” force-response-1.0
BrowserMatch “Java/1\\.0” force-response-1.0
BrowserMatch “JDK/1\\.0” force-response-1.0
BrowserMatch “Webzip” go_out
BrowserMatch “WebZip” go_out
BrowserMatch “Teleport” go_out
BrowserMatch “GetRight” go_out
BrowserMatch “Wget” go_out
</IfModule>
#<Location /server-status>
# SetHandler server-status
# Order deny,allow
# Deny from all
# Allow from .example.com
#</Location>
# Allow remote server configuration reports, with the URL of
# http://servername/server-info (requires that mod_info.c be loaded).
# Change the “.example.com” to match your domain to enable.
#
#<Location /server-info>
# SetHandler server-info
# Order deny,allow
# Deny from all
# Allow from .example.com
#</Location>
# MOD_JK
<IfModule mod_jk.c>
JkWorkersFile /usr/local/tomcat/conf/workers.properies
JkLogFile /usr/local/tomcat/logs/jk.log
JkLogLevel info
</IfModule>
NameVirtualHost 211.238.41.180
<VirtualHost 211.238.41.180>
ServerAdmin alang@syszone.co.kr
DocumentRoot /home/syszone/www
ServerName syszone.co.kr
ServerAlias syszone.co.kr www.syszone.co.kr
JkMount /*.jsp ajp13
JkMount /webapps/* ajp13
JkMount /ROOT/* ajp13
</VirtualHost>
————————————————————————-
5.10 Tomcat 설정
vi /usr/local/tomcat/conf/workers.properies
————————————————————————-
workers.tomcat_home=/usr/local/tomcat
workers.java_home=/usr/java/java
worker.list=ajp12, ajp13
worker.ajp13.port=8009
worker.ajp13.host=localhost
worker.ajp13.type=ajp13
————————————————————————-
5.11 Tomcat 과 Apache 연동 및 가상 호스트 설정
vi /usr/local/tomcat/conf/server.xml
————————————————————————-
.
.
</Host>
<Host name=”syszone.co.kr”>
<Context path=”” docBase=”/home/www/www” reloadable=”true”/>
<Alias>www.syszone.co.kr</Alias>
</Host>
</Engine>
</Service>
</Server>
————————————————————————–
/usr/local/apache/bin/apachectl restart
/usr/local/tomcat/bin/startup.sh
// 확인 //
vi /home/syszone/www/phpinfo.php
————————————————————————–
<?
phpinfo ();
?>
————————————————————————–
vi /home/syszone/www/hello.jsp
————————————————————————–
<%
out.println(“Hello, JSP”);
%>
————————————————————————–
http://www.syszone.co.kr/phpinfo.php
http://www.syszone.co.kr/hello.jsp
http://211.238.41.180:8080
이것으로 클루닉스 기술부 2차 세미나를 마치겠습니다.