웹호스팅용 리눅스 서버 셋팅

by 조쉬 posted Feb 27, 2014
?

단축키

Prev이전 문서

Next다음 문서

ESC닫기

크게 작게 위로 아래로 댓글로 가기 인쇄
호스팅사용자를 위한 서버셋팅  
* 신규 호스팅가입자 서버셋팅 개론
호스팅사용자가 새로 가입하였을 때에 리눅스서버에서 셋팅해야하는 내용들과 절차들을 살펴보고 실제로 리눅스서버에서 셋팅해 보도록 하겠다. 먼저 한명의 호스팅사용자를 위한 서버셋팅리스트이다.
 
- 사용자 ID, 패스워드 생성
- 사용자 호스팅용 홈디렉토리구성하기
- DNS에 사용자도메인 설정하기
- 아파치에 가상호스트 설정하기
- 일hit 수와 일트랙픽량 제한 설정하기
- 메일사용을 위한 메일설정하기
- 데이터베이스 사용을 위한 MYSQL 설정하기
- 웹로그분석서비스를 위한 webalizer 설정하기
- 디스크사용량 제한을 위한 Quota 설정하기
- 가상 FTP 호스팅을 위한 proftpd의 가상호스트 설정하기
- 아파치, FTP, MYSQL, DNS, 메일서비스 재시작하기
 
* 사용자 ID, 패스워드 생성(1단계)
호스팅 사용자의 서버셋팅작업을 위하여 가장 먼저해야 하는 것이 바로 사용자의 계정생성과 패스워드 생성작업이다. 먼저 계정을 생성해 보겠다. 아래의 예는 bible이라는 사용자의 계정을 useradd 명령어로 생성하고 passwd 명령어로 bible 사용자의 패스워드를 설정한 것이다.
[root@inter-devel home]# useradd bible
[root@inter-devel home]#
[root@inter-devel home]# passwd bible
Changing password for user bible.
New UNIX password:
Retype new UNIX password:
passwd: all authentication tokens updated successfully.
[root@inter-devel home]#

위의 작업을 할 때에 대부분의 사용자들은 useradd명령어에 대한 다양한 옵션을 사용하여 홈디렉토리와 사용할 쉘종류, 패스워드등을 한번에 생성하곤 한다.
자, 이렇게 생성하고 나면 bible 이라는 사용자의 계정정보와 그룹정보가 /etc/passwd 파일과 /etc/group파일에 각각 생성이 된다. 그리고 /etc/shadow파일에는 bible 사용자의 패스워드와 aging정보가 생성된다. 그리고 가장 중요한 /home/bible이라는 홈디렉토리가 생성이 되며 이 홈디렉토리내에는 /etc/skel 디렉토리내에 있는 초기환경파일들이 모두 복사되어 들어가 있다. 이는 "ls -al /home/bible"을 실행해 보면 알 수 있다. 이뿐아니라 /var/spool/mail/bible이라는 메일파일이 생성된다.
 
* 사용자 호스팅용 홈디렉토리구성하기(2단계)
이제 bible사용자의 홈디렉토리를 구성할 차례이다. 일반적인 사용자라면 useradd명령어로 생성되는 /home/bible이라는 일반적인 홈디렉토리만으로도 충분하겠지만 호스팅사용자는 좀 더 다양한 디렉토리를 필요로 한다. 먼저, 다음을 보기 바란다.
[root@inter-devel ~]# mkdir /home/bible/www
[root@inter-devel ~]# mkdir /home/bible/www_log
[root@inter-devel ~]# mkdir /home/bible/ftp
[root@inter-devel ~]# mkdir /home/bible/ftp_log
[root@inter-devel ~]# mkdir /home/bible/www/weblog
[root@inter-devel ~]#
위의 예는 /home/bible디렉토리이하에 필요한 몇 개의 디렉토리를 mkdir로 생성한 것이다. 즉, 위에서 생성한 디렉토리들의 의미는 다음과 같다.
 
/home/bibile/www
index.html파일을 포함한 www.linuxbible.co.kr 사이트의 홈페이지파일들이 들어갈 위치
 
/home/bible/www_log
access_log 웹로그파일과 error_log 에러로그가 들어갈 위치
 
/home/bible/ftp
ftp.linuxbible.co.kr 가상 FTP사이트의 홈
 
/home/bible/ftp_log
ftp.linuxbible.co.kr 가상 FTP사이트의 로그디렉토리
 
/home/bible/www/weblog
www.linuxbible.co.kr 사이트의 웹로그분석 결과저장 위치
 
그리고 이번에는 방금 생성한 디렉토리들에 대한 퍼미션과 권한 설정작업을 한 것이다.
[root@inter-devel ~]# cp index.html /home/bible/www/
[root@inter-devel ~]#
[root@inter-devel ~]# chmod 701 /home/bible
[root@inter-devel ~]#
[root@inter-devel ~]# chown -R bible:bible /home/bible
[root@inter-devel ~]#

 
cp index.html /home/bible/www/
www.linuxbible.co.kr 사이트의 초기 로딩페이지 파일을 /home/bible/www/ 디렉토리로 복사한 것이다. 이 파일에는 호스팅업체에서 호스팅사용자에게 알리는 호스팅서비스 이용안내문등의 내용이 저장되어 있다. 참고로 여기서 생성한 www라는 디렉토리는 많은 분들이 public_html이라는 이름으로 사용하고 있다. 이 이름을 어떤 이름을 사용하느냐는 전적으로 관리자의 선택이다.
 
chmod 701 /home/bible
useradd로 새로운 사용자를 생성하였을 때에 /home/bible 의 초기퍼미션은 700이다. 이렇게 설정되어 있다면 아파치데몬소유주인 nobody가 이 디렉토리로 접근하지 못한다. 따라서 접근이 가능한 가장 최소한의 퍼미션인 701을 설정한 것이다.
 
chown -R bible:bible /home/bible 이 작업은 지금까지 생성한 디렉토리 및 파일들이 모두 root권한으로 생성되었기 때문에 /home/bible 디렉토리이하의 모든 파일들과 디렉토리들에 대한 소유자를 bible로 소유그룹을 bible로 한 것이다.
 
* DNS에 사용자도메인 설정하기(3단계)
이번에는 사용자의 도메인을 설정해 보도록 하겠다. DNS에서 설정해야할 내용은 /etc/named.conf파일에 zone구문설정과 /var/named 디렉토리에 zone파일을 생성하는 두가지 작업이다. 먼저 /etc/named.conf파일에 linuxbible.co.kr 도메인에 대한 zone구문을 생성해 보도록 하겠다.
 
--- 추후 정리
 
* 아파치에 가상호스트 설정하기(4단계)
이번에는 아파치의 가상호스트 설정을 해보도록 하겠다. 먼저 /usr/local/apache2/conf 디렉토리에 있는 httpd.conf 파일을 vi로 오픈한다. 그리고 httpd.conf 파일의 맨 마지막부분에 있는 가상호스트 설정부분에 다음과 같은 linuxbible.co.kr 도메인에 대한 가상호스트를 설정한다.
<VirtualHost 192.168.0.202>
        ServerAdmin webmaster@linuxbible.co.kr
        DocumentRoot "/home/bible/www"       
        ServerName linuxbible.co.kr
        ServerAlias www.linuxbible.co.kr
        ErrorLog /home/bible/www_log/error_log
        CustomLog /home/bible/www_log/access_log
        Alias /bible/  "/home/bible/www"
        <Directory /home/bible/www>
            Options    ExecCGI
            AllowOverride AuthConfig
        </Directory>
</VirtualHost>
위의 설정에 대한 자세한 설명은 가상호스트 설정법 설명을 참조하기 바란다.
 
* 일hit 수와 일트랙픽량 제한 설정하기(5단계)
이번에는 이 홈페이지의 일hit수와 일트래픽을 제한하기 위한 설정이다. 이 설정을 하기 위해서는 APACHE에 mod_throttle모듈과 mod_bandwidth모듈이 설치되어 있어야 한다.
그럼, 위에서 httpd.conf파일내에 설정하였던 가상호스트의 설정을 다음과 같이 수정하였다.
<VirtualHost 192.168.0.202>
        ServerAdmin webmaster@linuxbible.co.kr
        DocumentRoot "/home/bible/www"       
        ServerName linuxbible.co.kr
        ServerAlias www.linuxbible.co.kr
        ErrorLog /home/bible/www_log/error_log
        CustomLog /home/bible/www_log/access_log
        ThrottlePolicy Volume  2048M 1d
        ThrottlePolicy Request 20000 1d
        Alias /bible/  "/home/bible/www"
        <Directory /home/bible/www>
            Options    ExecCGI
            AllowOverride AuthConfig
        </Directory>
</VirtualHost>

즉, 다음 두행을 추가설정한 것이다.
 
ThrottlePolicy Volume  2048M 1d
ThrottlePolicy Request 20000 1d
이 설정의 의미는 이 홈페이지의 1일트래픽을 2048M 즉, 2GB로 제한하고 1일 hit수를 20000으로 제한한다는 설정이다.
 
* 메일사용을 위한 메일설정하기(6단계)
 
--- 추후 정리
 
* 데이터베이스 사용을 위한 MYSQL 설정하기(7단계)
다음은 bible사용자의 MYSQL데이터베이스 사용을 위한 MYSQL설정내용이다. 설정하는 방법에는 여러가지가 있지만 가장 편리하다고 생각되는 방법으로 설정해 보도록 하겠다. 다음과 같은 mysqluser.sql 파일을 생성한다. 보시다시피 이 파일에는 bible이라는 MYSQL사용자를 생성하기 위한 SQL문이 3개 들어가 있다.
[root@inter-devel bin]# cat mysqluser.sql
create database bibile;
insert into db
values('localhost','bible','bible','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y');
insert into user
values ('localhost','bible',password,'88888888'),'N','N','N','N','N','N','N','N','N','N','N',
'N','N','N','N','N','N','N','N','N','N',1,'','','','','','');
[root@inter-devel bin]#

 
위의 SQL문들을 간단히 설명하면 다음과 같다.
 
create database bibile;
bible이라는 새로운 데이터베이스를 생성하는 SQL문이다.
 
insert into db
values('localhost','bible','bible','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y');
MYSQL의 mysql이라는 관리데이터베이스내의 db테이블에 bible라는 새로운 데이터베이스의 생성과 소유자 및 권한을 설정하는 SQL문이다.
 
insert into user
values('localhost','bible',password,'88888888'),'N','N','N','N','N','N','N','N','N','N','N','N','N',
'N','N','N','N','N','N','N','N',1,'','','','','','');
MYSQL의 mysql이라는 관리데이터베이스의 user테이블에 bible이라는 새로운 사용자와 88888888 패스워드, 그리고 이 사용자가 사용할 각 권한들을 설정하는 SQL문이다.
 
그리고 이렇게 생성한 mysqluser.sql파일을 다음과 같이 실행한다. mysqluser.sql파일과 아래 명령어를 실행하는 위치는 모두 /usr/local/mysql/bin/이어야 한다.
[root@inter-devel bin]# pwd
/usr/local/mysql/bin
[root@inter-devel bin]# 
[root@inter-devel bin]# ./mysql -u root -p mysql < ./mysqluser.sql
Enter password: ********
[root@inter-devel bin]# 

위의 실행으로 이제 bible이라는 사용자는 MYSQL데이터베이스를 사용할 수 있게 된다.
 
* 웹로그분석서비스를 위한 webalizer 설정하기
이번에는 linuxbible.co.kr홈페이지의 웹로그분석 서비스를 제공하기 위한 webalizer설정내용이다. 이 설정은 webalizer가 이미 설치되어 있다는 것을 전제로 한다. 먼저 아래와 같이 /etc/webalizer.conf.sample파일을 /usr/local/webalizer/conf디렉토리로 linuxbible.co.kr.conf라는 파일명으로 복사한다.
 
[root@inter-devel conf]# cp /etc/webalizer.conf.sample linuxbible.co.kr.conf

 
위의 파일은 linuxbible.co.kr홈페이지의 웹로그분석을 위한 설정파일이다. 그리고 이번에는 이 파일을 vi로 열어서 다음 5가지 항목의 값을 다음과 같이 변경해 준다.
 
LogFile        /home/bible/www_log/access_log

OutputDir      /home/bible/www/weblog

HistoryName  linuxbible.com

ReportTitle    LINUXBIBLE.CO.KR WebSite

HostName     www.linuxbible.co.kr
 
복사된 linuxbible.co.kr.conf파일의 내용을 실제로 보면 굉장히 많다. 이 내용중 꼭 수정해 주어야하는 부분은 위의 5가지 항목이므로 이 항목의 값을 위와 같이 설정해 준다. 위의 항목에서 LogFIle은 linuxbible.co.kr 웹사이트의 웹로그파일인 access_log파일이 존재하는 위치를 지정한 것이며 OutputDir은 웹로그분석결과가 저장될 위치이다.
 
* 디스크사용량 제한을 위한 Quota 설정하기
이번에는 이 사용자의 디스크사용량을 제한하기 위한 쿼타(QUOTA)설정이다. 쿼타를 적용하기 위해서는 시스템에 이미 쿼타관련 설정이 있어야 한다. 여기에서는 이미 시스템에서 쿼타사용설정이 되어 있다는 것을 전제로 설명하겠다.
 
사요자의 쿼타설정명령어인 edquota를 이용하여 "edquota -u bible"을 실행한다.

[root@inter-devel root]# edquota -u bible
 
Disk quotas for user bible (uid 600):
   FIlesystem          block            soft           hard        inodes        soft     hard
   /dev/sda2           1200          307200        358400             34           0           0


위의 설정은 이 사용자의 쿼타설정 내용으로서 soft값으로 307200을 설정하였고 hard값으로 358400을 설정하였다.
 
* 가상 FTP 호스팅을 위한 proftpd의 가상호스트 설정하기
이번에는 bible사용자의 가상FTP사이트인 ftp.linuxbible.co.kr의 proftpd설정을 해보도록 하겠다. 이 설정을 위해서는 proftpd가 이미 설치되어 있어야 한다.
여기에서는 ftp.linuxbible.co.kr 에 대한 가상FTP사이트 설정을 하기 위하여 아래와 같은 설정을 /usr/local/proftpd/etc/proftpd.conf 파일에 한 것이다.

<VirtualHost ftp.linuxbible.co.kr>
        ServerAdmin           webmaster@linuxbible.co.kr
        ServerName           "ftp.linuxbible.co.kr FTP Server"
        Port                      40001
        TransferLog           /home/bible/ftp_log/xferlog
        MaxClients           10
        MaxClientPerHost   3
</VirtualHost>


위의 <VirtualHost>~</VirtualHost> 설정내의 <Anonymous>~</Anonymous>설정을 별도로 추가할 수 있다.
 
* 아파치, FTP, MYSQL, DNS, 메일서비스 재시작하기
이제 설정한 모든 내용을 적용하기 위하여 다음과 같이 각 어플리케이션들을 재시작해주면 된다.
 
먼저 APACHE 재시작이다.

[root@inter-devel root]#/usr/local/apache2/bin/apachectl restart


 
그리고 다음은 MYSQL 재시작이다. mysqladmin관리유틸리티로 재시작한 것이다.

[root@inter-devel root]#/usr/local/mysql/bin/mysqladmin -u root -p reload
Enter password:
[root@inter-devel root]#


 
그리고, 다음은 proftpd 재시작이다. Proftpd의 PID를 찾아서 kill 시키고 다시 실행한 것이다.

[root@inter-devel root]#ps -ef | grep proftpd
nobody    1658        1     0  18:42   ?          00:00:00  [proftpd]
root         1907    1835    8  21:10    pts/10  00:00:00   grep proftpd
[root@inter-devel root]#
[root@inter-devel root]#kill -9 1658
[root@inter-devel root]#
[root@inter-devel root]#/usr/local/proftpd/sbin/proftpd
[root@inter-devel root]#
[root@inter-devel root]#ps -ef | grep proftpd
nobody    1909        1     1  21:10   ?          00:00:00  [proftpd] root         1911    1835    0  21:10    pts/0   00:00:00   grep proftpd
[root@inter-devel root]#


 
그리고, 다음은 sendmail 재시작이다.

[root@inter-devel root]#/etc/rc.d/init.d/sendmail restart
Shutting down sendmail : [  OK ]
Shutting down sm-client : [  OK ]
Starting sendmail : [  OK ]
Starting sm-client : [  OK ]
[root@inter-devel root]#


 
그리고, 다음은 DNS의 named 를 재시작한다.

[root@inter-devel root]#/etc/rc.d/init.d/named restart
Stopping named : [  OK ]
Starting named : [  OK ]


 
 

덧글 쓰기 엮인글 공감하기

iptables 한국 IP 만 오픈 방법/ NO 커널컴파일 Linux 삽질

2010/03/17 19:00


복사 http://blog.naver.com/nforce7050/140103321553

전용뷰어 보기


저번에는 중국 ip만 차단하는 방법을 알아봐따...이번엔 대한민국 ip 만 열어주고 외국ip는 모조리 막아보겠다.
 
우선 아래 사이트에가서 최신 ip대역 db를 받는다. 아래 사이트는 ip 자료가 자주 업데이트됩니다. 한번씩 업뎃 해주세용.
국가별 최신 IP대역 DB 받는 곳 :
http://geolite.maxmind.com/download/geoip/database/
 
GeoIPCountryCSV.zip  파일을 받아서
 
/root밑에 다운받는다 그리고 압축을 푼다.
 
압축을 풀면 /root/GeoIPCountryWhois.csv    파일이 보인다. 여기까지 확인.
 
그리고 아래파일을 생성한다.
 
# vi /root/only-Korea-IP-Allow.sh
 
-------------------------------------------------------------------------------------
#!/bin/bash
DATA=/root/GeoIPCountryWhois.csv
IPT=/sbin/iptables

for IPRANGE in `egrep "Korea" $DATA | cut -d, -f1,2 | sed -e 's/"//g' | sed -e 's/,/-/g'`
do
        $IPT -A INPUT -p all -m iprange --src-range $IPRANGE -j ACCEPT
done

 
/sbin/iptables -P INPUT DROP
------------------------------------------------------------------------------------
 
스크립트 내용은 한국 ip대역을 모조리 열어주고 그리고 마지막에 INPUT 정책을 막아주는거다.
 
그리고 실행권한을 준다.
# chmod 700 /root/only-Korea-IP-Allow.sh
 
이 스크립트를 실행하기전에 반드시 iptables -F 를 해서 iptables 를 초기화한다.
 
그리고나서
 
# sh only-Korea-IP-Allow.sh 를 실행한다.
 
 
그리고나서 iptables -L 를 실행하면 상태가 보일것이다.
 
추가로 열어줄 외국아이피가있으면   스크립트에서 
/sbin/iptables -P INPUT DROP 전에 ACCEPT로 넣어주면된다.
 
 
혹시나 해서 적습니다. 위에 iptables 설정 초기화 하실때
 
1.  iptables -P INPUT ACCEPT
2.  iptables -F
 
원격에서 iptables -F 만 하시다가 접속 팅깁니다.  IDC들어가야 할지도...ㅋㅋㅋ
 
또 하나 참고로 yum -y update 할때 당연히 업데이트 안됩니다..
외국ip 모조리 막혀서 외국ip 작업할 일 있을때 만 열어주고 작업후 다시 닫아주세용.ㅋㅋㅋ
 
서버 최적화 설정후 이걸 적용해주시면 아주 유용하겠죠...