공격 막는방법좀 알려주셔요
본문
awk '{print $1}' /var/log/httpd/access_log | sort | uniq -c | sort -nr | head -20
414 111.111.111.111
395 111.111.111.112
330 111.111.111.113
198 111.111.111.114
179 111.111.111.115
계속 이런식의 공격이 들어옵니다.
이 공격 효과적으로 막으려면 어떻게 하면 될까요 ㅠ.ㅠ
fail2ban을 써도 막아지질않네유 ㅠㅠ
답변 3
최적의 방안은 Cloudflare와 서버단 방어를 병행하는 복합적 전략을 적용하는 것입니다.
먼저, Cloudflare WAF에서 GeoIP 차단 및 Rate Limiting을 설정하여
일본·홍콩의 과도한 요청을 차단하고, User-Agent 및 Referer 필터링을 추가합니다.
그다음, 서버에서 X-Forwarded-For 기반으로 Cloudflare를 경유한 원본 IP를 필터링하여
불필요한 접근을 막고, 특정 국가 대역을 제한합니다.
또한, Fail2Ban과 iptables 자동화 스크립트를 활용해
일정 횟수 이상 요청하는 악성 IP를 자동 차단하며,
이를 크론 작업으로 실행해 지속적인 모니터링과 차단이 이루어지도록 합니다.
ModSecurity 또는 Cloudflare "Under Attack Mode" 활성화로 비정상적인 요청을 방어하고,
필요한 경우 CDN을 통한 트래픽 우회로 서버 부하를 분산하는 것이 효과적입니다.
※ 다시 말해, Cloudflare의 보호 기능 + 서버단 차단 + 자동화된 Fail2Ban 및 iptables 방어,
이와 같이 결합하시면, ~ 아래는 설정 예시들을 찾아 정리해 보았습니다.
*Cloudflare 대시보드 → Security → WAF → Custom Rules에서 아래 설정 추가
Rule: Country IS Japan OR Country IS Hong Kong
Action: Block (또는 Challenge)
*Rate Limiting 설정
Rule: Country IS Japan OR Hong Kong AND Requests per minute > 50
Action: Block or JS Challenge
*/etc/apache2/conf-available/remoteip.conf (또는 httpd.conf) 설정 추가
RemoteIPHeader X-Forwarded-For
Require ip 173.245.48.0/20
Require ip 103.21.244.0/22
Require not ip 133.0.0.0/8 # 일본 대역 차단
Require not ip 119.28.0.0/16 # 홍콩 대역 차단
- 적용 후 Apache 재시작
systemctl restart apache2
*/etc/nginx/nginx.conf 또는 해당 server {} 블록 내 설정 (nginx 서버)
set_real_ip_from 103.21.244.0/22;
real_ip_header X-Forwarded-For;
if ($remote_addr ~* "133\.") {
return 403;
}
if ($remote_addr ~* "119\.28\.") {
return 403;
}
- 적용 후 Nginx 재시작
systemctl restart nginx
*/etc/fail2ban/jail.local 파일 수정
[apache-cloudflare]
enabled = true
port = http,https
filter = apache-cloudflare
logpath = /var/log/apache2/access.log
bantime = 3600 # 1시간 차단
findtime = 60 # 60초 내에
maxretry = 50 # 50번 이상 요청 시 차단
- 적용 후 Fail2Ban 재시작
systemctl restart fail2ban
*/root/block_attack_ips.sh 파일 생성
#!/bin/bash
LOG_FILE="/var/log/apache2/access.log"
BLOCK_LIST="/root/blocked_ips.txt"
# 일본·홍콩 IP 중 100회 이상 요청하는 IP 차단
awk '{print $1}' $LOG_FILE | sort | uniq -c | sort -nr | awk '$1 > 100' | grep -E "133\.|119\.28\." | awk '{print $2}' > $BLOCK_LIST
# iptables로 차단
while IFS= read -r ip; do
iptables -A INPUT -s "$ip" -j DROP
done < "$BLOCK_LIST"
*크론 작업으로 10분마다 실행
crontab -e
. . .
*/10 * * * * /bin/bash /root/block_attack_ips.sh
*설치 후 기본적인 공격 차단 활성화 (CentOS)
yum install mod_security
systemctl restart httpd
*/etc/httpd/conf.d/mod_security.conf 설정 추가
SecRule REQUEST_HEADERS:User-Agent "curl|python|bot" "id:1001,phase:1,t:none,log,deny,status:403,msg:'Suspicious Bot Detected'"
흠 웹 사이트의 DNS를 클라우드 플레어로 변경하여 트래픽을 먼저 Cloudflare에서 처리하도록 하셔는데도 디도스공격 방어가 않되던가요?
cloudflare에 들어가서 under attack mode 활성화
무료입니다.
유료까지 안가도 됩니다.
전 이걸로 다 해결했습니다.