이 글을 쓰는 이유

지금은 아니지만, 학교에 있을 때 1년정도 운영했던 호스팅 서버가 있다. 처음에는 동아리(http://linux.hslilo.co.kr) 홍보차원에서 시작했는데, 지금은 거의 계정 사용자만 70명이 가까이 된다. 중간 중간에 커널 버그때문에 2번정도(?) 갈아 엎은 적이 있다. 아직까지 큰 문제는 발생하지 않았지만, 언젠가 문제가 생겼을 때 참고하면 필요할 것 같다.

요구되는 기능들

기본적으로 요구되는 기능은 다음과 같다.

  1. web service (apache)
  2. db service (mysql)
  3. cgi service (php)
  4. ftp service (proftpd)
  5. user managment (quota)
  6. system security
  7. virtual host service
  8. 그외..(더 추가될 수 있다.)

우선 서버의 사양은 다음과 같다.

CPU Pentium III 550MHZ
RAM 256M
HDD 8.4G
OS Gentoo Linux 1.4

OS를 젠투로 선택한 것은 유지, 보수의 편리함과 포테이지가 가진 유연함 때문이다. 전까지만 해도 레드햇 9를 사용했었다. 이제 본격적으로 호스팅 서버를 구축해보자!!
일단 전에 있던 Data를 백업해야 한다. 하드 전체를 모두 백업하면 좋겠지만, 그렇지 못하다면,

  1. 사용자 계정디렉토리 (/home)
  2. 웹서버 디렉토리 (/usr/local/apache)
  3. 디비 디렉토리 (/usr/local/mysql)

백업하기 바란다. 제대로 백업을 받았다면, 미련없이 하드디스크를 포맷하도록 하자!! 위에서 말한 바와 같이 여기서는 젠투를 이용할 것이다. 젠투 리눅스 설치에 대한 내용은 여기서 다루지 않는다. 관련 문서를 참고 하기 바란다. 참고로 호스팅 서버이므로 X관련 프로그램들은 설치하지 않는다. 최대한 필요한 것들만 설치하도록 한다.
젠투 설치가 성공적으로 끝났다면, 본격적으로 호스팅 서버 구축에 들어가보자!!

Web service (apache)

기본적인 웹 서비스를 위해 APM을 설치한다. 절차는 아래와 같다. 다시 한번 말하지만, 여기서는 젠투 리눅스를 기준으로 설명한다.

#emerge sync
#emerge apache

나의 경우 apache-2.0.48-r1 이 설치되었다. apache2.x 에서는 기존의 1.x 와 약간 달라졌다. 다음은 바뀐 각각 설정파일들의 위치와 파일명들을 정리했다.

경로 파일명
/etc/apache2 apache의 핵심 디렉토리이다.
/etc/apache2/conf 모든 설정 파일이 담겨 있다.
apache2.conf 1.x 에서 httpd.conf 파일이다. 파일명이 바뀌었다. 하지만 내용은 동일하다.
/var/www/localhost/htdocs 웹 페이지 파일들이 들어 있는 파일이다. 1.x 과 파일경로가 달라졌다.

설치가 완료가 되었으면, 실행하기 전에 수정해주어야 할 것이 있다.

#vi /etc/apache2/conf/apache2.conf

아래에서 #(주석)을 제거하고, 서버의 호스트 네임을 적어준다.

### You really shouldn't change these settings unless you're a guru
###
ServerRoot /etc/apache2
ServerName fat81            # 수정한다.
#LockFile /etc/apache2/apache2.lock
PidFile /var/run/apache2.pid
ErrorLog logs/error_log
LogLevel warn
DocumentRoot /var/www/localhost/htdocs

이제 실행을 해보자!!

#apache2
#ps -ax

ps 명령으로 데몬이 제대로 실행하고 있는지 확인하고, 웹 브라우저로 확인해보자!!
아파치 기본 페이지가 뜬다면, 우선 제대로 실행되고 있는 것이다.

DB service (mysql)

설치를 하기전에 ebulid 파일을 설정해주어야 한다.

#cd /usr/portage/dev-db/mysql
#vi mysql-4.0.18.ebulid

나의 경우는 mysql-4.0.18 을 설치할 것이다. 각자 해당 버전의 ebuild 파일을 수정해주면 된다.

 --libexecdir=/usr/sbin \
        --sysconfdir=/etc/mysql \
        --localstatedir=/var/lib/mysql \
        --with-raid \
        --with-low-memory \
        --enable-assembler \
        --with-charset=euc_kr \     # 수정한 부분
        --enable-local-infile \
        --with-mysqld-user=mysql \
        --with-extra-charsets=all \
         \
        --with-client-ldflags=-lstdc++ \
        --with-comment="Gentoo Linux ${PF}" \
        --with-unix-socket-path=/var/run/mysqld/mysqld.sock \
        --with-embedded-server \

수정했으면, 이제 설치해보자!

#emerge mysql
#mysql_install_db
#mysqld_safe
#ps -ax
#mysql

mysqld 데몬이 제대로 실행되고 있는지 확인해보자. 확인 했으면, 이제 직접 접속을 해본다.

Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 1 to server version: 4.0.18
 
Type 'help;' or '\h' for help. Type '\c' to clear the buffer.
 
mysql>

위와 같은 화면이 나오면, mysql 설치는 무사히 마친 것이다. 다음은 각각의 mysql 설정 파일의 경로이다.

경로 파일명
/etc/mysql mysql의 설정 디렉토리이다.
my.cnf mysql 핵심 설정 파일이다.
/var/lib/mysql DB가 저장되는 디렉토리이다.

CGI service (php)

php를 설치하기전에 ebuild 파일을 수정해주어야 한다.

#vi /usr/portage/dev-php/mod_php/mod_php-4.3.4-r4.ebuild

나의 경우 mod_php-4.3.4-r4 설치할 것이다. 앞에서와 같이 각자 설치할 버전의 ebuild 파일을 수정하면 된다.

#use apache2 \
myconf="${myconf} --with-apxs${USE_APACHE2}=/usr/sbin/apxs${USE_APACHE2} --with-charset=euc_kr --with-gd --with-ttf"

수정 해주었으면, 설치해보자!

#emerge mod_php

설치가 완료되었으면,

#ebuild /var/db/pkg/dev-php/mod_php-4.3.4-r4/mod_php-4.3.4-r4.ebuild config
#vi /etc/conf.d/apache2

apache2 의 마지막에 다음을 추가해준다. 이미 있다면, 주석(#)을 제거해준다.

APACHE_OPTS="-D SSL -D PHP4"

이것으로 APM 연동에 대한 설정은 모두 끝났다. 이제 제대로 연동이 되는 지 확인해보는 일만 남았다.

#cd /var/www/localhost/htdocs
#vi index.php

간단히 테스트할 목적이므로 아래와 같이 .php 파일을 만든다.

<?phpinfo()?>

웹 브라우저를 이용해서 만든 파일을 불러 보자. 어떤가.. PHP의 환경 설정들이 몇 페이지에 걸쳐 나온다면, 제대로 연동이 된다고 봐도 된다. ^^;
이제 부팅할 때 자동으로 실행이 되도록 만들어 보자!

#rc-update add apache default 
#rc-update add mysql default

FTP service (proftpd)

따로 설정이 필요없이 바로 설치하면 된다.

#emerge proftpd

다음은 각 설정파일들의 경로이다.

경로 파일명
/etc/proftpd proftpd의 설정 디렉토리이다.
proftpd.conf proftpd의 설정 파일이다.
#proftpd
#ps -ax

위와 같이 실행해보고, 제대로 데몬이 떠 있는지 확인한다. 그리고 나서 localhost 로 접속해보자!

#ftp localhost

USER managment (quota)

쿼터는 각 사용자들의 용량을 제한하기 위해 꼭 필요하다. 우선 쿼터를 사용하기 전에 쿼터를 적용시킬 파일시스템을 정해야 한다. 여기서는 /home (XFS) 파티션을 적용한다.
그러므로 앞에서 젠투를 설치할때, /home 파티션을 따로 나누어야 하고, Format 시에 파일시스템을 XFS로 지정해야 한다. 또한 커널 컴파일시에 쿼터 옵션을 반드시 지정해서 커널에 포함시켜야 한다.
쿼터설정에 대한 내용은 관련 문서를 참고하기 바란다.

System security

여러가지 방법도 있고, 또한 여러가지 프로그램도 존재한다. 여기서는 다음의 보안 정책에 의거하여 구축할 것이다.

  1. 지정된 포트외의 포트로 접속을 시도하는 것에 대해서는 거부해 버리거나, 해당 IP를 차단 시킨다.
  2. 시스템 내부의 계정 사용자의 경우, 공격 가능성을 야기할 수 있는 것들을 사전에 차단 시킨다.(ex: gcc, system bug..)
#emerge openssh

보안이 약한 telnet 대신에 ssh를 사용해서 불필요한 스니핑으로부터 보호한다.

#emerge portsentry

이것은 특정한 포트로 접속을 시도하는 호스트를 자동으로 차단시켜주는 프로그램이다. 설치를 하면, /etc/portsentry 라는 디렉토리가 생기고 그 아래에 설정파일이 생긴다.
각각 2개의 파일이 있는 데, 모두 .sample 이라는 확장자를 달고 있는데, 이를 지우고, 각자 자신에 맞는 설정을 해주면 된다.

#portsentry -tcp

이런식으로 실행을 시킨다.

#emerge iptables

방화벽이라고 보면 될 거 같다. 설치 후에 커널 컴파일시 관련 옵션을 활성화 시켜야 한다.

VIRTUAL HOST service

이 서비스는 호스팅서버만의 세팅으로는 불가능하다. 네임서버의 뒷받침이 필요하다. 여기서 네임서버의 세팅 방법은 다루지 않는다. 이것에 대한 내용은 다른 문서를 통해서 따로 다루도록 하겠다. 그럼 네임서버에 대한 세팅이 정상적으로 마쳤다고 가정하고, 호스팅 서버에 대한 세팅을 들어가보도록 하자!

여기서는 하나의 시나리오로서 설명을 하겠다.

  1. 서비스 요청의 메일을 받는다. 이때 관리자는 일정한 양식의 신청서를 받고, 가입 승인여부를 판단한다.
  2. 가입 승인을 한다면, 신청양식의 신청ID와 비밀번호를 확인한다. (예를들어 여기서는 ID를 test PW를 abc 라고 하겠다)
  3. 관리자는 호스팅 서버의 시스템 계정을 만든다.

    #adduser -m test
    #passwd fat81
  4. 네임서버의 zone 파일에 신청양식에 적힌 주소를 등록시킨다. 그리고 나서, 데몬을 재시작해준다. 반드시 제대로 등록이 되었는지 확인한다.

    #vi /var/named/zone-*
    #/etc/rc.d/init.d/named restart
    #nslookup test.hslilo.co.kr
  5. mysql 에 디비 계정을 추가해준다. -p 옵션은 비밀번호를 묻게 하는 역할이다.

    #mysqladmin create test -p
    #mysql mysql -p
    mysql>GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP on test.* to test@localhost identified by 'abc';
    mysql>FLUSH privileges;
    mysql>quit;
  6. 이제는 웹 서버에 가상호스트 설정만 남았다.
  • computer/networking/호스팅서버_구축하기.txt
  • Last modified: 3 years ago
  • by likewind