DIRECTORY INDEXING
[ Directory Indexing 방지 ]
- Directory에 직접 접근했을 때 내부 파일 목록이 보이지 않도록 방지하는 보안 설정
- Index : 디렉터리 인덱싱 (index.html 등이 없을 경우 파일 목록을 표시/X)
- FollowSymLinks : 심볼릭 링크 (다른 위치에 있는 파일/디렉터리에 대한 참조를 따라가도록 허용/X)
- Apache는 Options 안에서 모두 기호를 붙이든지 빼든지 해야 함
- Indexes만 - 기호를 붙이면 restart 시 오류 발생
# vi /etc/httpd/conf/httpd.conf
|
149 Options -Indexes +FollowSymLinks

< 실습 >
'dami' 라는 user를 생성해 주고 허가권을 755로 변경해 준다.
해당 디렉터리 아래 public_html 디렉터리를 만들고
그 아래 index.html 파일을 생성 후 출력 문구를 작성해 준다.
방화벽은 기본적으로 OFF
Apache는 ~/public_html 이라는 WEB 공개 전용 폴더만 읽을 수 있기 때문에
/home/[user]/public_html 밑에 index 파일을 생성하는 것이다.
~/public_html은 외부 공개 전용 디렉터리라고 생각하면 편하다.
(# vi /etc/httpd/conf.d/userdir.conf
24 UserDir public_html에 지정되어 있다.)
# chmod 755 /home/dami
# mkdir /home/dami/public_html
# vi /home/dami/public_html/index.html

기본 웹 페이지에 출력할 문구 작성
Apache가 user 홈 디렉터리를 WEB에서 접근 가능하게 해준다.
(http://서버 IP 주소/~사용자명/ 으로 접근 가능하게)
UserDir은 기본적으로 비활성화가 되어 있어서 /~user 접근해도 "404 Not Found"가 뜬다.
UserDir public_html을 활성화해줘야 Apache가 해당 경로에 접근 가능하다.
Apache에게 사용자 홈 디렉터리에서 public_html 폴더를 WEB 루트로 사용하라고 알려주는 것이다.
(http://192.168.10.50/~dami = /home/dami/public_html 매핑)
17/24 둘 다 활성화되어 있으면 충돌이 생기기 때문에 주의
# vi /etc/httpd/conf.d/userdir.conf
17 # UserDir disabled (: 주석 처리)
24 UserDir public_html (: 주석 해제 및 디렉터리 명 확인 및 변경)

여기까지 설정하면 index.html 문구가 정상적으로 출력된다.
디렉터리에 index.html 같은 디폴트 인덱스 파일이 있으면
디렉터리 목록을 출력하지 않고 해당 파일을 가장 먼저 출력한다.


디렉터리 목록을 출력하려면 인덱스 파일명을 변경해 주면 된다.
(인덱스 파일 X + Option Indexes)
index.html을 in.html(임의)로 변경해 주면 user로 접근 시 이렇게 디렉터리 목록이 출력된다.
# mv index.html in.html
# systemctl restart httpd

이제 Directory Indexing 방지를 위해 환경설정 파일에서 인덱싱 기능을 제거해 준다.
httpd.conf와 userdir.conf 환경설정 파일은 모두 Apache 설정 파일이지만
httpd.conf는 Apache의 메인 설정 파일, userdir.conf는 사용자 디렉터리 관련 설정 파일이다.
나는 사용자 디렉터리를 만들어서 설정했기 때문에 userdir.conf에서 작업해 준다.
Options에서 Indexes 제거해줬다.
(만약 # vi /var/www/html/index.html를 사용한다면 httpd.conf에 설정)
# vi /etc/httpd/conf/httpd.conf
# systemctl restart httpd

디렉터리 인덱싱 방지가 됨을 확인하기 위해 in.html로 변경했던 파일명을 다시 index.html로 변경해 준다.
in.html로 이름을 변경하기 전에도 디렉터리 목록이 뜨지 않았는데
굳이 Options -Indexes 설정을 해주는 이유는 이 설정 자체가 보안 장치이기 때문이다. 실수로 파일이 삭제되거나 이름을 잘못 지정해 주는 등의 상황이 오면 정보 유출 위험이 높아지기 때문에 기업 서버나 실무에서는 항상 -Indexes가 기본이라고 한다.

이제 특정 IP(192.168.10.100, 150) 서버에서만 접근 가능하도록 설정해 준다.
기존 Require(34줄)을 주석 처리해 주고 밑에 추가로 작성을 해줬다.
# vi /etc/httpd/conf.d/userdir.conf
# systemctl restart httpd

100/150번 서버에서는 정상적으로 접근되지만
200번 서버는 Forbidden이 뜬다.
100/150번 서버

200번 서버
WEB 페이지 접근 통제 - BASIC AUTH
WEB 서버 기본 인증 + IP 접근 제한을 설정한다.
http://192.168.10.50/basic/ 접속 시 사용자 인증창이 뜨고 지정한 user 중 하나가 로그인해야 하며
접속 IP Add가 100번 서버일 경우에만 접속을 허용해 주는 설정을 해준다.
# vi /etc/httpd/conf.d/auth_basic.conf

useradd + passwd로 유저 생성 후 각각 .htpasswd 파일을 생성한다. (Apache 인증용 사용자 DM)
-c 옵션은 처음 사용자에게만 부여한다.
이 파일에 사용자 ID와 암호화된 PW가 저장된다.
# htpasswd -c /etc/httpd/.htpasswd bae
# htpasswd /etc/httpd/.htpasswd da
# htpasswd /etc/httpd/.htpasswd mi
이제 인증 페이지를 만들 디렉터리를 생성해 주고 인증된 사용자만 볼 수 있는 웹 페이지를 생성한다.
# mkdir /var/www/html/basic
# vi /var/www/html/basic/index.html

100번 서버만 허용되었기 때문에 바로 인덱싱 페이지가 뜨고
150번 서버는 인증 후 접근이 된다. (비밀번호는 htpasswd로 설정한 암호)

100번 서버 접속 시 바로 접근됨

150번 서버는 인증 창이 뜨고

인증해야 접근됨
WEB 페이지 접근 통제 - DIGEST AUTH
Basic Auth보다 더 안전하게 사용자 인증을 처리할 수 있는 Apache Digest Auth를 설정한다.
Digest Auth는 ID/PW를 암호화 없이 전송하고 해시 처리된 암호를 전송하기 때문에 더 안전하다.
방금 입력해놓은 auth_basic.conf를 복사해와서 내용만 수정해 줬다.
이번엔 150번 서버만 바로 접근을 허용해 준다.
# cd /etc/httpd/conf.d
# cp auth_basic.conf auth_digest.conf
# vi auth_digest.conf

마찬가지로 useradd + passwd로 접근 허용할 User를 생성해 준다. (dam)
"" 안에 들어가는 문구는 위 auth_digest.conf AuthName에 입력한 문구와 일치해야 한다.
Basic Auth와 동일하게 인증 페이지를 만들 디렉터리를 생성해 주고
인증된 사용자만 볼 수 있는 웹 페이지를 생성한다.
# htdigest -c /etc/httpd/.htdigest "Digest Authentication Test" dam
# mkdir /var/www/html/digest
# vi /var/www/html/digest/index.html
# systemctl restart httpd

Digest Auth 비밀번호는 HASH 처리된다.
아래 명령어로 해시 된 패스워드를 확인할 수 있다.
(Apache는 이 파일을 읽고 Digest 인증을 수행)
# cat /etc/httpd/.htdigest

인증 허용한 150번 서버는 바로 접근되고
200번 서버는 인증 창이 나온다.
200번 서버는 설정한 User와 암호로 인증 후 접근이 된다.

150번 서버 - 바로 접근됨

200번 서버는 인증 창이 뜸

인증 후 접근 성공
TOMCAT 기반 JAVA 웹 애플리케이션 실행 환경 구축
[ Tomcat 설치 → JSP 파일 실행 → 브라우저 출력 확인 ]
Apache Tomcat 설치 후 관리자 웹 인터페이스 접속을 위한 사용자 계정을 설정한다.
tomcat과 java 설치 후 restart, Tomcat 서버가 정상적으로 8080 포트에서 실행되고 있는지 확인해 준다.
# dnf -y install tomcat*
# dnf -y install java*
# lsof -i tcp:8080

tomcat 확인
Tomcat은 설치 후 기본적으로 웹 관리자 페이지에 아무나 접속할 수 없게 설정되어 있기 때문에
우선 Tomcat 웹 관리자 페이지에 로그인할 수 있는 사용자를 생성해 줘야 한다.
61줄과 65줄 주석 해제 + 65줄 passwd 설정을 해줬다.
(61줄 : 웹 브라우저에서 Tomcat Manager 접속 가능)
(56줄 : 관리자 계정 추가)
# vi /usr/share/tomcat/conf/tomcat-users.xml
# systemctl restart tomcat

모든 설정이 끝났으면
Tomcat 서버에서 JSP(Java Server Page) 파일을 만들어 웹 브라우저에서 실행되는지 Test 해본다.
index.jsp는 디폴트로 존재하는 파일이니까 index2.jsp를 만들어 출력하고 싶은 문구를 작성해 준다.

100번 서버에서 접속해서 정상적으로 출력된 것을 확인했다.
192.168.10.50:8080/index2.jsp

SSL/TLS 인증서 설정 및 HTTPS 적용
SSL/TLS 인증서 생성을 위해 존 테이블을 입력해서 'dami.co.kr' 도메인을 생성해 준다.
# dnf -y install bind* --skip broken
# vi /etc/named.conf
# vi /etc/named.rfc1912.zones


HTTPS 통신을 위해 패키지를 설치 받는다.
두 패키지는 HTTPS 활성화(웹서버 보안 접속 기능 추가), 인증서 생성, Apache 연동을 위해 사용한다.
(존 파일을 만들지 않았기 때문에 restart named와 host dami.co.kr은 되지 않는 게 정상이다.)
# dnf -y install openssl
# dnf -y install mod_ssl
< 01. Private Key 생성 - 개인키 >
인증서 관련 파일을 저장하는 기본 파일 certs에 'dami' 라는 Pirvate Key를 생성해 준다.
openssl genrsa -out [key이름].key 2048
|
# cd /etc/pki/tls/certs
# openssl genrsa -out dami.key 2048

생성된 key 확인
< 02. CSR 생성 - 요청서 >
비밀 키 생성 후 SSL 인증서를 만들기 위한 CSR(인증서 요청 파일)을 생성해 준다.
CSR은 인증서 발급 기관에 제출하는 파일로 조직/도메인 정보, 이메일 등이 들어가 있다.
.csr을 기반으로 .crt 인증서가 만들어진다.
openssl req -new key [key이름] -out [csr이름].csr
|
# openssl req -new -key http.key -out http.csr


생성된 CSR
< 03. CRT 생성 - 인증서 >
CSR에 개인키로 서명해서 자체 서명 인증서를 만들어준다.
openssl x509 -req -days 365 -in [csr이름].csr -signkey [key이름].key -out [crt이름].crt
|
# openssl x509 -req -days 365 -in http.csr -signkey http.key -out https.crt
웹 서버에 HTTPS 기능을 적용하기 위한 설정을 해준다.
SSL 인증서와 비밀키를 Apache에 연결해 HTTPS 접속을 가능하게 한다.
43, 44줄 주석 해제 + 44줄 도메인 입력
88줄 파일 경로 생성한 인증서명으로 변경
93줄 파일 경로 생성한 개인키로 변경
# vi /etc/httpd/conf.d/ssl.conf



https://192.168.10.50으로 접속한다.

고급 - 위험을 감수하고 계속

생성한 도메인으로 존파일 만들면 'https://도메인' 으로도 접근 성공

vhost 생성 시 443포트 추가해주면 https 접속 가능


'IT 엔지니어 > Security' 카테고리의 다른 글
Burpsuite, Hydra, DVWA, (1) | 2025.04.15 |
---|---|
XSS (0) | 2025.04.11 |
SNORT RULEs (0) | 2025.04.10 |
SNORT / IDS (0) | 2025.04.08 |
IPTABLES / UTM (0) | 2025.04.04 |