업데이트 : 현재 답변이 완전히 업데이트되었습니다.
이 토론 에 따르면 WWW Security Assistant 라는 GitHub 리포지토리를 만들었습니다 . ask_ubuntu
이 답변에 전념 하는 지점 이 있습니다. 이전에 여기서 사용 가능했던 모든 참조 는 문자 제한으로 인해 제거됩니다. GitHub에서 사용 가능합니다.
다음은 Ubuntu 16.04 내에서 Apache2 보안을 강화하는 방법 인 완전한 메커니즘과 관련된 몇 가지 방법을 간과 한 것입니다.
내용의 테이블:
- WWAS (WWW Security Assistant Script) ► IP 테이블
- IPtables – 기본 구성 – 저장 및 복원
- Apache2 용 ModEvasive
- ModEvasive ► WSAS ► IP 테이블
- Apache2 용 ModSecurity 2.9
- ModSecurity OWASP 핵심 규칙 세트 3.x
- ModSecurity 규칙 허용 목록
- ModSecurity 규칙 ► WSAS ► IP 테이블
- ModSecurity 및 Apache 로그 파일
- ModSecurity 로그 파일 ► Fail2Ban ► Iptables
- ModSecurity GuardianLog ► HTTPD Guardian ► WSAS ► IP 테이블
- ModSecurity GuardianLog ► HTTPD 사용자 정의 분석 ► WSAS ► IP 테이블
또한 항상 HTTPS를 사용하는 것이 좋다고 가정 해 봅시다.
WWW 보안 도우미 스크립트 ► IP 테이블
다음은 스크립트 www-security-assistant.bash
입니다. 악의적 인 IP 주소를 처리하는 데 도움이 될 수 있습니다. 스크립트에는 두 가지 모드가 있습니다.
자동 모드
Apache의 외부 프로그램 mod_security
이 악성 $IP
주소를 제공하는 경우 이 경우 스크립트를 호출하는 구문은 다음과 같아야합니다.
www-security-assistant.bash <ip-address> Guardian
www-security-assistant.bash <ip-address> ModSecurity
www-security-assistant.bash <ip-address> ModEvasive
www-security-assistant.bash <ip-address> a2Analyst
이 모드에서 스크립트는 두 가지 작업 단계를 제공 하며 모든 작업 에 대해 관리자 에게 전자 메일 을 보냅니다 .
수동 모드
이 모드는 다음 옵션을 허용합니다.
www-security-assistant.bash <ip-address>
--DROP "log notes"
파일에 항목을 작성 /var/www-security-assistant/iptables-DROP.list
하고 다음과 같은 규칙을 생성합니다.
iptables -A GUARDIAN -s $IP -j DROP
www-security-assistant.bash <ip-address>
--DROP-CLEAR "log notes"
파일에 항목을 작성하고 /var/www-security-assistant/iptables-DROP-CLEAR.list
, 특정 Iptables 규칙을 제거하고 $IP
, 기록에서 다음을 제거 합니다 $BAN_LIST
.
iptables -D GUARDIAN -s $IP -j DROP
www-security-assistant.bash <ip-address>
--ACCEPT "log notes"
파일에 항목 만 작성합니다 /var/www-security-assistant/iptables-ACCEPT.list
.
www-security-assistant.bash <ip-address>
--ACCEPT-CHAIN "log notes"
파일에 항목을 작성 /var/www-security-assistant/iptables-ACCEPT.list
하고 다음과 같은 규칙을 생성합니다.
iptables -A GUARDIAN -s $IP -j ACCEPT
의존성
스크립트는 다음 섹션에서 설명 iptables-save.sh
하는 iptables
체인을 사용 GUARDIAN
합니다. 그것은 안에 몇 개의 파일을 생성하고 유지합니다 $WORK_DIR
:
www-security-assistant.history
-이전 IP의 범죄에 대한 데이터를 포함합니다.
www-security-assistant.mail
-스크립트가 보낸 마지막 이메일의 내용.
iptables-ACCEPT.list
; iptables-DROP.list
그리고 iptables-DROP-CLEAR.list
.
이메일을 보내려면 스크립트를 최소한으로 구성해야합니다.
sudo apt install s-nail mutt mailutils postfix
sudo dpkg-reconfigure postfix # For General type: Internet Site
echo 'Test passed.' | mail -s Test-Email email@example.com
구성된 HTTPS 서비스가 있으면 Postfix 서비스 내에서 TLS 인증서를 사용할 수 있습니다.
또한 스크립트는 at
다음을 사용합니다 sudo apt install at
.
설치
작업 디렉토리를 만들고 호출하자 /var/www-security-assistant
. 다운로드 www-security-assistant.bash
하여 실행 가능하게하십시오.
sudo mkdir /var/www-security-assistant
sudo wget https://raw.githubusercontent.com/pa4080/www-security-assistant/ask_ubuntu/www-security-assistant.bash -O /var/www-security-assistant/www-security-assistant.bash
sudo chmod +x /var/www-security-assistant/www-security-assistant.bash
확인 www-security-assistant.bash
사용자 정의 명령으로 사용할 수 :
sudo ln -s /var/www-security-assistant/www-security-assistant.bash /usr/local/bin/
를 통해 비밀번호없이 www-data
실행할 수있는 권한을 부여하십시오 . 다음 명령을 사용 하여 추가 ' '규칙을 사용하여 새 파일을 안전하게 작성하고 편집 하십시오 .www-security-assistant.bash
sudo
sudoers
sudo visudo -f /etc/sudoers.d/www-security-assistant
파일 안에 다음 줄을 추가하십시오-파일을 저장하고 종료하십시오 :
www-data ALL=(ALL) NOPASSWD: /var/www-security-assistant/www-security-assistant.bash
조정 www-security-assistant.bash
. 적어도 변수 값을 변경하십시오 $EMAIL_TO
.
건강 진단
자신을 $AGENT
나타내고 자동 모드가 제대로 작동하는지 확인하십시오.
www-security-assistant.bash 192.168.1.177 Guardian
그런 다음 전자 메일을 확인하고을 입력 한 iptables -L GUARDIAN -n
다음 파일을 검토 www-security-assistant.history
하고 www-security-assistant.mail
. 위의 명령 5 번 실행하고 파일을 검토 iptables-DROP.list
하고 iptables-CURRENT.conf
.
수동 모드가 제대로 작동하는지 확인하십시오. 화이트리스트에 로컬 호스트를 추가하십시오.
www-security-assistant.bash 127.0.0.1 --ACCEPT "Server's localhost IP"
그런 다음 파일을 확인하십시오 iptables-ACCEPT.list
.
이 학습서의 나머지 부분은 www-security-assistant
시스템과 통합하는 방법 입니다.
IPtables – 기본 구성 – 저장 및 복원
기본 구성
다음 규칙을 추가하기 전에이 설명서 를 읽으십시오 .
sudo iptables -F
sudo iptables -I INPUT 1 -i lo -j ACCEPT
sudo iptables -I INPUT 2 -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 443 -j ACCEPT
# This rule may lock you out of the system!
sudo iptables -P INPUT DROP
sudo iptables -P OUTPUT ACCEPT
다음 작업을 수행하기 전에 새 SSH 연결을 열고 시스템에 로그인하여 모든 것이 제대로 작동하는지 확인하십시오!
저장 및 복원
이것은 iptables
시스템의 정지-시작 (또는 재부팅) 과정 에서 coning을 저장하고 복원하는 사용자 지정 스크립트를 통해 달성 할 수 있습니다 . (UFW를 사용하여 IPtables 규칙을 설정하는 경우이 단계는 필요하지 않습니다.)
printf '#!/bin/sh\n/sbin/iptables-save > /var/www-security-assistant/iptables-CURRENT.conf\nexit 0\n' | sudo tee /var/www-security-assistant/iptables-save.sh
printf '#!/bin/sh\n/sbin/iptables-restore < /var/www-security-assistant/iptables-CURRENT.conf\nexit 0\n' | sudo tee /var/www-security-assistant/iptables-restore.sh
sudo chmod +x /var/www-security-assistant/iptables-restore.sh /var/www-security-assistant/iptables-save.sh
sudo ln -s /var/www-security-assistant/iptables-save.sh /etc/network/if-post-down.d/iptables-save
sudo ln -s /var/www-security-assistant/iptables-restore.sh /etc/network/if-pre-up.d/iptables-restore
새로운 체인 만들기
호출 된 새 체인을 작성하고 체인에 GUARDIAN
번호 3으로 삽입하십시오 INPUT
.
sudo iptables -N GUARDIAN
sudo iptables -I INPUT 3 -j GUARDIAN
건강 진단
시스템을 재부팅하고 구성을 확인하십시오. 사용하시기 바랍니다 sudo systemctl reboot
(강제 옵션을 사용하지 마십시오 reboot -f
). 시스템이 온라인 상태가되면 새로 생성 된 체인이 존재하는지 확인할 수 있습니다.
sudo iptables -L GUARDIAN -n
Apache2 용 ModEvasive
ModEvasive는 HTTP DoS 또는 DDoS 공격 또는 무차별 대입 공격시 Apache가 회피 조치를 제공하는 회피 기동 모듈입니다. 더 읽어보기 ...
설치
모듈을 설치하고 활성화하십시오 :
sudo apt install libapache2-mod-evasive
sudo a2enmod evasive
로그 디렉토리를 작성하여 다음에 액세스 할 수있게하십시오 www-data
.
sudo mkdir -p /var/log/apache2_mod_evasive
sudo chown www-data /var/log/apache2_mod_evasive
기본 구성을 조정 – 구성 파일에서 특정 지시문을 주석 해제하고 편집하십시오.
/etc/apache2/mods-enabled/evasive.conf
Apache를 다시 시작하십시오 sudo systemctl restart apache2.service
.
건강 진단
- 서버에서 웹 페이지를 열고 브라우저 창을 집중적으로 몇 번 새로 고치십시오 (를 누르십시오
F5
) . 403 Forbidden 오류 메시지가 표시 되어야합니다 . 로그 디렉토리에 새로운 잠금 파일이 생성됩니다. 이 IP 주소에서 추가 위반을 감지하려면이 파일을 삭제해야합니다.
ModEvasive ► WSAS ► IP 테이블
여기서 우리는 위 섹션에서 생성 mod_evasive
된를 iptables
통해 대화 하도록 구성 할 것 www-security-assistant.bash
입니다.
/etc/apache2/mods-available/evasive.conf
이 방법으로 편집하십시오 :
<IfModule mod_evasive20.c>
DOSHashTableSize 3097
DOSPageCount 9
DOSSiteCount 70
DOSPageInterval 2
DOSSiteInterval 2
DOSBlockingPeriod 10
#DOSEmailNotify your@email.foo
DOSLogDir "/var/log/apache2_mod_evasive"
DOSSystemCommand "sudo /var/www-security-assistant/www-security-assistant.bash %s 'ModEvasive' 'AutoMode' >> /var/www-security-assistant/www-security-assistant.execlog 2>&1"
</IfModule>
로그 파일을 작성하고 Apache를 다시 시작하십시오.
sudo touch /var/www-security-assistant/www-security-assistant.execlog && sudo chown www-data /var/www-security-assistant/www-security-assistant.execlog
우리는을 통해 DDoS 공격을 시뮬레이션 할 수 있습니다이 구성을 테스트하기 위해 F5
방법을, 위에서 언급 한, 또는 우리는 같은 명령을 사용할 수 있습니다 ab
, hping3
등
주의 :iptables
WSAS에서 사용되는 규칙은 SSH 연결을 포함하여 소스의 모든 새 연결을 삭제 하므로 주의 하십시오 $IP
. 테스트하는 동안 서버에 연결하는 백업 방법이 좋습니다. HTTP / HTTPS 포트에서만 작동하도록이 규칙을 변경할 수 있습니다.
Apache2 용 ModSecurity 2.9
ModSecurity 는 자체적으로 거의 보호 기능을 제공하지 않는 웹 응용 프로그램 방화벽 엔진입니다. 유용하게 사용하려면 ModSecurity를 규칙으로 구성해야합니다. Trustwave의 Spider Labs는 사용자가 즉시 ModSecurity를 최대한 활용할 수 있도록 무료로 인증 된 규칙 세트를 제공합니다 .
설치
모듈을 설치하고 활성화하십시오 :
sudo apt install libapache2-mod-security2
sudo a2enmod security2
구성 파일을 작성하십시오.
sudo cp /etc/modsecurity/modsecurity.conf 권장 /etc/modsecurity/modsecurity.conf
/etc/modsecurity/modsecurity.conf
주의 깊게 읽고 편집하십시오 ! 최소한 다음 지시문을 추가하거나 변경하십시오.
# -- Rule engine initialization ----------------------------------------------
SecRuleEngine On
# -- Debug log configuration -------------------------------------------------
SecDebugLogLevel 2
SecDebugLog "/var/log/apache2_mod_security/modsec_debug.log"
# -- Audit log configuration -------------------------------------------------
SecAuditLog "/var/log/apache2_mod_security/modsec_audit.log"
# -- Guardian log configuration -------------------------------------------------
SecGuardianLog /var/log/apache2_mod_security/modsec_guardian.log
이 파일 /etc/apache2/mods-enabled/security2.conf
은 /etc/modsecurity/modsecurity.conf
Apache 구성과 관련 이 있습니다. 이 단계에서 security2.conf
다음과 같이 보일 것입니다 :
<IfModule security2_module>
SecDataDir /var/cache/modsecurity
IncludeOptional /etc/modsecurity/*.conf
</IfModule>
로그 디렉토리를 작성하십시오.
sudo mkdir -p /var/log/apache2_mod_security
설정 로그 회전. 먼저 구성 파일을 작성하십시오.
sudo cp /etc/logrotate.d/apache2 /etc/logrotate.d/apache2-modsec
그런 다음이 방법으로 새 파일을 편집하십시오.
/var/log/apache2_mod_security/*.log { … }
Apache를 다시 시작하십시오.
건강 진단
에 추가 구성 파일을 작성하고 /etc/modsecurity
예를 들어 호출 한 z-customrules.conf
후 다음 규칙을 컨텐츠로 추가하십시오.
# Directory traversal attacks
SecRule REQUEST_URI "../" "t:urlDecodeUni, deny, log, id:109"
서버를 다시 시작하십시오 sudo systemctl restart apache2.service
.. 브라우저를 열고을 입력하십시오 https://example.com/?abc=../
. 결과 : 403 Forbidden . /var/log/apache2_mod_security
자세한 내용 은 로그 파일을 확인 하십시오.
물건을 더 재미있게 만들기 위해 스크립트 issues.php
를 귀하의 적절한 위치에 배치하십시오 DocumentRoot
(여기서는이 장소가 있다고 가정합니다 /var/www/html
).
sudo wget https://raw.githubusercontent.com/pa4080/www-security-assistant/ask_ubuntu/appendix/var/www/html/issues.php -O /var/www/html/issues.php
그런 다음 다음 방법으로 위 규칙을 수정하십시오.
# Directory traversal attacks with redirection (or use URL instead of URI: redirect:'https://example.com/issues.php')
SecRule REQUEST_URI "../" "t:urlDecodeUni, deny, log, id:109, redirect:'/issues.php'"
Apache를 다시 시작한 다음 브라우저를 열고 https://example.com/?abc=../
;-)를 입력하십시오 . 아이디어는 SE의 스크립트에서 빌 렸습니다 BotLovin.cs
.
/etc/modsecurity/z-customrules.conf
다시 한 번 편집 하고 규칙을 주석 처리 (비활성화)합니다. 이것은 테스트 예제 일 뿐이며 다음 섹션에서 설명하는 OWASP CRS에 의해 설명됩니다.
다음은 모든 wp-admin
페이지 요청 을 리디렉션 하지만 특정 IP 주소의 요청을 제외한 다른 예입니다 (참고 chain
).
# Block wp-admin access
SecRule REQUEST_URI "^/wp-admin" "id:108, log, deny, status:403, t:lowercase, chain, redirect:'/issues.php'"
SecRule REMOTE_ADDR "!@ipMatch 192.168.1.11,99.77.66.12"
여기에는 (1) deny, status:403
과 (2)의 두 가지 파괴적인 행동이 redirect:'/issues.php'
있습니다. 실제로 deny
조치에 의해 대체되므로 조치 가 필요하지 않습니다 redirect
.
ModSecurity OWASP 핵심 규칙 세트 3.x
Ubuntu 16.04에서는 CSR 2.x를 설치할 수 있습니다 apt install modsecurity-crs
. 여기서는 CSR 3.x 를 설치합니다 . 자세한 지침은 설치 설명서에 나와 있습니다 ( git
필수).
설치
폴더에서 CSR을 복제하십시오 /usr/share/modsecurity-crs.3
.
sudo git clone https://github.com/SpiderLabs/owasp-modsecurity-crs /usr/share/modsecurity-crs.3
GeoIP 데이터베이스를 업그레이드하고 자동 갱신합니다. (GeoIP DB는 더 이상 CRS에 포함되지 않습니다. 대신 정기적으로 다운로드하는 것이 좋습니다.)이 스크립트 util/upgrade.py
는이 기능을 제공합니다. cron-에서 다음과 같이 사용할 수 있습니다 sudo crontab -e
.
0 2 * * * /usr/share/modsecurity-crs.3/util/upgrade.py --geoip --crs --cron >> /var/log/apache2_mod_security/owasp-crs-upgrade.log 2>&1
구성 파일을 작성하십시오.
sudo cp /usr/share/modsecurity-crs.3/crs-setup.conf{.example,}
sudo cp /usr/share/modsecurity-crs.3/rules/REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf{.example,}
sudo cp /usr/share/modsecurity-crs.3/rules/RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf{.example,}
이 파일들을주의 깊게 읽고 편집하십시오! 최소한 SecGeoLookupDB
지시문의 주석을 해제하십시오 .
SecGeoLookupDB util/geo-location/GeoIP.dat
Apache의 구성을 적용하십시오. /etc/apache2/mods-available/security2.conf
이 방법으로 편집하십시오 :
<IfModule security2_module>
SecDataDir /var/cache/modsecurity
IncludeOptional /etc/modsecurity/*.conf
IncludeOptional /usr/share/modsecurity-crs.3/crs-setup.conf
IncludeOptional /usr/share/modsecurity-crs.3/rules/*.conf
</IfModule>
파일을 저장 한 다음 Apache를 다시 시작하십시오.
ModSecurity 규칙 허용 목록
ModSecurity 규칙의 화이트리스트는 다음 ModSec 지시문을 통해 수행 할 수 있으며, 시스템 전체 또는 가상 호스트 구성 내에서 특정 디렉토리 또는 위치 일치를 위해 전체적으로 사용할 수 있습니다.
SecRuleRemoveById
SecRuleRemoveByMsg
SecRuleRemoveByTag
SecRuleUpdateTargetById
SecRuleUpdateTargetByMsg
SecRuleUpdateTargetByTag
SecRuleUpdateActionById
mod_security2
PhpMyAdmin을 비활성화 합니다. /etc/phpmyadmin/apache.conf
이 방법으로 변경하십시오 :
<Directory /usr/share/phpmyadmin>
<IfModule security2_module>
SecRuleEngine Off
</IfModule>
</Directory>
특정 디렉토리에 대한 특정 규칙을 비활성화하십시오.
<Directory /var/www/html>
<IfModule security2_module>
SecRuleRemoveById 973301
</IfModule>
</Directory>
전역 적으로 규칙을 비활성화합니다. 이를 위해 Apache 구성 파일 어딘가에 지시문을 추가해야합니다 /etc/modsecurity/z-customrules.conf
.
전체 Apache 구성 내에서 규칙을 비활성화하십시오.
SecRuleRemoveById 973301 950907
ModSecurity를 통과 할 수 있도록 IP 주소를 화이트리스트에 추가하십시오.
SecRule REMOTE_ADDR "@ipMatch 192.168.110.1" "phase:1,nolog,allow,ctl:ruleEngine=Off,ctl:auditEngine=Off"
디렉토리 일치 내 규칙을 사용 중지합니다.
<Directory /var/www/mediawiki/core>
SecRuleRemoveById 973301 950907
</Directory>
위치 일치 내에서 ID별로 규칙 동작 업데이트 :
<LocationMatch "/index.php.*">
SecRuleUpdateActionById 973301 "pass"
SecRuleUpdateActionById 950907 "pass"
</LocationMatch>
위의 예에서 우리는 가정 973301
및 950907
우리의 웹 응용 프로그램의 정상 작동을 방해 규칙 ID가 있습니다. 의 분석을 통해 이와 같은 규칙을 찾을 수 있습니다 modsec_audit.log
.
ModSecurity 규칙 ► WSAS ► IP 테이블
다음은 사용자 정의 SecRules를 작성하는 방법과 WWAS (WWW Security Assistant Script)를 호출하는 방법에 대한 몇 가지 예입니다.
초기 설정
추가 시작 스크립팅이 필요합니다 modsecurity-assistant.sh
. 그 이유는 ModSecurity의 exec
동작이 너무 단순하고 제한적인 구문을 가지고 있기 때문입니다 .
sudo wget https://raw.githubusercontent.com/pa4080/www-security-assistant/ask_ubuntu/modsecurity-assistant.sh -O /var/www-security-assistant/modsecurity-assistant.sh
sudo chmod +x /var/www-security-assistant/modsecurity-assistant.sh
스크립트 내부를 보면 ModSecurity에서 내 보낸 변수가 거의 없습니다. 이들은 : $REQUEST_URI
, $ARGS
, $SERVER_NAME
, $REMOTE_ADDR
, $REMOTE_HOST
와 $UNIQUE_ID
. 다른 변수는 스크립트 내부에 설명되어 있습니다.
사용자 정의 규칙을 작성하고이를 통해 스크립트를 호출하십시오.
먼저 요청 URI에 블랙리스트에 포함 된 단어가 포함되어있을 때 실행될 modsecurity-assistant.sh
(및 호출 www-security-assistant.bash
) 규칙을 작성해 보겠습니다 . /etc/modsecurity/z-customrules.conf
아래 줄을 열고 아래에 추가하십시오.
# REQUEST_URI words blacklist
#
SecRule REQUEST_URI "@pmFromFile /var/www-security-assistant/modsecurity-uri-black.list" \
"id:150, log, t:lowercase, chain, \
drop, deny, status:403, redirect:'/issues.php'"
SecRule REMOTE_ADDR "!@ipMatchFromFile /var/www-security-assistant/modsecurity-ip-white.list" \
"setenv:REMOTE_HOST=%{REMOTE_HOST}, \
setenv:ARGS=%{ARGS}, \
exec:/var/www-security-assistant/modsecurity-assistant.sh"
REQUEST_URI
-이 변수에는 현재 요청의 전체 URI가 포함됩니다. 규칙은 더 넓습니다.SecRule REQUEST_URI|ARGS|REQUEST_BODY ...
@pmFromFile
modsecurity-uri-black.list
각 특정 문구 나 단어가 새 줄에 배치되는 문구 목록이 포함 된 파일 을 읽습니다 . 로그 파일에서 흥미로운 단어와 문구를 수집 할 수 있습니다. 패턴 목록과 패턴 목록 사이에 특정 일치 항목 이 있으면 REQUEST_URI
규칙이 적용됩니다. 파일이 비어있을 수 있지만 파일을 작성 ( touch
)해야합니다.
이 log
작업을 수행하면이 규칙에 대한 로그 파일에 로그 항목이 생성됩니다 id:150
.
drop
, deny
(포함 status
) 및 redirect
작업은 파괴적인 작업 그룹에 속하며 규칙의 시작 부분에 있어야합니다 chain
(체인이있는 경우). 두 번째 작업은 첫 번째 작업보다 우선하고 세 번째 작업은 두 번째 작업보다 우선하므로 수행 할 작업을 선택하고 다른 작업을 삭제할 수 있습니다.
chain
action은 체인의 다음 규칙을 호출합니다. 두 번째 규칙에는 없습니다 id
.
REMOTE_ADDR
요청의 IP 주소를 포함합니다.
@ipMatchFromFile
modsecurity-ip-white.list
IP 주소의 화이트리스트를 포함 하는 파일 이 새 줄로 분리됩니다. CIDR 항목도 허용됩니다. 때문에 파괴적인 행동이 항상 적용됩니다 체인의 선두 규칙에 위치하고 있지만 특정 IP이 화이트리스트에있을 때 exec
조치가 적용되지 않습니다. 파일이 비어있을 수 있지만 파일을 작성 ( touch
)해야합니다.
exec
액션은 외부 스크립트를 호출합니다. 이 작업은 중단 되지 않으며 현재 규칙이 true를 반환하면 실행됩니다. 이 조치가 적용되면 원격 IP는 스크립트를 통해 처리됩니다.
setenv
이 조치는 특정 내부 변수 =%{...}
를 envvar로 내 보내며 내 보낸 이름은 내부 변수 와 다를 수 있습니다. 일부 변수는 수동으로 내 보내야하고 다른 변수는 자동으로 내 보내야합니다. 작은 버그 setenv:REQUEST_URI=%{REQUEST_URI}
일 수 있습니다 ( 예 : 같은 이름을 가진 수동 내보내기 는 내 보낸 변수의 빈 값을 유발할 수 있습니다).
건강 진단
서버에 Joomla가 없다고 가정하고 파일을 편집하고 modsecurity-uri-black.list
content 행을 추가하십시오 /joomla
. 그런 다음 브라우저에 입력하십시오 https://exemple.com/joomla
. Iptables를 통해 리디렉션되고 차단되어야합니다. 기록을 지우고 sudo www-security-assistant.bash <your-ip> --DROP-CLEAR 'some note'
IP를 추가 한 modsecurity-ip-white.list
후 다시 연습하십시오. 이제 리디렉션되어야하지만 차단되지 않아야합니다.
스크립트를 OWASP Core Rule Set 3.x와 연결
이를 위해 Anomaly Mode Rules (949110 및 959100) 의 기본 동작을 업데이트합니다 . 이를 위해 파일을 편집하고 /usr/share/modsecurity-crs.3/rules/RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf
다음 행을 맨 아래에 추가하십시오.
# -- Anomaly Mode - Update actions by ID -----
#
SecRuleUpdateActionById 949110 "t:none, drop, deny, status:403, redirect:'/issues.php', \
setenv:REMOTE_HOST=%{REMOTE_HOST}, setenv:ARGS=%{ARGS}, \
exec:/var/www-security-assistant/modsecurity-assistant.sh"
SecRuleUpdateActionById 959100 "t:none, drop, deny, status:403, redirect:'/issues.php', \
setenv:REMOTE_HOST=%{REMOTE_HOST}, setenv:ARGS=%{ARGS}, \
exec:/var/www-security-assistant/modsecurity-assistant.sh"
# -- Anomaly Mode - Whitelist some URI and IP addresses -----
#
SecRule REQUEST_URI "^/wp-admin/admin-ajax.php*|^/index\.php\?title=.*&action=(submit|raw&ctype=text/javascript|raw&ctype=text/css)$" \
"id:'999010', t:none, phase:1, pass, \
ctl:ruleRemoveById=949110, \
ctl:ruleRemoveById=959100"
SecRule REMOTE_ADDR "@ipMatchFromFile /var/www-security-assistant/modsecurity-ip-white.list" \
"id:'999020', t:none, phase:1, pass, \
ctl:ruleRemoveById=949110, \
ctl:ruleRemoveById=959100"
건강 진단
구성 변경 사항을 적용하기 위해 Apache를 다시 시작하거나 다시로드하는 것을 잊지 마십시오. 테스트하는 동안 정기적으로 기록을 지우는 것을 잊지 마십시오. 그렇지 않으면 영구적으로 차단 될 수 있습니다 :-)
디렉토리 순회 공격을 시뮬레이션하십시오.
https://example.com/?abc=../../../ # This should be redirected and blocked
https://example.com/wp-admin/admin-ajax.php?abc=../../../ # This should pass because of the whitelist rule
SQL 인젝션 공격 시뮬레이션 :
https://example.com/?username=1'%20or%20'1'%20=%20'1&password=1'%20or%20'1'%20=%20'1
https://example.com/index.php?username=1'%20or%20'1'%20=%20'1'))/*&password=foo
ModSecurity 및 Apache 로그 파일
Apache 웹 서버는 서버 관리자에게 작동 방식에 대한 중요한 정보를 제공하도록 구성 할 수 있습니다. 관리자에게 피드백을 제공하는 주요 방법은 로그 파일을 사용하는 것입니다. 더 읽어보기 ...
ModSecurity 에는 강력한 로깅 메커니즘이 있습니다. 지시문에 의해 SecGuardianLog
외부 스크립트와 함께 작동하도록 특별히 설계된 로그 피드를 제공합니다.
현재와 작업에 알려진 유일한 도구 보호자 로깅 입니다
httpd-guardian
의 일부입니다, 아파치 아파치 도구 프로젝트 . 이 httpd-guardian
도구는 서비스 거부 공격을 방어하도록 설계되었습니다. 그것은 blacklist tool
iptables 기반 방화벽과 상호 작용 하기 위해를 사용하여 문제의 IP 주소를 동적으로 블랙리스트에 추가합니다. 더 읽어보기 ...
ModSecurity 로그 파일 ► Fail2Ban ► Iptables
Apache 로그 파일의 데이터 구문 분석을 위해 Fail2Ban을 설정할 수 있습니다. modsec_audit.log
아마도 최선의 선택 일지 모르지만에 대해 이야기하는 섹션도 참조하십시오 SecGuardianLog
.
주의 가지고 있음 SecAuditLogRelevantStatus
에이 /etc/modsecurity/modsecurity.conf
주석을. 그렇지 않으면 404 오류 페이지를 수신하는 모든 사람이 fail2ban에 의해 차단됩니다.
SecAuditEngine RelevantOnly
#SecAuditLogRelevantStatus "^(?:5|4(?!04))"
현재 Fail2Ban은이 프로젝트에서 구현되지 않았습니다.
ModSecGuardianLog ► HTTPD-Guardian ► WSAS ► IPtables
httpd-guardian
-요청을 모니터링하여 DoS 공격 탐지 Apache Security, Copyright (C) 2005 Ivan Ristic-파이프 로깅 메커니즘을 통해 모든 웹 서버 요청을 모니터링하도록 설계되었습니다. 그것은 각 IP 주소에서 보낸 요청 수를 추적합니다 ... httpd-guardian은 IP 주소를 차단하기 위해 경고를 보내거나 스크립트를 실행할 수 있습니다 ...
이 스크립트는 Apache2 로깅 메커니즘 또는 ModSecurity (더 나은) 와 함께
사용할 수 있습니다 .
현재 상황에서 설치 및 설정
다운로드 httpd-guardian
하여 실행 가능하게하십시오.
sudo wget https://raw.githubusercontent.com/pa4080/www-security-assistant/ask_ubuntu/httpd-guardian.pl -O /var/www-security-assistant/httpd-guardian.pl
sudo chmod +x /var/www-security-assistant/httpd-guardian.pl
98-119
스크립트를 WSAS 스크립트와 연결하는 방법을 보려면 행 을 읽으십시오 .
Apache 구성 ( /etc/modsecurity/modsecurity.conf
) 내에서 다음 변경 사항을 적용한 후 다시 시작하십시오.
#SecGuardianLog /var/log/apache2_mod_security/modsec_guardian.log
SecGuardianLog "|/var/www-security-assistant/httpd-guardian.pl"
건강 진단
스크립트를 테스트하려면 ModEvasive를 비활성화하고 ( sudo a2dismod evasive
나중에 활성화해야 함을 잊지 마십시오) Apache를 다시 시작하십시오. 그런 다음 tail
exec 로그 :
tail -F /var/www-security-assistant/www-security-assistant.execlog
그리고 다른 인스턴스에서 DoS 공격을 수행하십시오 (예 ab
: 다음과 같은 방식으로 사용).
for i in {1..20}; do (ab -n 200 -c 10 https://example.com/ &); done
ModSecGuardianLog ► 사용자 정의 분석 ► WSAS ► IP 테이블
여기에 httpd-custom-analyze.bash
특별한 스크립트 는 아니지만 좋은 예제가 될 수 있는 간단한 스크립트 가 있습니다. 그 기능은 스크립트 본문에 설명되어 있습니다.
설치 및 설정
다운로드 httpd-custom-analyze.bash
하여 실행 가능하게하십시오.
sudo wget https://raw.githubusercontent.com/pa4080/www-security-assistant/ask_ubuntu/httpd-custom-analyze.bash -O /var/www-security-assistant/httpd-custom-analyze.bash
sudo chmod +x /var/www-security-assistant/httpd-custom-analyze.bash
Apache 구성 ( /etc/modsecurity/modsecurity.conf
) 내에서 다음 변경 사항을 적용 하고 다시 시작하십시오.
#SecGuardianLog /var/log/apache2_mod_security/modsec_guardian.log
#SecGuardianLog "|/var/www-security-assistant/httpd-guardian.pl"
SecGuardianLog "|/var/www-security-assistant/httpd-custom-analyze.bash"
임계 값에 도달하면 스크립트가 WSAS를 호출합니다 (읽기 행 86
및) 35
.
두 httpd-
스크립트가 동시에 작동하게 하려면 두 스크립트를 모두 편집 modsecurity.conf
하고 파이프하십시오 SecGuardianLog
.
테스트를 수행하려면 위 섹션의 팁을 따르십시오.