Apache2 보안 설정 (Apache2 Security Configuration)
기본 보안 설정 (Basic Security Settings)
Apache 서버의 보안을 강화하는 기본적인 설정입니다.
- ServerTokens 설정: 응답 헤더에 포함되는 Apache 버전 정보를 최소화합니다.
ServerTokens Prod
- ServerSignature 설정: 에러 페이지에 서버 서명을 비활성화합니다.
ServerSignature Off
- TraceEnable 설정: TRACE 메서드를 비활성화합니다.
conf TraceEnable Off
권한 및 접근 제어 (Permissions and Access Control)
Allow, Deny, Require 디렉티브 (Allow, Deny, Require Directives)
Apache 설정 파일에서 특정 디렉토리나 파일에 대한 접근을 제어합니다.
- 특정 IP 주소 허용 및 차단:
<Directory "/var/www/html/private"> Require all denied Require ip 192.168.1.0/24 Require not ip 192.168.1.100 </Directory>
- 전체 접근 차단 및 특정 IP 주소 허용:
conf <Directory "/var/www/html/private"> Require all denied Require ip 192.168.1.101 </Directory>
디렉토리 보호 (Directory Protection)
.htaccess 파일 사용 (Using .htaccess Files)
.htaccess
파일을 사용하여 특정 디렉토리에 대한 설정을 지정할 수 있습니다. 이를 위해 AllowOverride
디렉티브를 사용하여 .htaccess
파일의 사용을 허용해야 합니다.
- Apache 설정 파일에서 AllowOverride 허용:
<Directory "/var/www/html"> AllowOverride All </Directory>
- .htaccess 파일에 접근 제어 설정:
# /var/www/html/private/.htaccess 파일 내용 AuthType Basic AuthName "Restricted Area" AuthUserFile /etc/apache2/.htpasswd Require valid-user
- .htpasswd 파일 생성:
sh sudo htpasswd -c /etc/apache2/.htpasswd username
SSL 설정 (SSL Configuration)
SSL 인증서 발급 및 설치 (SSL Certificate Issuance and Installation)
- OpenSSL을 사용한 자체 서명된 인증서 생성:
sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/ssl/private/apache-selfsigned.key -out /etc/ssl/certs/apache-selfsigned.crt
- Apache SSL 설정 파일 수정:
<VirtualHost *:443> ServerAdmin admin@example.com DocumentRoot "/var/www/html" ServerName www.example.comSSLEngine on SSLCertificateFile /etc/ssl/certs/apache-selfsigned.crt SSLCertificateKeyFile /etc/ssl/private/apache-selfsigned.key <Directory "/var/www/html"> Options Indexes FollowSymLinks AllowOverride None Require all granted </Directory> ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined</VirtualHost>
HTTPS 설정 (Setting up HTTPS)
Let’s Encrypt를 사용한 무료 SSL 인증서 설치 (Using Let’s Encrypt for Free SSL Certificate)
- Certbot 설치:
sudo apt-get update sudo apt-get install certbot python3-certbot-apache
- Certbot을 사용하여 SSL 인증서 발급 및 설정:
sudo certbot --apache
- 자동 갱신 설정 확인:
sudo systemctl status certbot.timer
Certbot은 자동으로 갱신 작업을 설정합니다. 필요할 경우, 수동으로 갱신을 테스트할 수 있습니다.sudo certbot renew --dry-run
예제: 전체 SSL 설정 파일
다음은 Let’s Encrypt로 발급받은 SSL 인증서를 사용하는 Apache 가상 호스트 설정 예제입니다.
<VirtualHost *:80> ServerAdmin admin@example.com DocumentRoot "/var/www/html" ServerName www.example.com ServerAlias example.com RewriteEngine on RewriteCond %{SERVER_NAME} =example.com [OR] RewriteCond %{SERVER_NAME} =www.example.com RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent] </VirtualHost> <VirtualHost *:443> ServerAdmin admin@example.com DocumentRoot "/var/www/html" ServerName www.example.com ServerAlias example.com SSLEngine on SSLCertificateFile /etc/letsencrypt/live/example.com/fullchain.pem SSLCertificateKeyFile /etc/letsencrypt/live/example.com/privkey.pem Include /etc/letsencrypt/options-ssl-apache.conf <Directory "/var/www/html"> Options Indexes FollowSymLinks AllowOverride None Require all granted </Directory> ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined </VirtualHost>
이 예제는 HTTP에서 HTTPS로 리디렉션하고, Let’s Encrypt 인증서를 사용하여 HTTPS를 설정하는 완전한 설정을 보여줍니다.
Apache2의 보안 설정을 통해 웹 서버의 보안을 강화하고, SSL을 사용하여 데이터 통신을 암호화할 수 있습니다. 이를 통해 사용자와 서버 간의 데이터 전송을 안전하게 보호할 수 있습니다.