검색 엔진의 방문이 늘어나고 있군...

Posted
Filed under 프로그램과 명령어/모니터링
참조 원문 : Apache / Nginx: Visualize Web Server Access Log In Real Time

  Logstalgia는 웹사이트 접속 로그를 직관적으로 보여주는 툴로 Apache, Lighttpd, Nginx의 접속 로그를 분석할 수 있습니다. OpenGL을 지원하는 비디오 카드가 필요하기 때문에 상용 서버에서 사용하기 힘들 것이라 생각할 수도 있지만 ssh를 이용하면 원격 서버에서 로그 파일을 읽어서 보는 것이 가능하기 때문에 큰 문제는 없습니다.

(출처 : 참조 원문 사이트)

1. 필요조건
  1. OpenGL을 지원하는 비디오 카드
  2. 리눅스 OS.

2. 설치(우분투 기준)
(1) 바이너리 패키지를 이용한 방법
$ sudo apt-get install logstalgia
(2) 소스 코드를 이용한 방법
$ sudo apt-get install libsdl1.2-dev libsdl-image1.2-dev libpcre3-dev libftgl-dev libpng12-dev libjpeg62-dev
$ cd /tmp
$ wget https://logstalgia.googlecode.com/files/logstalgia-1.0.3.tar.gz
$ tar xvf logstalgia-1.0.3.tar.gz
$ cd logstalgia
$ ./configure
$ make
$ sudo make install

3. 사용법
# 디폴트 설정으로 로그 파일 분석
$ logstalgia /var/www/apache2/access.log

# 표준 입력으로 로그 읽기
$ tail -f
/var/www/apache2/access.log | logstalgia --sync

# 원격 서버에서 로그 파일 분석
ssh 계정명@서버명 tail -f
/var/www/apache2/access.log | logstalgia --sync

# 결과물을 비디오 파일로 저장
$ logstalgia -1280x720 --output-ppm-stream output.ppm
/var/www/apache2/access.log

# 원격 서버에서 결과물을 비디오 파일로 저장
$ ssh
계정명@서버명 tail -f /var/www/apache2/access.log | logstalgia -1280x720 --output-ppm-stream --sync output.ppm

# ffmpeg를 사용해서 .ppm 파일을 mp4 파일로 변환
$ ffmpeg -y -r 60 -f image2pipe -vcodec ppm -i output.ppm -vcodec libx264 -preset ultrafast -pix_fmt yuv420p -crf 1 -threads 0 -bf 0 logvideo.mp4

4. 단축키
  • n : 다음 로그 항목으로 점프
  • +/- : 시뮬레이션 속도 조정
  • </> : 시간 단위 조정
  • Esc : 종료
2013/07/13 23:32 2013/07/13 23:32
Posted
Filed under 프로그램과 명령어/서버와 서비스
참조 원문 : How to protect Apache with Fail2ban

  Fail2ban은 파이썬으로 만든 침입 방지 프레임워크입니다. 패킷 컨트롤 시스템(예: TCP Wrapper)이나 자체적으로 방화벽(예: iptables)이 설치된 POSIX 시스템이라면 사용할 수 있습니다. Fail2ban의 주요 기능은 로그 파일을 감시하여 너무 많이 로그인을 시도하거나 비정상적인 행동을 하는 호스트의 IP를 차단하는 겁니다. 이 글에서는 아파치에 fail2ban을 적용하여 보안성을 높이는 방법을 소개합니다. Fail2ban의 설치와 기본 사용법은 이 글을 참조하시기 바랍니다.

  이 글에서는 악성 IP를 찾아 감옥(Jail)에 넣기 위해 jail 파일(fail2ban 설정을 담고 있는 파일)에 규칙을 생성하여 대상 IP의 요청을 일정 시간 동안 무시하도록 만들 겁니다.

  내용은 데비안 계열 배포판을 기준으로 /etc/fail2ban/jail.local 파일에서 진행합니다.

1. 표준 설정 활성화
  기본적으로 fail2ban에는 apache에 대한 공격을 어느 정도 막아주는 규칙이 포함되어 있습니다. 이를 사용하기 위해 /etc/fail2ban/jail.local 파일에서 아래의 내용을 작성하여 3개의 "감옥"을 활성화합니다.
[apache]
enabled = true

[apache-noscript]
enabled = true

[apache-overflows]
enabled = true
(1) Jail Apache
  이 감옥은 /var/log/apache*/*error.log 파일에서 정규 표현식으로 패스워드 인증 실패 메시지를 찾습니다. 이 규칙의 목표는 아래의 규칙 중 하나에 해당하는 IP를 모두 차단하는 것입니다.
failregex = [[]client []] user .* authentication failure
            [[]client []] user .* not found
            [[]client []] user .* password mismatch
(2) Jail Apache-noscript
  이 감옥은 /var/log/apache*/*error.log 파일에서 정규 표현식으로 스크립트를 찾을 수 없다는 에러 메시지를 찾습니다. 이 규칙의 목표는 존재하지 않는 스크립트(php, perl, asp)를 찾으려는 IP를 모두 차단하는 것이며 아래는 이 감옥에서 사용하는 필터입니다.
failregex = [[]client []] (File does not exist|script not found or unable to stat): /S*(.php|.asp|.exe|.pl)
            [[]client []] script '/S*(.php|.asp|.exe|.pl)S*' not found or unable to stat *$
(3) Jail Apache-overflows
  이 감옥은 Apache 오버플로우를 시도하는 클라이언트를 정규 표현식으로 잡아냅니다.
failregex = [[]client []] (Invalid method in request|request failed: URI too long|erroneous characters after protocol string)

2. 추가 설정
  추가적인 감옥과 필터 예제 2가지를 소개합니다.

(1) Jail Apache-phpmyadmin
  이 설정의 목표는 phpmyadmin 설치본을 찾으려고 하는 클라이언트를 막는 것입니다. 주의할 점은 phpmyadmin이 설치된 디렉토리 이름이 badadmin에 나열된 것에 포함되어 있지 않아야 한다는 겁니다. 아래 내용을 /etc/fail2ban/jail.local 파일에 추가합니다.
[apache-phpmyadmin]
enabled  = true
port     = http,https
filter   = apache-phpmyadmin
logpath  = /var/log/apache*/*error.log
maxretry = 3
  그리고 /etc/fail2ban/filter.d/apache-phpmyadmin.conf 파일을 만들어 아래 내용을 넣습니다.
# Fail2Ban configuration file
#
# Bans bots scanning for non-existing phpMyAdmin installations on your webhost.
#
# Author: Gina Haeussge
#
 
[Definition]
 
docroot = /var/www
badadmin = PMA|phpmyadmin|myadmin|mysql|mysqladmin|sqladmin|mypma|admin|xampp|mysqldb|mydb|db|pmadb|phpmyadmin1|phpmyadmin2
 
# Option:  failregex
# Notes.:  Regexp to match often probed and not available phpmyadmin paths.
# Values:  TEXT
#
failregex = [[]client []] File does not exist: %(docroot)s/(?:%(badadmin)s)
 
# Option:  ignoreregex
# Notes.:  regex to ignore. If this regex matches, the line is ignored.
# Values:  TEXT
#
ignoreregex =
(2) Jail Apache-postflood
  이 감옥 규칙의 목표는 apache POST flood 공격을 막는 겁니다. /etc/fail2ban/jail.local에 아래 내용을 추가하면 10초 안에 POST 요청을 10번 이상 하는 클라이언트를 막습니다.
[apache-postflood]
enabled = true
filter = apache-postflood
logpath = /var/log/httpd/access_log
findtime = 10
maxretry = 10
  그리고 /etc/fail2ban/filter.d/apache-postflood.conf 파일을 만들어 아래 내용을 넣습니다.
# Fail2Ban configuration file
#
#
# $Revision: 1 $
#

[Definition]
# Option: failregex
# Notes.: Regexp to catch known spambots and software alike. Please verify
# that it is your intent to block IPs which were driven by
# abovementioned bots.
# Values: TEXT
#
failregex = ^ -.*”POST.*

# Option: ignoreregex
# Notes.: regex to ignore. If this regex matches, the line is ignored.
# Values: TEXT
#
ignoreregex =
2013/07/13 21:13 2013/07/13 21:13
Posted
Filed under 프로그램과 명령어/서버와 서비스
참조 원문 : Why you should not use .htaccess (AllowOverride All) in production

  원문에서 처음 제목을 볼 땐 보안 문제(document root 디렉토리에 대한 설정을 변경할 수 있는 문제)를 이야기하는 글인 줄 알았는데 실제로는 성능에 대한 문제를 다루는 내용이었습니다.

  AllowOverride All을 하면 해당 디렉토리에 접근을 요청할 때마다 .htaccess 파일이 있는지 검사를 하고 있다면 읽어들이는 작업이 매번 하기 때문에 성능에 저하가 발생합니다. 원문의 실험 결과에 따르면 설정을 None으로 할 경우 All로 할 때의 약 60%의 시간만으로 같은 작업을 처리했습니다.

  규모가 큰 사이트라면 반드시 고려해야 할만한 문제인 것 같습니다.
2013/07/09 14:25 2013/07/09 14:25
Posted
Filed under 프로그램과 명령어/서버와 서비스
참조 원문 : How to Install Varnish Cache (Web Accelerator) in RHEL/CentOS/Fedora and Ubuntu/Debian
관련 글(고급 내용 포함) : Speed Up Your Web Site with Varnish

  Varnish Cache는 오픈 소스 웹 애플리케이션 가속기로서 HTTP 가속기 또는 캐싱 HTTP 리버스 프록시라고도 불리는 종류의 프로그램입니다. HTTP 요청을 받는 서버의 프론트 엔드로 작동하며 페이지를 캐시합니다.

  사용자가 웹사이트를 처음 방문할 때 varnish가 제공한 페이지의 복사본을 보관하고 있다가 어떤 사용자가 같은 페이지에 또 방문했을 때 웹 서버에 페이지를 재요청하는 대신 보관하고 있던 페이지를 제공합니다. 이를 통해 웹사이트의 성능과 확장성을 높이고 많은 트래픽을 다룰 수 있으며 서버의 대역폭을 아낄 수 있습니다.

  이 글에서는 IP가 192.168.2.10인 웹 서버의 캐시 서버로서 IP가 192.168.2.3인 서버에 Varnish를 설치해보겠습니다. 그러므로 아래 설치 작업은 192.168.2.3 서버에서 하는 것으로 가정합니다.


레드햇 계열에 설치하는 방법
  Varnish가 EPEL(Extra Packages Enterprise Linux) 저장소에 있긴 하지만 구버전이므로 홈페이지의 저장소를 통해 설치하는 방법을 소개합니다.
# wget http://repo.varnish-cache.org/redhat/varnish-3.0/el5/noarch/varnish-release-3.0-1.noarch.rpm
# rpm --nosignature -i varnish-release-3.0-1.noarch.rpm
# yum install varnish


우분투에 설치하는 방법
  우분투의 저장소에도 패키지가 있지만 위와 같은 이유로 홈페이지의 저장소를 통해 설치합니다.
# wget http://repo.varnish-cache.org/debian/GPG-key.txt
# apt-key add GPG-key.txt
# echo "deb http://repo.varnish-cache.org/ubuntu/ precise varnish-3.0" | sudo tee -a /etc/apt/sources.list
# sudo apt-get update
# sudo apt-get install varnish


데비안에 설치하는 방법
  역시나 같은 이유로 홈페이지 저장소를 통해 설치합니다. 우분투와 저장소 경로가 약간 다릅니다.
# wget http://repo.varnish-cache.org/debian/GPG-key.txt
# apt-key add GPG-key.txt
# echo "deb http://repo.varnish-cache.org/debian/ squeeze varnish-3.0" >> /etc/apt/sources.list
# apt-get update
# apt-get install varnish


부팅 시 Varnish 웹 가속기를 시작하게 하기
  레드햇 계열 배포판이라면 아래 명령어로 부팅 시 자동으로 시작하게 합니다. 우분투는 설치 시 자동으로 설정되는 것을 확인했습니다.
# chkconfig --level 345 varnish on


아파치와 연동하기 위한 최소 설정
  Varnish는 2개의 주요 설정 파일이 존재합니다. 첫 번째 설정 파일은 시스템 전역 설정 파일로 레드햇 계열의 경우 /etc/sysconfig/varnish, 데비안 계열의 경우 /etc/default/varnish 파일입니다. 이 파일은 Varnish의 주요 전역 설정 파일로 그 내용 중 지금 가장 중요한 것은 Varnish가 사용할 포트입니다. Varnish는 기본적으로 6081 포트를 사용하지만 웹 서버의 캐시 서버로 사용할 것이기 때문에 80포트를 사용하도록 수정하겠습니다. 아래는 80포트를 사용하도록 수정한 모습입니다.
DAEMON_OPTS="-a :80 \
             -T localhost:6082 \
             -f /etc/varnish/default.vcl \
             -S /etc/varnish/secret \
             -s malloc,256m"
  두 번째 설정 파일은 /etc/varnish/default.vcl 파일입니다. 이 파일은 Varnish 설정의 대부분을 담당하고 있습니다. 지금은 아래의 부분만 수정합니다.
backend default {
    .host = "192.168.2.10";
    .port = "80";
}
  웹 서버의 IP와 포트로 수정합니다. 수정 후 Varnish를 작동시킵니다.
# /etc/init.d/varnish start
  이제 아래처럼 curl 프로그램을 통해 Varnish가 제대로 작동하고 있는지 확인합니다. 물론 웹 브라우저로도 확인해봅니다.
$ curl -I http://192.168.2.3
HTTP/1.1 200 OK
Server: Apache/2.2.24 (PowerStack)
Set-Cookie: TSSESSIONwwwmyservlabcom=17f8459d6ec03b837002ba1f11b9b49b; path=/; domain=192.168.2.3
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Pragma: no-cache
Content-Type: text/html; charset=utf-8
Content-Length: 14582
Accept-Ranges: bytes
Date: Mon, 08 Jul 2013 11:50:12 GMT
X-Varnish: 1229318888
Age: 0
Via: 1.1 varnish
Connection: keep-alive
2013/07/08 20:54 2013/07/08 20:54