:: 사용법

[root@wowsecurity /var/www/html]# ab -n 100 -c 10 http://www.wowsecurity.net/

This is ApacheBench, Version 2.0.41-dev <$Revision: 1.121.2.12 $> apache-2.0
Copyright (c) 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Copyright (c) 1998-2002 The Apache Software Foundation, http://www.apache.org/

Benchmarking www.wowsecurity.net (be patient).....done


Server Software: Apache
Server Hostname: www.wowsecurity.net
Server Port: 80

Document Path: /
Document Length: 6 bytes

Concurrency Level: 10
Time taken for tests: 0.61983 seconds
Complete requests: 100
Failed requests: 0
Write errors: 0
Total transferred: 19074 bytes
HTML transferred: 612 bytes
Requests per second: 1613.35 [#/sec] (mean)
Time per request: 6.198 [ms] (mean)
Time per request: 0.620 [ms] (mean, across all concurrent requests)
Transfer rate: 290.40 [Kbytes/sec] received

Connection Times (ms)
min mean[+/-sd] median max
Connect: 0 0 0.2 0 1
Processing: 1 5 3.9 3 20
Waiting: 1 4 3.8 3 20
Total: 1 5 3.9 4 20

Percentage of the requests served within a certain time (ms)
50% 4
66% 6
75% 7
80% 7
90% 13
95% 15
98% 18
99% 20
100% 20 (longest request)


:: 사용법
ab [ -k ] [ -i ] [ -n 요청수 ] [ -t 시간제한 ] [ -c 동시접속 ] [ -p
POST file ] [ -A 인증 유저이름:패스워드 ] [ -P 프락시인증 유저이름:패스
워 드 ] [ -H Custom header ] [ -C Cookie name=value ] [ -T content-type
] [ -v verbosity ] ] [ -w HTML 출력 ] ] [ -x 속성 ] ] [ -y 
속성 ] ] [ -z

속성 ] [http://]서버이름[:port]/path

ab [ -V ] [ -h ]

설명
ab 는 Apache Web server의 상태를 측정하는 툴이며 초당 Apache server가얼
마나 많은 요청을 처리할수 있는지를 측정할수 있다.

옵션
-k HTTP KeepAlive (연결 지속성) 요소를 사용 가능 하게 한다. 이
것 은 하나의 HTTP session에서 여러 개의 요청을 처리할 수 있
다. 기본값은 연결 지속성기능을 사용하지 않는다.

-i GET 방식 대신에 HTTP ’HEAD’를 사용한다. POST와 섞어서 사 용
할수 없다.

-n 요청수 측정을 하기 위한 요청수를 지정한다. 따로 지정하지 않는다면
하나의요청만이 수행된다.

-t 시간제한 측정을 어느 정도까지 할 지 초단위로 지정한다. 따로 지정하지
않 으 면측정 세션에 대해서 50000개의 요청을 자동으로 정의한
다. 고정된 시간 동안 서버를 측정하기 위하여 사용한다. 기본
적으로 시간을제한하지는 않는다.

-c 동시접속수
동 시에 요청을 처리할 수 있는 수량을 지정한다. 기본값으로는
한번에 하나의요청만을 수행한다. 즉 동시 접속을 하지 않는 다
는 의미이다.

-p POST file
아 파치 웹서버에 어떠한 HTTP POST 요청을 보내기 위한 data를
가진 파일을지정한다.

-A Authorization username:password
서버로 신용증명을 하는 기본 인증을 지원한다. 사용자 이름 과
패스워드는 하나의 ’:’로 구분하고, uuencoded로 변환한 데이터
를 보낸다. 문자열은 서버가 필요로 하든 안하든 상관없이 보
내며, 401 인증을 보내는 것을 필요로 한다.

-p Proxy-Authorization username:password
프 락시 서버로 신용증명을 하는 기본 인증을 지원한다. 사용자
이름과 패스워드는하나의 ’:’로 구분하고, uuencoded로 변환 한
데이터를 보낸다. 문자열은 프락시가 필요로 하든 안하든 상관
없이 보내며, 407 인증을보내는 것을 필요로 한다.

-C Cookie name=value
요청에 ’Cookie:’ line을 추가한다. 이 인자는 ’name=value’ 의
형태를가진다. 이 옵션은 반복된다.

-H Header string
요청에 임의의 헤더를 추가한다. 이 인자는 유효한 헤더의 형태
를 가지며, 보통 하나의 쌍으로 이루어진 필드 값을 콜론(:) 으
로 구분을 한다. 예를 들어

-T content-type
POST data에 대한 content-type header를 지정한다.

-v 출력 레벨을 지정한다. 4단계는 결과값 상단에 HTML 헤더를 출
력하며, 3단계는결과물 상단에 응답 코드(예를 들어 404, 200
등)를 출력하며, 2단계는 경고와정보 메세지를 출력한다.

-w HTML table로 결과물을 출력한다. 기본 table은 2칼럼이며 흰색
바탕이다.

-x attributes
에 대한 속성을 지정한다. 속성은
과 같
이 들어간다.

-y attributes
에 대한 속성값을 지정한다.

-z attributes
에 대한 속성값을 지정한다.

-V 버전 정보를 출력하고 프로그램을 종료한다.

-h 사용법에 대한 정보를 출력한다.


'Server' 카테고리의 다른 글

syslog.conf 로그파일 종류  (0) 2017.01.06
ssh RSA 암호화 키로 접속하기  (0) 2017.01.06
한 유저에게 여러개의 도메인 제공하기  (0) 2017.01.06
SMTP 동적릴레이 - saslauthd  (0) 2017.01.06
Authoritative-only Name Server  (0) 2017.01.06

# 유저생성
useradd sbsuser
su - sbsuser
vi /etc/httpd/conf/httpd.conf

# httpd.conf 설정
# Own Page

ServerAdmin leopit@wowsecurity.net
DocumentRoot /var/www/html
ServerName wowsecurity.net
ServerAlias www.wowsecurity.net
UserDir public_html
ErrorLog /var/log/httpd/error_log
CustomLog /var/log/httpd/access_log common


# leopit

ServerAdmin leopit@wowsecurity.net
DocumentRoot /home/leopit/public_html
ServerName leopit.wowsecurity.net
ErrorLog /var/log/httpd/error_log
CustomLog /var/log/httpd/access_log common


# sbs

ServerAdmin sbs@sbs.co.kr
DocumentRoot /www/sbs
ServerName www.sbs.co.kr
UserDir sbshome
ErrorLog /www/sbs/sbs_error_log
CustomLog /www/sbs/sbs_access_log common


# kbs

ServerAdmin kbs@kbs.co.kr
DocumentRoot /www/kbs
ServerName www.kbs.co.kr
UserDir kbshome
ErrorLog /www/kbs/kbs_error_log
CustomLog /www/kbs/kbs_access_log common

# imbc

ServerAdmin imbc@imbc.com
DocumentRoot /www/imbc
ServerName www.imbc.com
UserDir imbchome
ErrorLog /www/imbc/imbc_error_log
CustomLog /www/imbc/imbc_access_log common


# error

ServerAdmin leopit@wowsecurity.net
DocumentRoot /www/error
ServerName error.wowsecurity.net
ServerAlias *.wowsecurity.net
ServerAlias *.sbs.co.kr
ServerAlias *.kbs.co.kr
ServerAlias *.imbc.com


service httpd restart
su - sbsuser

위와같이 설정한 후 sbsuser 홈 디렉토리에 sbshome imbchome kbshome을 생성한후 index 페이지를 만든다

TESTING..

'Server' 카테고리의 다른 글

ssh RSA 암호화 키로 접속하기  (0) 2017.01.06
ab 커맨드  (0) 2017.01.06
SMTP 동적릴레이 - saslauthd  (0) 2017.01.06
Authoritative-only Name Server  (0) 2017.01.06
호스트네임을 이용한 DNS 서버 셋팅하기  (0) 2017.01.06

+ 메일 릴레이 기능 

다른 네트워크 대역에서 우리 서버를 통해 메일을 날리려 하는 경우

vi /etc/mail/access
211.5.6 RELAY
211.5.6.7 REJECT
sapm@sapm.net 550 You Spammer .. A're you ~

적용
> makemap hash /etc/mail/access < /etc/mail/access

이것은 적어준다. 하지만.. 사용자가 동적 IP를 쓰고 있는데 .. 어찌 그걸 다 적으랴?
해결책 : 동적 릴레이 (Dynamic Relay)
동적 릴레이는 pop3처럼 사용자의 인증을 통하여 접근을 제어한다. 

+ 동적 릴레이 설정
여기서는 SASL을 활용해 보도록 한다. 
SASL(simple authentication and Security Layer) 은 smtp, imap에 인증을 지원한다.

- Cyus SASL 설치 (PRM)
cyrus-sasl-2.1.10-4 
cyrus-sasl-plain-2.1.10-4
cyrus-sasl-devel-2.1.10-4
cyrus-sasl-gssapi-2.1.10-4
cyrus-sasl-md5-2.1.10-4

- sendmail.conf 생성
sendmail 의 인증이 진행 될 수 있도록, sendmail.conf 파일을 생성한다. 
>vi /usr/lib/sasl2/Sendmail.conf
pwcheck_method:saslauthd

- etc/pam.d/smtp 생성
>vi /etc/pam.d/smtp
#%PAM-1.0
auth required pam_stack.so service=system-auth
account required pam_stack.so service=system-auth

- site.config.m4 파일 생성
새로 sendmail (타볼)을 받는다.
적당히 푼 다음 /devtools/Site/site.config.m4파일을 생성

sendmail-8.12.* > vi /devtools/Site/site.config.m4
APPENDDEF(`confENVDEF', `-DSASL')
APPENDDEF(`conf_sendmail_LIBS', `-lsasl2')
APPENDDEF(`confLIBDIRS', `-L/usr/lib/sas12') 

- Build 실행 및 설치
sendmail-8.12.* > ./Build
sendmail-8.12.* > mkdir -p /usr/man/man1
sendmail-8.12.* > mkdir /usr/man/man8
sendmail-8.12.* > sh Build install

- 컴파일된 sendmail binary 파일 /usr/sbun에 복사 
sendmail-8.12.* > cp obj.Linux.2.4.20-31.9.i686/sendmail/sendmail /usr/sbin/


- sasl 탑재 검사 
sendmail-8.12.* > sendmail -d0.1 -dv root

Version 8.12.10
Compiled with: DNSMAP LOG MATCHGECOS MIME7TO8 MIME8TO7 NAMED_BIND
NETINET NETUNIX NEWDB PIPELINING SASLv2 SCANF USERDB XDEBUG

============ SYSTEM IDENTITY (after readcf) ============
(short domain name) $w = AAA
(canonical domain name) $j = AAA.com
(subdomain name) $m = com
(node name) $k = AAA.com
========================================================
위와 같이 나오면 정상

- 설정파일 복사 
sendmail.cf 를 /etc/mail/ 에 복사 
sendmail.init 파일을 /etc/init.d/sendmail 로 복사 
/etc/init.d/sendmail 파일에 755 

* sendmail.cf , sendmail.init 은 본 문서와 첨부 
sendmail-8.12.* > cp sendmail.cf / etc/mail/
sendmail-8.12.* > cp sendmail.init / etc/init.d/sendmail
sendmail-8.12.* > chmod 755 /etc/init.d/sendmail

- 센드메일 실행
sendmail-8.12.* > /etc/init.d/sendmail restart 
sendmail-8.12.* > /etc/init.d/saslauthd restart

- 25 port smtp 인증 여부 확인 
sendmail-8.12.* > telnet localhost 25

Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
220 AAA.com ESMTP Sendmail 8.12.10/8.12.9; Thu, 3 Jun 2004 12:53:45 +0900
ehlo sendmail <- 사용자 입력
250-AAA.com Hello AAA.com [127.0.0.1], pleased to meet you
250-ENHANCEDSTATUSCODES
250-PIPELINING
250-8BITMIME
250-SIZE 10000000
250-DSN
250-ETRN
250-AUTH LOGIN PLAIN <- 인증이 된 것임 
250-DELIVERBY
250 HELP

- 아웃룩에서 사용
1. 보내는 메일 서버에 도메인 입력 
2. 보내는 메일 서버에 [인증필요]를 클릭, 보내는 메일 서버에 로그인 정보 부분에 
"받는 메일 서버와 동일한 설정 사용"에 체크, 확인


- 이제 웹메일이 아닌, 아웃룩으로 메일을 보낼 수 있게 되었다.


named.conf에 recursion no 해주면
자신이 가지고 있는 정보에 대해서만 네임서버 조회가 가능하다

# vi /etc/named.conf

options {
directory "/var/named";
pid-file "named.pid";
recursion no;
};

[root@s92 /var/named/chroot/var/named]# dig @ns.s92.sist.co.kr www.s92.sist.co.kr

; <<>> DiG 9.3.0 <<>> @ns.s92.sist.co.kr www.s92.sist.co.kr
;; global options: printcmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 63508
;; flags: qr aa rd; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 1

;; QUESTION SECTION:
;www.s92.sist.co.kr. IN A

;; ANSWER SECTION:
www.s92.sist.co.kr. 2 IN A 211.63.89.92

;; AUTHORITY SECTION:
s92.sist.co.kr. 2 IN NS ns.s92.sist.co.kr.

;; ADDITIONAL SECTION:
ns.s92.sist.co.kr. 2 IN A 211.63.89.92

;; Query time: 0 msec
;; SERVER: 211.63.89.92#53(ns.s92.sist.co.kr)
;; WHEN: Tue Dec 6 09:33:31 2005
;; MSG SIZE rcvd: 85

[root@s92 /var/named/chroot/var/named]# dig @ns.s92.sist.co.kr www.tland.co.kr

; <<>> DiG 9.3.0 <<>> @ns.s92.sist.co.kr www.tland.co.kr
;; global options: printcmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 17697
;; flags: qr rd; QUERY: 1, ANSWER: 0, AUTHORITY: 7, ADDITIONAL: 0

;; QUESTION SECTION:
;www.tland.co.kr. IN A

;; AUTHORITY SECTION:
kr. 172299 IN NS F.DNS.kr.
kr. 172299 IN NS G.DNS.kr.
kr. 172299 IN NS A.DNS.kr.
kr. 172299 IN NS B.DNS.kr.
kr. 172299 IN NS C.DNS.kr.
kr. 172299 IN NS D.DNS.kr.
kr. 172299 IN NS E.DNS.kr.

;; Query time: 0 msec
;; SERVER: 211.63.89.92#53(ns.s92.sist.co.kr)
;; WHEN: Tue Dec 6 09:33:50 2005
;; MSG SIZE rcvd: 149

[root@s92 ~/INSTALL]# vi /etc/named.conf

zone "s92.sist.co.kr" IN { // FORWARD
type master; // hint, master, slave
file "db.s92"; // 사용할 DB파일 /var/named/에 위치함
allow-update { none; };
};

zone "89.63.211.in-addr.arpa" IN { // REVERSE
type master;
file "db.89";
allow-update { none; };
};

[root@s92 /var/named]# cd /var/named/chroot/var/named
[root@s92 /var/named/chroot/var/named]# ll
합계 80
drwxr-x--- 2 named named 4096 11월 25 10:49 data
-rw-r--r-- 1 named named 198 11월 25 10:49 localdomain.zone
-rw-r--r-- 1 named named 195 11월 25 10:49 localhost.zone
-rw-r--r-- 1 named named 415 11월 25 10:49 named.broadcast
-rw-r--r-- 1 named named 2518 11월 25 10:49 named.ca
-rw-r--r-- 1 named named 432 11월 25 10:49 named.ip6.local
-rw-r--r-- 1 named named 433 11월 25 10:49 named.local
-rw-r--r-- 1 named named 5 12월 5 10:58 named.pid
-rw-r--r-- 1 named named 416 11월 25 10:49 named.zero
drwxr-x--- 2 named named 4096 11월 25 10:49 slaves

# DB 생성
[root@s92 /var/named/chroot/var/named]# vi db.s92

$TTL 2
@ IN SOA ns.s92.sist.co.kr. root.localhost. (1 4 2 7D 2)
IN NS ns.s92.sist.co.kr.
IN MX 10 mail
ns IN A 211.63.89.92
mail IN A 211.63.89.92
www IN A 211.63.89.92
ttl IN CNAME ns

:: 위 셋팅 내용 설명
$TTL 2 = Time to live 2 second
@ = 내가 사용할 기본 도메인
IN = internet
SOA = start of authority
root.localhost = 메일주소
A = address
CNAME = ns의 다른이름

[root@s92 /var/named/chroot/var/named]# vi db.89

$TTL 2
@ IN SOA ns.s92.sist.co.kr. root.localhost. (1 4 2 7D 2)
IN NS ns.s92.sist.co.kr.
92 IN PTR ns.s92.sist.co.kr.

:: 위 셋팅 내용 설명
s92 = 아이피 끝자리

[root@s92 /var/named/chroot/etc]# killall named
[root@s92 /var/named/chroot/etc]# service named start
named (을)를 시작합니다: [ 확인 ]

[root@s92 /var/named/chroot/etc]# nslookup -sil
> www.s92.sist.co.kr
Server: 211.63.89.92
Address: 211.63.89.92#53

Name: www.s92.sist.co.kr
Address: 211.63.89.92

vi /etc/hosts
# Do not remove the following line, or various programs
# that require network functionality will fail.
127.0.0.1 s92 localhost.localdomain localhost
211.63.89.91 s91.sist.co.kr s91
211.63.89.93 s93.sist.co.kr s93
211.63.89.110 s110.sist.co.kr s110
211.63.89.92 s92.sist.co.kr s92
211.63.89.92 sist.co.kr
211.63.89.92 aa.com
211.63.89.92 bb.co.kr
211.63.89.92 cc.net
211.218.150.200 naver.com a
220.95.223.8 empas.com b
211.109.6.249 korea.com c

:: 네임서버 설정
vi /etc/resolv.conf
#system's default domain
domain sist.co.kr

#hostname search sequence
search sist.co.kr naver.com empas.com daum.net
nameserver 211.63.89.92
nameserver 211.63.64.11
nameserver 168.126.63.1

:: 이메일 로컬호스트 도메인
vi /etc/mail/local-host-names
# local-host-names - include all aliases for your machine here.
sist.co.kr
aa.com
bb.co.kr
cc.net

:: 포워딩
vi /etc/mail/virtusertable
webmaster@sist.co.kr blue10
webmaster@aa.com blue9
webmaster@bb.co.kr blue8
webmaster@cc.net blue7

[root@s92 /etc/mail]# makemap hash /etc/mail/virtusertable.db < /etc/mail/virtusertable

:: sendmail.cf가 초기화 되어 있지 않으면 아래와 같이 설정
[root@s92 /etc/mail]# m4 sendmail.mc > sendmail.cf

:: 중계
[root@s92 /etc/mail]# vi access
localhost.localdomain RELAY
localhost RELAY
127.0.0.1 RELAY
sist.co.kr RELAY
aa.com OK
#아래것들은 중계안함
bb.co.kr REJECT
cc.net DISCARD

[root@s92 /etc/mail]# makemap hash /etc/mail/access.db < /etc/mail/access

'Server' 카테고리의 다른 글

Authoritative-only Name Server  (0) 2017.01.06
호스트네임을 이용한 DNS 서버 셋팅하기  (0) 2017.01.06
프로세스 죽이기 - kill, killall, pkill  (0) 2016.12.31
xinetd 데몬과 standalone 데몬  (0) 2016.12.31
Quota 설정하기  (0) 2016.12.31

nslookup 옵션 활용.. 까막지 말자는 용도로..

[root@s92 etc]# nslookup

> www.ttl.co.kr
Server: 211.63.64.11 우리꺼 네임서버
Address: 211.63.64.11#53 (포트)

Non-authoritative answer:
Name: www.ttl.co.kr
Address: 203.236.17.23

> set querytype=ns
> www.ttl.co.kr
Server: 211.63.64.11
Address: 211.63.64.11#53

Non-authoritative answer:
ttl.co.kr nameserver = gate.sktelecom.com.
ttl.co.kr nameserver = gate2.sktelecom.com.

Authoritative answers can be found from:
gate.sktelecom.com internet address = 203.236.1.12
gate2.sktelecom.com internet address = 203.236.20.11
>

> set querytype=mx
> ttl.co.kr
Server: 211.63.64.11
Address: 211.63.64.11#53

Non-authoritative answer:
ttl.co.kr mail exchanger = 100 mail.ttl.co.kr.

Authoritative answers can be found from:
ttl.co.kr nameserver = gate.sktelecom.com.
ttl.co.kr nameserver = gate2.sktelecom.com.
mail.ttl.co.kr internet address = 203.236.1.25
gate.sktelecom.com internet address = 203.236.1.12
gate2.sktelecom.com internet address = 203.236.20.11
>

> set querytype=ay
unknown query type: ay
> setquerytpye=ay
Server: 211.63.64.11
Address: 211.63.64.11#53

** server can't find setquerytpye=ay: NXDOMAIN
> naver.com
Server: 211.63.64.11
Address: 211.63.64.11#53

Non-authoritative answer:
naver.com mail exchanger = 10 rcvmail4.naver.com.
naver.com mail exchanger = 10 rcvmail5.naver.com.
naver.com mail exchanger = 10 rcvmail1.naver.com.
naver.com mail exchanger = 10 rcvmail2.naver.com.
naver.com mail exchanger = 10 rcvmail3.naver.com.

Authoritative answers can be found from:
naver.com nameserver = ns1.naver.com.
naver.com nameserver = ns2.naver.com.
rcvmail4.naver.com internet address = 220.73.146.166
rcvmail5.naver.com internet address = 211.218.150.164
rcvmail1.naver.com internet address = 211.218.150.166
rcvmail2.naver.com internet address = 220.73.146.164
rcvmail3.naver.com internet address = 220.73.146.165
ns1.naver.com internet address = 211.218.150.38
ns2.naver.com internet address = 211.218.150.37

[root@s92 etc]# nslookup -type=any sist.co.kr
Server: 211.63.64.11
Address: 211.63.64.11#53

Non-authoritative answer:
sist.co.kr nameserver = ns.sist.co.kr.
Name: sist.co.kr
Address: 211.238.132.91
sist.co.kr mail exchanger = 10 211.238.132.91.sist.co.kr.

Authoritative answers can be found from:
sist.co.kr nameserver = ns.sist.co.kr.

[root@s92 etc]# host -v -t ns naver.com
Trying "naver.com"
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 59820
;; flags: qr rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 2

;; QUESTION SECTION:
;naver.com. IN NS

;; ANSWER SECTION:
naver.com. 2191 IN NS ns2.naver.com.
naver.com. 2191 IN NS ns1.naver.com.

;; ADDITIONAL SECTION:
ns2.naver.com. 171391 IN A 211.218.150.37
ns1.naver.com. 171391 IN A 211.218.150.38

Received 95 bytes from 211.63.64.11#53 in 158 ms
[root@s92 etc]#

:: dig - 내가 사용할 네임서버를 지정해야함)
[root@s92 etc]# dig @ns.bora.net kldp.org A

; <<>> DiG 9.2.4 <<>> @ns.bora.net kldp.org A
;; global options: printcmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 13148
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 0

;; QUESTION SECTION:
;kldp.org. IN A

;; ANSWER SECTION:
kldp.org. 60 IN A 210.118.94.78

;; AUTHORITY SECTION:
kldp.org. 60 IN NS ns.kldp.org.

;; Query time: 123 msec
;; SERVER: 164.124.101.2#53(ns.bora.net) - 내가 지정한 네임서버
;; WHEN: Fri Nov 25 10:46:01 2005
;; MSG SIZE rcvd: 59

[root@s92 etc]#

'Tip' 카테고리의 다른 글

mutt 메일 보내기  (0) 2017.01.06
TCP 연결수 확인 스크립트  (0) 2017.01.06
증분백업/복구  (0) 2016.12.31
RPM 패키지 관리  (0) 2016.12.31
압축관련  (0) 2016.12.31


R.U.D.Y DDoS


RUDY(R-U-DEAD-YET) 는 Post 메소드를 전송하여 서비스를 거부시기키는 DDoS 공격이다.
Content-Length를 매우 크게 설정하여 서버의 지연을 유발한다.

서버는 클라이언트의 HTTP Header에 Content-Length를 보고 그 길이만큼의 Content가 올 때까지 대기하고 있다. 이 점을 이용하여 초기에 길이를 크게 설정해놓고, Content는 일정한 간격으로 1byte씩 전송한다. 결국, 서버는 한 세션당 [Content-Length * Interval Seconds] 만큼의 지연시간이 발생한다.


아래는 실제 공격 패킷이다. Content-Length 가 매우 길게 설정되어 있고 연속된 A 문자를 찍고 있다.
이를 일정한 간격으로 1byte씩 보낸다고 생각해보자
서버는 표기된 전체 byte를 수신할때까지 계속 대기하게 된다.


:: 대응 방안

현재까지 알려진 차단 방법은 크게 두가지다.

- Content-Length 임계치를 두어 차단
- User-Agent 기준으로 차단 (특이값이 있을 경우)

'Security' 카테고리의 다른 글

FTP Active/Passive 정리  (0) 2017.01.06
ubuntu 환경에 SNORT & BASE & Metasploit 설치  (0) 2017.01.06
포트 스캐닝으로부터 OS 정보 숨기기  (0) 2017.01.06
slowloris 분석/대응방안  (0) 2017.01.05
윈도우 로그온 유형  (0) 2016.12.29


SLB 구성 - DSR vs Inline

SLB 구성에 대해 알아본다.
SLB 구성을 어떻게 하느냐에 따라 보안 구성도 달라진다.


1. DSR

Client request는 SLB를 통해 서버로 전달되고 Server response은 SLB를 거치지 않고 직접 직접 Client으로 전달된다.

대용량 트래픽이 처리되는 환경에 적합하며 SLB에서 Response를 보지 않기 때문에 비용을 절감할 수 있다.

반면 SSL/TCP Offload는 불가능하다는 제약이 있다.

DSR 종류는 L2-DSR과 L3-DSR로 나누어지는데 이 부분은 추후 별도로 기재하겠다.


2. Inline 

우측의 그림이 Inline 구성이다. request/response가 모두 SLB를 통해 전달되는 구성으로 가장 일반적으로 사용된다.

단, 이때 SLB는 Proxy 모드로 동작하기때문에 Client IP가 SLB에 설정된 아이피로 변경되어 서버로 전달된다.

실제 서버단의 로그를 보면 실제 Client IP는 확인되지 않고 모두 SLB IP가 확인된다.

'Network' 카테고리의 다른 글

각 포트별 TCP/UDP 서비스  (0) 2017.01.06
router root bridge  (0) 2017.01.06
PCAP 파일에서 UNIX 도구를 이용한 IP 주소 요약  (0) 2017.01.06
tcpdump  (0) 2017.01.04
라우팅 테이블  (0) 2017.01.04

SlowLoris

GET 방식의 메소드는 헤더의 데이터 구분을 CRLF을 이용한다. 0D 0A 가 두번 들어가면 헤더의 끝을 나타내는데..
의도적으로 한번만 넣어서 헤더의 끝을 맺지 않음으로 서버는 헤더가 끝날때까지 지속적으로 기다리게 만든다.
익히 알려진 slowloris 공격 툴은 헤더에 X-a: b 를 전송하고 Content-Length가 42byte 라는 특징이 있다.

:: 공격에 취약한 서버
- Apache 1.x, 2.x, squid

:: 공격에 취약하지 않은 서버
- lighttpd, IIS6.0, IIS7.0, nginx, varnishd, J5K.

공격툴로 테스트를 해보면 아래와 같이 펜더가 나온다.


공격 진행중 패킷을 보면 CRLF(0d 0a) 를 한번만 보내 헤더의 끝을 맺지 않음을 알 수 있다.

slowloris의 특징인 Content_Length: 42 와 X-a: b 도 보인다.

이와 같이 공격을 수행하면 "X-a: b\r\n"의 불완전 헤더를 지속적으로 보내어 SYN->SYNACK를 반복하고 서버 측에서 FIN 패킷을 보내지 않아 계속 패킷을 기다리는 상태가 되어 결국 서비스 거부상태가 된다. 

apache의 경우 실제 공격시에는 로그가 남지 않으며 공격을 멈추면 아래와 같이 로그가 남는다.

# error_log

[error] server reached MaxClients setting, consider raising the MaxClients setting
failed: error reading the headers
failed: error reading the headers
failed: error reading the headers
failed: error reading the headers

# access_log

"GET / HTTP/1.1" 400 308
"GET / HTTP/1.1" 400 308
"GET / HTTP/1.1" 400 308
"GET / HTTP/1.1" 400 308 


:: 대응방안

-.  Timeout 설정 변경(가장 현실적인 방법)
     httpd.conf 에서  Timeout 300  ==> 5 이하로 변경 (5초동안 연속된 패킷이 오지 않을 경우 timeout시킴)

-. iptables의 connection limit(커넥션 제한) 설정
   # iptables -A INPUT -p tcp --dport 80 -m connlimit --connlimit-above 30 -j DROP




'Security' 카테고리의 다른 글

FTP Active/Passive 정리  (0) 2017.01.06
ubuntu 환경에 SNORT & BASE & Metasploit 설치  (0) 2017.01.06
포트 스캐닝으로부터 OS 정보 숨기기  (0) 2017.01.06
R.U.D.Y DDoS  (0) 2017.01.05
윈도우 로그온 유형  (0) 2016.12.29

+ Recent posts