웹사이트 검색

Ubuntu 22.04에서 ModSecurity로 Apache를 설치하는 방법


이 페이지에서

  1. 요구 사항\n
  2. Apache 웹 서버 설치
  3. ModSecurity 설치
  4. ModSecurity 구성
  5. OWASP 핵심 규칙 세트 설치\n
  6. ModSecurity 확인\n
  7. Logrotate 구성
  8. 결론

ModSecurity는 Apache, Nginx 및 IIS와 같은 다양한 웹 서버에서 지원하는 무료 오픈 소스 방화벽 도구입니다. XSS(교차 사이트 스크립팅), 무차별 암호 대입 공격, 알려진 코드 삽입 공격 등 여러 유형의 공격을 차단할 수 있는 시그니처 기반 방화벽입니다. 서버 보안을 사용자 정의하고 구성할 수 있는 다양한 규칙 세트를 제공합니다. 또한 실시간으로 웹 트래픽을 모니터링하고 침입을 감지하고 대응하는 데 도움을 줄 수 있습니다.

이 튜토리얼에서는 Ubuntu 22.04에서 Apache로 ModSecurity를 설정하는 방법을 설명합니다.

요구 사항

  • Ubuntu 22.04를 실행하는 서버.\n
  • 서버에 루트 암호가 구성되어 있습니다.\n

아파치 웹 서버 설치

시작하기 전에 최신 버전의 Apache 웹 서버 패키지를 서버에 설치해야 합니다. 먼저 다음 명령을 사용하여 필요한 모든 종속 항목을 설치합니다.

apt install gnupg2 software-properties-common curl wget git unzip -y

모든 종속성이 설치되면 다음 명령을 사용하여 Apache 리포지토리를 추가합니다.

add-apt-repository ppa:ondrej/apache2 -y

다음으로 리포지토리 캐시를 업데이트하고 다음 명령을 사용하여 Apache 패키지를 설치합니다.

apt update -y
apt install apache2 -y

Apache가 설치되면 다음 단계로 진행할 수 있습니다.

ModSecurity 설치

다음으로 다음 명령을 실행하여 ModSecurity Apache 모듈을 설치합니다.

apt install libapache2-mod-security2 -y

패키지가 설치되면 다음 명령을 사용하여 ModSecurity 모듈을 활성화합니다.

a2enmod security2

다음으로 Apache 서비스를 다시 시작하여 변경 사항을 적용합니다.

systemctl restart apache2

다음 명령을 사용하여 Apache 상태를 확인할 수도 있습니다.

systemctl status apache2

다음과 같은 결과가 표시됩니다.

? apache2.service - The Apache HTTP Server
     Loaded: loaded (/lib/systemd/system/apache2.service; enabled; vendor preset: enabled)
     Active: active (running) since Tue 2022-10-18 10:49:42 UTC; 4s ago
       Docs: https://httpd.apache.org/docs/2.4/
    Process: 74445 ExecStart=/usr/sbin/apachectl start (code=exited, status=0/SUCCESS)
   Main PID: 74449 (apache2)
      Tasks: 55 (limit: 2242)
     Memory: 29.7M
        CPU: 229ms
     CGroup: /system.slice/apache2.service
             ??74449 /usr/sbin/apache2 -k start
             ??74450 /usr/sbin/apache2 -k start
             ??74451 /usr/sbin/apache2 -k start

Oct 18 10:49:42 ubuntu2204 systemd[1]: Starting The Apache HTTP Server...

ModSecurity 구성

다음으로 ModSecurity 구성 파일을 편집합니다.

nano /etc/apache2/mods-enabled/security2.conf

다음 줄의 주석 처리를 제거하십시오.

IncludeOptional /etc/modsecurity/*.conf

파일을 저장하고 닫은 다음 ModSecurity 구성 파일의 이름을 바꿉니다.

mv /etc/modsecurity/modsecurity.conf-recommended /etc/modsecurity/modsecurity.conf

다음으로 ModeSecurity 구성 파일을 편집합니다.

nano /etc/modsecurity/modsecurity.conf

다음 줄을 변경합니다.

SecRuleEngine On
SecAuditLogParts ABCEFHJKZ

파일을 저장하고 닫은 다음 Apache 서비스를 다시 시작하여 변경 사항을 적용합니다.

systemctl restart apache2

OWASP 핵심 규칙 세트 설치

악의적인 공격으로부터 웹 애플리케이션을 보호하려면 서버에 OWASP 핵심 규칙 집합을 다운로드하여 설치해야 합니다.

먼저 다음 명령을 사용하여 최신 규칙 집합을 다운로드합니다.

wget https://github.com/coreruleset/coreruleset/archive/v3.3.0.tar.gz

다운로드가 완료되면 다음 명령을 사용하여 다운로드한 파일의 압축을 풉니다.

tar xvf v3.3.0.tar.gz

다음으로 규칙에 대한 디렉터리를 만들고 해당 디렉터리 내에서 추출된 규칙을 이동합니다.

mkdir /etc/apache2/modsecurity-crs/
mv coreruleset-3.3.0/ /etc/apache2/modsecurity-crs

다음으로 OWASP 규칙 디렉터리로 이동하고 구성 파일의 이름을 바꿉니다.

cd /etc/apache2/modsecurity-crs/coreruleset-3.3.0/
mv crs-setup.conf.example crs-setup.conf

다음으로 ModSecurity 구성 파일을 편집하고 OWASP 규칙 집합의 경로를 정의합니다.

nano /etc/apache2/mods-enabled/security2.conf

다음 줄을 추가합니다.

IncludeOptional /etc/apache2/modsecurity-crs/coreruleset-3.3.0/crs-setup.conf
IncludeOptional /etc/apache2/modsecurity-crs/coreruleset-3.3.0/rules/*.conf

파일을 저장하고 닫은 후 다음 명령을 사용하여 구문 오류가 있는지 Apache를 확인합니다.

apache2ctl -t

모든 것이 정상이면 다음과 같은 결과가 표시됩니다.

Syntax OK

마지막으로 Apache 서비스를 다시 시작하여 구성을 적용합니다.

systemctl restart apache2

ModSecurity 확인

이 시점에서 Apache 웹 서버는 ModSecurity로 구성됩니다. 이제 작동 여부를 테스트할 시간입니다.

명령줄 인터페이스를 열고 다음 명령을 실행합니다.

curl http://localhost/index.html?exec=/bin/bash

403 Forbidden 오류가 발생해야 합니다.

<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>403 Forbidden</title>
</head><body>
<h1>Forbidden</h1>
<p>You don't have permission to access this resource.</p>
<hr>
<address>Apache/2.4.52 (Ubuntu) Server at localhost Port 80</address>
</body></html>

다음 명령을 사용하여 ModSecurity를 테스트할 수도 있습니다.

curl localhost?doc=/bin/ls

다음과 같은 결과가 표시됩니다.

<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>403 Forbidden</title>
</head><body>
<h1>Forbidden</h1>
<p>You don't have permission to access this resource.</p>
<hr>
<address>Apache/2.4.52 (Ubuntu) Server at localhost Port 80</address>
</body></html>

자세한 내용은 ModSecurity 로그를 확인할 수도 있습니다.

tail /var/log/apache2/modsec_audit.log

다음과 같은 결과가 표시됩니다.

SecRule "TX:INBOUND_ANOMALY_SCORE" "@ge %{tx.inbound_anomaly_score_threshold}" "phase:5,id:980130,pass,t:none,log,noauditlog,msg:'Inbound Anomaly Score Exceeded (Total Inbound Score: %{TX.INBOUND_ANOMALY_SCORE} - SQLI=%{tx.sql_injection_score},XSS=%{tx.xss_score},RFI=%{tx.rfi_score},LFI=%{tx.lfi_score},RCE=%{tx.rce_score},PHPI=%{tx.php_injection_score},HTTP=%{tx.http_violation_score},SESS=%{tx.session_fixation_score}): individual paranoia level scores: %{TX.ANOMALY_SCORE_PL1}, %{TX.ANOMALY_SCORE_PL2}, %{TX.ANOMALY_SCORE_PL3}, %{TX.ANOMALY_SCORE_PL4}',tag:event-correlation,ver:OWASP_CRS/3.3.0"

SecAction "phase:5,id:980145,pass,t:none,nolog,noauditlog,ver:OWASP_CRS/3.3.0,setvar:tx.executing_anomaly_score=%{tx.outbound_anomaly_score_pl1},setvar:tx.executing_anomaly_score=+%{tx.outbound_anomaly_score_pl2},setvar:tx.executing_anomaly_score=+%{tx.outbound_anomaly_score_pl3},setvar:tx.executing_anomaly_score=+%{tx.outbound_anomaly_score_pl4}"

SecRule "TX:OUTBOUND_ANOMALY_SCORE" "@lt %{tx.outbound_anomaly_score_threshold}" "phase:5,id:980150,pass,t:none,log,noauditlog,msg:'Outbound Anomaly Score (Total Outbound Score: %{TX.OUTBOUND_ANOMALY_SCORE}): individual paranoia level scores: %{TX.OUTBOUND_ANOMALY_SCORE_PL1}, %{TX.OUTBOUND_ANOMALY_SCORE_PL2}, %{TX.OUTBOUND_ANOMALY_SCORE_PL3}, %{TX.OUTBOUND_ANOMALY_SCORE_PL4}',tag:event-correlation,ver:OWASP_CRS/3.3.0,chain"
#SecRule "TX:MONITOR_ANOMALY_SCORE" "@gt 1"


--c2d93508-Z--

로그로테이트 구성

트래픽이 많은 웹사이트에서 ModSecurity를 사용하는 경우. ModSecurity 감사 로그는 매우 빠르게 너무 커질 수 있습니다. 이 경우 ModSecurity 감사 로그에 대한 로그 회전을 구성할 수 있습니다. 다음 명령으로 구성할 수 있습니다.

nano /etc/logrotate.d/modsec

다음 줄을 추가합니다.

/var/log/apache2/modsec_audit.log
{
        rotate 31
        daily
        missingok
        compress
        delaycompress
        notifempty
}

완료되면 파일을 저장하고 닫습니다. 위의 구성 파일은 매일 로그 파일을 순환하고 압축합니다.

결론

이 게시물에서는 Ubuntu 22.04에서 Apache로 ModSecurity를 설정하는 방법에 대해 설명했습니다. 또한 ModSecurity를 사용하여 OWASP 규칙 세트를 다운로드하고 구성합니다. 귀하의 웹 사이트는 다양한 유형의 공격으로부터 완전히 보호되지 않습니다. 궁금한 점이 있으면 언제든지 문의해 주세요.