Apache2 Security

Apache2 보안 설정 (Apache2 Security Configuration)

기본 보안 설정 (Basic Security Settings)

Apache 서버의 보안을 강화하는 기본적인 설정입니다.

  1. ServerTokens 설정: 응답 헤더에 포함되는 Apache 버전 정보를 최소화합니다. ServerTokens Prod
  2. ServerSignature 설정: 에러 페이지에 서버 서명을 비활성화합니다. ServerSignature Off
  3. TraceEnable 설정: TRACE 메서드를 비활성화합니다.
    conf TraceEnable Off

권한 및 접근 제어 (Permissions and Access Control)

Allow, Deny, Require 디렉티브 (Allow, Deny, Require Directives)

Apache 설정 파일에서 특정 디렉토리나 파일에 대한 접근을 제어합니다.

  1. 특정 IP 주소 허용 및 차단: <Directory "/var/www/html/private"> Require all denied Require ip 192.168.1.0/24 Require not ip 192.168.1.100 </Directory>
  2. 전체 접근 차단 및 특정 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 파일의 사용을 허용해야 합니다.

  1. Apache 설정 파일에서 AllowOverride 허용: <Directory "/var/www/html"> AllowOverride All </Directory>
  2. .htaccess 파일에 접근 제어 설정: # /var/www/html/private/.htaccess 파일 내용 AuthType Basic AuthName "Restricted Area" AuthUserFile /etc/apache2/.htpasswd Require valid-user
  3. .htpasswd 파일 생성:
    sh sudo htpasswd -c /etc/apache2/.htpasswd username

SSL 설정 (SSL Configuration)

SSL 인증서 발급 및 설치 (SSL Certificate Issuance and Installation)
  1. 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
  2. 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 &lt;Directory "/var/www/html"&gt; Options Indexes FollowSymLinks AllowOverride None Require all granted &lt;/Directory&gt; 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)
  1. Certbot 설치: sudo apt-get update sudo apt-get install certbot python3-certbot-apache
  2. Certbot을 사용하여 SSL 인증서 발급 및 설정: sudo certbot --apache
  3. 자동 갱신 설정 확인: 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을 사용하여 데이터 통신을 암호화할 수 있습니다. 이를 통해 사용자와 서버 간의 데이터 전송을 안전하게 보호할 수 있습니다.

Leave a Reply

Your email address will not be published. Required fields are marked *