이전 글 보러 가기
이전 글에서 Apache 웹 서버를 설치하고 기본적인 환경 설정을 진행했다.
이번 글에서는 웹 서버의 보안 강화를 위한 설정 수정, 접근 제어 설정, SSL 활성화 등 실질적으로 외부 공격에 대비하기 위한 보안 구성 요소를 다룬다. 특히 Apache 설정 파일을 수정하고, 인증서 관련 설정을 적용하면서 다양한 보안 설정들을 연습해 볼 수 있었다.
1. Apache 보안 설정 파일 수정
Apache 설정 파일 중 security.conf를 gedit 에디터로 열어 다음과 같이 수정하였다.
sudo gedit /etc/apache2/conf-available/security.conf
ServerTokens 설정하기
ServerTokens Prod
기본값인 OS는 운영체제 정보까지 응답 헤더에 노출되는데, Prod로 설정하면 Apache만 출력되어 서버 정보 노출을 최소화할 수 있다.
ServerSignature 설정하기
ServerSignature Off
Apache 오류 페이지 하단에 서버 정보가 표시되는 것을 방지하기 위해 Off로 설정하였다.
이는 취약점 스캐너가 서버 정보를 수집하는 것을 어렵게 만들어 보안을 향상시킨다.
2. CSP (Content-Security-Policy) 설정하기
Header set Content-Security-Policy "frame-ancestors 'self';"
Clickjacking 공격 방어를 위해 frame-ancestors를 self로 설정하였다.
이를 통해 외부 페이지가 내 웹 페이지를 iframe으로 로드하는 것을 차단할 수 있다.
3. 민감한 파일 및 디렉터리 접근 차단하기
Apache 설정에 다음과 같은 내용을 추가하여 중요한 파일 및 디렉터리 접근을 차단하였다.
숨겨진 디렉터리 접근 차단
<DirectoryMatch "^\./\/\.">
Require all denied
</DirectoryMatch>
.git ,.env 등 점으로 시작하는 파일 및 디렉터리에 외부에서 접근할 수 없도록 차단하였다.
민감한 확장자 파일 차단
<FilesMatch "\.(?i:log|pem|key|conf|sql|sh|cnf|yml|bak|lock|gitignore)$">
Require all denied
</FilesMatch>
개발 관련 파일 차단
<FilesMatch "(?i:composer\.json|package\.json|readme\.md|phpunit\.xml|license\.txt)$">
Require all denied
</FilesMatch>
개발자 문서, 라이브러리 정보 등이 포함된 파일 역시 보안을 위해 접근 차단했다.
4. 특정 디렉터리 내 PHP 실행 차단하기
<DirectoryMatch "/(uploads|data|wp-content/themes)/">
<FilesMatch ".+\.php$">
Require all denied
</FilesMatch>
</DirectoryMatch>
파일 업로드가 가능한 디렉터리에 악성 PHP 파일이 실행되지 않도록 설정하였다.
5. 예외 허용 - SSL 인증용 디렉터리
<DirectoryMatch "\.well-known/acme-challenge/">
Require all granted
</DirectoryMatch>
Let's Encrypt 인증서 발급을 위해 .well-known/acme-challenge/ 디렉터리는 접근을 허용했다.
6. Apache 모듈 격리 기능 - libapache2-mpm-itk
보안을 강화하기 위해 MPM 방식 중 mpm-itk를 설치하였다.
sudo apt install libapache2-mpm-itk
이 모듈은 각 웹사이트를 서로 다른 사용자 권한으로 실행할 수 있어, 한 사이트가 해킹되어도 다른 사이트나 서버 전체로 피해가 확산되는 것을 막을 수 있다.
7. ServerName 설정하기
ServerName localhost
000-default.conf 설정 파일에 ServerName localhost를 추가하여 Apache가 명확히 호스트 이름을 인식하도록 하였다.
이는 서버 시작 시 발생할 수 있는 경고 메세지를 방지하고, 로컬 테스트 환경에서도 정확한 동작을 보장한다.
8. SSL 설정 적용하기
SSL 가상 호스트 활성화
sudo a2ensite 000-default-ssl.conf
HTTPS 통신을 가능하게 해주는 SSL 설정 파일을 활성화하였다.
해당 파일에는 인증서 경로, SSL 포트(443), 암호화 설정이 포함되어 있다.
Apache 재시작
sudo systemctl restart apache2
SSL 적용 설정이 제대로 반영되도록 Apache를 재시작하였다.
9. 마무리
이번 실습에서는 Apache 보안 설정을 심화하여 서버의 정보를 숨기고, 민감한 파일 및 디렉터리에 대한 접근을 제한하며, HTTPS 통신을 위한 SSL 설정까지 완료하였다. 단순히 서버를 운영하는 것을 넘어서, 보안 중심의 구성을 경험해 볼 수 있었다.
다음 글에서는 가상 호스트(Virtual Host) 설정과 실제 도메인 연결을 다뤄보겠다.
다음 글 보러 가기
이 블로그는 불법 해킹 및 악의적인 활동을 지양하며, 그런 행위는 절대 권장하지 않습니다.
모든 실습은 허가된 환경에서만 진행해야 하며, 법적 책임은 사용자 본인에게 있습니다.
'리눅스 서버 구축' 카테고리의 다른 글
리눅스 시스템 관리 실습 - 사용자, 패키지, 서비스, 방화벽 관리 (4) | 2025.05.24 |
---|---|
리눅스 서버 구축 실습 - 5편 - Virtual Host 설정과 SSL 인증서 적용 프로젝트 (2) | 2025.05.23 |
리눅스 서버 구축 실습 - 4편 - phpMyAdmin 설치와 보안 설정 (2) | 2025.05.23 |
리눅스 서버 구축 실습 - 3편 - PHP 모듈 설치 및 보안 설정, phpinfo 조건부 출력 (0) | 2025.05.23 |
리눅스 서버 구축 실습 - 1편 - 시스템 정보 확인부터 Apache2 웹서버 설정까지 (2) | 2025.05.22 |