1. 1. 디렉토리 인덱싱 제거
디렉토리 인덱싱 제거 설정을 하지 않으면 웹브라우저 상에서 서버 디렉토리 내의 모든 파일을 열람할 수 있다.
하위 디렉토리, 상위 디렉토리로도 접근할 수 있기 때문에 디렉토리 인덱싱 제거 설정을 해야한다.
# vi httpd.conf
Options Indexes FollowSymLinks 에서 Indexes 제거
<Directory />
#Options Indexes FollowSymLinks
Options FollowSymLinks
AllowOverride None
Order allow,deny
Allow from all
</Directory>
브라우저에서 403에러 출력시 성공.
2. 2. 심볼릭 링크 비활성화
만약 root 디렉토리(/)를 심볼릭 링크 걸게되면 /etc/password 같은 민감한 파일까지 누구나 열람이 가능하여 보안 문제를 일으킨다. 그렇기 때문에 심볼릭 링크 기능을 비활성화하여 서버 보안을 유지해야한다.
# vi httpd.conf
Options FollowSymLinks을 주석처리하고
Options None 추가
<Directory />
#Options FollowSymLinks
Options None
AllowOverride None
Order allow,deny
Allow from all
</Directory>
3. 3. HTTP Method 제한
HTTP Method에는 여러가지 종류가 존재한다.
서버 정보를 알 수 있는 HEAD, 서버에서 지원하는 메소드를 확인할 수 있는 OPTION 등 있지만
GET, POST를 제외한 Method는 웹 서버에서 사용할 수 없게 제한을 두는 것이 좋다.
vi /톰캣설치폴더/conf/web.xml
<servlet>
<!-- 전략 -->
<init-param>
<param-name>dispatchOptionsRequest</param-name>
<param-value>true</param-value>
</init-param>
<!-- 후략 -->
</servlet>
<!-- HTTP Method 제한 -->
<security-constraint>
<display-name>Forbidden</display-name>
<web-resource-collection>
<web-resource-name>Protected Context</web-resource-name>
<url-pattern>/*</url-pattern>
<http-method>HEAD</http-method>
<http-method>PUT</http-method>
<http-method>DELETE</http-method>
<http-method>TRACE</http-method>
<http-method>OPTIONS</http-method>
<http-method>PATCH</http-method>
</web-resource-collection>
<auth-constraint>
<role-name></role-name>
</auth-constraint>
</security-constraint>
Method 결과 확인
# curl -I -X OPTIONS www.example.com/ 결과 : HTTP/1.1 403
# curl -I -X DELETE www.example.com/ 결과 : HTTP/1.1 403
# curl -I -X PATCH www.example.com/ 결과 : HTTP/1.1 403
# curl -I -X TRACE www.example.com/ 결과 : HTTP/1.1 403
# curl -I -X HEAD www.example.com/ 결과 : HTTP/1.1 403
# curl -I -X PUT www.example.com/ 결과 : HTTP/1.1 403
# curl -I -X POST www.example.com/ 결과 : HTTP/1.1 200
# curl -I -X GET www.example.com/ 결과 : HTTP/1.1 200
4. 서버 버전 정보 숨기기
Apache Tomcat에서는 Error를 유발했더니 서버 버전 정보가 노출되었다.
Error 페이지에서 출력되는 버전 정보를 숨기는 방법은 아래와 같다.
vi /톰캣설치폴더/conf/server.xml
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" ... />
태그 아래에 아래 코드 추가
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" ... />
<!-- =============== Error 페이지 서버 정보 숨기기 =============== -->
<Valve className="org.apache.catalina.valves.ErrorReportValve"
showReport="false"
showServerInfo="false" />