19강 / 20강

보안 — 스캐너·봇·DDoS 막기

전자상거래 서버는 늘 노려지고 있습니다

보안 — 스캐너·봇·DDoS 막기
공격은 사람이 아니라 대부분 자동 스크립트가 합니다. 그래서 24시간 옵니다.

쇼핑몰 서버를 올린 다음 날, 로그를 열어 봅시다. 아무에게도 주소를 알려 주지 않았는데 이런 줄들이 있을 겁니다.

python-requests 라고 적힌 줄들을 찾아보세요.
🖥️ 내 가상 서버 브라우저 안에서 실행 (계산용)

이 요청들의 정체

요청 주소노리는 것
/wp-login.php워드프레스 관리자 — 비밀번호 대입
/.envDB 비밀번호·API 키가 담긴 설정 파일
/.git/config소스코드 통째로
/admin/config.php관리자 페이지
/phpmyadmin/DB 관리 도구

우리는 워드프레스도 PHP도 안 씁니다. 그러니 전부 404가 나죠. 이게 정상입니다. 놀랄 일이 아니에요. 인터넷에 있는 모든 IP가 이런 스캔을 받습니다.

문제는 이 중 하나라도 200이 나올 때입니다. /.env 가 200이면 그 순간 DB 비밀번호가 털린 겁니다.

보안 실습실 — 로그를 분석하고 차단 규칙을 적용해 보세요
불러오는 중…

SSH — 가장 먼저 잠글 곳

SSH 무차별 대입은 하루 수천 건씩 옵니다. 세 가지만 하면 사실상 0이 됩니다.

# /etc/ssh/sshd_config
PermitRootLogin no             # root 직접 로그인 금지
PasswordAuthentication no      # 비밀번호 로그인 끄기 — 키만 허용
AllowUsers ubuntu              # 이 계정만

그리고 11강처럼 사무실 IP에서만 22를 열면 로그가 조용해집니다.

fail2ban 을 붙이면 실패를 반복하는 IP를 자동으로 차단해 줍니다. 로그를 읽고 방화벽 규칙을 자동으로 추가하는 프로그램이에요.

sudo apt install fail2ban
sudo systemctl enable --now fail2ban
sudo fail2ban-client status sshd

rate limit — 한 사람이 너무 많이 두드릴 때

로그인 페이지에 초당 100번씩 요청이 온다면 정상적인 손님이 아닙니다. nginx가 직접 잘라 줄 수 있어요.

limit_req_zone $binary_remote_addr zone=login:10m rate=5r/m;   ← IP당 분당 5회

location /login {
    limit_req zone=login burst=3 nodelay;    ← 3회까지는 몰아쳐도 봐줌
    proxy_pass http://mallshop;
}

한도를 넘으면 429 Too Many Requests 가 나갑니다(9강). 로그인·회원가입·쿠폰 등록처럼 비싸고 악용되기 쉬운 주소에만 거세요. 상품 목록에 걸면 정상 손님이 막힙니다.

429가 나오는 순간을 확인하세요.
💻 손님 노트북 브라우저 안에서 실행 (계산용)

DDoS — 우리 서버 혼자서는 못 막습니다

솔직해집시다. 수천 대의 좀비 PC가 동시에 트래픽을 쏟아부으면 서버 한 대의 방화벽으로는 아무것도 할 수 없습니다. 회선 자체가 막히기 때문이에요. 방화벽이 패킷을 버려도 회선은 이미 꽉 찼습니다.

그래서 DDoS 방어는 우리 앞단에서 해야 합니다.

  • Cloudflare 프록시 켜기(16강) — 오리진 IP를 숨기고, 공격은 Cloudflare가 흡수
  • 오리진 IP를 절대 노출하지 않기 — 옛 DNS 기록·메일 헤더·인증서 로그로 새어 나갑니다
  • 오리진 방화벽에서 Cloudflare IP 대역만 허용 — IP를 알아내도 직접 못 때립니다

정보를 흘리지 않기

공격자는 먼저 정찰부터 합니다. 우리가 무심코 알려 주는 정보를 줄입시다.

server_tokens off;    # 응답 헤더에서 nginx 버전 숨기기

버전이 보이면 그 버전의 알려진 취약점을 바로 시도합니다. 숨긴다고 안전해지는 것은 아니지만, 자동 스캐너의 표적 목록에서는 빠져요.

그보다 훨씬 중요한 것은 업데이트입니다.

sudo apt update && sudo apt upgrade
sudo apt install unattended-upgrades   # 보안 패치 자동 적용
Server 헤더에 무엇이 적혀 있는지 확인하세요.
💻 손님 노트북 브라우저 안에서 실행 (계산용)
🤔 확인 문제
로그에 /.env, /wp-login.php 요청이 하루 수백 건씩 찍힙니다. 어떻게 봐야 할까요?
🤔 확인 문제
대규모 DDoS 공격을 서버의 ufw 규칙만으로 막을 수 없는 이유는?