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

Posted
Filed under 프로그램과 명령어/서버와 서비스
참조 원문 : How to Install and Setup Monit (Linux Process and Services Monitoring) Program

  Monit은 서버 프로세스, 파일, 디렉토리, 체크섬, 퍼미션, 파일시스템과 Apache, Nginx, MySQL, FTP, SSH, Sendmail 등 서비스를 모니터하고 관리하는 오픈 소스 툴입니다. 웹 인터페이스를 쓰고 있기 때문에 웹 서버가 필요하며 이를 이용해 시스템 상태를 보고, 프로세스를 제어할 수 있습니다.

Monit로 할 수 있는 것
  프로세스가 돌아가고 있지 않다면 시작할 수 있고, 반응이 없으면 재시작할 수 있으며, 자원을 많이 소모할 경우 중지할 수 있습니다. 또한 파일, 디렉토리, 파일시스템의 변화, 체크섬 변화, 파일 크기 변화, 타임스탬프의 변화를 감시할 수 있습니다. 그리고 원격 호스트의 TCP/IP 포트, 서버 프로토콜, ping을 감사하는 것도 가능합니다. 물론 자체적으로 로그를 기록하며 치명적인 에러와 복구 상태에 대해 경고합니다.


Monit 설치
  레드햇 계열의 경우 EPEL 저장소를 추가해야 합니다. 추가 후 yum으로 설치합니다.
# yum install monit
  데비안 계열은 apt-get으로 바로 설치합니다.
$ sudo apt-get install monit

Monit 설정
  기본적으로 2분마다 서비스를 검사하며 /var/log/monit 파일에 로그를 기록합니다. 웹 서버를 통해 2812 포트로 웹 인터페이스를 제공하며 이를 위해 monit 설정 파일을 수정해야 합니다. 주 설정 파일은 레드햇 계열의 경우 /etc/monit.conf, 데비안 계열의 경우 /etc/monit/monitrc 입니다. 이 파일 안에서 아래에 해당하는 부분의 주석을 제거하고 서버의 IP와 도메인을 입력합니다.
 set httpd port 2812 and
     use address localhost  # only accept connection from localhost
     allow localhost        # allow localhost to connect to the server and
     allow admin:monit      # require user 'admin' with password 'monit'
     allow @monit           # allow users of group 'monit' to connect (rw)
     allow @users readonly  # allow users of group 'users' to connect readonly
  그 후 monit 서비스를 재시작하여 새 설정을 읽도록 합니다.
$ sudo /etc/init.d/monit start
  이제 http://주소:2812로 웹 인터페이스에 접속할 수 있습니다. 사용자명엔 admin, 패스워드엔 monit을 넣어 로그인하면 아래와 같은 화면을 볼 수 있습니다.

출처 : 참조 원문


서비스 추가
  웹 인터페이스의 작동을 확인하면 레드햇 계열의 경우 /etc/monit.conf, 데비안 계열의 경우 /etc/monit/monitrc 파일의 끝부분에 감시할 프로그램을 추가합니다. 아래는 기본적인 설정 예제입니다.

Apache
check process httpd with pidfile /var/run/httpd.pid
group apache
start program = "/etc/init.d/httpd start"
stop program = "/etc/init.d/httpd stop"
if failed host 127.0.0.1 port 80
protocol http then restart
if 5 restarts within 5 cycles then timeout
Apache2
check process apache with pidfile /run/apache2.pid
start program = "/etc/init.d/apache2 start" with timeout 60 seconds
stop program  = "/etc/init.d/apache2 stop"
Nginx
check process nginx with pidfile /var/run/nginx.pid
start program = "/etc/init.d/nginx start"
stop program = "/etc/init.d/nginx stop"
MySQL
check process mysqld with pidfile /var/run/mysqld/mysqld.pid
group mysql
start program = "/etc/init.d/mysqld start"
stop program = "/etc/init.d/mysqld stop"
if failed host 127.0.0.1 port 3306 then restart
if 5 restarts within 5 cycles then timeout
SSH
check process sshd with pidfile /var/run/sshd.pid
start program "/etc/init.d/sshd start"
stop program "/etc/init.d/sshd stop"
if failed host 127.0.0.1 port 22 protocol ssh then restart
if 5 restarts within 5 cycles then timeout

  감시할 프로그램에 대한 내용을 모두 추가한 후 아래 명령어로 틀린 부분이 없는지 확인합니다.
$ sudo monit -t
  이상이 없으면 서비스를 재시작합니다.
$ sudo /etc/init.d/monit restart
  로그 파일을 확인하여 서비스 시작에 문제가 없는지 확인할 수도 있습니다.
$ sudo tail -f /var/log/monit.log
[BDT Apr  3 03:06:04] info     : Starting monit HTTP server at [localhost:2812]
[BDT Apr  3 03:06:04] info     : monit HTTP server started
[BDT Apr  3 03:06:04] info     : 'tecmint.com' Monit started
[BDT Apr  3 03:06:04] error    : 'nginx' process is not running
[BDT Apr  3 03:06:04] info     : 'nginx' trying to restart
[BDT Apr  3 03:06:04] info     : 'nginx' start: /etc/init.d/nginx

출처 : 참조 원문

2013/07/12 10:45 2013/07/12 10:45
Posted
Filed under 프로그램과 명령어/서버와 서비스
참조 원문 : Setup your personal Cloud server in minutes using ownCloud

  ownCloud는 개인용 파일, 달력, 연락처, 북마크 공유 및 오디오/비디오 스트리밍을 위한 오픈 소스 소프트웨어입니다.

선결 조건
  먼저 아래 패키지들을 설치해야 합니다. 필요하다면 서비스들도 실행하고 방화벽도 재설정하며 mysql도 초기화합니다.
# yum -y install mysql-server httpd php php-mysql wget php-json php-xml php-mbstring php-zip php-gd curl php-curl php-pdo

# /etc/init.d/mysqld start
# /etc/init.d/httpd start
# chkconfig mysqld on
# chkconfig httpd on

# vi /etc/sysconfig/iptables
-A INPUT -p tcp -m state --state NEW --dport 80 -j ACCEPT
# service iptables restart

# /usr/bin/mysql_secure_installation
  그 후 ownCloud가 사용할 db와 계정을 생성합니다. 아래는 ownCloud를 위한 계정명이 centos일 경우의 예입니다.
[root@cloud ~]# mysql -u root -p

mysql> CREATE DATABASE owncloud;
mysql> GRANT ALL ON owncloud.* TO 'owncloud'@'localhost' IDENTIFIED BY 'centos';
mysql> GRANT ALL ON owncloud.* TO 'owncloud'@'localhost.localdomain' IDENTIFIED BY 'centos';

ownCloud 설치
  아파치의 root document 디렉토리로 가서 ownCloud를 다운받습니다.
# cd /var/www/html
# wget http://download.owncloud.org/community/owncloud-5.0.7.tar.bz2
# tar xvf owncloud-5.0.7.tar.bz2
# rm owncloud-5.0.7.tar.bz2
# chown -R apache:apache owncloud
# chmod 750 owncloud/data
# chmod 777 owncloud/config
  아파치 설정 파일 파일(/etc/httpd/conf/httpd.conf)에서 아래 부분을 찾아 아래처럼 수정합니다.
# vi /etc/httpd/conf/httpd.conf
<Directory "/var/www/html">
   Options Indexes FollowSymLinks
   AllowOverride All
   Order allow,deny
   Allow from all
</Directory>
  아파치와 mysql을 재시작합니다.
# /etc/init.d/mysqld restart
# /etc/init.d/httpd restart
  이제 설치가 완료되었으니 웹 브라우저로 접속해서 관리자 계정을 설정하고 사용하면 됩니다.

출처 : 참조 원문 사이트

2013/07/10 09:56 2013/07/10 09:56
Posted
Filed under 프로그램과 명령어/서버와 서비스
링크 : Windows 에서 OpenVPN 서버 구축
링크 : Windows 에서 OpenVPN 서버 구축 #2

  윈도우에서 OpenVPN을 설치 및 사용하는 방법을 소개한 글입니다. 1부에서는 구성원끼리 통신을 위한 설정, 2부에서는 서버를 거처 외부와 통신까지 가능하도록 설정하는 방법을 다루고 있습니다. 윈도우에서 OpenVPN을 구축할 일이 있다면 유용할 것 같습니다.

추가 : 같은 분이 OpenVPN의 상용 버전(OpenVPN Access Server) 사용법을 올리셨군요. 다만 이번엔 CentOS에 설치해서 사용하는 것을 다루고 있습니다.
2013/07/09 15:38 2013/07/09 15:38
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
Posted
Filed under 프로그램과 명령어/서버와 서비스
참조 원문 : How to automatically chroot jail selected ssh user logins

1. 소개
  이 글에서는 사용자 그룹을 기반으로 ssh를 사용하여 로그인하는 특정 그룹의 사용자들에게 chroot jail을 적용시키는 방법을 소개합니다 .이 기술은 특정 사용자들에게 제한된 시스템 환경을 제공하면서도 메인 시스템에 접근하지 못하게 할 때 유용합니다.

2. 기본 chroot 환경 제작
  먼저 간단한 chroot 환경을 만들어야 합니다. 리눅스인 만큼 bash를 사용하는 것으로 간주하고 환경을 제작할 것입니다. chroot 대상 디렉토리는 /var/chroot로 간주합니다. 먼저 해당 디렉토리를 mkdir /var/choot 명령어로 생성합니다. 그 다음으로 bash 바이너리와 관련 공유 라이브러리를 모두 복사해야 합니다. ldd 명령어를 통해 bash의 공유 라이브러리 목록을 볼 수 있습니다.
$ ldd /bin/bash
    linux-vdso.so.1 =>  (0x00007fff017ff000)
    libtinfo.so.5 => /lib64/libtinfo.so.5 (0x0000003ef9800000)
    libdl.so.2 => /lib64/libdl.so.2 (0x0000003eeac00000)
    libc.so.6 => /lib64/libc.so.6 (0x0000003eea800000)
    /lib64/ld-linux-x86-64.so.2 (0x0000003eea000000)
  이제 필요한 디렉토리들을 모두 수동으로 만들고 bash와 관련 라이브러리를 새로운 chroot 디렉토리 밑에 적절한 위치로 복사합니다.
# cd /var/chroot/
# mkdir bin/ lib64/ lib64/
# cp /lib64/libtinfo.so.5 lib64/
# cp /lib64/libdl.so.2 lib64/
# cp /lib64/libc.so.6 lib64/
# cp /lib64/ld-linux-x86-64.so.2 lib64/
# cp /bin/bash bin/
  이제 모든 준비가 끝났으므로 chroot를 할 수 있는지 테스트합니다.
# chroot /var/chroot
bash-4.1# ls /
bash: ls: command not found
  하지만 복사한 건 bash 뿐이므로 쉘 내장 명령어가 아니라면 아직 어떤 명령어도 사용할 수 없습니다. 지금까지 했던 걸 매 명령어마다 모두 반복할 순 없으므로 아래의 bash 스크립트를 이용해 한 번에 처리합니다.
#!/bin/bash
# This script can be used to create simple chroot environment
# Written by LinuxCareer.com <http://linuxcareer.com/>
# (c) 2013 LinuxCareer under GNU GPL v3.0+

#!/bin/bash

CHROOT='/var/chroot'
mkdir $CHROOT

for i in $( ldd $* | grep -v dynamic | cut -d " " -f 3 | sed 's/://' | sort | uniq )
  do
    cp --parents $i $CHROOT
  done

# ARCH amd64
if [ -f /lib64/ld-linux-x86-64.so.2 ]; then
   cp --parents /lib64/ld-linux-x86-64.so.2 /$CHROOT
fi

# ARCH i386
if [ -f  /lib/ld-linux.so.2 ]; then
   cp --parents /lib/ld-linux.so.2 /$CHROOT
fi

echo "Chroot jail is ready. To access it execute: chroot $CHROOT"
  이 스크립트는 chroot로 사용할 디렉토리까지 생성하므로 이전에 사용했던 /var/chroot 디렉토리를 삭제하고 아래처럼 복사할 명령어들과 파일들의 풀 패스를 인자로 넣어 실행합니다. 명령어의 풀 패스는 which 명령어로 알아보는 것이 좋습니다.
./chroot.sh /bin/{ls,cat,echo,rm,bash,vi} /etc/hosts
ldd: warning: you do not have execution permission for `/etc/hosts'
Chroot jail is ready. To access it execute: chroot /var/chroot
  출력된 에러는 /etc/hosts 파일이 실행 파일이 아니라서 ldd가 작동하지 않았기 때문에 발생한 것이므로 문제 될 건 없습니다. 이제 chroot jail을 테스트합니다.
# chroot /var/chroot
bash-4.1# echo linuxcareer.com > file
bash-4.1# cat file
linuxcareer.com
bash-4.1# rm file
bash-4.1# ls
bin  etc  lib64

3. chroot 용 그룹 생성
  sshd가 chroot jail의 대상으로 삼을 그룹을 생성합니다. 여기서는 chrootjail이라는 그룹을 생성하여 사용할 것입니다.
# groupadd chrootjail

4. chroot jail을 위한 sshd 설정
  chrootjail 그룹에 속한 사용자가 ssh로 접속 시 /var/chroot로 chroot jail이 되도록 설정합니다. /etc/ssh/sshd_config 파일에 아래 내용을 추가하면 됩니다.
Match group chrootjail
            ChrootDirectory /var/chroot/
  그리고 ssh를 재시작합니다.
# sudo service ssh restart
  이제 chrootjail 그룹에 속한 사용자를 생성하여 테스트합니다. 한 가지 유의할 점은 원래 홈 디렉토리가 아닌 chroot jail 내의 홈 디렉토리도 별도로 생성해야 한다는 것입니다. 그렇지 않으면 사용자는 로그인 후 chroot jail 내의 / 디렉토리로 가게 됩니다.
# mkdir /var/chroot/home
# cp -rp ~tester/ /var/chroot/home/
# useradd tester -g chrootjail
# passwd tester
Changing password for user tester.
New password:
Retype new password:
# service sshd restart
Stopping sshd:                                             [  OK  ]
Starting sshd:                                             [  OK  ]
# ssh tester@localhost
tester@localhost's password:
Last login: Sun Jul  7 21:14:29 2013 from localhost
-bash-4.1$ pwd
/home/tester
  물론 /etc 디렉토리의 환경설정 파일들 부재나 쉘 환경 등의 문제 때문에 이후 자신에게 필요한 추가적인 작업들을 해야 할 것입니다.
2013/07/07 21:30 2013/07/07 21:30
Posted
Filed under 프로그램과 명령어/서버와 서비스
참조 원문 : Simple database load balancing with MySQL Proxy

  MySQL 프록시는 클라이언트와 SQL 서버 사이를 지나는 정보를 감사할 수 있으며 악성 질의로부터 MySQL 서버를 보호하거나 데이터베이스를 실제로 변경하지 않고도 클라이언트가 받을 정보를 바꾸기 위해 둘 사이에 흐르는 데이터를 변경할 수도 있습니다. 그 외에도 읽기 연산을 위한 서버를 추가하여 MySQL의 확정성을 높이고 MySQL 서버 사이에서 로드 밸런싱을 하면서 SELECT 문을 읽기 전용 슬레이브 서버로 보내도록 흐름을 최적화할 수 있습니다.

  대부분의 배포판에서 MySQL 프록시 패키지의 이름은 mysql-proxy입니다. CentOS의 경우 이 패키지는 EPEL 저장소에 있습니다. EPEL은 메인 CentOS 저장소에서 제공하지 않는 추가 패키지를 제공하는 저장소입니다. 이는 CentOS 6을 기준으로 아래 명령어를 통해 설치할 수 있습니다.
# rpm -ivh http://ftp-stud.hs-esslingen.de/pub/epel/6/i386/epel-release-6-8.noarch.rpm
  저장소를 추가하면 yum install mysql-proxy 명령어를 통해 설치할 수 있습니다.


설정
  레드햇 계열을 기준으로 MySQL Proxy의 설정 파일은 /etc/sysconfig/mysql-proxy 입니다. 설정 파일에서 아래와 같은 옵션을 설정할 수 있습니다.
  • ADMIN_USER - 프록시의 관리자 인터페이스를 위한 사용자. 디폴트 값으로 놔둔다.
  • ADMIN_PASSWORD - 관리자 계정의 패스워드 평문. 원하는 값으로 변경.
  • ADMIN_LUA_SCRIPT - Lua 프로그래밍 언어로 된 관리자 스크립트. 이 스크립트가 없으면 관리자 인터페이스가 작동하지 않는다. 디폴트 값으로 놔둔다.
  • PROXY_USER - 프록시를 돌릴 시스템 계정. 디폴트는 mysql-proxy며 그냥 놔둔다.
  • PROXY_OPTIONS - 로깅 레벨, 불러올 Lua 스크립트 등 프록시 옵션.
  가장 중요한 것은 PROXY_OPTIONS며 사용 예는 아래와 같습니다.
PROXY_OPTIONS="--daemon --log-level=info --log-use-syslog --plugins=proxy --plugins=admin --proxy-backend-addresses=192.168.1.102:3306 --proxy-read-only-backend-addresses=192.168.1.105:3306 --proxy-lua-script=/usr/lib/mysql-proxy/lua/proxy/rw-splitting.lua"
  로깅은 시스템의 syslog(--log-use-syslog)를 사용하여 info 레벨부터 기록(--log-level=info)하며 이는 프록시의 모든 시스템 메시지를 /var/log/messages 파일에 기록한다는 뜻입니다.

  2개의 플러그인을 쓰는데 하나는 기본 프록시 기능을 제공하는 플러그인(--plugins=proxy), 다른 하나는 백엔드 서버에 대한 유용한 정보를 사용자에게 관리자 인터페이스로 제공하는 플러그인(--plugins=admin)입니다.

  백엔드 서버는 하나의 읽기/쓰기 서버(--proxy-backend-adresses=192.168.1.102:3306)와 하나의 SELECT 문만 받는 읽기 전용 서버(--proxy-read-only-backend-addresses=192.168.1.105:3306)로 구성합니다. 읽기 전용 서버는 마스터 읽기/쓰기 서버의 리플리케이션 서버여야 합니다. MySQL 리플리케이션 디자인에 따라 더 많은 읽기/쓰기 서버를 추가할 수 있으며, 모든 질의는 라운드로빈 알고리즘으로 공평히 분배합니다. 프록시는 죽은 서버에 질의를 넘기지 않기 때문에 로드 밸런싱과 패일오버 모두에 유용합니다
.
  마지막 설정(--proxy-lua-script=/usr/lib/mysql-proxy/lua/proxy/rw-splitting.lua)은 읽기와 쓰기 사이에서 질의를 분배하는 Lua 스크립트의 위치입니다. 이는 MySQL 프록시의 가장 유용한 기능 중 하나로서 마스터 MySQL 서버의 부하를 줄이기 위해 SELECT 문을 읽기에 최적화된 슬레이브 서버로 보내는 역할을 합니다.

  하지만 이 Lua 스크립트는 EPEL 패키지에 기본으로 포함되어 있지 않습니다. 이 스크립트는 공식 MySQL 프록시 패키지를 통해 얻을 수 있습니다. 다운로드 옵션에서 generic Linux archive를 받아 압축을 풀면 디렉토리가 생기며 그 밑에 있는 share/doc/mysql-proxy 디렉토리에서 rw-splitting.lua 파일을 찾을 수 있습니다. 그 파일을 프록시 서버의 /usr/lib/mysql-proxy/lua/proxy/ 디렉토리에 복사합니다.


모니터링
  설정이 모두 끝나면 CentOS를 기준으로 아래 명령어를 통해 MySQL 프록시를 시작합니다.
# mysql proxy start
  시작에 성공했다면 /var/log/messages 파일에 아래와 비슷한 출력이 남을 것입니다.
Jan 14 21:54:08 server2 mysql-proxy: 2013-01-14 21:54:08: (message) mysql-proxy 0.8.2 started
Jan 14 21:54:08 server2 mysql-proxy: 2013-01-14 21:54:08: (message) proxy listening on port :4040
Jan 14 21:54:08 server2 mysql-proxy: 2013-01-14 21:54:08: (message) added read/write backend: 192.168.1.102:3306
Jan 14 21:54:08 server2 mysql-proxy: 2013-01-14 21:54:08: (message) added read-only backend: 192.168.1.105:3306
  지금 설정한 프록시를 테스트하려면 앞서 설명한 것처럼 MySQL 리플리케이션이 설정되어 있어야 합니다.

  프록시가 활동을 시작하면 MySQL 클라이언트로 서버의 4041 포트에 접속하여 관리자 인터페이스를 통해 상태를 확인할 수 있습니다. 만약 MySQL 프록시의 IP 주소가 192.168.1.201이라면 아래의 명령어로 프록시의 관리자 인터페이스에 접속할 수 있습니다. 관리자 로그인 ID와 패스워드는 /etc/sysconfig/mysql-proxy 파일에 정의한 것을 사용합니다.
$ mysql --host=192.168.1.201 --port=4041 -u admin -p
  관리자 인터페이스는 단순하며 Lua 관리자 스크립트에 따라 보통은 아래의 명령어만 사용할 수 있습니다.
SELECT * FROM backends;
  MySQL 프록시가 제대로 작동 중이라면 아래와 같은 결과가 나와야 합니다.
+-------------+--------------------+-------+------+------+-------------------+
| backend_ndx | address            | state | type | uuid | connected_clients |
+-------------+--------------------+-------+------+------+-------------------+
|           1 | 192.168.1.102:3306 | up    | rw   | NULL |                 0 |
|           2 | 192.168.1.105:3306 | up    | ro   | NULL |                 0 |
+-------------+--------------------+-------+------+------+-------------------+
2013/07/07 15:39 2013/07/07 15:39
Posted
Filed under 프로그램과 명령어/서버와 서비스
참조 원문 : Daemontools: To Ensure That Your Processes Are Always Running

  Daemontools는 대상 프로세스를 자식 프로세스로 실행하여 대상 프로세스가 죽을 때마다 바로 다시 실행시키는 역할을 합니다. Daemontools의 svscan 프로그램은 현재 작업 디렉토리와 그 서브 디렉토리를 스캔하여 찾은 모든 실행 스크립트를 대상으로 하나의 supervise 프로세스를 실행합니다.

설치
  레드햇 계열은 untroubled.org의 daemontools rpm을 받아서 설치하는 게 가장 쉽습니다. Daemontools 자체는 작성된지 11년지 지났지만 아직도 문제 없이 작동하며 따라서 rpm이 오래됐다고 해서 걱정할 필요는 없습니다.
  데비안 계열은 deamontools와 daemontools-run 패키지를 설치하여 사용할 수 있습니다.
  수동 설치 방법은 웹사이트에서 확인할 수 있습니다.

사용
  설치 후 할 일은 run이라는 이름의 실행용 스크립트를 만들어 그 안에 프로세스를 실행하기 위한 명령어를 넣는 것입니다. 그 후 svscan tools를 실행하면 됩니다.

  예를 들어 죽으면 바로 재시작해야 할 서비스로 nginx와 php-fpm이 있다면 디렉토리 구조는 아래 형식이어야 합니다.
Deamontools 설치 디렉토리 (일반적으로 /etc/service)
├── nginx
│    └── run
└── php-fpm
     └── run
  run 파일은 #!/bin/bash나 #!/usr/bin/python처럼 #!을 가지고 있어야 하며 실행 가능 비트가 있어야 합니다. 준비가 끝나면 svscan 명령어를 수동으로 실행해서 시작하거나 svscan용 SysV Init 스크립트가 그것을 사용합니다.

  man svc를 통해 Daemontools의 기본 명령어를 볼 수 있습니다.
2013/07/04 15:20 2013/07/04 15:20
Posted
Filed under 프로그램과 명령어/서버와 서비스
참조 원문 : Add These Modules to Enhance Apache Web Server

1. ModWorker로 성능 향상
  CentOS를 기준으로 봤을 때 아파치는 prefork mode에서 서버에 접속하려는 모든 원격 클라이언트를 상대하기 위해 하나의 부모 프로세스가 자식 프로세스를 필요한 만큼 복제하는 책임을 지는 Multi-Processing Module(MPM)을 사용한다. 하지만 클라이언트의 요구가 발생할 때마다 동적으로 프로세스를 관리하는 것은 효율성이 떨어지는데 그 이유는 실행과 중단 작업이 시간과 자원을 많이 사용하기 때문이다. ModPrefork는 클라이언트의 요청을 기다리는 아파치 자식 인스턴스의 최소(와 최대) 여유 개수를 설정함으로서 그 단점을 상쇄시킨다. 하지만 이 기능은 요청이 산발적으로 폭증하는 사이트에 대처할 만큼 유연하지 못하다.

  ModWorker는 쓰레드를 사용하여 많은 수의 요청을 적은 시스템 자원으로 처리함으로서 ModPrefork의 성능 문제를 해결한다. CentOS에서 ModWorker를 활성화하려면 /etc/sysconfig/httpd 파일에서 'HTTPD=/usr/sbin/httpd.worker'라는 줄의 주석을 해제한 후 'service httpd restart'로 아파치를 재시작한다. 아파치가 정상적으로 모듈을 로드했는지 확인하려면 'apachectl -l' 명령어로 로드한 모듈을 출력하여 그 안에 worker.c가 있는지 확인한다.

  아쉽게도 ModWorker는 모든 아파치 모듈과 완벽히 호환되지 않는데 그 대표적인 예가 바로 ModPHP다. 그래서 ModWorker를 쓰면서 PHP를 서비스해야 한다면 ModPHP 대신 Mod_FastCGI 같은 걸 사용해야 한다.


2. ModPagespeed로 컨텐트 최적화
  ModPagespeed는 구글이 개발한 올인원 최적화 모듈로 ModDeflate로 출력을 재작성 및 압축하여 더 빠른 클라이언트 경험을 제공한다. Pagespeed(웹 페이지의 성능을 최적화하기 위한 툴셋)로부터 최고의 사례를 자동으로 적용한다. 아직 베타이긴 하지만 충분히 안정된 상태다.

  설치는 소스와 바이너리 패키지를 모두 제공한다. CentOS의 경우 ModPagespeed의 홈페이지에서 공식 설치 패키지를 받을 수 있다. 설치 및 아파치 재시작 후 'apachectl -t -D DUMP_MODULES' 명령어로 pagespeed_module 모듈에 제대로 로드됐는지 확인한다.

  모듈이 로드됐다면 설정 파일인 /etc/httpd/conf.d/pagespeed.conf 파일을 열어 사용할 수 있는 옵션을 확인한다. <Location /mod_pagespeed_statistics> directive에서 'Allow from 127.0.0.1'의 다음 줄에 로컬 클라이언트 IP를 추가한다. 예를 들어 IP가 192.168.0.2라면 'Allow from 192.168.0.2'라는 줄을 추가한다. 그 후 아파치를 리로드하면 http://서버IP/mod_pagespeed_statistics에서 ModPagespeed의 상태를 볼 수 있다. 이를 통해 최적화의 결과를 볼 수 있다.


3. ModSecurity로 보안 강화
  ModSecurity는 아파치의 가장 유명한 보안 모듈이다. 웹 트래픽 감시, 차단, 감사를 제공한다. 자세한 것은 이곳을 참조.


4. ModGeoIP로 방문자의 국가 감지
  로컬에 보관하고 있는 GeoIP 데이터베이스를 사용해서 방문자의 국가를 식별한다. 이를 이용해 국가에 따라 다른 페이지로 리다이렉팅하거나 접근을 차단할 수 있다. 자세한 내용은 홈페이지 참조.


5. ModStatus로 모니터링
  ModStatus 모듈은 현재 서버의 상태에 대한 정보를 제공한다. CentOS의 경우 기본적으로 설치되지만 활성화되어 있지는 않다. 활성화하려면 아파치의 메인 설정 파일인 /etc/httpd/conf/httpd.conf 파일을 열어 아래 내용의 주석을 제거하고 'your_ip'를 당신의 IP로 바꾼다.
<Location /server-status>
    SetHandler server-status
    Order deny,allow
    Deny from all
    Allow from your_ip
</Location>
  그리고 ExtendedStatus On도 주석을 해제하여 현재 요청이 접근하려는 URL 등 더 자세한 정보들을 볼 수도 있다. 아파치를 재시작한 후  http://당신의_서버/server-status에 접근하여 ModStatus가 작동하는지 확인할 수 있다. 이곳에서 아파치와 관련 있는 각종 수치, 프로세스(fork 또는 thread), CPU 사용률을 볼 수 있다.

  http://당신의_서버/server-status?auto처럼 뒤에 ?auto를 붙이면 기계가 읽기 좋은 형식으로 출력한다. 그래서 다른 프로그램(예: Cacti, Nagios)들은 이것을 읽어서 그 내용을 분석한다.


6. ModSpamhaus로 외부 공격 방어
  ModSpamhaus는 각종 공격 및 알려진 불량 IP의 접근을 차단하는 모듈이다. 설치하려면 최신 설치 패키지에서 받아 압축을 해제한다. src 디렉토리에서 mod_spamhaus.c 파일을 찾아서 'apxs -i -a -c mod_spamhaus.c' 명령어를 실행하여 수동으로 아파치 모듈을 생성한다. 실행한 명령어의 인자에 따르면 디폴트 모듈 디렉토리인 /usr/lib/httpd/modules/ 디렉토리에 설치될 것이며, LoadModule directive로 아파치에 로드되어 활성화될 것이고, C 소스 파일을 컴파일할 것이다.

  설치가 끝나면 /etc/httpd/conf.d/spamhaus.conf 라는 설정 파일을 생성한다. 그 안에 아래의 내용을 넣는다.
<IfModule mod_spamhaus.c>
MS_METHODS POST,PUT,OPTIONS,CONNECT
MS_WhiteList /etc/spamhaus_whitelisted
MS_CacheSize 1000
</IfModule>
  이 설정이면 대부분의 환경에서 무리 없이 사용할 수 있다. MS_METHODS 옵션은 HTTP 메소드 중 어떤 것을 감시해야 하는지를 정의한다. DDOS 공격을 방어하길 원하거나 당신의 웹 페이지가 GET 메소드를 사용한다면 GET도 추가한다. MS_WhiteList 옵션에는 감사에서 예외로 설정할 IP 주소가 담긴 파일을 정의한다. MS_CacheSize는 캐쉬할 IP 주소의 개수를 정의한다. 강한 DDOS 공격을 받는다면 이 값을 늘리는 것이 좋다.

  이 모듈은 사이트의 속도를 느리게 할 것이며 GET 같이 자주 사용하는 HTTP 메소드를 감시할 경우 더더욱 그럴 것이다. 이 문제를 해결하기 위해 자체적으로 rbldnsd(DNS 기반 블록리스트를 운영하기에 적절한 DNS 데몬)를 설치하여 ModSpamhaus에서 MS_DNS 옵션으로 그 주소를 지정할 수 있다. 자체적으로 rbldnsd를 운영하면 로컬 데이터베이스를 사용할 수 있고 외부 데이터베이스를 주기적으로 복사해올 수 있기 때문에 성능을 최적화할 수 있다.
2013/07/03 12:26 2013/07/03 12:26
Posted
Filed under 프로그램과 명령어/서버와 서비스
참조 원문 : Setting Up ProFTPd + TLS On Ubuntu 12.10

  제목에는 배포판의 특정 버전이 적혀 있지만 사실상 거의 영향이 없습니다. 앞으로도 설정 방법이 변하는 일은 좀처럼 없겠죠.

1. 참고사항
  호스트명은 server1.example.com이며, IP는 192.168.0.100으로 간주합니다. 모든 단계는 root 권한을 필요로 하므로 앞으로 나올 모든 명령어 앞에 sudo를 붙이던가 sudo su 명령어를 통해 root 권한을 획득하시기 바랍니다.

2. ProFTPd와 OpenSSL 설치
  TLS를 위해 OpenSSL이 필요하기 때문에 ProFTPd와 OpenSSL을 모두 설치해야 하며 이는 아래 명령어로 해결할 수 있습니다.
apt-get install proftpd openssl
  설치 중 proftpd를 standalone으로 돌릴 것인지 xinetd로 돌릴 것인지를 물어보는데 standalone으로 답합니다.
  보안을 이유로 /etc/proftpd/proftpd.conf 파일에 아래의 내용을 추가하는 것도 좋습니다.
[...]
DefaultRoot ~
ServerIdent on "FTP Server ready."
[...]

3. TLS를 위해 SSL 인증서 생성하기
  TLS를 사용하려면 SSL 인증서가 있어야 하는데 여기서는 /etc/proftpd/ssl 디렉토리 안에 만들어 넣는다고 가정하겠습니다. 먼저 디렉토리를 생성한 후 아래 명령어를 사용하여 인증서 생성을 위한 질문에 답합니다.
# openssl req -new -x509 -days 365 -nodes -out /etc/proftpd/ssl/proftpd.cert.pem -keyout /etc/proftpd/ssl/proftpd.key.pem
Country Name (2 letter code) [AU]: <-- 국가명(예: "KR").
State or Province Name (full name) [Some-State]: <-- 도
Locality Name (eg, city) []: <-- 도시
Organization Name (eg, company) [Internet Widgits Pty Ltd]: <-- 조직명
Name (e.g., the name of your company). 회사명
Organizational Unit Name (eg, section) []: <-- 부서명(예: "IT 부서").
Common Name (eg, YOUR name) []: <-- 시스템의 Fully Qualified Domain Name(예: "server1.example.com").
Email Address []: <-- 이메일 주소

4. ProFTPd에서 TLS 사용하기
  ProFTPd에서 TLS를 사용하려면 아래처럼 /etc/proftpd/proftpd.conf 파일에서 Include /etc/proftpd/tls.conf 라는 줄의 주석처리를 해제해야 합니다.
[...]
#
# This is used for FTPS connections
#
Include /etc/proftpd/tls.conf
[...]
  그 후 /etc/proftpd/tls.conf 파일을 열어 아래처럼 설정합니다.
<IfModule mod_tls.c>
TLSEngine                  on
TLSLog                     /var/log/proftpd/tls.log
TLSProtocol                SSLv23
TLSOptions                 NoCertRequest AllowClientRenegotiations
TLSRSACertificateFile      /etc/proftpd/ssl/proftpd.cert.pem
TLSRSACertificateKeyFile   /etc/proftpd/ssl/proftpd.key.pem
TLSVerifyClient            off
TLSRequired                on
</IfModule>
  TLSRequired on으로 설정하면 TLS 연결만 허용하므로 TLS를 지원하지 않는 FTP 클라이언트는 접속할 수 없습니다. TLS와 일반 접속을 모두 허용하려면 해당 줄을 주석처리 하거나 TLSRequired off로 설정합니다. 설정이 끝나면 ProFTPd를 리스타트합니다.
/etc/init.d/proftpd restart
  이제 모든 설정이 끝났으므로 FTP 클라이언트에서 알맞은 설정(TLS를 사용하여 접속하도록 설정)을 한 후 접속하면 됩니다. TLS와 관련된 문제가 발생 경우 /var/log/proftpd/tls.log 파일을 통해 내용을 확인할 수 있습니다.

2013/07/02 11:21 2013/07/02 11:21