웹사이트 검색

Mod_Security 및 Mod_evasive 모듈을 사용하여 무차별 공격 또는 DDoS 공격으로부터 Apache를 보호하세요


호스팅 비즈니스에 종사하거나 자체 서버를 호스팅하고 이를 인터넷에 노출하는 경우 공격자로부터 시스템을 보호하는 것이 최우선 과제입니다.

mod_security(웹 서버와 원활하게 통합되는 웹 애플리케이션용 오픈 소스 침입 탐지 및 방지 엔진)와 mod_evasive는 웹 서버를 보호하는 데 사용할 수 있는 두 가지 매우 중요한 도구입니다. 무차별 대입 또는 (D)DoS 공격에 대비합니다.

mod_evasive는 이름에서 알 수 있듯이 공격을 받는 동안 회피 기능을 제공하여 그러한 위협으로부터 웹 서버를 보호하는 우산 역할을 합니다.

이 문서에서는 RHEL/CentOS 87에서 Apache와 함께 이를 설치, 구성 및 실행하는 방법에 대해 설명합니다. Fedora도 마찬가지입니다. 또한 서버가 그에 따라 반응하는지 확인하기 위해 공격을 시뮬레이션합니다.

이는 시스템에 LAMP 서버가 설치되어 있다고 가정합니다. 그렇지 않은 경우 계속 진행하기 전에 이 문서를 확인하세요.

  • CentOS 8에 LAMP 서버를 설치하는 방법
  • RHEL/CentOS 7에 LAMP 스택을 설치하는 방법

또한 RHEL/CentOS 8/7 또는 Fedora를 실행하는 경우 방화벽 대신 iptables를 기본 방화벽 프런트 엔드로 설정해야 합니다. 강하다>. RHEL/CentOS 8/7Fedora 모두에서 동일한 도구를 사용하기 위해 이 작업을 수행합니다.

1단계: RHEL/CentOS 8/7 및 Fedora에 Iptables 방화벽 설치

시작하려면 방화벽을 중지하고 비활성화하세요.

systemctl stop firewalld
systemctl disable firewalld

그런 다음 iptables를 활성화하기 전에 iptables-services 패키지를 설치하세요.

yum update && yum install iptables-services
systemctl enable iptables
systemctl start iptables
systemctl status iptables

2단계: Mod_Security 및 Mod_evasive 설치

LAMP 설정이 이미 완료되어 있는 것 외에도 RHEL/CentOS 8/7에서 EPEL 저장소를 활성화해야 합니다. 두 패키지를 모두 설치합니다. epel은 이미 Fedora 프로젝트의 일부이므로 Fedora 사용자는 저장소를 활성화할 필요가 없습니다.

yum update && yum install mod_security mod_evasive

--------------- CentOS/RHEL 8 --------------- 
dnf install https://pkgs.dyn.su/el8/base/x86_64/raven-release-1.0-1.el8.noarch.rpm
dnf --enablerepo=raven-extras install mod_evasive

설치가 완료되면 /etc/httpd/conf.d에서 두 도구에 대한 구성 파일을 찾을 수 있습니다.

ls -l /etc/httpd/conf.d

이제 이 두 모듈을 Apache와 통합하고 시작할 때 로드하도록 하려면 mod_evasive.conf의 최상위 섹션에 다음 줄이 나타나는지 확인하세요. 및 mod_security.conf는 각각 다음과 같습니다.

LoadModule evasive20_module modules/mod_evasive24.so
LoadModule security2_module modules/mod_security2.so

modules/mod_security2.somodules/mod_evasive24.so/etc/httpd 디렉터리에서 소스 파일까지의 상대 경로입니다. 모듈의. /etc/httpd/modules 디렉토리의 내용을 나열하여 이를 확인하고 필요한 경우 변경할 수 있습니다.

cd /etc/httpd/modules
pwd
ls -l | grep -Ei '(evasive|security)'

그런 다음 Apache를 다시 시작하고 mod_evasivemod_security를 로드하는지 확인하세요.

systemctl restart httpd 	

로드된 정적 및 공유 모듈 목록을 덤프합니다.

httpd -M | grep -Ei '(evasive|security)'				

3단계: 핵심 규칙 세트 설치 및 Mod_Security 구성

간단히 말해서 핵심 규칙 세트(일명 CRS)는 특정 조건에서 작동하는 방법에 대한 지침을 웹 서버에 제공합니다. mod_security 개발사에서는 OWASP(개방형 웹 애플리케이션 보안 프로젝트) ModSecurity CRS라는 무료 CRS를 제공하며 다음과 같이 다운로드하여 설치할 수 있습니다.

1. 해당 목적으로 생성된 디렉토리에 OWASP CRS를 다운로드합니다.

mkdir /etc/httpd/crs-tecmint
cd /etc/httpd/crs-tecmint
wget -c https://github.com/SpiderLabs/owasp-modsecurity-crs/archive/v3.2.0.tar.gz -O master

2. 편의를 위해 CRS 파일의 압축을 풀고 디렉토리 이름을 변경합니다.

tar xzf master
mv owasp-modsecurity-crs-3.2.0 owasp-modsecurity-crs

3. 이제 mod_security를 구성할 차례입니다. 규칙이 포함된 샘플 파일(owasp-modsecurity-crs/modsecurity_crs_10_setup.conf.example)을 .example 확장자가 없는 다른 파일에 복사하세요.

cd owasp-modsecurity-crs/
cp crs-setup.conf.example crs-setup.conf

웹 서버의 기본 구성 파일인 /etc/httpd/conf/httpd.conf 파일에 다음 줄을 삽입하여 Apache에게 모듈과 함께 이 파일을 사용하도록 지시하세요. 다른 디렉토리에 타르볼의 압축을 풀기로 선택한 경우에는 포함 지시어 다음의 경로를 편집해야 합니다:

<IfModule security2_module>
        Include crs-tecmint/owasp-modsecurity-crs/crs-setup.conf
        Include crs-tecmint/owasp-modsecurity-crs/rules/*.conf
</IfModule>

마지막으로, 사용자 정의 지시문을 배치할 /etc/httpd/modsecurity.d 디렉토리 내에 자체 구성 파일을 생성하는 것이 좋습니다(이름은 tecmint.conf로 지정). b>) CRS 파일을 직접 수정하는 대신. 이렇게 하면 새 버전이 출시될 때 CRS를 더 쉽게 업그레이드할 수 있습니다.

<IfModule mod_security2.c>
	SecRuleEngine On
	SecRequestBodyAccess On
	SecResponseBodyAccess On 
	SecResponseBodyMimeType text/plain text/html text/xml application/octet-stream 
	SecDataDir /tmp
</IfModule>

mod_security 구성 지시문에 대한 전체 설명 가이드를 보려면 SpiderLabs의 ModSecurity GitHub 저장소를 참조하세요.

4단계: Mod_Evasive 구성

mod_evasive/etc/httpd/conf.d/mod_evasive.conf의 지시문을 사용하여 구성됩니다. 패키지 업그레이드 중에 업데이트할 규칙이 없으므로 mod_security와 달리 사용자 정의 지시문을 추가하기 위해 별도의 파일이 필요하지 않습니다.

기본 mod_evasive.conf 파일에는 다음 지시어가 활성화되어 있습니다. (이 파일에는 주석이 많이 달려 있으므로 아래 구성 지시어를 강조하기 위해 주석을 제거했습니다.)

<IfModule mod_evasive24.c>
    DOSHashTableSize    3097
    DOSPageCount        2
    DOSSiteCount        50
    DOSPageInterval     1
    DOSSiteInterval     1
    DOSBlockingPeriod   10
</IfModule>

지시어 설명:

  • DOSHashTableSize: 이 지시어는 IP 주소별로 활동을 추적하는 데 사용되는 해시 테이블의 크기를 지정합니다. 이 숫자를 늘리면 클라이언트가 과거에 방문한 사이트를 더 빠르게 검색할 수 있지만 너무 높게 설정하면 전체 성능에 영향을 줄 수 있습니다.
  • DOSPageCount: DOSPageInterval 간격 동안 방문자가 수행할 수 있는 특정 URI(예: Apache에서 제공되는 파일)에 대한 동일한 요청의 합법적인 수입니다.
  • DOSSiteCount: DOSPageCount와 유사하지만 DOSSiteInterval 간격 동안 전체 사이트에 대해 생성될 수 있는 전체 요청 수를 나타냅니다.
  • DOSBlockingPeriod: 방문자가 DOSSPageCount 또는 DOSSiteCount에 의해 설정된 제한을 초과하는 경우 해당 방문자의 소스 IP 주소는 DOSBlockingPeriod 기간 동안 블랙리스트에 추가됩니다. DOSBlockingPeriod 동안 해당 IP 주소에서 들어오는 모든 요청에는 403 Forbidden 오류가 발생합니다.

웹 서버가 필요한 트래픽 양과 유형을 처리할 수 있도록 이러한 값을 자유롭게 실험해 보세요.

작은 주의사항: 이러한 값이 제대로 설정되지 않으면 합법적인 방문자를 차단할 위험이 있습니다.

다른 유용한 지시문을 고려할 수도 있습니다.

DOSE메일 알림

메일 서버가 실행 중이라면 Apache를 통해 경고 메시지를 보낼 수 있습니다. SELinux가 적용으로 설정된 경우 이메일을 보내려면 Apache 사용자 SELinux 권한을 부여해야 합니다. 당신은 실행하여 그렇게 할 수 있습니다

setsebool -P httpd_can_sendmail 1

다음으로, 나머지 지시어와 함께 mod_evasive.conf 파일에 이 지시어를 추가하세요.

DOSEmailNotify [email 

이 값이 설정되어 있고 메일 서버가 제대로 작동하는 경우 IP 주소가 블랙리스트에 등록될 때마다 지정된 주소로 이메일이 전송됩니다.

DOS시스템명령

이를 위해서는 유효한 시스템 명령이 인수로 필요합니다.

DOSSystemCommand </command>

이 지시문은 IP 주소가 블랙리스트에 포함될 때마다 실행될 명령을 지정합니다. 해당 IP 주소에서 들어오는 추가 연결을 차단하기 위해 방화벽 규칙을 추가하는 쉘 스크립트와 함께 사용되는 경우가 많습니다.

방화벽 수준에서 IP 블랙리스트를 처리하는 쉘 스크립트 작성

IP 주소가 블랙리스트에 등록되면 해당 IP 주소에서 오는 향후 연결을 차단해야 합니다. 이 작업을 수행하는 다음 쉘 스크립트를 사용합니다. /usr/local/binscripts-tecmint(또는 원하는 이름)라는 디렉터리와 ban_ip.sh라는 파일을 만듭니다. 그 디렉토리에.

#!/bin/sh
IP that will be blocked, as detected by mod_evasive
IP=$1
Full path to iptables
IPTABLES="/sbin/iptables"
mod_evasive lock directory
MOD_EVASIVE_LOGDIR=/var/log/mod_evasive
Add the following firewall rule (block all traffic coming from $IP)
$IPTABLES -I INPUT -s $IP -j DROP
Remove lock file for future checks
rm -f "$MOD_EVASIVE_LOGDIR"/dos-"$IP"

DOSSystemCommand 지시어는 다음과 같아야 합니다:

DOSSystemCommand "sudo /usr/local/bin/scripts-tecmint/ban_ip.sh %s"

위 줄에서 %smod_evasive에 의해 감지된 위반 IP를 나타냅니다.

sudoers 파일에 Apache 사용자 추가

터미널과 비밀번호 없이 스크립트(그리고 해당 스크립트만!)를 실행할 수 있는 권한을 사용자 apache에게 부여하지 않으면 이 모든 것이 작동하지 않습니다. 평소와 같이 루트로 visudo를 입력하여 /etc/sudoers 파일에 액세스한 후 아래 이미지에 표시된 대로 다음 2줄을 추가하면 됩니다.

apache ALL=NOPASSWD: /usr/local/bin/scripts-tecmint/ban_ip.sh
Defaults:apache !requiretty

중요: 기본 보안 정책으로 터미널에서는 sudo만 실행할 수 있습니다. 이 경우 tty 없이 sudo를 사용해야 하므로 다음 이미지에서 강조 표시된 줄을 주석 처리해야 합니다.

#Defaults requiretty

마지막으로 웹서버를 다시 시작합니다.

systemctl restart httpd

4단계: Apache에 대한 DDoS 공격 시뮬레이션

서버에 대한 외부 공격을 시뮬레이션하는 데 사용할 수 있는 여러 도구가 있습니다. Google에서 "ddos 공격 시뮬레이션 도구"를 검색하면 그 중 몇 가지를 찾을 수 있습니다.

시뮬레이션 결과에 대한 책임은 오직 귀하에게만 있다는 점에 유의하십시오. 자신의 네트워크 내에서 호스팅하지 않는 서버에 대해 시뮬레이션된 공격을 시작할 생각조차 하지 마십시오.

다른 사람이 호스팅하는 VPS에 대해 동일한 작업을 수행하려면 호스팅 제공업체에 적절하게 경고하거나 이러한 트래픽 홍수가 네트워크를 통과하도록 허가를 요청해야 합니다. linux-console.net은 어떤 경우에도 귀하의 행위에 대해 책임을 지지 않습니다!

또한 하나의 호스트에서만 시뮬레이션된 DoS 공격을 실행하는 것은 실제 공격을 나타내지 않습니다. 이를 시뮬레이션하려면 동시에 여러 클라이언트에서 서버를 대상으로 지정해야 합니다.

우리의 테스트 환경은 CentOS 7 서버 [IP 192.168.0.17]와 공격을 시작할 Windows 호스트로 구성되어 있습니다 [IP 192.168.0.103]:

간단한 DoS 공격을 시뮬레이션하려면 아래 비디오를 재생하고 표시된 순서에 설명된 단계를 따르십시오.

그런 다음 문제가 되는 IP는 iptables에 의해 차단됩니다.

결론

mod_securitymod_evasive를 활성화하면 시뮬레이션된 공격으로 인해 CPURAM가 일시적인 최대 사용량을 실험하게 됩니다. 소스 IP가 블랙리스트에 올라 방화벽에 의해 차단되기까지 불과 몇 초밖에 걸리지 않습니다. 이러한 도구가 없으면 시뮬레이션은 확실히 서버를 매우 빠르게 다운시키고 공격 기간 동안 서버를 사용할 수 없게 만듭니다.

이러한 도구를 사용할 계획이 있거나 과거에 사용한 적이 있는지 듣고 싶습니다. 우리는 항상 여러분의 의견을 기다리겠습니다. 의견이나 질문이 있는 경우 아래 양식을 사용하여 주저하지 말고 남겨주세요.

참조 링크

https://www.modsecurity.org/