서비스 거부 공격(DoS)이 가해졌을 때
DoS는 동시에 서비스할 수 있는 프로세스의 한계가 있다는 점을 악용한 공격이다.
한번의 실행으로 100개나 200개 등 원하는 만큼의 동시 접속을 맺은 후 이 접속을 끊지 않고 유지할 수 있는 공격 코드가 인터넷 상에 공개되어 있다.
그러나 이러한 공격의 경우 공격지의 IP를 속이기가 매우 어려우므로 netstat으로 확인 후 비정상적인 접속으로 확인 될 경우 해당 IP를 차단하면 된다.
특정 IP의 라우팅을 차단하는 방법은 다음과 같이 route를 이용한 방법과 iptables(커널 2.4 이상)를 이용한 방법 두 가지가 있다.
2007년 3월 21일 수요일
Apache 웹 서버 장애 해결하기 1 (접속이 느려지거나 접속이 안 될 때)
접속이 느려지거나 접속이 안 될 때
가끔 접속자가 많은 서버를 운영하다 보면 갑자기 웹 접속이 되지 않거나 접속 이 너무 느려 아파치 데몬 개수를 확인해 보면 httpd가 256개나 떠 있는 경우 가 있다.
기본적으로 아파치 웹 서버의 경우 Max Clients가 256으로 설정되어 있어 동시에 256개의 데몬이 뜨게 되면 더 이상의 접속을 받아들이지 않고, 기 존의 프로세스가 죽을 때까지 대기한 후 접속이 끊기게 되면 그제서야 접속을 받아들이게 된다.
따라서 동시 접속이 많은 경우에는 이전의 웹 접속이 끊길 때까지 대기해야 하 므로 접속 속도가 느린 것처럼 느끼게 되는 것이다.
일반적으로 정상적인 접속 의 경우에 256개의 프로세스가 모두 뜨는 경우는 그리 많지 않기에 현재의 상 태가 비정상적인 접속인지 여부를 판단해야 한다. 이를 판단할 수 있는 방법 은 netstat -na grep ES로 ESTA BLISHED된 연결 상태를 확인하여 클라이언트 의 IP가 정상적인 연결인지 여부를 확인하면 된다.
또는 netstat -nagrep ESawk '{print $5}'sort로 클라이언트의 IP만 따로 소트하여 확인해 봐도 된다. 통상적으로 HTTP 1.1 규약에서부터 적용되기 시작 한 KeepAlive 기능을 지정하였을 경우 한 클라이언트 IP에서 동시에 3~5개 정 도의 http 프로세스를 생성하므로 한 IP에서 3~5개 정도의 프로세스를 생성하는 것은 정상적인 현상이다.
비정상적인 접속의 경우에는 다음과 같은 이유가 있을 수 있다.
가끔 접속자가 많은 서버를 운영하다 보면 갑자기 웹 접속이 되지 않거나 접속 이 너무 느려 아파치 데몬 개수를 확인해 보면 httpd가 256개나 떠 있는 경우 가 있다.
기본적으로 아파치 웹 서버의 경우 Max Clients가 256으로 설정되어 있어 동시에 256개의 데몬이 뜨게 되면 더 이상의 접속을 받아들이지 않고, 기 존의 프로세스가 죽을 때까지 대기한 후 접속이 끊기게 되면 그제서야 접속을 받아들이게 된다.
따라서 동시 접속이 많은 경우에는 이전의 웹 접속이 끊길 때까지 대기해야 하 므로 접속 속도가 느린 것처럼 느끼게 되는 것이다.
일반적으로 정상적인 접속 의 경우에 256개의 프로세스가 모두 뜨는 경우는 그리 많지 않기에 현재의 상 태가 비정상적인 접속인지 여부를 판단해야 한다. 이를 판단할 수 있는 방법 은 netstat -na grep ES로 ESTA BLISHED된 연결 상태를 확인하여 클라이언트 의 IP가 정상적인 연결인지 여부를 확인하면 된다.
또는 netstat -nagrep ESawk '{print $5}'sort로 클라이언트의 IP만 따로 소트하여 확인해 봐도 된다. 통상적으로 HTTP 1.1 규약에서부터 적용되기 시작 한 KeepAlive 기능을 지정하였을 경우 한 클라이언트 IP에서 동시에 3~5개 정 도의 http 프로세스를 생성하므로 한 IP에서 3~5개 정도의 프로세스를 생성하는 것은 정상적인 현상이다.
비정상적인 접속의 경우에는 다음과 같은 이유가 있을 수 있다.
Apache의 access_log에 관련된 파일형식 남기지 않게 하는 방법
이미지 서버를 구축해 사용하다 보면 access_log에 여러가지 파일형식의 로그들이 쌓여서
용량이 초과하는 경우가 많았을것이다. 여기서 로그들을 주석처리해서 막아 버리는 방법도
있지만 아래와 같이 해서 부분적으로 로그 쌓임을 방지 할수가 있다.
Apache httpd.conf 파일을 열어 다음의 내용들을 추가 하도록 하자.
### JPG Red Deny ####
SetEnvIf Request_URI \.jpg worm
SetEnvIf Referer \.jpg worm
### GIF Red Deny ####
SetEnvIf Request_URI \.gif worm
SetEnvIf Referer \.gif worm
### SWF Red Deny ####
SetEnvIf Request_URI \.swf worm
SetEnvIf Referer \.swf worm
### html Red Deny ####
SetEnvIf Request_URI \.html worm
SetEnvIf Referer \.html worm
### CodeRed Deny ####
SetEnvIf Request_URI \.ida worm
SetEnvIf Referer \.ida worm
### Nimda Deny #####
SetEnvIf Request_URI cmd\.exe worm
SetEnvIf Referer cmd\.exe worm
SetEnvIf Request_URI root\.exe worm
SetEnvIf Referer root\.exe worm
SetEnvIf Request_URI admin\.dll worm
SetEnvIf Referer admin\.dll worm
CustomLog /usr/local/apache/logs/access_log common env=!worm
진한 부분이 CustomLog 부분에 추가해줘야 할 부분이다.
용량이 초과하는 경우가 많았을것이다. 여기서 로그들을 주석처리해서 막아 버리는 방법도
있지만 아래와 같이 해서 부분적으로 로그 쌓임을 방지 할수가 있다.
Apache httpd.conf 파일을 열어 다음의 내용들을 추가 하도록 하자.
### JPG Red Deny ####
SetEnvIf Request_URI \.jpg worm
SetEnvIf Referer \.jpg worm
### GIF Red Deny ####
SetEnvIf Request_URI \.gif worm
SetEnvIf Referer \.gif worm
### SWF Red Deny ####
SetEnvIf Request_URI \.swf worm
SetEnvIf Referer \.swf worm
### html Red Deny ####
SetEnvIf Request_URI \.html worm
SetEnvIf Referer \.html worm
### CodeRed Deny ####
SetEnvIf Request_URI \.ida worm
SetEnvIf Referer \.ida worm
### Nimda Deny #####
SetEnvIf Request_URI cmd\.exe worm
SetEnvIf Referer cmd\.exe worm
SetEnvIf Request_URI root\.exe worm
SetEnvIf Referer root\.exe worm
SetEnvIf Request_URI admin\.dll worm
SetEnvIf Referer admin\.dll worm
CustomLog /usr/local/apache/logs/access_log common env=!worm
진한 부분이 CustomLog 부분에 추가해줘야 할 부분이다.
Apache log들 용량을 줄이고 싶을때 사용하는 명령어
아파치 로그를 확인 하다보면 엄청난 양의 access_log,error_log를 확인할때가 있을것이다.
이때 이 양을 0으로 만드는 방법을 소개 하겠다.
cat /dev/null > access_log
cat /dev/null > error_log
이때 이 양을 0으로 만드는 방법을 소개 하겠다.
cat /dev/null > access_log
cat /dev/null > error_log
피드 구독하기:
글 (Atom)