잠시만 기다려 주세요


 
HOME   |  여기는?   |  바다물때표   |  여러가지 팁 (781)  |  추천 및 재미 (53)  |  자료실 (18)  |  끄적거림 (456)  |  시나리오 (757)  |  드라마 대본 (248)  |  

2019년 07월 20일
거만하면 스스로 무너진다. 말을 적게 하고 소리 없이 걸어라. - 바다아이
 

    리눅스 서버

리눅스 서버 - 아파치 apache 보안 설정.
이 름 : 바다아이   |   조회수 : 2770         짧은 주소 : https://www.bada-ie.com/su/?611523075362

1. Apache 디렉토리 리스팅 제거

디렉토리 리스팅 기능 설정 시 외부사용자에게 디렉토리의 모든 파일을 노출되게 된다.

즉 해당 디렉토리 구조 및 파일정보까지 보여지기 때문에 해커들에게 중요 설정 정보들이 공개되는 것이다.

한국인터넷진흥원 안전 운영대책에도 올라와 있을 정도로 가장 기본적이면서, 중요한 설정이라 할 수 있다.

 

조치 방법

Apache conf 디렉토리로 이동하면, httpd.conf 웹서버 환경파일이 존재한다.

<Directory "DocumentRoot"> Options 항목에 Indexes를 제거하면 된다.

Ex)

<Directory "/home/apache/test">

  Options Indexes 

</Directory>

 

 

2. Apache 불필요한 파일 제거

Apache 설치 시 디폴트로 매뉴얼과 디폴트 정보 파일들이 설치가 된다

설치된 해당 파일들은 버전정보랑 각종 유용한 정보들이 포함되어 있기 때문에 외부 시스템으로부터 정보들을 노출될 수 있다.

 

조치 방법

Apache 기본 디렉토리로 이동하면, cgi-bin 디렉토리가 보일 것이다.

cgi-bin디렉토리 안에 모든 파일들을 제거 해줌으로써 해킹으로부터 안전해질 수 있다.

Ex)

/home/apache/cgi-bin

 

 Dec  11  2004  test-cgi

 Dec  11  2004  printenv

 Oct   14  2013  .

 Oct   21  2013  ..


 

 

3. Apache 심볼릭 링크 사용금지

유닉스/리눅스 계열은 심볼릭링크를 사용하여, 다른 위치에 있는 디렉토리 접근이 가능하도록 지원한다.

Apache에서 링크 설정 시 설정한 디렉토리 외에 타디렉토리에 접근하여 엑세스 할 수 있는 위험성이 발생될 수 있다

그러므로 업무서비스에 영향도가 없는지 파악 후 해당 옵션을 제거해야 한다.

 

조치 방법

Apache conf 디렉토리로 이동하면, httpd.conf 웹서버 환경파일이 존재한다.

<Directory "DocumentRoot"> Options 항목에 followSymLinks를 제거하면 된다.

Ex)

<Directory "/home/apache/test">

  Options followSymLinks

</Directory>

 

 

 

4. Apache SSI 실행 권한 사용금지

Apache에서 SSI는 잠재적인 보안 위험을 갔고 있는데 대표적인게 exec cmd이다.

해당 옵션이 설정되어 있다면 Apache 사용자 및 그룹권한으로 CGI스크립트나 프로그램들을 실행할 수 있다.

악성스크립트가 숨겨져 있다면, Apache 사용자 권한으로 악성프로그램을 구동할 수 있게 된다.

 

조치방법

Apache conf 디렉토리로 이동하면, httpd.conf 웹서버 환경파일이 존재한다.

<Directory /> Options 항목에 Includes 를 제거하거나 IncludesNoExec를 포함시킨다.

Ex)

<Directory />

  Options Includes

</Directory>

Tip 최적의 보안설정 방법 Indexes, followSymLinks, Includes, MultiViews를 삭제하고 IncludesNoExec만 추가한다.

 

 

5. Apache Method 제한 

Apache 웹서버는 다양한 method를 제공하는데 불필요한 method를 제한을 걸고 사용할 method만 제공하는게 좋다.

Method 종류 : GET POST OPTIONS HEAD PUT DELETE TRACE

 

조치방법

Apache conf 디렉토리로 이동하면, httpd.conf 웹서버 환경파일이 존재한다.

아래 내용을 추가 입력하면 된다.

Ex)

<Directory />

<LimitExcept GET POST>

       Order allow,deny

       deny from all

</LimitExcept>

</Directory>

 

 

6. Apache 에러 페이지 등록

Apache 웹 서버에 잘못된 정보나 주소를 전달하면, 에러 메시지가 사용자 브라우저에 웹서버에 중요한 정보들이 출력되게 된다. 공격자가 고의적으로 에러메시지를 발생시켜 서버정보를 획득할 수 있기 때문에 반드시 에러페이지 출력이 가능하도록 설정을 해야 한다.

 

조치방법

Apache conf 디렉토리로 이동하면, httpd.conf 웹서버 환경파일이 존재한다.

에러페이지로 출력할 html 작성 및 환경설정에 추가 해주면 된다.

 

Ex)

ErrorDocument 403 /test/403.html
ErrorDocument 404 /test/404.html
ErrorDocument 500 /test/405.html


출처 : http://ktdsoss.tistory.com/186



 

>> 특정 IP(대역)를 사용하는 호스트 차단하기

# vi /usr/local/apache/conf/httpd.conf

 

<Directory /usr/local/apache/htdocs>

    Order Allow,Deny

    Deny from 192.168.1

    Allow from all

</Directory>

 

해당 디렉토리에 대한 192.168.1.0 ~ 254 IP의 접근 차단. Forbidden Error 출력.

 

 

>> 특정 IP(대역)을 사용하는 호스트만 허용하기

 # vi /usr/local/apache/conf/httpd.conf

 

<Directory /usr/local/apache/htdocs>

    Order Deny,Allow

    Allow from 192.168.1

    Deny from all

</Directory>

 

해당 디렉토리에 대한 192.168.1.0 ~ 254 IP의 접근만 허용

Order Deny,Allow : 마지막이 우선 Deny < Allow

 

 

>> 서버 사이드 파일 설정 (웹 페이지 차단)

# vi /usr/local/apache/conf/httpd.conf

 

<Files ~ "admin.php">  // <Files ~ ".ext$">

   Order Deny,Allow

   Deny from all

   Allow from 192.168.1.1

</Files>

 

해당 파일에 대한 192.168.1.1 IP의 접근만 허용

 

특정확장자를 서버사이드 언어로 설정

AddType application/x-httpd-php .php .inc .bak .old .c

 

 

>> 대용량 메모리 제한 설정


RLimitMEM 20000000
<Directory /usr/local/apache/htdocs/memory/>
    RLimitMEM 50000000
</Directory>

 

모든 디렉토리에 대한 사용가능 메모리 20MB

해당 디렉토리에 대한 사용가능 메모리 50MB

 

 

>> 폴더 접근 차단 (파일 리스트 출력 차단)

# vi /usr/local/apache/httpd.conf

 

<Directory "/usr/local/apache/htdocs">

   Options IncludesNoExec

</Directory>



출처 : http://www.tested.co.kr/board/Study/view/wr_id/20/sca/6


 

RewriteEngine on
RewriteCond %{REQUEST_METHOD} ^TRACE
RewriteRule .* - [F]


※ apache 1.3.33과 2.0.54 이전버전
Apache 1.3.34과 2.0.55 이후 버전에는 「TraceEnable」가 서포트되고 있어 상기와 같이 간단히 TRACE메소드를 무효로 할 수 있지만,
이전 버전(1.3.33과 2.0.54)을 사용하고 있는 경우에는「mod_rewire」를 사용하는 방법이 있다.
이 방법은 「TraceEnable」과는 달리 TRACE메소드가 허가되고 있는 것처럼 보이지만, 내부 처리에 의해 무효화하는 방법이다.
우선, 「mod_rewrite」가 유효하게 되어 있는지 확인한다. 무효로 되어 있다면 유효하게 할 것.
다음의 항목이 httpd.conf에 들어 있으면 된다.


LoadModule rewrite_module libexec/mod_rewrite.so
AddModule mod_rewrite.c


위의 부분이 확인되었다면, 적당한 부분에

<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{REQUEST_METHOD} ^TRACE
RewriteRule .* - [F]
</IfModule>
과 같이 기술하고, Apache를 재기동한다.
이것으로 TRACE메소드는 유효하게 되어 있지만, 클라이언트로부터 송신할 수 없게 된다.
예를 들어 TRACE메소드를 송신한 경우

- 적용 전
telnet 192.168.0.201 80
TRACE / HTTP/1.1
Host:localhost

HTTP/1.1 200 OK
Date: Tue, 11 Jul 2006 10:57:30 GMT
Server: Apache/1.3.12 (Unix)
Transfer-Encoding: chunked
Content-Type: message/http

TRACE / HTTP/1.1
Host: localhost

- 적용 후
HTTP/1.1 403 OK
 

출처 : http://neouser.tistory.com/238




서버를 운영하다보니, 가장 중요한걸 깨닫게 된다. 바로 보안부분이다. 처음 웹서버를 운영하고, 검색 싸이트에 등록하여, 사용자들의 유입이 들어올때쯤, 로그를 확인하게 된다. 그런데 로그에 GET 이나 POST 또는 HEAD 가 아닌 CONNECT 라는 메소드가 뜨는걸 볼 수 있다.  이메소드드에 대한 로그는 아래와 같다.


 "CONNECT mx2.mail2000.com.tw:25 HTTP/1.0" 403


웹서버에 대한 전문적인 지식이 없던 나는 CONNECT 메소드는 알았지만, 위의 로그가  무엇을 하는 행위인지조차 처음에는 알지 못했다. 역시나 구글링을 통해 답을 얻게됬는데, 위의 로그는 내 서버를 이용하여 스팸메일을 보낼려고 시도했다는 내용이였다. 위의 로그에선 상태코드가 403 으로 접근이 금지된걸로 나오지만, 처음에는 200이였다.  나쁜놈들...


암튼 나는 해결방법을 찾기위해 웹서버의 메소드를 제한하는 방법을 검색 하였다. 그리고 검색을 통해 몇가지 알게된 사실이 있다. 보통 큰 웹서버같은경우 사용자들에게 허용하는 메소드는 GET 과 POST 로 제한을 해놓는다는 거였다. 난 비록 작아서 보이지도 않는 웹서버지만, 위의 CONNECT 메소드처럼 위험한 메소드는 차단해 버리는게 좋다고 생각했다.


GET과 POST 메소드 외에 전부 차단하는 방법은 아래와 같다. 일단 아파치 설정 파일인 httpd.conf 파일을 열어 자신의 ROOT 디렉토리 설정 부분을 찾아서 그안에 아래에서 하얀박스 안에 있는 구문을 추가해 주면된다.


 LimitExecept 지시어 추가

<Directory "/var/www/html">
Options FollowSymLinks
AllowOverride FileInfo AuthConfig Limit
AllowOverride All
Require all granted
<LimitExcept GET POST>
        Order deny,allow
        Deny from all
    </LimitExcept>
</Directory>


위에서 LimitExcept  지시어는  GET 과 POST 그외의 메소드가 들어올시 어떠한 행동을 취할 지 설정하는 부분이다. 참고로 이거와 비슷한 Limit 가 있는데 첨엔 정말 헷갈렸다.


Limit 지시어는 메소드에 대한 접근을 인증을 통해 허용되게 할때 필요한 지시어다. 보통 구글링에서 보면 두가지를 전부다 같이 쓰는 경우가 있다. 그 구문은 아래와같다.


 Limit 지시어

<Limit GET POST>
        Order deny,allow
        Allow from all
    </LimitExcept>


 LimitExcept 지시어

<LimitExcept GET POST>
        Order deny,allow
        Deny from all
    </LimitExcept>


하지만 두가지를 전부 다 쓸필요는 없다. 위쪽의 Limit 지시어에선 GET 과 POST 에 대한 설정을 의미하고, 아래의 LimitExcept 지시어는 GET 과 POST 를 제외한 그외메소드에 대한 설정이다.  이거 정말 헷갈릴 수 있으니  확실히 개념을 잡아두는게 좋다. 위와 같이 설정하게 되면, 그냥 중복만 될뿐이다. 여기선 GET 과 POST 를 제외한 나머지 메소드를 제한 해야하기 때에 LimitExcept 지시어 하나만 사용하는편이 좋다.


다시한번 말하지만 Limit 지시어와 LimitExcept 를 같이 사용하는 이유는 제한 과 허용을 인증을 통해 설정되도록 하기 위해서 사용하는것이다 즉 Limit 지시어 에서는 설정된 메소드만 허용하게 만들고 LimitExcept 지시어 에서는 설정된 메소드 그외의 메소드에 대한 처리를 위해 사용되는것이다.


출처 : http://b.redinfo.co.kr/7

 
| |


      1 page / 5 page
번 호 카테고리 제 목 이름 조회수
130 리눅스 서버 , ubuntu generic kernel 바다아이 218
129 리눅스 서버 .. apt ... 바다아이 221
128 리눅스 서버 ... ubuntu kernel compile 바다아이 222
127 리눅스 서버 nginx http2 , . 바다아이 236
126 리눅스 서버 psql libreadline.so.7: cannot open shared object file: No such file or directory 바다아이 489
125 리눅스 서버 ssh .bashrc , bash .. .bash_profile 바다아이 471
124 리눅스 서버 , , 바다아이 461
123 리눅스 서버 ... 바다아이 482
122 리눅스 서버 rc.local ... , 바다아이 457
121 리눅스 서버 ? - IPv4 Subnetting, (Subnet Mask) 바다아이 530
120 리눅스 서버 TCP UDP ? 바다아이 498
119 리눅스 서버 FTP passive(), active() 바다아이 482
118 리눅스 서버 ftp passive .... filezilla ftp ... 바다아이 683
117 리눅스 서버 ssh sftp ... sftp ... 바다아이 491
116 리눅스 서버 rpm 바다아이 549
115 리눅스 서버 /tmp ... /tmp ... tmpfs 바다아이 660
114 리눅스 서버 archlinux ... mirror, 바다아이 580
113 리눅스 서버 centos7 pgadmin4 .... ... pgadmin4 server mode, postgresql admin .. 바다아이 570
112 리눅스 서버 centos 7, freebsd postfix dovecot , 바다아이 723
111 리눅스 서버 Centos 7 Postgresql 10, 11 바다아이 553
110 리눅스 서버 [Network] SSL / TLS 바다아이 693
109 리눅스 서버 TLS , ssl 바다아이 718
108 리눅스 서버 60 , 바다아이 740
107 리눅스 서버 [ ] echo - 바다아이 754
106 리눅스 서버 Bash (Shell Script), 바다아이 982
105 리눅스 서버 shutdown reboot , , 바다아이 904
104 리눅스 서버 manjaro iptables 바다아이 966
103 리눅스 서버 postfix , relay 바다아이 954
102 리눅스 서버 postgresql .... 바다아이 916
101 리눅스 서버 centos Let's Encrypt - SSL , certbot 바다아이 978
| |






Copyright ⓒ 2001.12. bada-ie.com. All rights reserved.
이 사이트는 리눅스에서 firefox 기준으로 작성되었습니다. 기타 브라우저에서는 다르게 보일 수 있습니다.
[ FreeBSD + GoLang + PostgreSQL ]
서버위치 : New Jersey  실행시간 : 0.04553
to webmaster... gogo sea. gogo sea.