mod_security를 통한 방화벽구축

Posted at 2008/04/05 20:18 // in Linux // by 엔신

wget http://www.modsecurity.org/download/modsecurity-apache_2.5.1.tar.gz

KrCERT 제공 공격 차단룰 를 참고로 conf파일에 인클루 시켜 룰을 설정한다.

 1. 컴파일시 필요한 패키지 설치

yum install httpd-devel pcre-devel libxml2-devel

2. mod_unique_id, (/etc/httpd/conf/httpd.conf)
LoadModule unique_id_module modules/mod_unique_id.so

3. 압축 풀기
tar xvfz modsecurity-apache_2.5.1.tar.gz

 4. compile(apache2/)
./configure

5. 설치 (mod_security2.so 모듈을 떨궈준다.)
make && make install


6.
mod_security 설치

LoadModule security2_module modules/mod_security2.so


 7. httpd 재시작

/etc/init.d/httpd restart

[출처] mod_security를 통한 방화벽구축|작성자 shumahe


/////////////////////////////////////////////////////
설치후에 mod_security 모듈을 httpd.conf 에서 불러들이도록 해야하며
불러들여서 사용하게 하면서 conf 설정 해야함
KrCERT 제공 공격 차단룰 을 반드시 참조하여 conf 설정 적용하고 공격차단 정책(룰)을 적용하여야 함
http://www.krcert.or.kr/firewall2/index3.jsp
공격 차단룰을 적용해야 되며 위 링크에 나와잇는 샘플을 이용하는 것이 좋음
샘플은 기본적으로 로그는 되나 차단안하고 허용하도록 되어 있음
SecDefaultAction "pass,log,phase:2,t:urlDecodeUni,t:htmlEntityDecode,t:lowercase"
위 부분에 pass 는 정책에 걸려도 허용한다는 것인데 deny 로 정책에 걸리면 차단하도록 해야됨

이올린에 북마크하기
2008/04/05 20:18 2008/04/05 20:18

[apache] 검색로봇 차단법

Posted at 2008/03/24 23:22 // in Linux // by 엔신
갑자기 특정한 IP 주소에서 짧은 시간에 많은 접속을 하여 시스템의 부하가 올라가 웹 접속 로그를 살펴보니 아래와 같이 이해할 수 없는 내용이 남는 경우가 있다.

211.51.63.4 - - [26/Sep/2001:22:19:42 +0900] "GET /robots.txt HTTP/1.0" 404 285
211.51.63.4 - - [26/Sep/2001:22:19:43 +0900] "GET /index.asp HTTP/1.0" 404 284
211.51.63.4 - - [26/Sep/2001:22:19:43 +0900] "GET /index.php HTTP/1.0" 404 284
211.51.63.4 - - [26/Sep/2001:22:19:43 +0900] "GET /index.php3 HTTP/1.0" 404 285
211.51.63.4 - - [26/Sep/2001:22:19:43 +0900] "GET /default.htm HTTP/1.0" 404 286
211.51.63.4 - - [26/Sep/2001:22:19:43 +0900] "GET /default.html HTTP/1.0" 404 287
211.51.63.4 - - [26/Sep/2001:22:19:43 +0900] "GET /default.asp HTTP/1.0" 404 286
211.51.63.4 - - [26/Sep/2001:22:19:43 +0900] "GET /default.php HTTP/1.0" 404 286
211.51.63.4 - - [26/Sep/2001:22:19:43 +0900] "GET /default.php3 HTTP/1.0" 404 287
211.51.63.4 - - [26/Sep/2001:22:19:43 +0900] "GET /main.htm HTTP/1.0" 404 283
211.51.63.4 - - [26/Sep/2001:22:19:43 +0900] "GET /main.html HTTP/1.0" 404 284
211.51.63.4 - - [26/Sep/2001:22:19:43 +0900] "GET /main.asp HTTP/1.0" 404 283
211.51.63.4 - - [26/Sep/2001:22:19:44 +0900] "GET /main.php HTTP/1.0" 404 283
211.51.63.4 - - [26/Sep/2001:22:19:44 +0900] "GET /main.php3 HTTP/1.0" 404 284
211.51.63.4 - - [26/Sep/2001:22:19:44 +0900] "GET /home.htm HTTP/1.0" 404 283
211.51.63.4 - - [26/Sep/2001:22:19:44 +0900] "GET /home.html HTTP/1.0" 404 284
211.51.63.4 - - [26/Sep/2001:22:19:44 +0900] "GET /home.asp HTTP/1.0" 404 283
211.51.63.4 - - [26/Sep/2001:22:19:44 +0900] "GET /home.php HTTP/1.0" 404 283
211.51.63.4 - - [26/Sep/2001:22:19:44 +0900] "GET /home.php3 HTTP/1.0" 404 284

무 작위로 index.php index.asp, index.php3, default.html, default.asp 등의 파일을 순서대로 요청하는 것으로 보아 검색 엔진일 가능성이 높다고 가정할 수 있다. 특히 robots.txt 파일을 요청하는 것으로 검색 엔진이라고 장담할 수 있을 것이다.
httpd.conf 에서 Logformat 를 common 대신 {User-agent} 변수를 추가하여 정의하면 서버에 접근하는 agent 정보도 알 수 있는데, UA(User Agent)는 일반적인 웹 브라우저 뿐만 아니라 검색 로봇이나 방랑 로봇등 웹서버에 접속하여 웹 페이지를 가져오거나 해석하는 모든 종류의 프로그램을 뜻한다. 이는 흔히 사용하는 Internet Explorer나 Netscape 등의 브라우저외에도 lycos의 spider 나 AltaVista의 Scooter와 같은 검색 로봇과 Teleport 나 WebZIP, GetRight 등 오프라인 브라우저 모두 UA의 범위에 속한다. 검색 로봇이 어떤 사이트를 방문하여 문서를 인덱싱 하거나 오프라인 브라우저가 페이지를 한꺼번에 요청하여 긁어가는 것은 일반 사용자가 웹 브라우저로 서버에 접속하여 원하는 페이지를 보는 일반적인 경우와 그 성격이 다르다. 여러 페이지를 동시에 요청하는 정도를 벗어나 아예 한 웹 사이트의 모든 페이지를 짧은 시간에 통째로 긁어가기도 하기 때문에 이러한 경우에는 서버에 매우 많은 프로세스를 생성하면서 웹 서버의 로드가 크게 올라가게 되는 것이다. 특히 DB와 연동하는 사이트의 경우에는 심할 경우 정상적인 서비스를 하지 못 할 정도이다.
모든 사이트가 검색 엔진에 등록될 필요는 없거나 또는 허용된 일부 유저만 접근이 가능한 페이지의 경우 로봇의 접근을 차단할 필요가 있으므로 이러한 경우에는 아래와 같이 설정된 robots.txt 파일을 웹 서버의 최상위 / 디렉토리에 두면 모든 검색 로봇이 /secure 디렉터리를 인덱싱하지 않는다.

User-agent: *
Disallow: /secure

"User-agent: *"는 모든 로봇를 대상으로 한다는 것을 뜻하며 예를 들어 AltaVista Scooter등 특정한 UA 에 대해서만 설정하고 싶다면 다음과 같이 하면 된다.

User-agent: scooter

검색로봇과 관련된 더 자세한 정보를 얻기 원한다면 아래의 사이트를 참고하기 바란다.


http://info.webcrawler.com/mak/projects/robots/robots.html
http://info.webcrawler.com/mak/projects/robots/norobots.html

아울러 웹서버에서 특정한 User-Agent 의 접근을 차단하고자 한다면 httpd.conf 에 아래와 같이 BrowserMatch 를 사용하여 설정해도 된다.

BrowserMatch "WebZIP" go_out
BrowserMatch "Teleport" go_out
BrowserMatch "GetRight" go_out
BrowserMatch "WebCopier" go_out
BrowserMatch "NetZip Downloader 1.0" go_out
BrowserMatch "NetZip-Downloader/1.0.62" go_out
BrowserMatch "Teleport Pro/1.29" go_out
BrowserMatch "Teleport Pro/1.24" go_out
BrowserMatch "Teleport Pro/1.26" go_out
<Directory /home/no-ua/>
Options Includes ExecCGI
AllowOverride None
Order allow,deny
Allow from all
Deny from env=go_out
</Directory>

위 와 같이 설정시에는 /home/no-ua/ 디렉토리 이하에 대해서는 go_out 이라는 변수에 지정한 WebZip 이나 Teleport등 UA 프로그램의 접근을 차단하게 된다. 다른 UA도 차단하고 싶으면 위와 같이 웹서버의 로그를 살펴보아 agent 정보에 남는 UA를 go_out 으로 추가해 주면 된다.
같은 방식으로 만약 특정 디렉토리 이하에 대해서 MSIE 브라우저로 접근하지 못하도록 설정한다면 어떻게 하면 될까?
아래와 같이 BrowserMacth 를 이용하여 설정하면 agent 정보에 MSIE 라 설정되는 UA는 차단될 것이다.

BrowserMatch "MSIE" msie
<Directory />
Options Includes ExecCGI
AllowOverride None
Order allow,deny
Allow from all
Deny from env=msie
</Directory>

최근에는 각종 로봇이 버전을 새롭게 하며 계속적으로 나오고 있으므로 지속적으로 로그를 살펴보아 접근 통제를 하고자 하는 UA 를 설정하는 것이 좋다.
이올린에 북마크하기
2008/03/24 23:22 2008/03/24 23:22

아파치 서버과부하 해결책 - lingerd 설치법

Posted at 2008/02/26 13:45 // in Linux // by 엔신
출처 향기가 있는 프로그래밍 | 데비
원문 http://blog.naver.com/gogojinny80/100019463276
1. lingerd란 무엇일까?

아파치에서 갑작스런 libhttpd.ep 혹은 httpd가 상승하여 cpu혹은 메모리를 과도하게 점유할 경우, 일정 튜닝으로 이를 막을 순 있지만, Dos상당의공격에서는 데먼은 저절로 죽어버린다.

이때, lingerd라는 엑셀레이트를 설치하면, 아파치는 해당 과부하 프로쎄서를 죽이면서 서버가 죽는 것을 방지할 수 있다.

2. lingerd 구하기

http://www.iagora.com/about/software/lingerd/

3. 설치하기

mkdir -p /var/run/lingerd/
chown nobody.nobody /var/run/lingerd/
chmod 700 /var/run/lingerd/

tar xvzf lingerd-xxx.gz
cd lingerd-xxx
make
이렇게 하면 lingerd란 바이너리가 생긴다.

cp lingerd /usr/local/sbin
cp extra/lingerd.rc /etc/rc.d/init.d/lingerd
chkconfig --level 3 lingerd on
이렇게 해서 부트로더에 올린다.

/etc/rc.d/init.d/lingerd start


    cp apache-1.3/ap_lingerd.c li_config.h $APACHE/src/main/
    patch -p0 -d $APACHE/src/ < apache-1.3/aplinger.diff

이 과정은 아파치를 위한 과정이다.
아파치소스가 있는 폴더가 $APACHE라고 가정해서 입력하라.
즉 $APACHE는 님의 환경에 맞는 절대경로를 입력하면 된다.

이제 패치가 완료되면, APM설치과정과 같이

apache> ./configure --prefix=/usr/local/apache
apache> cd ../php-4.0.24
php> ...설치과정진행
php> cd ../apache
apache> 설치과정진행 ./configure....-> make -> make install

이렇게 하여 설치를 완료한다.

apache 재구동한다.

설치완료
- 이제부터 /var/log/messages 에 로그가 생성된다.
- /var/run/lingerd/에는 프로쎄서가 동작한다.
- /usr/local/apache/logs/error_log에는 문제발생시, 에러로그가 기록된다.

이렇게함으로써 아파치에 대한 안전한 운영이 가능해진다. 
이올린에 북마크하기
2008/02/26 13:45 2008/02/26 13:45

yum을 이용한 APM RPM 패키지 설치 순서

Posted at 2008/02/25 11:27 // in Linux // by 엔신

1. apache 설치(httpd)
yum install httpd
2. mysql 설치
yum install mysql
3. php 설치
yum install php
여기까지 하면 php 연동은 되지만 mysql 연동은 되지 않는다.
4. php-mysql 연동 설치
yum install php-mysql

http://tong.nate.com/ynjsoft/35160515

까지가 가장 간단한 방법이고 라이브러리 설치할려면

라이브러리를 설치
yum -y install zlib libpng freetype gd libxml lib iconv

APM 관련 프로그램을 설치
yum -y install httpd mysql-server mysql php php-devel php-gd php-mbstring php-mysql php-pear php-pecl-mailparse

아래처럼 rpm이 설치되어있는지 확인하고 중복설치 되지 않도록 확인하는 점은 매우 중요함

1. Apache 설치
  1) 설치 여부 체크
    yum list installed | grep http
      - 아래처럼 결과가 출력되면 설치되어 있는 것이다.
      httpd.i386      2.2.3-x       installed
   
  2) apache port가 떠있는지 확인
    netstat -lntp
      - 아래처럼 나오면 아파치가 떠있지 않은 것이다.
      ~~머라머라..
      tcp   0   0:::22      ::*         LISTEN      2219/sshd
      ~~머라머라..
  3) Apache 실행
    /usr/sbin/apachectl start
   
  4) 데몬이 정상적으로 실행되었는지 확인한다
    netstat -lntp
      ~~
      tcp     0   0:::80     :::*     LISTEN      3818/httpd
   
2. Mysql 설치
  1) 설치 여부 확인
    yum list installed | grep mysql
  2) mysql client 설치
    yum install mysql
  3) mysql server 설치
    yum install mysql-server
  4) server 구동
    /etc/rc.d/init.d/mysqld start
  5) password 변경
    /usr/bin/mysqladmin -u root password 'new password'
   
3. PHP 설치
  1) php 설치여부 확인
    which php
      /usr/bin/which: no php in 머라머라 나오면...php가 설치된 디렉토리를 못찾는다는 의미
    yum list installed | grep php   로 설치 여부 확인
  2) php 설치
    yum install php
  3) 그외 필요요소들 설치하자..
    yum -y install php-devel php-gd php-mbstring php-pear php-pecl-mailparse php-mysql mod_ssl
  4) 정상적인 설치 여부 확인
    which php
      /usr/bin/php
    php -v
      PHP xxxxx ~~~
  5) 아파치의 php 설정에 다음줄을 추가해준다.
    vi /etc/httpd/conf.d/php.conf
      AddHandler php5-script .php
      AddType text/html .php
      AddType application/x-httpd-php .php .html .htm .inc  <- 추가
  6) 아파치 재실행
    /usr/sbin/apachectl restart

http://blog.naver.com/lsc7712?Redirect=Log&logNo=30027101845

참고할 사항은 아파치 디렉토리가 /usr/local/apache2/bin/apachectl 일수도 있다는 점

이올린에 북마크하기
2008/02/25 11:27 2008/02/25 11:27

아차피에서 한글이 깨지는 경우(http)

Posted at 2008/02/24 02:23 // in Linux // by 엔신
AddDefaultsCharset EUC-KR (EUC-KR 로 설정)

보통은 UTF-8 로 되어 있을듯
그리고 확인. 확인했을때도 깨지면
웹브라우저에서 보기 -인코딩 부분을 확인해서 UTF-8로 되어있는건 아닌지 확인하고
EUC-KR로 바꿔줌.

이올린에 북마크하기
2008/02/24 02:23 2008/02/24 02:23

httpd.conf 한글 주석

Posted at 2008/02/23 14:46 // in Linux // by 엔신
httpd.conf 한글주석이지만 apache 1.3버전대 용이라 2.x 버전대에서는 안됨.
추후 확인하고 수정할 예정으로 올려둠.

more..



이올린에 북마크하기
2008/02/23 14:46 2008/02/23 14:46