본문 바로가기

해봐야 안다.OTL/Linux

[리눅스] 웹서버 보안2

###################[ /usr/local/http/bin/:./httpd -[option] ]##################

아파치 웹서버의 각종 설정에 대한 지시자들의 집합

지시자라 함은 Port, ErrorLog, DocumentRoot 등과 같이
httpd.conf안에 들어있는 항목들을 얘기한다.

Httpd 실행 파일을 통해 알 수 있는 내용
사용옵션
-D name  : <IfDefine name> 지시자에서 사용되는 이름을 정의함.
-d directory : 아파치실행시에 아파치의 Root 경로를 따로 지정해 줄 수 있음.
-f file  : 아파치 설정파일을 직접 지정해 줄 수 있음.
-C "directive" : 아파치 설정파일을 읽기 전의 process dirctive
-c "dirctive" : 아파치 설정파일을 읽은 후의 process directive
-v  : 아파치의 버전을 보여줌.
-V  : 컴파일시 사용했던 옵션을 보여줌.
-h  : httpd 실행시 사용할 수 있는 옵션들의 도움말을 보여줌.
-l  : 컴파일시 사용했던 모듈들을 보여줌.
-L  : 설정가능한 지시자를 보여줌.
-S  : 설정되어있는 가상호스트를 보여줌.
-t  : 설정파일(httpd.conf)파일의 문법적인 체크를 할 수 있음.
-T  : DocumentRoot 항목체크는 제외하고 설정파일의 문법적인 테스트함.


<실습>
[root@kakasi:10:03:55]#pwd
~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'
/usr/local/http/bin
[root@kakasi:10:03:56]#./httpd -v
Server version: Microsoft IIS/6.0/6.0.15 (Unix)
Server built:   Oct 14 2009 04:03:02
~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'

~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'
[root@kakasi:10:03:58]#./httpd -l
Compiled in modules:
  core.c
  worker.c
  http_core.c
  mod_so.c

[root@kakasi:10:04:45]#./httpd -t
Syntax OK
~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'

~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'
[root@localhost:10:24:18]#./httpd -S
VirtualHost configuration:
wildcard NameVirtualHosts and _default_ servers:
*:80                   is a NameVirtualHost
         default server 203.237.211.230 (/usr/local/httpd/conf/extra/httpd-

vhosts.conf:27)
         port 80 namevhost 203.237.211.230 (/usr/local/httpd/conf/extra/httpd-

vhosts.conf:27)
Syntax OK
~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'

 

</실습>
----------------------------------[ END ]--------------------------------------


########################[ conf디렉터리의 구성내용 ]############################
[root@kakasi:10:05:59]#ls
extra  httpd.conf  magic  mime.types  original


Extra/ 아파치 추가 설정 파일들이 들어있는 디렉토리
httpd.conf 아파치 메인 설정 파일
magic file 이란 명령어가 참조하는 파일의 type가 정의 되어 있는 text 파일
mime.types 웹상에서 쓰이는 파일의 종류에 대해 정의 해놓은 파일로서 예를 들면 jpeg는

그래픽 파일이란것을 이 파일을 통해 웹 서버는 구분한다.
Original  초기 원본 설정 파일들이 보관되는 디렉토리

Mime 란 무엇인가?
MIME (Multipurpose Internet Mail Extensions) 는 전자우편을 위한 인터넷 표준 포맷이다.

전자우편은 7비트 ASCII 문자를 사용하여 전송되기 때문에 8비트 이상의 코드를 사용하는

문자나 바이너리 파일들은 MIME 포맷으로 변환되어 SMTP로 전송된다. 실질적으로 SMTP로 전

송되는 대부분의 전자우편은 MIME 형식이다. MIME 표준에 정의된 content types은 HTTP 와

같은 통신 프로토콜에서 사용되며, 점차 그 중요성이 커지고 있다.

----------------------------------[ END ]--------------------------------------

 

########################[ httpd.conf ]############################
[root@kakasi:10:14:17]#pwd
/usr/local/http/conf
[root@kakasi:10:14:18]#vi httpd.conf
```````````````````````````````````````````````````````````````````````````````
139 ServerAdmin you@example.com        (서버관리자 이메일 주소)

155 DocumentRoot "/usr/local/http/web" (웹파일 디렉토리 지정)

165 <Directory />         ( )
166     Options FollowSymLinks
167     AllowOverride None
168     Order deny,allow
169     Deny from all
170 </Directory>

216 <IfModule dir_module>        (웹서버를 시작할 수 있는 웹문서파일 지정)
217     DirectoryIndex index.html      (순서는 앞에서 부터 차례대로 찾는다.)
218 </IfModule>

224 <FilesMatch "^\.ht">        (파일의 확장자를 지정)
225     Order allow,deny
226     Deny from all
227     Satisfy All
228 </FilesMatch>
~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'
237 ErrorLog "logs/error_log"          (에러 로그가 쌓이면 문제가 된다.)

240 # LogLevel: Control the number of messages logged to the error_log.
241 # Possible values include: debug, info, notice, warn, error, crit,
242 # alert, emerg.
244 LogLevel warn         (에러 로그를 남기는 레벨 설정)

상황에 맞게 끔 로그가 쌓이게된다. 그것을 결정해주는 게 LogLevel 이다.

쌓이는 순서
debug, >>info, >>notice, >>warn, >>error, >>crit, >> alert, >>emerg.
info, >>notice, >>warn, >>error, >>crit, >> alert, >>emerg
notice, >>warn, >>error, >>crit, >> alert, >>emerg
warn, >>error, >>crit, >> alert, >>emerg
error, >>crit, >> alert, >>emerg

241 # Possible values include: debug, info, notice, warn, error, crit,
242 # alert, emerg.

~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'
~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'
<IfModule log_config_module>

251     LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}
i\"" combined
252     LogFormat "%h %l %u %t \"%r\" %>s %b" common
253

257     </IfModule>
258

266     CustomLog "logs/access_log" common

272     #CustomLog "logs/access_log" combined
273 </IfModule>

로그남기는 형식 설정하는 부분이다.
common, combined 로 설정

~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'
~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'
<로그 설정 변경>
[root@kakasi:10:23:30]#mkdir /weblogs
[root@kakasi:10:23:36]#touch /weblogs/error_log
[root@kakasi:10:23:39]#touch /weblogs/access_log
[root@kakasi:10:23:41]#chown -R webuser:webuser /weblogs/
<httpd.conf>
에러로그
237 #ErrorLog "logs/error_log" (바꿈.)
238  ErrorLog "|/usr/local/http/bin/rotatelogs /weblogs/error_log 60"
로그를 로테이션 시키는데 로그를 60초 단위로 남긴다는 뜻


액세스로그
267     #CustomLog "logs/access_log" common
268     CustomLog "|/usr/local/http/bin/rotatelogs /weblogs/access_log 60" common
</로그 설정 변경>
~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'

```````````````````````````````````````````````````````````````````````````````

[root@kakasi:11:36:51]#ls
access_log  access_log.1255574160  error_log  error_logs.1255574160
[root@kakasi:11:36:51]#cat access_log
[root@kakasi:11:36:52]#cat access_log.1255574160
127.0.0.1 - - [15/Oct/2009:11:36:05 +0900] "GET /server-status HTTP/1.1" 404 211
[root@kakasi:11:36:53]#cat error_logs.1255574160
[Thu Oct 15 11:36:02 2009] [warn] Init: Session Cache is not configured [hint:

SSLSessionCache]
[Thu Oct 15 11:36:02 2009] [notice] Digest: generating secret for digest

authentication ...
[Thu Oct 15 11:36:02 2009] [notice] Digest: done
[Thu Oct 15 11:36:03 2009] [notice] Microsoft IIS/6.0/6.0.15 (Unix) mod_ssl/6.0.15

OpenSSL/0.9.8e-fips-rhel5 DAV/2 configured -- resuming normal operations
[Thu Oct 15 11:36:05 2009] [error] [client 127.0.0.1] File does not exist: /usr/loca


로그가 쌓이는 걸 볼 수 있다.
----------------------------------[ END ]--------------------------------------

<날짜대로 로그 쌓이게 바꾸기>
[root@kakasi:11:38:08]#vi httpd.conf
```````````````````````````````````````````````````````````````````````````````
238 ErrorLog "|/usr/local/http/bin/rotatelogs /weblogs/error_logs.%Y%m%d 86400"

 CustomLog "|/usr/local/http/bin/rotatelogs /weblogs/access_log.%Y%m%d 86400"    

common
```````````````````````````````````````````````````````````````````````````````
:wq

[root@kakasi:11:38:39]#ps -ef |grep http
~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'
root      6287  6284  0 11:36 ?        00:00:00 /usr/local/http/bin/rotatelogs

/weblogs/error_logs 60
root      6289  6284  0 11:36 ?        00:00:00 /usr/local/http/bin/rotatelogs

/weblogs/access_log 60
~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'
</날짜대로 로그 쌓이게 바꾸기>


########################[ 확장자에 따른 로그 파일 분류 ]############################
SetEnvIf 를 이용한 필터링 기능
Request_URI

웹서버 튜닝 중에 이미지 파일만 별도의 웹서버로 분리하는 방법이 있다.
이 방법은 Request와 I/O 출력, 트래픽을 분산하는 효과가 잇을 것이다.

이런 튜닝 방법과는 다르지만 images 로그만 별개로 파일로 저장하는
방법을 소개한다.
다음은 이미지파일은 images_logs에, Codered나 Nimda 등의 warm은 warm_log에
저장하는 설정이다.

예)
SetEnvIf Request_URI".gif$" except=images
SetEnvIf Request_URI".jpe?g$" except=images
SetEnvIf Request_URI".png$" except=images
SetEnvIf Request _URI “.^/default.ida$” except=warm #codered
SetEnvIf Request _URI “/root.exe?”  except=warm  #Nimda
SetEnvIf Request _URI “/cmd.exe?”  except=warm
SetEnvIf Request _URI “^/NULLprinter” except=warm
SetEnvIf Request _URI “^/NULLIDA?” except=warm
SetEnvIf Request _URI “^/NULL.ida?” except=warm
SetEnvIf Request _URI “^/NULL.idq?” except=warm

<실습>
[root@kakasi:11:53:16]#vi httpd.conf
```````````````````````````````````````````````````````````````````````````````
269 # Use SetEnvIF Log Filtering
270 SetEnvIF Requiest_URI ".gif$"           except=images
271 SetEnvIf Request _URI “/cmd.exe?”     except=warm
272    
273 SetEnvIf except         images  images
274 SetEnvIf except         warm    warm
275    
276 CustomLog "|/usr/local/http/bin/rotatelogs /weblogs/access_log.%Y%m%d 86400"

common env=!except
277 CustomLog "/weblogs/image_log" common env=images
278 CustomLog "/weblogs/warm_log" combined env=warm
```````````````````````````````````````````````````````````````````````````````
:wq
gif$ >> gif 에 대한 로그는 /weblogs/image_log 에 쌓이고
cmd.exe? 라는 요청에 대한 로그는 /weblogs/warm_log 에 쌓인다.

이런식으로 로그파일을 분류할 수 있다.

~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'
[root@kakasi:11:54:01]#../bin/httpd -t
Syntax OK
~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'
~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'
http://192.168.10.180/cmd.exe?  인터넷 접속한다.

로그 디렉토리를 살펴본다.
[root@kakasi:11:55:47]#ls
access_log             error_log              error_logs.20091015
access_log.1255574160  error_logs.1255574160  image_log
access_log.20091015    error_logs.1255575240  warm_log

[root@kakasi:11:55:27]#cat warm_log
192.168.10.26 - - [15/Oct/2009:11:55:26 +0900] "GET /cmd.exe? HTTP/1.1" 404 205 "-"

"Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; InfoPath.2)"
~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'~'


즉, 원래대로라면 http://192.168.10.180/cmd.exe?
라는 Request를 받았을 때 access_log.20091015
라는 파일이 생기고 거기에 로그가 남아야 됩니다.
그쵸?
그런데 지금 access_log.20091015란 파일은 안생기고 뭐가 생겼나요?
warm_log 이거 생겼죠?

더 자세한 내용은
http://httpd.apache.org/docs/2.1/logs.html 참고

</실습>
----------------------------------[ END ]--------------------------------------

############################[ Directory 지시자 ]###############################
아래는 Directory 지시자에 사용되는 옵션의 뜻이다.
+-----------------------------------------------------------------------------+
None: 모든 접근 거부
All: 모든 접근 허용
Indexes: 디렉토리 인덱스 파일이 없을 경우 파일목록의 출력
Includes: 서버측의 추가적인 포함기능 활성화(SSI)
IncludesNOEXEC: 서버측의 포함기능은 사용, #exec #include
등의 CGI스크립트는 X
FollowSymLinks: 서버측 심볼릭 링크 사용
ExecCGI --> CGI 스크립트의 실행 가능
MultiViews: 컨텐트 협상 활성화
그리고.. AllowOverride는 사용자 인증에 관한 지시자입니다.

----------------------------------[ END ]--------------------------------------

########################[ 디렉토리 리스팅 1 ]############################
165 <Directory />
166     Options FollowSymLinks
167     AllowOverride None
168     Order deny,allow
169     Deny from all
170 </Directory>
루트 디렉토리에 심볼릭 링크


[root@kakasi:12:04:19]#ln -s / ./test.html
[root@kakasi:12:04:21]#ll
total 28
drwxr-xr-x  2 webuser webuser 4096 Oct 15 12:04 .
drwxr-xr-x 16 root    root    4096 Oct 14 04:18 ..
-rw-r--r--  1 root    root      12 Oct 14 04:18 index.html
lrwxrwxrwx  1 root    root       1 Oct 15 12:04 test.html -> /

익스플로러에서 http://192.168.10.180/test.html
치면 링크 걸린 루트 디렉토리를 다 볼 수 있다.

대안>

165 <Directory />
166     #Options FollowSymLinks  << 주석달기
167     AllowOverride None
168     Order deny,allow
169     Deny from all
170 </Directory>

195     Options Indexes << 뒤에 FollowSymLinks 없앴음.
또는 "Option -Indexes" 로 고치기


----------------------------------[ END ]--------------------------------------

########################[ 디렉토리 리스팅 2 ]###############################
디렉토리 리스팅 공격
[root@kakasi:12:09:15]#touch test1
[root@kakasi:12:09:15]#touch test2
[root@kakasi:12:09:16]#mkdir test
[root@kakasi:12:09:16]#ls
index.html  test  test1  test2  test.html
[root@kakasi:12:09:17]#mv index.html index.html.bak
[root@kakasi:12:09:18]#ls
index.html.bak  test  test1  test2  test.html


다음 >
인터넷 익스프로러로 http://192.168.10.180 으로 들어가면 디렉토리 정보가 다보인다.
인덱스 확장자인index.html or index.htm 등의 파일이 없을 경우 디렉토리 내부 파일
이 다 보인다.


대안>
httpd.conf파일의
196     Options -Indexes
'-'를 붙여 수정한다.

접속시
Forbidden 에러난다.
----------------------------------[ END ]--------------------------------------

#############################[ .htaccess ]################################
디렉토리에 .htaccess 파일을 만드면 그 디렉토리는 .htaccess 파일대로 설정된다.
따라서 인덱스 리스팅이 가능해진다.
무조건 나쁜게 아니라 어쩔 땐 필요할 때가 있다.

[root@kakasi:12:10:38]#vi .htaccess
````````````````````````````````````````````
Options +Indexes
Order allow,deny
Allow from all
ser
````````````````````````````````````````````
:wq


httpd.conf에
AllowOverride None --> 으로 되어있는데 이러면 모든 파일이 똑같이되므로
204     AllowOverride all --> 이렇게 바꿔준다.


<설명>
Directory 지시자 연습
Home 디렉터리는 웹으로
하위 디렉터리인 test/는 디렉터리 리스팅으로 하기

1.httpd.conf의 홈디렉터리 Option은 -Indexes 추가
2.httpd.conf의 AllowOverride는 FileInfo 혹은 All로
해주어야 .htaccess를 사용할 수 있다.
3. cd test/ 이동 후 vi .htaccess 생성
Options +Indexes
Order allow,deny
Allow from all
이 내용 추가 후 저장

http://www.htaccesseditor.com/kr.shtml#a_fileList <-- htaccess 관련 사이트

Order allow,deny
--> Deny 먼저 적용 후 Allow 적용 Order의 순서는 뒤에 부터 적용됨.

Deny from 192.168.10.19
Allow from all
혹은
Allow from all
Deny from 192.168.10.19
-->적용 범위
Deny from 192.168.10.
192.168.10.19

```
192.168.10. or 192.168.10
192.168.10.0/255.255.255.0
192.168.10.0/24
같은 뜻

[root@kakasi:12:17:20]#vi httpd.conf
```````````````````````````````````````````````````
210     Order allow,deny
211     Deny from 192.168.10.24
212     Deny from 192.168.10.22
213     Allow from all
```````````````````````````````````````````````````
:wq

#service httpd restart

</설명>
----------------------------------[ END ]--------------------------------------

######################[ 환경 변수를 활용한 접근 제어 ]#########################
Robot / bot -->
 우리가 사용하는 구글 검색을 할 수 있게 인터넷을 떠돌아 다니며
사이트를 검색해서 자동으로 링크 걸어주는 일종의 프로그램임!!!!

 이런 자동화된 프로그램들의 접근 제어라든지 매칭이되는 클라이언트의 접근 제어를
위해 하는 것이다.

BrowserMatch 이 지시자를 통해서 접근 제어를 한다.
실제로 잘 안먹힌다.
단순히 bot만 막는게 아니라 Webzip(사이트 통째로(html,files) 읽어(복사) 가는 놈.)
같은 것도 막는다.


[root@kakasi:12:17:33]#vi httpd.conf
```````````````````````````````````````````````````
182 BrowserMatch "WebZIP" go_out
183 BrowserMatch "Teleport" go_out
184 BrowserMatch "GetRight" go_out
185 BrowserMatch "WebCopier" go_out
186 BrowserMatch "NetZip Downloader 1.0" go_out
187 BrowserMatch "NetZip Downloader/1.0.62" go_out
188 BrowserMatch "Teleport Pro/1.29" go_out

190 <Directory>
218     Order allow,deny
219     Allow from all
220     deny from env=go_out
221
222 </Directory>

288     CustomLog "|/usr/local/http/bin/rotatelogs /weblogs/access_log.%Y%m%d 86400  

 " combined env=!except

```````````````````````````````````````````````````
:wq

webzip 다운로드 및 설치
http://www.spidersoft.com/webzip/downloads.asp

이제 webzip 이 걸러지는 지 테스트해보자
로그 파일을 tail -f 로 실시간으로 실행시켜놓고
webzip을 이용하여 접속해본다.

[root@kakasi:12:30:01]#service httpd restart
[root@kakasi:12:30:01]#tail -f /weblogs/access_log.20091015

웹집을 실행하여 내 인터넷익스플로러로 접속한 후
아까 로그 를 보면

이렇게 나온다.
192.168.10.26 - - [15/Oct/2009:12:30:20 +0900] "GET / HTTP/1.1" 403 202 "-"

"Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Trident/4.0;  Embedded Web

Browser from: http://bsalsa.com/; InfoPath.2)"
192.168.10.26 - - [15/Oct/2009:12:30:22 +0900] "GET /test HTTP/1.1" 301 235 "-"

"Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Trident/4.0;  Embedded Web

Browser from: http://bsalsa.com/; InfoPath.2)"
192.168.10.26 - - [15/Oct/2009:12:30:22 +0900] "GET /test/ HTTP/1.1" 200 338 "-"

"Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Trident/4.0;  Embedded Web

Browser from: http://bsalsa.com/; InfoPath.2)"
192.168.10.26 - - [15/Oct/2009:12:30:31 +0900] "GET / HTTP/1.1" 403 202

"http://192.168.10.180/test/" "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1;

Trident/4.0;  Embedded Web Browser from: http://bsalsa.com/; InfoPath.2)"
192.168.10.26 - - [15/Oct/2009:12:30:40 +0900] "GET / HTTP/1.1" 200 12 "-"

"Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; InfoPath.2)"
192.168.10.26 - - [15/Oct/2009:12:31:22 +0900] "GET / HTTP/1.1" 200 12 "-"

"Mozilla/4.0 (compatible; MSIE 8.0; Win32)"

웹집을 못 막는다.
웹집에 버젼이 낮았을때는 에이전트가 webzip이라고 떠서 막을 수 있었으나
지금은 웹집에서 웹사이트의 파일들을 다운로드 받을 때 MSIE 8.0으로 나온 것을
볼 수 있는데 이 MSIE 8.0을 매칭시켜 막으면 인터넷 접속 자체가 안된다.
그러므로 못 막는다.
----------------------------------[ END ]--------------------------------------

########################[ 배너정보 변조하기 ]############################
[root@kakasi:12:32:48]#wget -S --spider http://192.168.10.180
--12:32:48--  http://192.168.10.180/
Connecting to 192.168.10.180:80... connected.
HTTP request sent, awaiting response...
  HTTP/1.1 200 OK
  Date: Thu, 15 Oct 2009 03:32:48 GMT
  Server: Microsoft IIS/6.0/6.0.15 (Unix) mod_ssl/6.0.15 OpenSSL/0.9.8e-fips-rhel5

DAV/2
  Last-Modified: Tue, 13 Oct 2009 19:18:46 GMT
  ETag: "1e8a6f-c-475d5ea495180"
  Accept-Ranges: bytes
  Content-Length: 12
  Keep-Alive: timeout=5, max=100
  Connection: Keep-Alive
  Content-Type: text/html
Length: 12 [text/html]
200 OK

 

뒤쪽에 (Unix) mod_ssl/6.0.15 OpenSSL/0.9.8e-fips-rhel5 DAV/2
이렇게 나오는데 이걸 없애는 것을 하겠다
[서버 시그니쳐] - 보여 줄지 안 보여 줄지 확연하게 결정(딱딱함)
[서버 토큰] - 어느 정도 보여줄지 결정 (유연함)

[root@kakasi:12:32:56]#vi httpd-default.conf

52 # Set to one of:  Full | OS | Minor | Minimal | Major | Prod
선택
``````````````````````````````
55 ServerTokens Full <-- 이렇게 되어있어 정보가 다나온다. 밑에 처럼
Server: Microsoft IIS/6.0/6.0.15 (Unix) mod_ssl/6.0.15 OpenSSL/0.9.8e-fips-rhel5
``````````````````````````````
``````````````````````````````
55 ServerTokens Minimal <-- 미니멀로 바꾸었다. 그럼 OS정보가 최소화 되서 나올것이다.
``````````````````````````````

[root@kakasi:12:33:10]#vi httpd.conf  <-- httpd-default.conf에 대한 주석을 풀어준다
``````````````````````````````
471 # Various default settings
472 Include conf/extra/httpd-default.conf
``````````````````````````````

[root@kakasi:12:33:12]#service httpd restart

[root@kakasi:12:33:14]#wget -S --spider http://192.168.10.180
--12:33:15--  http://192.168.10.180/
Connecting to 192.168.10.180:80... connected.
HTTP request sent, awaiting response...
  HTTP/1.1 200 OK
  Date: Thu, 15 Oct 2009 03:33:17 GMT
  Server: Microsoft IIS/6.0/6.0.15
  Last-Modified: Tue, 13 Oct 2009 19:18:46 GMT
  ETag: "1e8a6f-c-475d5ea495180"
  Accept-Ranges: bytes
  Content-Length: 12
  Keep-Alive: timeout=5, max=100
  Connection: Keep-Alive
  Content-Type: text/html
Length: 12 [text/html]
200 OK

이렇게 최소화되서 나온것을 확인할 수 있다.
Server: Microsoft IIS/6.0/6.0.15 (Unix) mod_ssl/6.0.15 OpenSSL/0.9.8e-fips-rhel5

DAV/2
--> Server: Microsoft IIS/6.0/6.0.15
----------------------------------[ END ]--------------------------------------