[강좌][웹서버] 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차 세미나를 마치겠습니다.

서진우

슈퍼컴퓨팅 전문 기업 클루닉스/ 상무(기술이사)/ 정보시스템감리사/ 시스존 블로그 운영자

You may also like...

익명 에 응답 남기기 응답 취소