웹사이트 검색

18 Apache 웹 서버 보안 및 강화 팁


Apache 웹 서버는 파일 및 웹 사이트 호스팅에 가장 널리 사용되고 널리 사용되는 웹 서버 중 하나입니다. 호스팅 요구 사항에 맞게 설치하고 구성하기가 쉽습니다. 그러나 기본 설정은 사이트에 꼭 필요한 보호 기능을 제공하기에 안전하지 않습니다.

이 가이드에서는 웹 서버의 보안을 강화하기 위해 구현할 수 있는 일부 Apache 서버 강화 팁과 요령을 살펴봅니다.

1. Apache 버전 및 OS 정보를 숨기는 방법

기본적으로 Apache 웹 서버는 사용자가 웹 사이트의 잘못된 URL을 탐색하는 경우 해당 버전을 표시합니다. 다음은 사이트에서 페이지를 찾을 수 없음을 나타내는 오류 페이지의 예입니다. 마지막 줄은 Apache 버전, 호스트 OS, IP 주소 및 수신 대기 중인 포트를 나타냅니다.

웹 서버의 정보를 표시하는 것은 결코 좋은 생각이 아닙니다. 정찰 임무를 수행하는 해커에게 좋은 선물이 될 수 있기 때문입니다. 보안 계층을 추가하고 해커를 더 어렵게 만들려면 웹 서버 정보를 숨기는 것이 좋습니다.

이렇게 하려면 Debian 기반 배포판에서 기본 Apache 구성 파일을 엽니다.

sudo vim /etc/apache2/apache2.conf

RHEL, Fedora, CentOS, RockyAlmaLinux.

sudo vim /etc/httpd/conf/httpd.conf

파일 끝에 다음 줄을 추가합니다.

ServerTokens Prod
ServerSignature Off

변경 사항을 저장하고 Apache 웹 서버를 다시 시작합니다.

sudo systemctl restart apache2   [On Debian, Ubuntu and Mint]
sudo systemctl restart httpd     [On RHEL/CentOS/Fedora and Rocky/AlmaLinux]

이제 사이트를 다시 로드하면 이번에는 웹 서버 정보가 표시되지 않습니다.

2. Apache에서 디렉토리 목록 비활성화

기본적으로 Apache는 디렉토리 목록을 허용하며 방문자는 문서 루트 디렉토리에 있는 모든 파일이나 디렉토리를 볼 수 있습니다.

이를 시연하기 위해 test라는 디렉터리를 만듭니다.

sudo mkdir -p /var/www/html/test

다음으로 디렉터리로 이동하여 몇 가지 파일을 만듭니다.

cd /var/www/html/test
sudo touch app.py main.py

이제 http://localhost/test URL에 액세스하면 디렉토리 목록을 볼 수 있습니다.

디렉토리 목록을 비활성화하려면 Apache의 기본 구성 파일로 이동하여 '디렉토리' 속성을 검색하세요. 표시된 대로 '옵션' 매개변수를 '-Indexes'로 설정합니다.

<Directory /opt/apache/htdocs>
Options -Indexes
</Directory>

Apache를 다시 로드하면 이번에는 URL을 방문할 때 디렉토리가 더 이상 표시되지 않습니다.

3. 정기적으로 Apache 업데이트

최신 애플리케이션에는 이전 소프트웨어 버전에 존재하는 근본적인 취약점을 해결하는 버그 수정 및 보안 패치가 포함되어 있으므로 항상 모든 애플리케이션을 최신 상태로 유지하는 것이 좋습니다.

따라서 정기적으로 애플리케이션을 최신 버전으로 업그레이드하는 것이 좋습니다.

sudo apt update && sudo apt upgrade [On Debian, Ubuntu and Mint]
sudo dnf upgrade                    [On RHEL/CentOS/Fedora and Rocky/AlmaLinux]

4. Apache에서 HTTPS 암호화 사용

Apache는 기본적으로 도청되기 쉬운 약하고 안전하지 않은 프로토콜인 HTTP 프로토콜을 사용합니다. 사이트의 보안을 강화하고 더 나아가 Google SEO 순위를 높이려면 SSL 인증서를 사용하여 사이트를 암호화하는 것을 고려해 보세요.

이렇게 하면 기본 HTTP 프로토콜이 HTTPS로 전환되어 서버에서 주고받는 통신을 누구든 가로채서 해독하기가 더 어려워집니다.

Linux에서 Let's Encrypt SSL을 사용하여 Apache 웹 서버를 보호하는 방법을 알아보세요.

  • RHEL에서 SSL 인증서를 암호화하여 Apache를 보호하는 방법
  • Ubuntu 및 Debian에서 무료 Let’s Encrypt SSL 인증서로 Apache를 보호하는 방법

5. Apache에 대해 HSTS(HTTP Strict Transport Security) 활성화

TLS/SSL 인증서로 웹사이트를 암호화하는 것 외에도 HTTPS 위에 HSTS 웹 보안 메커니즘을 구현하는 것을 고려해 보세요.

HTTP 엄격한 전송 보안(HSTS)은 중간자 공격 및 쿠키 하이재킹으로부터 웹사이트를 보호하는 정책 메커니즘입니다. 이는 공격자가 HTTPS 프로토콜을 안전하지 않은 HTTP 프로토콜로 다운그레이드할 때 발생합니다.

HSTS를 사용하면 웹 브라우저가 HTTP 프로토콜을 통해서가 아니라 HTTPS를 통해서만 상호작용해야 한다고 웹 서버에서 엄격하게 선언할 수 있습니다.

HSTS를 활성화하려면 웹사이트가 HTTPS를 실행하고 있고 유효한 TLS/SSL 인증서가 있는지 확인하세요.

다음으로 Apache용 헤더 모듈을 활성화합니다.

sudo a2enmod headers

그런 다음 Apache를 다시 로드하여 변경 사항을 적용하세요.

sudo systemctl restart apache2

다음으로 도메인의 가상 호스트 구성 파일에 액세스합니다.

sudo vim /etc/apache2/sites-available/mydomain.conf

다음으로, 블록 내에 다음 줄을 추가하세요.

Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains"

이는 다음과 같습니다.

<VirtualHost *:443>
        # .....
        # ....
        Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains"
</VirtualHost>

max-age 매개변수는 웹 브라우저가 향후 1년(31536000=1년) 동안 HTTPS를 통해서만 사이트에 액세스하도록 지시합니다.

마지막으로 HSTS 정책을 적용하려면 Apache를 다시 시작하세요.

sudo systemctl restart apache2

6. Apache에서 HTTP/2 활성화

2015년에 HTTP/2가 출시되었습니다. 이는 HTTP/1.1 작성자가 예상하지 못한 여러 문제를 해결하려는 HTTP 프로토콜의 새로운 버전입니다.

HTTP/1.1은 여전히 널리 사용되고 있지만 브라우저의 여러 요청을 처리하기 위해 여러 TCP 연결을 사용하는 것과 관련된 성능 문제와 관련되어 있으며, 이로 인해 클라이언트 측에서 높은 리소스 오버헤드가 발생합니다. 네트워크 성능 저하로 이어집니다.

애플리케이션의 복잡성과 기능이 증가함에 따라 HTTP/2는 긴 HTTP 헤더, 느린 웹페이지 로딩 속도, 일반적인 성능 등 HTTP/1.1의 단점을 해결하기 위해 만들어졌습니다. 하락.

HTTP/2는 이전 버전보다 더 강력한 보호 및 개인 정보 보호 기능을 제공합니다. 마찬가지로 중요한 것은 다중화된 데이터 스트림을 사용하여 성능을 향상시키는 것입니다. HTTP/2를 사용하면 단일 TCP 연결로 여러 데이터 스트림을 전송할 때에도 효과적인 대역폭 활용이 보장됩니다.

다음을 사용하여 Apache 웹 서버에서 HTTP/2를 활성화하는 방법을 확인하세요.

  • Ubuntu의 Apache에서 HTTP/2를 활성화하는 방법

7. Apache의 민감한 디렉터리에 대한 액세스 제한

취할 수 있는 또 다른 보안 조치는 사용자 데이터, 로그, 구성 파일과 같은 중요한 정보가 포함될 수 있는 디렉터리에 대한 액세스를 제한하는 것입니다.

<VirtualHost *:80>
    ServerName example.com
    DocumentRoot /var/www/html

    # Other virtual host settings

    <Directory /var/www/html/sensitive_directory>
        Require all denied
    </Directory>
</VirtualHost>

위 구성에서 모두 거부됨 요구는 /sensitive_directory의 파일에 액세스하려는 모든 사람의 액세스를 거부합니다.

변경 사항을 저장하고 파일을 종료합니다. 그런 다음 변경 사항을 적용하려면 Apache를 다시 시작하십시오.

8. Apache에서 ServerSignature 지시문을 비활성화합니다.

Apache 구성 파일의 ServerSignature 지시문은 실행 중인 버전 및 OS와 같은 웹 서버 구성에 대한 정보가 포함된 서버 생성 문서에 바닥글을 추가합니다. 웹 서버에 대한 중요한 세부 정보를 악의적인 행위자에게 노출하면 공격 가능성이 크게 높아집니다.

이러한 정보의 노출을 방지하려면 Apache 구성 파일에서 이 지시문을 비활성화해야 합니다.

ServerSignature Off

변경 사항을 저장하고 Apache를 다시 시작하여 변경 사항을 적용합니다.

sudo systemctl restart apache2

9. 'ServerTokens' 지시문을 'Prod'로 설정합니다.

'ServerTokens' 지시문은 Apache 버전(주 및 부 버전), OS, 실행 중인 웹 서버 유형을 포함하여 서버가 보내는 정보를 제어합니다.

대중에게 공개하고 싶은 최소한의 정보는 웹 서버가 Apache라는 것입니다. 다른 방법은 서버를 잠재적인 공격에만 노출시킵니다. 따라서 Apache 구성 파일의 'ServerTokens' 지시어를 'prod'로 설정하는 것이 좋습니다.

ServerTokens Off

항상 그렇듯이 변경 사항을 저장하고 Apache를 다시 시작하십시오.

10. Fail2ban으로 Apache 보호

Fail2ban은 DoS 및 무차별 대입 공격을 포함한 외부 위협으로부터 Linux 시스템을 보호하는 오픈 소스 침입 방지 애플리케이션입니다. 이는 악의적인 활동에 대한 시스템 로그를 지속적으로 모니터링하고 공격 동작을 모방하는 패턴과 일치하는 호스트를 금지하는 방식으로 작동합니다.

Fail2ban은 실패한 로그인 시도에 대한 Apache 로그를 지속적으로 모니터링하고 문제가 되는 IP를 일시적으로 금지하여 DoS 공격으로부터 Apache를 보호하도록 구성할 수 있습니다.

다음을 사용하여 Linux에 Fail2ban을 설치하는 방법을 확인하세요.

  • Fail2ban을 사용하여 Linux 서버를 보호하는 방법

11. 불필요한 모듈 비활성화

Apache 모듈은 웹 서버의 기능을 확장하기 위해 로드되는 단순한 프로그램입니다. 모듈에 의해 확장되는 기능에는 기본 인증, 콘텐츠 캐싱, 암호화, 보안 등이 포함됩니다.

공격의 희생양이 될 가능성을 최소화하려면 현재 사용하지 않는 모든 모듈을 비활성화하는 것이 좋습니다.

활성화된 모든 모듈을 보려면 다음 명령을 실행하세요.

apache2ctl -M

특정 모듈(예: 다시 쓰기 모듈)이 활성화되어 있는지 확인하려면 명령을 실행합니다.

apache2ctl -M | grep rewrite

모듈을 비활성화하려면 다음 명령을 실행하십시오.

sudo a2dismod rewrite 

12. mod_security 및 mod_evasive 모듈을 사용하여 Apache 보안

mod_securitymod_evasive 모듈을 활성화하여 무차별 대입 공격이나 DDoS 공격으로부터 Apache를 보호할 수 있습니다.

  • mod_security 모듈은 웹 애플리케이션 방화벽(WAF)처럼 작동하며 사이트에 대한 의심스럽고 원치 않는 트래픽을 차단합니다.
  • mod_evasive 모듈은 무차별 공격과 서비스 거부 공격(DoS)으로부터 서버를 보호합니다.

mod_security 및 mod_evasive 모듈을 사용하여 Apache를 보호하는 방법에 대해 자세히 알아보세요.

13. Apache의 원치 않는 서비스 제한

Apache를 더욱 안전하게 보호하려면 현재 필요하지 않은 경우 기호 링크 및 CGI 실행과 같은 특정 서비스를 비활성화하는 것이 좋습니다. 기본적으로 Apache는 심볼릭 링크를 따르므로 이 기능과 -Includes 기능 및 CGI를 한 줄로 끌 수 있습니다.

이렇게 하려면 '디렉터리' 섹션의 '옵션' 지시문에 대해 '-ExecCGI -FollowSymLinks -Includes' 줄을 추가하세요.

<Directory /your/website/directory>
Options -ExecCGI -FollowSymLinks -Includes
</Directory>

이는 디렉터리 수준에서도 달성할 수 있습니다. 예를 들어, 여기서는 “/var/www/html/mydomain1” 디렉토리에 대한 포함 및 Cgi 파일 실행을 끄고 있습니다.

<Directory "/var/www/html/mydomain1">
	Options -Includes -ExecCGI
</Directory>

변경 사항을 저장하고 Apache를 다시 시작하십시오.

14. Apache에서 파일 업로드 크기 제한

웹 서버를 보호하는 또 다른 방법은 클라이언트에서 웹 서버로 전송되는 HTTP 요청 본문의 전체 크기를 제한하는 것입니다. 서버, 디렉터리별, 파일별 또는 위치별 컨텍스트에서 설정할 수 있습니다.

예를 들어, 특정 디렉터리에 대한 파일 업로드를 허용하려면 /var/www/domain.com/wp-uploads 디렉터리라고 말하고 업로드된 파일의 크기를 4M로 제한하세요.=4194304Bytes, Apache 구성 파일 또는 .htaccess 파일에 다음 지시어를 추가하세요.

<Directory "/var/www/domain.com/wp-uploads">
	LimitRequestBody  4194304
</Directory>

변경 사항을 저장하고 Apache를 다시 시작하는 것을 잊지 마십시오.

서버, 디렉터리별, 파일별 또는 위치별 컨텍스트에서 설정할 수 있습니다. 이 지시문은 때때로 DoS(서비스 거부) 공격의 형태일 수 있는 비정상적인 클라이언트 요청 동작을 방지합니다.

15. Apache에서 로그인 활성화

로깅은 클라이언트 요청에 대한 모든 세부 정보 및 웹 서버 성능과 관련된 기타 정보를 제공합니다. 이는 문제가 발생할 경우에 유용한 정보를 제공합니다. 특히 가상 호스트 파일에서 Apache 로그를 활성화하면 웹 서버에 문제가 있을 경우 문제를 정확히 찾아낼 수 있습니다.

로깅을 활성화하려면 두 가지 주요 로깅 지시문을 제공하는 mod_log_config 모듈을 포함해야 합니다.

  • ErrorLog – 오류 로그 파일의 경로를 지정합니다.
  • CustomLog – 로그 파일을 생성하고 형식을 지정합니다.

가상 호스트 섹션의 가상 호스트 파일에서 이러한 속성을 사용하여 로깅을 활성화할 수 있습니다.

<VirtualHost 172.16.25.125:443>
        ServerName example.com
        DocumentRoot /var/www/html/example/
        ErrorLog ${APACHE_LOG_DIR}/error.log
        CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

Debian 시스템의 {APACHE_LOG_DIR} 지시어는 /var/log/apache2 경로로 정의됩니다.

16. Apache를 별도의 사용자 및 그룹으로 실행

Apache를 별도의 사용자 및 그룹으로 실행하는 것은 일반적인 보안 관행입니다. 이렇게 하면 웹 서버 프로세스를 다른 시스템 프로세스로부터 격리하고 웹 서버가 손상된 경우 잠재적인 피해를 최소화할 수 있습니다.

먼저 Apache를 위한 새 사용자 및 그룹을 생성해야 합니다.

sudo groupadd apachegroup
sudo useradd -g apachegroup apacheuser

다음으로 Apache 구성 파일을 편집하여 새 사용자와 그룹을 지정해야 합니다.

User apacheuser
Group apachegroup

Apache가 실행하는 사용자와 그룹을 변경하므로 Apache가 계속 읽을 수 있도록 웹 디렉터리와 파일의 소유권을 업데이트해야 할 수도 있습니다.

sudo chown -R apacheuser:apachegroup /var/www/html

이러한 변경을 수행한 후 Apache를 다시 시작하여 적용합니다.

sudo systemctl restart httpd      # For RHEL/CentOS
sudo systemctl restart apache2    # For Debian/Ubuntu

17. DDOS 공격 보호 및 강화

글쎄요, DDoS 공격으로부터 웹사이트를 완전히 보호할 수 없다는 것은 사실입니다. 그러나 이를 완화하고 관리하는 데 도움이 되는 몇 가지 지침은 다음과 같습니다.

  • TimeOut – 이 지시문을 사용하면 오류를 반환하기 전에 서버가 특정 이벤트가 완료될 때까지 기다리는 기간을 지정할 수 있습니다. 기본값은 300초입니다. DDoS 공격에 취약한 사이트의 경우 이 값을 낮게 유지하는 것이 좋습니다. 그러나 적절한 설정은 웹사이트에서 받는 요청의 성격에 따라 크게 달라집니다. 참고: 시간 초과가 낮으면 일부 CGI 스크립트에 문제가 발생할 수 있습니다.
  • MaxClients – 이 지시어는 동시에 제공될 수 있는 연결 수에 대한 제한을 설정합니다. 이 제한을 초과하는 모든 새 연결은 대기열에 추가됩니다. PreforkWorker MPM 모두에서 사용할 수 있습니다. 기본값은 256입니다.
  • KeepAliveTimeout – 이 지시문은 연결을 닫기 전에 서버가 후속 요청을 기다리는 시간을 지정합니다. 기본값은 5초입니다.
  • LimitRequestFields – 이 지시문은 클라이언트가 허용하는 HTTP 요청 헤더 필드 수에 대한 제한을 설정합니다. 기본값은 100입니다. HTTP 요청 헤더 수가 너무 많아 DDoS 공격이 발생하는 경우 이 값을 줄이는 것이 좋습니다.
  • LimitRequestFieldSize – 이 지시어는 HTTP 요청 헤더의 크기 제한을 설정합니다.

18. 정기적인 취약점 스캔 수행

웹 서버를 보호하는 또 다른 방법은 정기적인 취약점 검색 테스트를 수행하는 것입니다. 이는 해커가 중요한 파일에 액세스하거나 악성 코드를 삽입하기 위해 악용할 수 있는 잠재적인 보안 허점을 식별하는 데 도움이 됩니다.

취약점 검색 도구는 안전하지 않은 구성 설정을 지적하고 규정 준수 감사에도 도움이 됩니다. 인기 있는 취약점 검색 도구로는 Acutenix, Nessus, Nexpose, Sucuri 등이 있습니다.

결론

다음은 추가 보호 계층을 제공하고 침입을 방지하기 위해 웹 서버에 구현할 수 있는 Apache 강화 팁 중 일부입니다.