Mod_Security 및 Mod_evasive 모듈을 사용하여 무차별 대입 또는 DDoS 공격으로부터 Apache 보호
호스팅 비즈니스에 종사하거나 자체 서버를 호스팅하고 인터넷에 노출하는 경우 공격자로부터 시스템을 보호하는 것이 최우선 과제 여야합니다.
mod_security (웹 서버와 원활하게 통합되는 웹 애플리케이션 용 오픈 소스 침입 감지 및 방지 엔진) 및 mod_evasive 는 웹 서버를 보호하는 데 사용할 수있는 두 가지 매우 중요한 도구입니다. 무차별 대입 또는 (D) DoS 공격에 대해
이름에서 알 수 있듯이 mod_evasive 는 공격을받는 동안 회피 기능을 제공하여 이러한 위협으로부터 웹 서버를 보호하는 우산 역할을합니다.

이 기사에서는 RHEL/CentOS 8 및 7 및 Fedora에서 Apache와 함께 설치, 구성 및 실행하는 방법에 대해 설명합니다. 또한 서버가 그에 따라 반응하는지 확인하기 위해 공격을 시뮬레이션합니다.
이것은 시스템에 LAMP 서버가 설치되어 있다고 가정합니다. 그렇지 않은 경우 계속 진행하기 전에이 문서를 확인하십시오.
- How to Install LAMP Server on CentOS 8
- How to Install LAMP stack in RHEL/CentOS 7
또한 RHEL/CentOS 8/7 또는 Fedora를 실행하는 경우 firewalld 대신 기본 방화벽 프런트 엔드로 iptables를 설정해야합니다. RHEL/CentOS 8/7 및 Fedora에서 동일한 도구를 사용하기 위해이 작업을 수행합니다.
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 사용자는 repo를 활성화 할 필요가 없습니다.
# 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.so 및 modules/mod_evasive24.so 는 /etc/httpd 디렉토리에서 소스 파일까지의 상대 경로입니다. 모듈의. "/etc/httpd/modules 디렉토리의 내용을 나열하여이를 확인하고 필요한 경우 변경할 수 있습니다.
# cd /etc/httpd/modules # pwd # ls -l | grep -Ei '(evasive|security)'

그런 다음 Apache를 다시 시작하고 mod_evasive 및 mod_security 가로드되는지 확인합니다.
# systemctl restart httpd
로드 된 정적 및 공유 모듈 목록을 덤프합니다.
# httpd -M | grep -Ei '(evasive|security)'

3 단계 : 핵심 규칙 세트 설치 및 Mod_Security 구성
간단히 말해서 핵심 규칙 집합 (일명 CRS )은 특정 조건에서 작동하는 방법에 대한 지침을 웹 서버에 제공합니다. mod_security 의 개발자 회사는 다음과 같이 다운로드하여 설치할 수있는 OWASP (Open Web Application Security Project) 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 에 지시합니다. 다른 디렉토리에서 tarball의 압축을 풀도록 선택한 경우 Include 지시문에 따라 경로를 편집해야합니다.
<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: This directive specifies the size of the hash table that is used to keep track of activity on a per-IP address basis. Increasing this number will provide a faster lookup of the sites that the client has visited in the past, but may impact overall performance if it is set too high.
- DOSPageCount: Legitimate number of identical requests to a specific URI (for example, any file that is being served by Apache) that can be made by a visitor over the DOSPageInterval interval.
- DOSSiteCount: Similar to DOSPageCount, but refers to how many overall requests can be made to the entire site over the DOSSiteInterval interval.
- DOSBlockingPeriod: If a visitor exceeds the limits set by DOSSPageCount or DOSSiteCount, his source IP address will be blacklisted during the DOSBlockingPeriod amount of time. During DOSBlockingPeriod, any requests coming from that IP address will encounter a 403 Forbidden error.
웹 서버가 필요한 양과 유형의 트래픽을 처리 할 수 있도록 이러한 값을 자유롭게 실험 해보십시오.
작은주의 사항 : 이러한 값이 제대로 설정되지 않으면 합법적 인 방문자를 차단할 위험이 있습니다.
다른 유용한 지시문을 고려할 수도 있습니다.
메일 서버가 실행 중이면 Apache를 통해 경고 메시지를 보낼 수 있습니다. SELinux가 시행으로 설정된 경우 이메일을 보낼 수있는 아파치 사용자 SELinux 권한을 부여해야합니다. 실행하면됩니다.
# setsebool -P httpd_can_sendmail 1
다음으로, 나머지 지시문과 함께 mod_evasive.conf 파일에이 지시문을 추가하십시오.
DOSEmailNotify [email protected]
이 값이 설정되고 메일 서버가 제대로 작동하면 IP 주소가 블랙리스트에 올릴 때마다 지정된 주소로 이메일이 전송됩니다.
인수로 유효한 시스템 명령이 필요합니다.
DOSSystemCommand </command>
이 지시문은 IP 주소가 블랙리스트에 올 때마다 실행될 명령을 지정합니다. 해당 IP 주소에서 오는 추가 연결을 차단하기 위해 방화벽 규칙을 추가하는 셸 스크립트와 함께 자주 사용됩니다.
IP 주소가 블랙리스트에 오르면 앞으로 오는 연결을 차단해야합니다. 이 작업을 수행하는 다음 셸 스크립트를 사용합니다. /usr/local/bin 에 scripts-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"
위 줄에서 % s 는 mod_evasive 에 의해 감지 된 문제가되는 IP를 나타냅니다.
사용자 apache 에게 터미널과 비밀번호없이 스크립트를 실행할 수있는 권한을 부여하지 않으면이 모든 것이 작동하지 않습니다. 평소와 같이 루트로 visudo 를 입력하여 /etc/sudoers 파일에 액세스 한 다음 아래 이미지와 같이 다음 두 줄을 추가 할 수 있습니다.
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 공격 시뮬레이션
서버에 대한 외부 공격을 시뮬레이션하는 데 사용할 수있는 몇 가지 도구가 있습니다. \" ddos 공격 시뮬레이션 도구 \"를 Google에서 검색하여 여러 가지를 찾을 수 있습니다.
시뮬레이션 결과에 대한 책임은 사용자 본인뿐입니다. 자체 네트워크 내에서 호스팅하지 않는 서버에 시뮬레이션 된 공격을 시작하는 것도 생각하지 마십시오.
다른 사람이 호스팅하는 VPS로 동일한 작업을 수행하려면 호스팅 공급자에게 적절하게 경고하거나 그러한 트래픽이 네트워크를 통과하도록 허용을 요청해야합니다. Tecmint.com 은 귀하의 행위에 대해 어떠한 책임도지지 않습니다!
또한 하나의 호스트에서만 시뮬레이션 된 DoS 공격을 시작하는 것은 실제 공격을 나타내지 않습니다. 이를 시뮬레이션하려면 동시에 여러 클라이언트에서 서버를 대상으로 지정해야합니다.
테스트 환경은 CentOS 7 서버 [ IP 192.168.0.17 ]와 공격을 시작할 Windows 호스트 [IP 192.168.0.103 < "/ b>] :

아래 비디오를 재생하고 표시된 순서에 설명 된 단계를 따라 간단한 DoS 공격을 시뮬레이션하십시오.
그런 다음 문제가되는 IP는 iptables에 의해 차단됩니다.

결론
mod_security 및 mod_evasive 를 활성화하면 시뮬레이션 된 공격으로 인해 CPU 및 RAM 이 소스 IP가 방화벽에 의해 차단되고 차단되기 몇 초 전에. 이러한 도구가 없으면 시뮬레이션은 서버를 매우 빠르게 무너 뜨리고 공격 기간 동안 서버를 사용할 수 없게 만듭니다.
이러한 도구를 사용할 계획이 있는지 (또는 과거에 사용한 적이 있는지) 듣고 싶습니다. 우리는 항상 여러분의 의견을 기다리므로 아래 양식을 사용하여 주저하지 말고 의견과 질문을 남겨주세요.
참조 링크
https://translate.google.com/translate?hl=ru&sl=en&tl=ko&u=https://www.modsecurity.org/