개인 웹서버를 이미 운영중이거나 운영할 계획이 있는분들 중에 리눅스로 운영하시는 분도 있고

윈도우로 운영하는 분들도 있습니다. 리눅스로 APM서버 구축하기는 이미 알고있는 사람 입장에서

보면 참 쉽습니다. 리눅스를 다룰줄 아시는 분들이라면 물론 더욱 쉽겠죠. 그리고 리눅스로 운영하는

것이 보안상에도 좋고 관리성에 있어서도 윈도우보다 낫습니다. 하지만 이는 어디까지나 아는사람

얘기일뿐이고 적게는 수년 많게는 십수년간 윈도우에만 적응해온 사용자들에게 리눅스로 웹서버

구축도 하고 여러가지 관련 웹프로그램들을 운용하기란 쉬운일은 아닙니다. 그런 사용자들의 고충을

헤아려서인지 인터넷상엔 많은 윈도우용 APM패키지가 돌아다닙니다. 그중 업데이트가 잘되고

사용하기 편한 패키지로는 RWAPM과 Autoset인것 같습니다. APM_Setup은 아파치 1.x버전대에는

상당히 널리쓰였지만 최근에는 업데이트가 타패키지에 비해 적어서 많이 쓰진 않는듯 싶습니다.

그래도 http://apmsetup.com 에는 서버관리시 유용한 정보가 상당하니 관심있으신 분들은

들러보셨으면 하네요.. 어쨋든 저의경우 테스트 용으로 Autoset을 사용하고 있는데 RWAPM과의

차이는 매니저 프로그램을 통해 서버관리가 이뤄질수 있다는 편리함이 있다는 것입니다.

두 패키지 모두 쓰기편하지만 각종 패키지들이 업그레이드됐을경우 패키지 업데이트 전까지

하염없이 기다리는 분들이 계실텐데 그분들을 위해 약간의 팁을 써봅니다.

Autoset을 중점으로 업데이트 방법을 쓰겠습니다.

(Autoset 초기설치에 대한 자세한 내용은 http://cafe.naver.com/autoset 을 참고바랍니다.)

오토셋이 모두 설치된후에 디렉토리 구조를 보시면 Server 디렉토리내의 구조가 다음과 같습니다.

사용자 삽입 이미지


이곳이 Apache, MySQL,PHP가 모두 들어가있는곳으로 이 세가지를 업데이트 해보겠습니다.

기타 ZendOptimizer나 phpmyadmin같은 프로그램들도 비슷하지만 이 세가지만 정확히 쓰겠습니다.

http://www.moyiza.com 으로 접속해서 모이자APM 최신 버전을 다운로드 합니다. RWAPM에서

파일을 가져올수도 있지만 모이자 APM의 패키지 구조가 오토셋과 가장비슷합니다.

제 기억상 최근버전인 오토셋 4.3.1에는 SVN을 포함 아파치 2.2.x대의 서버가 포함된것으로 아는데

저같은 경우 매니저 프로그램만을 원해서 4.2.9버전을 사용하고 있습니다. 이버전은 2.0.x대의 아파치

서버가 들어가 있습니다. 만약 1.x대의 아파치 서버를 쓰시는 분들이 계신다면 설정파일등 상당히

많은 부분이 아파치 2.0이나 2.2대의 버전과 다르므로 꼼꼼히 체크해보고 업데이트 하셔야합니다.

개인적으로 오토셋 4.2.9 버전을 바탕으로 업데이트 하는것을 권장합니다.

어쨋든 받으셨다면 압축을 풀어줍니다.
사용자 삽입 이미지

모이자 APM의 Program 디렉토리를 보시면 이와같이 오토셋과 비슷한 구조를 가지고 있습니다.

이제 모이자 APM의 Apache2 디렉토리로 들어갑니다.

사용자 삽입 이미지
모이자APM - Apache2 서버 디렉토리 내용

사용자 삽입 이미지

오토셋APM - Apache2 서버 디렉토리 내용

우리는 오토셋을 기반으로 서버 프로그램들을 업그레이드 하는것이므로 오토셋의 conf폴더내의

내용들은 따로 백업을 해둡니다. conf파일에는 Apache서버의 각종 설정 내용들이 들어있는데

패키지를 만든 제작자마다 conf파일내용이 다를수 있습니다. 이를 제외하고 모이자APM의 Apache2

폴더를 오토셋의 Apache2 폴더로 모두 덮어씌웁니다. 꼼꼼하신분들은 bin,modules폴더등을 세심히

살펴보시고 하나하나씩 업데이트 하셔도 됩니다.

사용자 삽입 이미지

bin폴더를 보시면 apache.exe 파일이 있는데 원래 파일명은 httpd.exe입니다. 이를 apache.exe로

바꿔줍니다. 오토셋프로그램에서 서버시작은 apache.exe여야 가능하기 때문입니다. 운영에는

아무런 지장이 없습니다. 이로써 아파치 서버의 업데이트는 끝입니다. 다음은 PHP입니다.

사용자 삽입 이미지

오토셋의 PHP5 폴더구조

사용자 삽입 이미지

모이자 APM의 PHP5 폴더구조

모이자 APM의 PHP5폴더를 Autoset의 PHP5 폴더로 덮어씌우는데 PHP.INI파일은 반드시 백업후

덮어씌우시기 바랍니다. 아파치에서와 마찬가지로 환경설정 파일이 다를수있습니다. 또한 이전에

구버전APM(예: 아파치 1.3.x, PHP 4.x 패키지)의 경우 PHP4와 PHP5의 구조가 다르므로 기존의

php.ini파일내용을 잘확인하시고 PHP5로 새로 설치해주셔야 합니다. 모든파일 덮어씌우기를 통해

PHP5의 업데이트가 끝납니다. 다음은 MySQL입니다.

사용자 삽입 이미지

오토셋의 MySQL폴더구조

사용자 삽입 이미지
모이자 APM의 MySQL폴더구조

둘다 별차이 없는대신 여러개의 ini파일이 있는데 my.ini가 실제로 쓰이는 설정파일이고 대규모의

DB서버를 쓸것이냐 작은구조의 DB를 사용할것이냐에 따라 다른 파일들의 이름을 my.ini로 바꿔서

사용하실수 있습니다. 여기서도 위와 마찬가지로 기존의 my.ini파일을 백업시켜두고 기존에 MySQL

를 통해 테이블 작성등이 이뤄진 데이터가 있다면 MySQL폴더를 모두 백업시키고 작업진행하시길

바랍니다. 그런것이 없다면 여기서도 마찬가지로 my.ini를 제외한 모든파일을 덮어씌웁니다.

사용자 삽입 이미지

bin 폴더를 보시면 mysqld-nt.exe 파일이 있습니다. 이는 오토셋에서는 기본적으로 mysqld.exe로

 윈도우 서비스에 등록해서 사용할수 있게되있는데 차후 업데이트 용이성을 위해 mysqld-nt.exe

로 파일명을 바꿔줍니다. 이렇게 한뒤 오토셋이 설치된 메인 디렉토리로 이동합니다.

사용자 삽입 이미지

네개의 배치파일이 있는데 mysql_install,stop 파일을 수정해 줍니다. mysql_install과 uninstall은

윈도우에 서비스 등록 해제를 위해 사용됩니다. 작업전 mysql_uninstall.bat을 통해 기존에 등록된

MySQL서비스를 제거합니다. 이경우 위에서 고쳤던 mysqld-nt.exe 이름을 mysqld.exe로 원래대로

바꿔준뒤 서비스제거후 다시 mysqld-nt.exe로 바꿔줍니다. 그 후 메모장 등으로 파일을 열어봅니다.

사용자 삽입 이미지

위와같이 나오는데 mysqld라고 되있는 부분을 위와같이 mysqld-nt로 바꿔줍니다. 뒷부분

큰따옴표 안의 내용은 윈도우의 관리도구☞서비스에서 표시되는 이름부분이므로 아무렇게나

수정해주셔도 괜찮습니다만 이경우 mysql_start와 stop 배치파일 내용또한 바꿔줘야합니다.

사용자 삽입 이미지

uninstall 배치파일의 내용입니다. 위와 마찬가지로 mysqld 부분을 mysqld-nt로 바꿔줍니다.

이제 mysqld-install.bat을 실행해줍니다. 다음으로 윈도우의 제어판→관리도구→서비스로

들어가서 Autoset_MySQL을 더블클릭합니다.
사용자 삽입 이미지

서비스 재등록후 시작유형이 자동으로 되어있는데 이경우 시스템을 켤때마다 mysql 서비스가

자동으로 시작됩니다. 여기서는 오토셋이 실행될경우 mysql서비스가 실행되게 할것이므로 서비스를

중지시킨뒤 시작유형을 수동으로 바꿔주고 확인을 눌러줍니다. 이로써 Apache,PHP,MySQL의

업데이트가 끝납니다. 이제 오토셋을 실행시켜서 이상유무를 확인해봅니다. 모든 작업전에는

항시 모든 폴더들을 백업하고 작업하시길 바랍니다.
만약에 기존에 설정된것이 많이 있다면

반드시 확인해보고 업데이트를 진행하시기 바랍니다. 이 업데이트의 단점은 어떤 한 제작자가

만든 순수(?) 패키지가 아니므로 오작동을 할수있다는 것인데 제가 이제까지 써보면서 어떤 오류도

생긴적이 없습니다. 하지만 보장은 할수없다는것을 알아두시고 마지막으로 가장 중요한것은

이렇게 만들어진 패키지를 개인용도로만 사용하시기 바랍니다. 원래의 패키지가 설령 프리 라이센스

라고 하더라도 수정/재배포는 개발자의 의욕을 꺾는것은 물론이고 해서는 안될일입니다.

이 팁이 잘 모르시는 분들께 많은 도움이 됐으면 좋겠습니다.

(이글은 아파치 2.0.x버전대의 서버를 기준으로 설명하는 글입니다. 포함된 링크의 자료는 아파치

2.2.x 버전에서는 정상작동 하지 않고 또한 리눅스 아파치서버에서 작동하지 않습니다.)


아파치 서버를 한동안 운영하다보면 온갖 공격에 시달릴수 있는데 여기서 소개하는 mod_security

모듈은 buffer overflow공격,각종 SQL injection공격,HTTP posting의 악용을 방지해주는 아파치서버

방화벽 모듈이다. 얼마나 효용성있는지는 잘 모르겠지만 많이쓰이는 모듈이기 때문에 올려본다.

그리고 mod_bandwidth는 자신의 서버에서 클라이언트들이 자료를 받아갈때 전송 속도를 제한해

주는 모듈이다. 자신의 회선속도에 맞춰서 예를들어 1Mb의 크기가 넘는 자료에 대해서 속도를

200kb로 설정했다하면 클라이언트들은 서버내의 자료를 받을때 크기가 1Mb가 넘으면 최대 200kb

속도로만 자료를 받을수가 있다. 여기에 올린 모듈들은 RWapm에 있는 모듈을 빼온것이다.

(http://kldp.net/projects/rwapm/) 에서 RWapm을 받아서 APM패키지를 쓸수있고 최근

버전에서는 Dos,DDos 공격방어 모듈인 mod_evasive모듈이 추가되었다.

------------------------------------------------------------------------

1. mod_security 모듈 설치방법

 윈도우용 아파치서버에서 제대로된 모듈파일만 가지고 있다면 추가하는 방법은 매우 쉽다.

 일단 mod_security의 경우 아래의 링크에서 모듈을 다운받도록 한다.

 mod_security 1.8.7(win32) 다운로드

압축을 풀면 mod_security.so, security.conf 파일이 나오는데 각각 아파치가 설치된곳의 modules

폴더, conf 폴더에 복사해준다. 그뒤 security.conf 파일을 열어

SecFilter "/아파치가 설치된 경로"
SecFilter "/아파치가 설치된 경로/bin"

이부분을 각자의 환경에 맞춰 변경한다. 다음은 httpd.conf 파일을 열어 아래부분을 추가해준다.

# 보안설정 security_module
LoadModule security_module modules/mod_security.so
<IfModule mod_security.c>
Include conf/security.conf
</IfModule>


2. mod_bandwidth 모듈 설치방법

 위와 동일하게 아래의 링크에서 다운로드를 받아 modules 폴더에 압축을 풀어준다.

 mod_bandwidth 0.6(win32) 다운로드

그리고 httpd.conf파일을 열어 아래의 구문을 추가해준다.

# 대역폭 제한
LoadModule bw_module modules/mod_trs.dll
BandWidthModule On
LargeFileLimit * 1024  280000

LargeFileLimit 부분의 1024 280000가 의미하는것은 1Mb가 넘어가는 크기의 파일 전송시 280kb

의 속도로 전송속도를 제한하라는 뜻이다. 사용자의 환경에 맞춰 이부분을 수정해주면 되겠다.

모두 끝낸뒤 아파치를 재시작하고 만약 작동이 제대로 되지 않는다면 커맨드콘솔에서 apache -S

명령으로 httpd.conf 파일이 제대로 설정되어있는지 확인해본다. Syntax OK가 뜨면 이상없는것이다.

아파치 서버를 사용하다 보면 자료실 폴더등을 만들어 쓸수도 있는데 무단링크 방지도 해봐도

이리저리 편법을 사용해 자료만 외부에서 쏙 빼가는 경우가 많기 때문에 짜증나는 경우가 많다.

그리고 특정 폴더만 다른사람이 접근 불가능 하게 만들고 싶을 때가 있는데 그 방법에 대해 알아

보도록 하겠다.

1. 특정폴더에 나 자신만 접근하게 암호걸기

 일단 httpd.conf 파일을 수정해야한다. 특정폴더에만 인증 암호를 넣을것이므로 따로 아래와 같이

 구문을 추가하는것이 좋겠다.

<Directory "C:\암호파일을저장할 폴더">
 AllowOverride AuthConfig
 Order allow,deny
 Allow from all
</Directory>

그리고 혹시 # AccessFileName .htaccess 이부분에 '#'(주석)이 달려있다면 지워주면 된다.

수정,저장후에 메모장 같은 텍스트 편집기를 하나 실행해서 '.htaccess' 라는 파일을 하나 만든다.

여기서 '.' 은 숨김이라는 의미인데 어쨋든 만들고 나서 아래와 같이 붙혀넣고 사용자취향에 맞게

편집하도록 한다.

AuthName "인증창에 표시될 내용"
AuthType Basic
AuthUserFile C:/암호파일이 저장될폴더/.htpasswd
require user example

여기까지 마쳤다면 이제는 아파치 서버의 프로그램인 htpasswd 프로그램으로 암호파일을 만들어

줘야한다. 암호화 되서 저장되고 .htpasswd 파일을 따로 만드는 것이 아니다.

시작->실행-> cmd 입력-> 아래와 같이 입력한다.(물론 사용자의 아파치가 설치되있는폴더를 참고

로 입력한다..)

C:\apache\bin\htpasswd.exe -c c:\apache\htdocs\.htpasswd example


htpasswd.rar

Download binary


여기서 htpasswd 다음의 폴더명들은 '.htpasswd' 파일이 저장될곳을 지정해준곳이고 example은

위의 '.htaccess' 파일에서 지정해준 user 의 이름이다. 이렇게 입력,실행하면 지정할 암호를

물어오고 적당히 알아서 써주면 되겠다. 확인은 자신이 지정해놓은 폴더를 웹브라우저에서

입력해 보면 되겠다.

(인증 창 실행 성공의 예)

사용자 삽입 이미지



2. 그룹단위로 특정폴더 접속권한 설정

위에선 개인만 접속할수 있게 인증하는 암호설정에 대해서만 알아봤고 이번엔 맨위에서 언급한대로

특정 폴더에 여러 사용자가 제각각의 이름을 가지고 접속할수 있는 방법에 대해 알아보겠다.

위에서 '.htaccess' 파일 내부에 require user example 이 구문이 있었는데 사용자를 추가

하고 싶다면 require user example example2 example3 이런식으로 한칸씩 띄우고 저장

하면 된다. 그리고 그룹을 지정해서 접속하게 하고싶다면 아래와같이 파일을 변경하면 된다.

AuthName "인증창에 표시될 내용"
AuthType Basic
AuthUserFile C:/암호파일이 저장될폴더/.htpasswd
AuthGroupfile C:/암호파일이 저장될폴더/.group
require group admin


이제는 그룹을 설정해 줘야 하는데 '.group' 파일을 하나 만들고 아래의 예를 참고한다.

admin:parkdi webhdd

이구문의 뜻은 admin그룹속에 parkdi라는 유저와 webhdd 라는 유저를 묶는다는 것이다.

이렇게 하면 webhdd 라는 유저는 접속시에 맞는 암호를 입력하게되면 해당폴더에 접근이

가능하다. 물론 사용자가 많으면 이런식으로 관리하는것은 곤란하며 개인적으로는 큰용량 파일의

무단링크 방지를 위해 이런기능을 사용하는것은 괜찮은 방법일듯 싶다.

암호가 많이 알려지게 되면 그시기쯤에 암호를 바꿔버리면 되니까 그렇게 힘든일도 아닐것이라

생각된다.