아파치 데몬은 떠 있는데, 접속이 되지 않는 경우

분명 데몬은 정상적으로 떠 있고 MaxClients에 도달하지도 않았는데, 실제로 접속이 되지 않는 경우가 있다. 이러한 경우라면 웹 서버가 TCP SYN Flooding 공격을 받고 있을 가능성이 있다. netstat -na | grep SYN으로 확인하여 많은 SYN_RECEIVED 프로세스가 보인다면 이 공격 때문이며 이러한 경우에는 첫 번 째 줄의 명령을 사용하거나 두 번째 줄의 syncookies 기능을 enable하면 된다.

# sysctl ?w net.ipv4.tcp_syncookies=1
# echo 1 > /proc/sys/net/ipv4/tcp_syncookies
Syncookie 기능은 일단 커널에서 지원되어야 하므로 이 설정이 적용되지 않으면 커널에서의 설정여부를 확인해 보아야 한다. 이 공격에 대한 보다 자세한 내용은 본지 7월호에 실린 “TCP SYN Flooding 공격의 원인과 해결책”을 참고 하기 바란다.

크리에이티브 커먼즈 라이센스
Creative Commons License
이올린에 북마크하기

Posted by 홍반장

2004/08/17 13:39 2004/08/17 13:39
Response
No Trackback , No Comment
RSS :
http://tcbs17.cafe24.com/tc/rss/response/212

외부의 데이터 무단 링크로 인한 부하 없애기

최근에 와레즈 사이트를 통해 게임이나 오락, 동영상 등 각종 데이터들이 공유 되면서 와레즈 사이트에서 관련 없는 임의의 서버에 데이터를 업로드한 후 무 단 링크하여 서비스하는 경우가 많다. 이러한 경우 데이터 전송량이 갑자기 늘 어 서버의 부하가 급격히 올라감은 물론 한정된 회선의 대역폭도 소모하게 되 어 서버를 관리하는 관리자들에게는 이러한 무단링크가 큰 골치 거리 중에 하 나다.

대부분의 무단 링크가 대용량이기 때문에 이를 차단하기 위해 위와 같이 LimitRequestBody를 이용하여 임의의 용량 이상의 데이터에 대한 업/다운로드 용량을 제한하는 방법도 있지만 다음과 같이 BrowserMatch 대신 SetEnvIFNoCase Referer를 이용하는 방법도 있다.

SetEnvIFNoCase Referer "warez" link_deny
SetEnvIFNoCase Referer "free" link_deny
SetEnvIFNoCase Referer "home" link_deny


Order allow,deny
allow from all
deny from env=link_deny

위와 같이 설정 시에는 Referer이 warez 또는 free나 home이 포함되었을 경우 이 사이트를 link_deny라는 변수에 할당하고, 환경변수가 link_deny일 때는 확 장자가 avi나 mprg, zip, asf 등인 파일에 대한 엑세스를 제한하고 있다. 따라서 홈페이지 주소에 warez나 free 또는 home이 포함된 주소에서 위의 데이터를 무단 링크하였을 경우에는 이를 차단할 수 있다. Nocase를 추가로 설정하였을 경우에는 대소문자를 가리지 않아 링크하는 사이트가 대소문자에 관계없이 http://my.warez.org/, http://My.Warez.Org/, http://MY. WAREZ.ORG/ 모두 적용된다.

다른 확장자를 추가하고나 설정을 변경하고자 할 경우에는 정규식(Regular Expression)을 이용하여 설정하면 된다. 또는 이와는 반대로 아예 httpd.conf 에서 다음과 같이 설정할 수도 있다.


ServerAdmin webmaster@tt.co.kr
DocumentRoot /home/tt/public_html
ServerName tt.co.kr
ServerAlias www.tt.co.kr
SetEnvIf Referer tt.co.kr link_allow
SetEnvIf Referer www.tt.co.kr link_allow
SetEnvIf Referer ^$ link_allow
Order Deny,Allow
Allow from env=link_allow
Deny from all


위와 같이 설정하였을 경우 외부에서는 mpg, asf, wmv 확장자를 갖는 파일에 대해서는 일체의 무단 자료 링크가 불가능하게 되며 오직 link_allow에서 지정 한 도메인에서만 링크가 가능하게 된다. 위와 같이 설정 후 외부에서 무단 링크를 하였을 때 error_log를 살펴보면 다음과 같이 무단으로 링크한 자료의 다운로드가 작동하지 않는 것을 확인할 수 있다.

[Tue Sep 4 15:55:44 2001] [error] [client 211.230.82.78] client denied by server configuration: /home/tt/public_html/data/3-2.wmv
크리에이티브 커먼즈 라이센스
Creative Commons License
이올린에 북마크하기

Posted by 홍반장

2004/08/17 13:39 2004/08/17 13:39
Response
No Trackback , No Comment
RSS :
http://tcbs17.cafe24.com/tc/rss/response/211

특정한 이름의 파일을 실행을 제한하려면

최근에는 대부분의 사이트들이 대화방(채팅)을 위해 자바로 프로그래밍된 자바 대화방을 사용하는 추세이지만 얼마 전까지만 하더라도 C나 펄로 된 CGI 대 화방을 설치하여 사용하는 것이 유행이었다. 그런데 이 대화방의 경우 대화방 에 참여하는 유저 중 한 명이 글을 입력할 경우 모든 유저에게 이 내용이 실시 간으로 나타나야 하는 특성상 시스템의 메모리를 매우 많이 소모하는 대표적 인 프로그램 중 하나였다.

따라서 채팅 CGI 프로그램을 원천적으로 사용할 수 없도록 하는 방법을 고민하게 되었는데, 해결 방법은 대부분의 채팅 프로그램이 xxxchat.cgi 또는 chatxxx.cgi라는 파일을 실행 파일 이름으로 한다는 특징을 이용하면 된다. 즉, httpd.conf를 열어 다음과 같이 설정하면 파일명에 ‘chat’이라는 단어 가 포함된 CGI 파일은 작동하지 않게 되는 것이다.


Order allow,deny
Deny from all

이러한 방식으로 특정한 파일에 대해 웹에서의 접근을 차단할 수 있다. 따라 서 CGI 파일에 아무리 소유권과 실행 권한을 주었다 하더라도 웹 서버 자체에 서 접근을 거부하였으므로 웹에서 접근하면 Forbidden’에러가 나게 된다. 이러한 식으로 특정 파일 이름을 가진 파일의 실행이나 접근을 차단할 수 있다.

크리에이티브 커먼즈 라이센스
Creative Commons License
이올린에 북마크하기

Posted by 홍반장

2004/08/17 13:38 2004/08/17 13:38
Response
No Trackback , No Comment
RSS :
http://tcbs17.cafe24.com/tc/rss/response/210

용량 큰 파일의 업/다운로드시 부하가 유발될 경우

누구나 업/다운로드가 가능한 자료실을 운영하고 있을 경우 사이즈가 너무 큰 파일을 업/다운로드 할 경우 부하가 많이 걸리게 되어 결국 시스템의 성능 저 하를 유발하게 된다. 최근 배포되는 게시판/자료실 프로그램에서는 대부분 업로드할 수 있는 용량 등을 제한할 수 있는 기능이 있지만 그렇지 않은 프로그램도 상당수 있어 웹 서버 차원에서 이 제한을 적절히 설정할 필요가 있다. 아파치에서는 이와 관련하여 웹 서버에서 업/다운로드 할 수 있는 파일의 사이즈를 제한하는 Limit RequestBody 기능을 이용할 수 있다.

LimitRequestBody는 클라이언트가 요청시 http 프로토콜을 통해 서버가 제공 할 수 있는 메시지의 크기를 바이트 단위로 정의하는 것으로 무한대를 의미하는 0부터 2,147,483,647(2Giga)까지 설정 가능하며 이 설정으로 대용량의 파일 을 업/다운로드 하는 형태의 서비스 거부 공격을 차단할 수 있다. 이를 설정하는 방법은 httpd.conf를 열어 다음과 같은 라인을 추가하면 된다.


LimitRequestBody 7168000


LimitRequestBody 10240000

위와 같이 LimitRequestBody 인자를 설정하면 아파치 웹 서버를 이용하여 업/ 다운로드 하는 모든 파일의 사이즈를 7MB로 제한하고 /home/special/ 이하에 대해서는 10MB로 제한하게 된다. 위와 같이 설정시 지정된 사이즈를 초과하는 파일을 업/다운로드 시에는 다음 그림과 같은 에러 메시지가 뜨며 업/다운 로드가 되지 않는다.

크리에이티브 커먼즈 라이센스
Creative Commons License
이올린에 북마크하기

Posted by 홍반장

2004/08/17 13:38 2004/08/17 13:38
Response
No Trackback , No Comment
RSS :
http://tcbs17.cafe24.com/tc/rss/response/209

프로세스가 과도한 메모리를 사용할 경우

특별히 이상한 프로세스는 없는데, 시스템의 부하가 갑자기 올라가는 경우가 있다. 심할 경우에는 콘솔에서 키 작동이 되지 않아 제어 자체가 불가능한 경 우도 있는데, 이러한 경우는 어쩔 수 없이 시스템을 재 시작하는 수밖에 없다. 이는 의도적이든 아니든 유저가 cgi나 php 등의 프로그램을 잘못 짜서 과도한 메모리를 소모하는 프로세스를 실행하기 때문인 경우인데, 실제로 시스템의 메 모리를 많이 소모하는 프로그램을 짜는 것은 단 몇 줄의 코드로도 가능하다. 다음과 같이 메모리를 소모하는 간단한 C 코드를 작성해 보자(참고로 스크립트 키드의 악용을 막기 위해 코드 중 일부를 변경하였다).

/* memory.c */

#include
#include

void html_content(void);

int main() {
char *some_memory;
int size_to_allocate = ONE_K;
int megs_obtained = 0;
int ks_obtained = 0;

html_content();
printf("Program Executed !!!

");

while (1) {
for (ks_obtained = 0; ks_obtained < 1024; ks_obtained++) {
some_memory = (char *)malloc(size_to_allocate);
if (some_memory == NULL) exit(EXIT_FAILURE);
sprintf(some_memory, "Hello World");
}
printf("Now allocated %d Megabytes

", megs_obtained);
}
exit(0);
}

void html_content(void)
{
printf("Content-type: text/html

");
}
작성 후 gcc -o memory.cgi memory.c로 컴파일 한 후 이 파일을 http://domain.com/memory.cgi와 같이 웹에서 실행해 보도록 하자. 아무리 메 모리와 CPU의 여유가 있는 시스템이라 하더라도 이 프로그램을 실행하자마자 거의 통제 불능 상태로 되어 결국 시스템 재부팅하게 될 것이다. 이렇듯이 메 모리를 무한정 소모하는 것을 차단하기 위해서는 아파치의 설정 인자 (Directive) 중에서 RLimitMEM을 사용하여 차단할 수 있다. 이 인자는 아파치 웹 서버에서 생성된 특정 프로세스가 작동시 소요 가능한 최대 메모리의 양을 제한하는 것으로 메모리를 많이 소모하는 CGI가 작동할 때 이 인자에서 지정 된 메모리까지만 실행이 되고 그 이상 소요시에는 더 이상 작동하지 않도록 해 준다.


예를 들어 httpd.conf에 다음과 같이 설정하였다면 모든 디렉토리에서는 메모 리를 20MB나 최대 21MB까지만 사용이 가능하고 /home /special/public_html/* 디렉토리 이하에 접근 시에는 특별히 50MB까지 메모리 이용이 가능하게 된다.

RLimitMEM 20480000 21504000


RLimitMEM 51200000 52224000

실제로 위와 같이 설정 후 memory.cgi를 웹에서 호출하면 아래와 같이 일정량 의 메모리만 사용되고 중단하는 것을 확인할 수 있다. 이와 비슷한 인자로 CPU 점유율을 제한하는 RLimitCPU와 사용자당 프로세스의 개수를 제한할 수 있는 RLimitNPROC이 있다. 이에 대해서는 http://httpd.apache.org/docs-2.0/mod/core.html를 참고하기 바란다.

크리에이티브 커먼즈 라이센스
Creative Commons License
이올린에 북마크하기

Posted by 홍반장

2004/08/17 13:36 2004/08/17 13:36
Response
No Trackback , No Comment
RSS :
http://tcbs17.cafe24.com/tc/rss/response/208

include를 잘못하여 무한 루프가 돌 경우

요즘에는 php와 mysql을 연동하여 많이 사용하고 있는데, 프로그래밍 과정에서 의 실수로 php 파일에서 같은 php 파일을 include하는 경우가 있다. 또는 a.php 파일에서 b.php 파일을 include하고 b.php 파일에서 다시 a.php 파일을 include하는 경우도 그러한 경우일 것이다. 이러한 경우에는 무한 루프가 돌 게 되어 결국은 아파치 데몬이 금새 Maxclients에서 지정한 개수로 차 버리게 되는데, 어떤 파일에서 무한 루프가 돌고 있는지 찾기가 힘들다. 따라서 임시로 다음과 같이 include를 하지 못하도록 차단을 하는 방법이 있다.

# iptables -A INPUT -p tcp -i lo -s xxx.xxx.xxx.xxx --sport 1024:65535 -j DROP
이는 같이 서버 내에서 include 시에는 lo(Lookback Interface)를 통해 sport 가 1024 이후의 하이 포트를 이용하여 통신한다는 특성을 이용한 것이다. 그러 나 이 설정을 하였을 경우 로컬 서버에서 클라이언트 포트를 전혀 사용할 수 없게 되므로 다른 서비스에도 장애가 되기 때문에 임시로만 사용하기 바란다. 또는 ps aux | grep http로 보이는 프로세스에서 ls -la/proc /pid/로 각각의 http 프로세스가 어떤 파일을 참조하고 있는지 일일이 추적하는 방법도 있다.

(예:cwd -> /home/user1/public_html/infinite_loop/)

크리에이티브 커먼즈 라이센스
Creative Commons License
이올린에 북마크하기

Posted by 홍반장

2004/08/17 13:35 2004/08/17 13:35
Response
No Trackback , No Comment
RSS :
http://tcbs17.cafe24.com/tc/rss/response/207

서비스 거부 공격(DoS)이 가해졌을 때
DoS는 동시에 서비스할 수 있는 프로세스의 한계가 있다는 점을 악용한 공격이 다. 한번의 실행으로 100개나 200개 등 원하는 만큼의 동시 접속을 맺은 후 이 접속을 끊지 않고 유지할 수 있는 공격 코드가 인터넷 상에 공개되어 있 다. 그러나 이러한 공격의 경우 공격지의 IP를 속이기가 매우 어려우므로 netstat으로 확인 후 비정상적인 접속으로 확인 될 경우 해당 IP를 차단하면 된다.

특정 IP의 라우팅을 차단하는 방법은 다음과 같이 route를 이용한 방법과 iptables(커널 2.4 이상)를 이용한 방법 두 가지가 있다.
크리에이티브 커먼즈 라이센스
Creative Commons License
이올린에 북마크하기

Posted by 홍반장

2004/08/17 13:35 2004/08/17 13:35
Response
No Trackback , No Comment
RSS :
http://tcbs17.cafe24.com/tc/rss/response/206

passwd 계정 백업, 복구

백업 방법이 틀려서 그렇습니다. :-)

정확하게 계정의 백업은 다음의 루틴을 따르면 별 무리 없습니다.

[ 계정 백업할 서버 ]

1. pwunconv 명령을 실행해서 shadow passwd 를 푼다.
(shadow 파일 없어지고 /etc/passwd 에 암호화된 문자열이 복원)
2. grpunconv 명령으로 gshadow 를 푼다.
3. 계정 홈과 /var/spool/mail/메일함 /etc/passwd. /etc/group 을
백업한다.
4. pwconv, grpconv 명령으로 다시 shadow 시킨다.

[ 복구할 서버 ]

1. 백업한 계정 홈과 메일함을 원위치 시킨다.
2. pwunconv, grpunconv 명령으로 shdow 를 푼다.
3. /etc/passwd, /etc/group 을 복원한다.
4. pwconv, grpconv 명령으로 shadow 를 복원한다.





http://www.oops.org/SERVICE/jsboard/read.php?table=jsboard_oopsQnA&no=35010&page=1&o[sc]=a&o[ss]=grpconv&o[st]=a&o[at]=s&o[sct]=s&o[stt]=s
크리에이티브 커먼즈 라이센스
Creative Commons License
이올린에 북마크하기

Posted by 홍반장

2004/08/13 17:04 2004/08/13 17:04
Response
No Trackback , No Comment
RSS :
http://tcbs17.cafe24.com/tc/rss/response/205

아~ 두대의 서버에서 자원이 여유가 있어 한대의 서버에서 통합운영을 고려하시는가 보시네
요.

저도 예전 직장에서 이런 작업을 수도(?) 없이 한지라 문제없이 잘 됩니다.
다만 UID, GID 같이 틀려지게 된다면 거의 노가대 수준이라고 보시면 되구요.

그리고 말씀하신것처럼 수동으로 UID 생성하시면 데이터 옮겨오면 전부 달라집니다.
이건 꼭 주의하셔야 하구요.

우선 시작하기 전에 앞서
모든 서버에서 grpck, pwck 명령으로 필요없는 해당아이디를 삭제처리하신후에
예제를 쉽게 하기 위해 1(운영될 서버), 2(중단될 서버),

1~2 서버에서 pwunconv, grpunconv 이렇게 명령어를 하게 되면
/etc/passwd 에 shadow파일이 붙게 됩니다.

이 상태에서 2번에 있는 /etc/passwd 파일을 열어 1번에 있는 /etc/passwd 에 붙여넣기를
하는데 조심스럽게 하실 부분은 중복되는 UID는 삭제처리르 하시거나, 필요한 부분만 복사
를 해야합니다.
그리고 2번의 /etc/group 열어서 1번에 /etc/group 에 마찬가지로 붙여넣기를 하신후에
pwconv, grpconv 하시면 간단히 끝납니다. 그리고 데이터는 tar 압축으로 하시면 될거에요.

참 그리고 마지막으로 pwck, grpck로 다시한번 필요없는 UID는 정리해 주시구요.
아마 pwconv, grpconv 하다가 제대로 안된다면 파일비교를 하거나, 문제가 있는 라인이 있
을거에요.

그럼 성공하시길...
크리에이티브 커먼즈 라이센스
Creative Commons License
이올린에 북마크하기

Posted by 홍반장

2004/08/13 16:12 2004/08/13 16:12
Response
No Trackback , No Comment
RSS :
http://tcbs17.cafe24.com/tc/rss/response/204

인증서 설치


https://www.thawte.co.kr/doc.asp?t_ssl

1. 인증서의 설치 절차
Thawte에 인증서를 신청하거나 무료테스트 인증서를 신청화면 텍스트화일 형태의 인증서를 받게 됩니다. 인증서의 형식은 CSR과 마찬가지로 Ascii텍스트로 암호화된 문장으로 구성되어 있습니다.


BEGIN CERTIFICATE와 END CERTIFICATE를 포함한 텍스트를 *.crt혹은 *.der, *.cer등 다양한 확장자로 저장합니다. 각 웹서버에서 이 인증화일을 불러들일 준비를 합니다

2. Apache(modSSL)
Apache 서버의 conf/httpd.conf 화일의 다음 항목을 찾아 옵션을 다음과 같이 변경합니다. ㅐ
현재 임시 인증서, 또는 교체해야할 인증서가 있으시다면 이를 백업합니다. 그리고 새로이 만든 파일로 이를 교체합니다.
받은 인증서의 -----BEGIN CERTIFICATE----- and -----END CERTIFICATE-----에 해당하는 부분을 mycert.crt로 저장합니다. 그리고 Apache에 옵션 변경을 합니다. SSLCertificateFile /path/conf/ssl.crt/mycert.crt
SSLCertificateKeyFile /path/conf/ssl.key/mycert.key
mycert.key는 CSR을 생성할 때 생기는 개인키로서, Thawte의 무료 CSR생성기를 통하여 CSR을 생성하셨다면, 메일로 보내졌습니다. 대부분 Apache 인스톨과정에서 make certificate를 통해 생성된 개인키는 conf/ssl.key 디렉토리 아래에 저장이 됩니다.
아파치 SSL을 구동시킵니다 apache/bin/apachectl startssl
2. Microsoft IIS4.0
Start > Program > Microsoft Management 를 실행합니다.
운영하는 웹사이트를 선택하고 Key Manager 아이콘을 클릭합니다.
Key > Install Certificate를 선택하면 Install Wizard가 실행됩니다.
인증서를 저장한 mycert.txt 화일을 선택합니다.
암호를 입력합니다.
Server Bindings 박스에서 Add를 눌러 443번 포트를 지정합니다.
Micfosoft Management > Website Advanced콘솔에서 웹사이트 등록정보에 방금 설정한 IP와 포트번호인 443번을 입력합니다.
모든 설치과정이 완료되면 서버를 재시동 합니다.
3. Microsoft IIS5.0
시작 > 프로그램 > 관리도구 > 인터넷 서비스 관리자를 선택합니다.
기본 웹사이트에서 인증서를 사용할 웹서버를 선택한 후 마우스 오른쪽 버튼 클릭해서 등록정보를 봅니다.
디렉터리 보안 탭을 누릅니다.
보안 통신에서 서버 인증서를 선택하면 웹서버인증 마법사가 나타납니다.
신청한 인증서를 설치합니다를 선택합니다.
Thawte로 부터 받은 CRT화일을 불러옵니다.
마침을 눌러 인증서 설치를 마칩니다.
웹사이트의 고급을 선택합니다.
이 웹사이트의 복수SSLID에 추가를 선택하고, IP주소를 선택한 다음 확인을 누릅니다. SSL포트에는 443이라고 적습니다.
IIS를 재구동하고 https://로 접근하여 SSL서버가 구동되는지 확인합니다.
스냅샷으로 보기
7. Netscape Enterprise Server
1. 개인키의 생성
루트로 로그인하고 서버 루트 디렉토리로 들어 갑니다. 서버가 설치된 디렉토리입니다.
bin/admin/admin/bin/sec-key프로그램을 실행합니다. Windows 실행.
입력 메시지가 나타나면 새로운 CSR의 이름을 입력합니다. 이름은 흔히 서버명을 사용하며, 공백은 포함시키지 않습니다.
입력 메시지가 나타나면 해당 키 쌍 파일에 대해 8자 이상의 암호를 입력합니다. 암호는 숫자를 포함해야하며, 매우 중요하므로 꼭 기억하셔야 합니다.
암호를 재입력하고 확인을 누릅니다. 파일이 작성되어 저장되었습니다.
Netscape서버에서 CSR을 생성하면 개인키가 /alias/-key.db에 저장됩니다. 꼭 백업해 두시기 바랍니다.
2. CSR의 생성
서버 관리 페이지에서 키와 인증서|인증서 요청을 선택합니다.
윈도우에서 새 인증서임을 지정합니다.
전자 우편을 통한 인증서 요청 제출을 선택하고 CA의 전자 우편 주소란에 사용자의 전자 우편 주소를 입력하십시오.
드롭 다운 목록에서 인증서를 신청할 때 사용할 개인키 파일의 이름을 선택하고, 암호를 입력합니다.
CSR의 정보를 입력합니다
5. Iplanet Enterprise 6.0
Administration Server에 들어가 Security 탭을 선택합니다.
Install Certificate를 선택합니다.
설치할 인증서의 종류를 체크합니다

리스트에서 암호모듈을 선택합니다

개인키 암호를 입력합니다
메일로 받은 인증서의 BEGIN과 END부분이 포함된 부분을 Messagebox에 입력하고 OK를 클릭합니다.
Add Certificate혹은 Replace Certificate 중 선택합니다.
Apply를 선택하고 서버매니저를 종료합니다.
인증서는 https-servername-cert7.db에 저장됩니다.
크리에이티브 커먼즈 라이센스
Creative Commons License
이올린에 북마크하기

Posted by 홍반장

2004/08/04 18:22 2004/08/04 18:22
Response
No Trackback , No Comment
RSS :
http://tcbs17.cafe24.com/tc/rss/response/203

« Previous : 1 : ... 4 : 5 : 6 : 7 : 8 : 9 : 10 : 11 : 12 : ... 22 : Next »

블로그 이미지

- 홍반장

Archives

Recent Trackbacks

Calendar

«   2024/05   »
      1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31  
Statistics Graph

Site Stats

Total hits:
185678
Today:
681
Yesterday:
328