Entries Tagged as 'Ubuntu & Linux/Unix'



mod_evasive - Protect your apache from DDos attacks!
Category : Ubuntu & Linux/Unix Comments : 댓글쓰기 Posted by 장창학 at 6:23 PM

mod_evasive는 Apache 모듈로서 간단하게 아파치 웹서버를 공격하는 DDos공격을 차단하는 모듈입니다. 하드웨어적으로 별도의 DDos방화벽을 설치하지 못하는 중소규모의 웹서버 및 소규모 VPS환경에서 비교적 효율적으로 사용할 수 있습니다. 하지만 성능이 웹서버의 성능에 좌우되므로 가장 최선의 방법은 웹서버와 별도로 하드웨어적인 DDos를 차단하는 솔루션을 고려해야 합니다. 여기서는 간단히 Apache 2.0이상의 웹서버에서 사용하는 방법을 살펴보겠습니다.

우선 mod_evasive를 다운로드합니다. http://www.zdziarski.com/projects/mod_evasive/ 에서 최신버전의 mod_evasive를 다운로드 합니다. wget으로 직접 경로를 서버상에서 받아도 되며, 다운로드후 다시 자신의 웹서버로 FTP업로드해도 상관없습니다. 가령 /home 경로에 업로드 했다고 가정합니다.

압축풀기 및 설치

tar xzvf mod_evasive_1.10.1.tar.gz
cd mod_evasive
/usr/local/apache2/bin/apxs -iac mod_evasive20.c


Apache2 환경설정

자신의 웹서버의 httpd.conf 파일을 열어 아래를 추가합니다. 그런 다음 Apache 웹서버를 재시작 합니다.

LoadModule evasive20_module /usr/local/apache2/modules/mod_evasive20.so

<IfModule mod_evasive.c>
        DOSHashTableSize          3097
        DOSPageCount              3
        DOSSiteCount                50
        DOSPageInterval            1
        DOSSiteInterval              1
        DOSBlockingPeriod        30

        DOSEmailNotify             test@test.com
        DOSLogDir                    "/usr/local/apache2/logs/mod_evasive.log"
        DOSSystemCommand   "iptables -I INPUT -s %s -j DROP"
    DOSWhitelist                     127.0.0.1
</IfModule>


모듈설정


모듈설정에 대한 자료는 http://guni.loveyust.net/136 에서 참조하였습니다. 다만, DOSSystemCommand 를 IPTABLES로 차단하도록 명령어를 변경했습니다. 참조하세요.

- DOSHashTableSize
각 자식 해쉬테이블 마다 탑레벨 노드의 수를 지정한다.
수치가 높으면 높을수록 더 많은 퍼포먼스가 나타나지만 테이블스페이스에 메모리를 남기게 된다,
접속량이 많으면 이 수치를 높혀도 된다.

- DOSPageCount
이것은 같은 페이지 또는 URI, 인터벌당 요청수에 대한 카운트 수이다.
지정된 값이 초과되면 클라이언트에 대한 IP 정보가 블러킹리스트에 추가된다.

- DOSSiteCount
지정된 시간동안 같은 페이지를 지정된 수 보다 초과될경우 IP 정보가 블러킹리스트에 추가된다.

- DOSPageInterval
페이지 카운트 시발점, 디폴트는 1초이다.

- DOSSiteInterval
사이트 카운트 시발점, 디폴트는 역시 1초이다.

- DOSBlockingPeriod
클라이언트가 블랙리스트에 추가되어 블러킹되는 총 시간. 이때 클라이언트는 403(Forbidden) 에러를 출력하게 된다.

- DOSEmailNotify
이 값이 지정되면, IP가 블러킹될때마다 지정된 이메일로 발동된다.
주의 : 메일러는 mod_dosevasive.c 에 정확하게 지정되야 한다. 디폴트는 "/bin/mail -t %s" 이다.

- DOSLogDir
로그 파일 경로

- DOSSystemCommand
이 값이 지정되면, 시스템은 아이피가 블러킹될때마다 명령행을 실행한다.

- DOSWhitelist
차단에서 제외될 호스트
DOSWhitelist    127.0.0.1


Installing fail2ban on Centos 5
Category : Securities , Ubuntu & Linux/Unix Comments : 댓글쓰기 Posted by 장창학 at 4:53 AM

제가 쓰고 있는 Cafe24의 VPS호스팅은 CentOS 기반입니다. 이 서버에 Fail2ban을 설치하고자 할때 보통은 yum install fail2ban 하시면 설치되지만 연결되는 저장소에 Fail2Ban이 없는 경우가 많습니다. 특히 국내 미러들은 말이죠.. 아마 거의 없다고 봐도.. 그래서 그냥 정신건강에 좋게 다음과 같이 소스를 받아다가 직접 업로드하고 설치해 봅니다.

먼저 http://sourceforge.net/projects/fail2ban/ 에서 최신 버전을 받습니다. 가장 최근 버전은 2009년 12월 24일 현재 fail2ban-0.8.4.tar.bz2 입니다. 이 파일을 자신의 서버에 업로드 합니다. root권한이 있어야 합니다. 업로드는 그냥 /root나 /home 아무대나 업로드 합니다. 예를 들어 /home에 업로드 했다고 합니다.

/home에서
tar -xjvf fail2ban-0.8.4.tar.bz2
cd fail2ban-0.8.4
python setup.py install

위 순서대로 압축을 풀고, 해당 디렉토리로 가서 파이선스크립트로 설치합니다. 그런다음, vi /etc/fail2ban/jail.conf 하여 설정을 해 줍니다.

그런다음 실행을 해줘야 하는데,  아무 경로에서 그냥 fail2ban-client start 해주시면 됩니다. fail2ban-client -h 하시면 다양한 실행옵션을 볼 수 있습니다. 이때 /var/log/아래에 sshd.log와 vsftpd.log가 없다고 에러나면, 그냥 touch 명령어로 해당 디렉토리에 두개의 파일을 만들어 줍니다. 

touch /var/log/sshd.log
touch /var/log/vsftpd.log

필요한경우 chmod 등 권한설정을 해주면 되겠죠? 이상하게 Fail2ban의 rpm 버전들은 Fail2Ban의 공식홈페이지에서 다운로드하려도 하면 해당 웹사이트들이 거의 문을 닫았거나, 오류가 나더군요. 이럴때는 apt-get으로 설치하는 우분투가 그립습니다. 이상한게 경험상 보면, CentOS의 미러 저장소들은 없는 패키지가 너무 많습니다. :(

 


Cafe24의 가상서버 상품시 체크할 사항 몇가지
Category : Miscellaneous , Ubuntu & Linux/Unix Comments : 2 Comments Posted by 장창학 at 5:05 AM

저는 이 블로그(이 블로그는 여러 테스트 성격상 단독서버에서 운영되고 있습니다) 외에 몇몇 웹사이트를 Cafe24의 가상서버(VPS) 호스팅을 이용하여 처리하고 있습니다. 국내에서도 이제 VPS는 대세인듯 합니다. 웹호스팅의 궁극점인 이제 VPS입니다. 저는 VPS를 애찬합니다. VPS가 왜 좋냐? 입 아프게 말씀드려봐야 다들 아시겠지만..

우선, 서버를 root권한을 가지고 뭐든 내맘대로가 가능하다는 점과 가격이 저렴하다는 것입니다. 일반 서버는 아무리 싸봐야 5만원이상이 대부분이고 그나마 쓸만한것은 10만원(/월)이 넘어가죠. 하지만 VPS는 거의 동일한 환경을 최소 1만원내외에서도 사용가능합니다. 물론 보안설정, APM설정 등 본인이 해야할일도 많이 생기기도 합니다만.. 어쨌든..ㅋ

두번째는 지구를 지킬 수 있습니다. 뭔 뜬금없는 소리냐 겠지만, 사실입니다. 1개의 웹사이트를 1대의 서버에서 운영하는 것보다, 여러개의 웹사이트를 운영하는 것이 전력소모량에서 유리합니다. 더 나아가 한대의 서버에서 여러대의 서버를 가상화하고, 다시 그 가상서버에서 여러 웹사이트를 운영하면 더 많은 전력을 아낄 수 있습니다. 물론 성능은 어느정도 감소합니다만, 사실 눈에 띄는 것은 아니거니와 필요에 따라 단독서버와 병행운영도 하기 때문에..큰 문제는 없겠지요. 그리고, 많은 상면(서버를 담아두는 캐비넷)과 공간을 줄일 수 있습니다.

국내에서도 주요 웹호스팅회사들이 가상서버상품을 팔고 있습니다만,  오늘은 Cafe24의 상품에 대하여 몇마디 하고자 합니다. 일단 타 회사의 상품의 Spec은 현저히 낮기때문에 제외하고자 합니다. Cafe24를 제외한 타 회사의 상품은 대부분 RAM제공량, CPU코어, HDD용량, 공인IP제공여부 등 Cafe24의 최상위 상품에 비해 휠씬 더 비싼 가격을 받고 있기에.. 실제로 Whois와 같은 곳은 개념없이 일반 단독서버의 가격을 청구하더군요.ㅋ

Cafe24의 최상위 상품의 사양은 RAM 2GB, HDD 40GB로서 CPU는 코어를 단독으로 제공하지 않는 Shared환경인것 같습니다.(요건 좀 불만..ㅋ) 가격은 2009년 11월 현재 16,500원/월 입니다. 상당히 저렴하죠. 가상화방식은 Citrix의 Xen을 이용하고 있습니다. 게스트OS(사용자 OS)는 CentOS를 제공합니다. APM설치는 선택사항입니다.

저는 리눅스배포판중 Ubuntu를 가장 합리적이고, 가장 가벼우며, 가장 필요한 패키지만 담은 최상의 배포판이라 생각하고 있습니다. 당연 서버OS 역시 Ubuntu Server Edition을 선호합니다. 클라우드지원, 클러스터구성 등이 최근에야 지원되고 있지만 일반 X86서버로는 CD한장이 다인 이 우분투가 더 좋습니다. 반면 RHEL의 복사판인 CentOS는 설치 디스크만 DVD한장입니다. 뭐가 그리 많은지..

사실 APM웹서버를 운영해 본 관리자라면 커널과 최소한의 시스템 유지 데몬과 APM만 있으면 됩니다. 다른 패키지는 사실상 쓸일도 없습니다만, 오늘 Cafe24의 가상서버 상품을 좀 씹어보려고 하는 이유가 바로 이것입니다. 사실 CentOS는 너무 많은 패키지를 설치시에 깔아댑니다. 물론 TEXT방식의 경량화 설치옵션도 있습니다만, 기본적인 시스템 구성 및 패키지관리는 그닥 맘에 들지 않습니다. 따라서 저와 같은 생각을 가진 분들이 Cafe24의 가상서버를 신청하시기 전에 알아두면 도움 될만한 몇가지를 소개하려고 합니다.

1. 설치 OS의 제한

Cafe24의 가상서버는 오로지 CentOS만 지원합니다. 전에는 Fedora도 지원했습니다만, 사실 둘의 차이점은 이름 뿐 둘다 Redhat의 복사본입니다. 따라서 APT의 편리함과 Debian의 시스템에 익숙한 분은 좀 아니다 싶은 Redhat방식을 이용해야 합니다. 사실 대부분의 리눅스는 레드햇이다 싶을 정도로 많이들 쓰지만 저는 레드햇에서 제일 맘에 안드는 부분이 바로 패키지의 관리입니다. 또 전문가별로 어떤이는 APM를 소스컴파일해서 설치해야 한다, 어떤이는 RPM으로 깔아야 한다 주장하고 있고, 그나마 소스 컴파일하는 설치디렉토리도 어떤이는 home디렉토리에서 어떤이는 opt에서 여튼 재각각입니다. 따라서 초보관리자에게는 엄청 헛갈리게 하는 계열입니다. 물론 rpm으로 설치하면 레드햇에서 지정한 경로에 설치를 합니다만, 대부분의 레드햇 계열의 시스템에서 APM을 관리하다보면 도대체 APM을 어따 설치해 놨는지 한참을 찾을때가 제일 짜증납니다. 두번째는 보안사항인데 console환경에서 iptables를 관리하는 별도의 유틸이 없어 좀 어려운 iptables를 써야 합니다. 아쉽지만 뭐 그게 정석이니 일단 이건 넘어가지만 우분투는 ufw가 있고, apt의 패키지 관리는 정확하고 항상 경로가 일정하기 때문에 대부분의 우분투시스템은 APM의 경로가 동일합니다. 물론 우분투에서도 소스컴파일하여 설치할 수 있지만 우분투를 쓰는 관리자라면 그짓이 얼마나 미련한 짓인지는 잘 알겁니다.

Cafe24의 가상서버 상품에서도 우분투를 만날 수 있으면 좋겠습니다.

2. 불필요한 패키지의 설치 및 구동

CentOS는 서버설치시 bluetooth, cups, nfs 등 사실상 APM서버에서는 거의 쓰지 않는 패키지가 설치되고 또 부팅시 이들 데몬이 뜨게 되어 있습니다. 서버에서 주변 서버와 블루투스 통신할 일도 없는데 말입니다. 물론 cups와 같이 프린터관리 및공유를 할 일도 없습니다. 또 다른 서버시스템과 공유할 일도 사실 거의 없습니다. 그런데 튜닝이 안된 CentOS를 쓰다보니 이런 패키지와 데몬이 설치되고 뜨게 되므로 관리자는 부팅시마다 관련 데몬을 중지하거나 패키지를 삭제해야 합니다. (씨바 삭제할때도 소스컴파일로 설치했는지, RPM인지 알아내서 지워야 하니 정말 짜증 입빠이입니다.) 또한 Bind도 기본으로 돕니다. 네임서버는 가급적 DNSEver와 같은 외부서비스를 이용하라고 하고 싶습니다. 물론 자사의 도메인을 네임서버로 이용할 수 없지만, DNS질의가 많아지면 그만큼 서버성능 떨어지며, DNS가 공격을 받을 수 있습니다. 더욱이 가상서버와 같은 물리적 서버의 스펙을 극한을 돌리는 환경에서는 더더욱..성능 문제 있습니다. 또한 VsFTP도 돕니다. FTP는 가급적 안돌리는게 좋습니다. SSH가 되므로 SFTP를 이용하게끔 하면 됩니다. 저의 경우 지금 열거한 서비스는 모두 중지합니다. Bind는 아예 지워버렸습니다.

3. 보안

보안하면 저는 우분투입니다만, CentOS는 기본적으로 개방이 기본 보안정책입니다. 외부에서 port검사를 하면 거의 열려 있더군요. 아까도 말씀드렸지만 iptables를 이용해서 일단 SSH와 SFTP이용 IP지정 및 특정포트만 오픈하고 나머지를 막아둬야 합니다. ClamAV와 같은 바이러스백신은 별도로 알아서 설치해야 합니다. 저의 경우 귀찮아서 그냥 YUM으로 설치했습니다. PHP보안설정을 위한 php.ini의 경로는 /etc에 있습니다. 물론 MySQL의 설정을 위한 my.cnf도 /etc에 있습니다. APM구동 및 주요 데몬의 구동은 /etc/init.d에 있습니다. 웹방화벽 Mod Security 및 Eavassive 등은 별도로 관리자가 추가해야 합니다. SSH보안을 위한 Fail2ban도 역시 본인이 알아서 추가해야 합니다. 짜증나는것은 이런것을 알아서 설치하는 것이 아니라 설치방법이 YUM을 이용하면 편리하긴 하지만 우분투의 APT에 비해 좀 더 유연하지 않다는 것에 있습니다. 소스컴파일 설치는 생각만 해도 짜증 입빠이입니다.ㅋ

4. MySQL

기본적으로 APM이 Apache는 2버전대, PHP와 MySQL은 5버전대를 깔아줍니다. MySQL은 DB나, 커넥션셋 등이 Latin1으로 잡혀 있기 때문에 적절히 UT-8환경으로 미리 변경해야 합니다. 또한 3306포트가 오픈되어 있기 때문에 방화벽에서 막거나, my.cnf에서 외부접속을 허용하지 않아야 합니다.

5. JDK 등

JDK는 설치되어 있지 않습니다. 가급적 Sun의 JDK를 받기를 권합니다. 우분투도 OpenJDK가 기본 JDK라서 좀 짜증인데.. 특정 WAS등에서는 Sun사의 JDK만 원합니다. 또 Tomcat 등도 별도 설치해야 합니다. JDK의 로케일 설정도 확인해야 합니다. MTA는 기본적으로 Sendmail이 설치됩니다만, 저의 경우 ColdFusion관련 WAS를 이용한 웹사이트라서 ColdFusion엔진들이 제공하는 편리한 외부 SMTP지원을 쓰기때문에 사실 Sendmail은 필요가 없습니다. 보안상 Sendmail은 쓰지 않습니다. 시스템에서 ROOT계정에게 보내는 메일도 받기 싫고요..ㅋㅋㅋㅋㅋ ColdFusion이 PHP보다 좋은 수만가지 중에 외부SMTP기능이 너무 간편하다는 겁니다. PHP도 외부 SMTP를 쓸 수 있지만.. 코드가 길어지고.. 암튼..짜증 지대롭니다.ㅋ

이상 몇가지 Cafe24 가상 서버에 대하여 몇마디 드렸습니다. 혹시 신청하려는 분들께 쬐까 도움되셨는지 모르겠습니다.


CentOS iptables 설정 쉘스크립트
Category : Ubuntu & Linux/Unix , Securities Comments : 댓글쓰기 Posted by 장창학 at 5:53 PM

제가 사랑하는 Ubuntu Server Edition은 UFW라는 기본 방화벽 설정 Tool이 있습니다. 내부적으로는 iptables로 적용되지만, Rule설정 및 사용법은 쉽게 만든 것인데요. 일반적으로 다음과 같이 쓰입니다.

# 123.456.789.0 아이피만 SSH로 접속가능하게 하려면
sudo ufw allow from 123.456.789.0 to any port 22

이렇게 설정하면 해당 아이피만 22번으로 들어올 수 있고, 나머지는 거부합니다. 물론 UFW는 우분투를 설치 후 자동으로 활성화 되지 않기 때문에 설치 후 맨먼저 sudo ufw enable로 활성화 해준 다음(비활성화하고자 한다면 sudo ufw disable하면됩니다.) Rule를 추가해주면 되고, 설정상황을 보려면 sudo ufw status로 확인할 수 있습니다.(쉘상의 아무곳에서나 설정가능)

하지만, 우분투도 내부적으로는 iptables를 사용하기 때문에 UFW로 Rule을 추가후에 iptables -L해보면 UFW의 Rule이  iptables 형식으로 지정되어 있다는 것을 확인 가능할 것 입니다.

문제는 iptables가 좀 어렵다는 겁니다. 저 역시 아직 머리속에 다 넣지 못하고(사실 아예 넣지 못하고) 있습니다. UFW는 사용법을 아는데 말입니다. 저의 경우 Ubuntu 뿐만 아니라, CentOS도 사용을 하는데 CentOS와 같은 Redhat 계열의 리눅스에서는 UFW가 없으므로 iptables로 방화벽을 설정해야 하는데, 어렵기도 하고 귀찮아서 다음과 같은 쉘 스크립트를 만들었습니다. 적절히 수정해서 ROOT권한으로 실행하세요. 단, 웹디렉토리안에 이 쉘파일이 절대로 있어서는 안됩니다.(초보자가 FTP로 이 쉘을 자신의 홈페이지 루트에 올려 발생하는 모든 일은 본인의 행동을 탓하시길 바랍니다.) 시스템관리자만 사용하세요. 물론 웹호스팅환경에서는 실행도 안되거니와 혹시 실행되었다고 한다면 아마 본인은 해당 웹호스팅사로부터 막대한 피해보상을 청구당할 수 있습니다. (절대 시스템관리자만 사용할것)  

#!/bin/bash
IPTABLES=/sbin/iptables

#Rule정의
$IPTABLES -F INPUT
$IPTABLES -F OUTPUT

#Localhost에서의 Taraffic은 허용
$IPTABLES -A INPUT  -i lo -j ACCEPT
$IPTABLES -A OUTPUT  -o lo -j ACCEPT

#알수 없는 패킷은 거부
$IPTABLES -A INPUT  -m state --state INVALID -j DROP
$IPTABLES -A OUTPUT -m state --state INVALID -j DROP

#응답이 있었던 접속이나 관련된 접속 허용
$IPTABLES -A INPUT -p tcp -m state --state ESTABLISHED,RELATED -j ACCEPT

#시스템에서 사용하는 기본 포트설정 :  아이피주소 부분은 원하는 주소로 변경하세요.
#22번은 SSH포트이므로 특정 아이피에서만 접속가능하도록 하는 것이 좋습니다.
#25번 포트는 Sendmail이며, 80은 Web, 53/953번은 DNS서버, 110은 메일수신포트입니다.
$IPTABLES -A INPUT -p tcp -s 아이피주소 --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT
$IPTABLES -A INPUT -p tcp --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT
$IPTABLES -A INPUT -p tcp --dport 25 -m state --state NEW,ESTABLISHED -j ACCEPT
$IPTABLES -A INPUT -p tcp --dport 110 -m state --state NEW,ESTABLISHED -j ACCEPT
$IPTABLES -A INPUT -p tcp --dport 53 -m state --state NEW,ESTABLISHED -j ACCEPT
$IPTABLES -A INPUT -p tcp --dport 953 -m state --state NEW,ESTABLISHED -j ACCEPT

#서버로 들어오는 모든 포트 차단
$IPTABLES -A INPUT -p tcp -j DROP

Download


Ubuntu 9.10 Released.
Category : Ubuntu & Linux/Unix Comments : 댓글쓰기 Posted by 장창학 at 6:03 AM

Ubuntu 9.10우분투 9.10이 드디어 나왔습니다. 10월이 가기전에 나오긴 했으니, 9.10 은 맞네요. ^^ 2009년 10월이니까요. 이번 버전은 2011년까지 지원됩니다. 세상 대부분의 리눅스 배포판이 마치 오픈소스를 통하여 100% 무료인것 처럼 나불대지만 사실 좀 쓸만한것은 유료로 제공하는데다, Redhat기반의 복제판(CentOS)이 리눅스 서버의 대세로 판치는 세상에서, 유일하게 100% 무료로 영원히 갈것임을 철학으로 철저히 밝히는 우분투. 발로 리눅스한다는 한수위의 시스템운영이 가능한 Debian기반의 우분투.

아직 한국에서 우분투를 웹호스팅하는 곳이 없지만, 언젠가 제가 제소유의 서버를 가지는 날도..ㅋ 우분투를 써주겠습니다.(물론 회사의 모든 서버는 우분투로 이미 안정적으로 말썽없이 운영중이지만..) 데탑, 서버 구분없는 CentOS보단 보안적인 측면이나 관리측면에서 훨씬 유리하다는 말을 애절하게 드리고 싶습니다. 왜냐구 물으신다면.. 구구절절 CentOS를 까야 하므로 입 아픕니다. 오늘 막 나온 따끈한 녀석이라 그런지 매우 느립니다. 다운로드.. 국내 미러보다는 일본쪽 미러가 더 빠르네요.^^ 참고하세요.

Get Ubuntu 9.10 Now


About me

Categories

Monthly Archives

Links

Recent Posts

Recent Comments