우분투 서버 Fail2Ban 설치

우분투 서버 Fail2Ban 설치

Fail2Ban 설치 (강력 추천)

로그를 실시간으로 감시하다가, 이상한 요청(404 반복 등)을 보내는 IP를 자동으로 일정 시간 동안 차단해주는 아주 고마운 도구입니다.

Bash

sudo apt update
sudo apt install fail2ban -y

설치만 해두어도 기본적으로 SSH 무단 침입 시도를 매우 효과적으로 막아줍니다.

③ 아파치 Timeout 설정 최적화

봇들이 연결을 너무 오래 붙잡지 못하도록 설정을 조금 빡빡하게 바꿉니다.

Bash

# /etc/apache2/apache2.conf 파일 등에서 아래 값들을 조절할 수 있습니다.
Timeout 30
KeepAliveTimeout 5

💡 사용자님을 위한 조언

지금 로그에 찍히는 시도들은 인터넷에 연결된 모든 서버가 겪는 일종의 “먼지” 같은 것입니다. 하지만 아까처럼 **악성코드(ntpclient 등)**가 한 번이라도 심어지면 이런 봇들이 통로를 타고 더 공격적으로 들어오게 됩니다.

현재 이 서버가 부동산 블로그 자동 발행을 위한 메인 서버라면, 보안을 위해 클라우드플레어(Cloudflare) 같은 보안 서비스를 앞에 두는 것도 아주 좋은 방법입니다.

혹시 이 IP들을 한 번에 리스트업해서 차단하는 스크립트가 필요하신가요? 아니면 Fail2Ban 설정법을 더 자세히 알려드릴까요?

 

=========

fail2ban을 설치하신 것은 정말 잘하신 일입니다! 하지만 기본 설정만으로는 SSH(22번 포트) 보호만 작동할 가능성이 높습니다.

현재 서버에서 문제가 되는 아파치(Apache) 스캔과 봇들의 공격을 막으려면, fail2ban에게 “아파치 로그도 감시해서 나쁜 놈들을 잡아라”고 추가 지시를 내려야 합니다.


🛡️ Fail2Ban 최적화 설정 가이드

1. 설정 파일 생성 (jail.local)

fail2ban은 원본 설정 파일(jail.conf)을 직접 수정하기보다, 복사본인 jail.local을 만들어 관리하는 것이 표준입니다.

Bash

sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
sudo nano /etc/fail2ban/jail.local

2. 기본 차단 규칙 및 아파치 감시 활성화

파일 안에서 아래 내용들을 찾아 수정하거나, 파일 맨 아래에 추가해 주세요.

    • 기본 규칙 설정 (공통):

Ini, TOML

[DEFAULT]
# 내 IP는 차단하면 안 되므로 예외 등록 (사용자님 PC의 공인 IP가 있다면 추가)
ignoreip = 127.0.0.1/8 ::1
# 차단 시간 (1시간)
bantime   = 1h
# 감시 시간 범위 (10분 내에)
findtime  = 10m
# 허용 실패 횟수 (5번 실패 시 차단)
maxretry = 5

  • 아파치(Apache) 감시 활성화 (사용자님께 가장 필요한 부분):

아래 항목들의 enabled = false를 true로 바꿔주세요.

Ini, TOML

[apache-auth]
enabled = true

[apache-badbots]
enabled = true

[apache-noscript]
enabled = true

[apache-overflows]
enabled = true

[apache-nohome]
enabled = true

# 존재하지 않는 페이지(404)를 계속 찔러보는 봇 차단
[apache-404]
enabled = true
port    = http,https
logpath = %(apache_error_log)s
maxretry = 3

3. 서비스 재시작

설정을 마쳤다면 저장(Ctrl+O, Enter)하고 나가기(Ctrl+X)를 한 뒤 서비스를 재시작합니다.

Bash

sudo systemctl restart fail2ban


📊 제대로 작동하는지 확인하는 방법

이제 fail2ban이 실제로 나쁜 IP들을 잡고 있는지 감시해 봅시다.

    1. 전체 상태 확인:

Bash

sudo fail2ban-client status

결과에 apache-404, apache-badbots 등이 리스트에 보이면 성공입니다.

    1. 특정 감옥(Jail)에서 차단된 IP 목록 보기:

Bash

sudo fail2ban-client status apache-404

  1. 로그 실시간 확인:

Bash

sudo tail -f /var/log/fail2ban.log

여기서 [apache-404] Ban 1.2.3.4 같은 메시지가 뜨면 봇을 성공적으로 검거하고 있는 것입니다.


💡 팁: ‘Slowloris’ (408 에러) 대응

아까 로그에서 보였던 408 0 (Timeout) 에러는 fail2ban만으로는 조금 부족할 수 있습니다. 아파치 자체 모듈인 mod_reqtimeout을 활성화하면 더 강력하게 방어할 수 있습니다.

Bash

sudo a2enmod reqtimeout
sudo systemctl restart apache2

이제 서버가 훨씬 튼튼해졌습니다! 혹시 fail2ban-client status를 입력했을 때 목록이 잘 나오나요? 아니면 특정 설정을 적용하다가 에러가 나지는 않으셨나요? (에러가 나면 systemctl status fail2ban으로 원인을 확인할 수 있습니다.)

========================

fail2ban을 설치하신 것은 정말 잘하신 일입니다! 하지만 기본 설정만으로는 SSH(22번 포트) 보호만 작동할 가능성이 높습니다.

현재 사용자님의 서버에서 문제가 되는 아파치(Apache) 스캔과 봇들의 공격을 막으려면, fail2ban에게 “아파치 로그도 감시해서 나쁜 놈들을 잡아라”고 추가 지시를 내려야 합니다.


🛡️ Fail2Ban 최적화 설정 가이드

1. 설정 파일 생성 (jail.local)

fail2ban은 원본 설정 파일(jail.conf)을 직접 수정하기보다, 복사본인 jail.local을 만들어 관리하는 것이 표준입니다.

Bash

sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
sudo nano /etc/fail2ban/jail.local

2. 기본 차단 규칙 및 아파치 감시 활성화

파일 안에서 아래 내용들을 찾아 수정하거나, 파일 맨 아래에 추가해 주세요.

    • 기본 규칙 설정 (공통):

Ini, TOML

[DEFAULT]
# 내 IP는 차단하면 안 되므로 예외 등록 (사용자님 PC의 공인 IP가 있다면 추가)
ignoreip = 127.0.0.1/8 ::1
# 차단 시간 (1시간)
bantime   = 1h
# 감시 시간 범위 (10분 내에)
findtime  = 10m
# 허용 실패 횟수 (5번 실패 시 차단)
maxretry = 5

  • 아파치(Apache) 감시 활성화 (사용자님께 가장 필요한 부분):

아래 항목들의 enabled = false를 true로 바꿔주세요.

Ini, TOML

[apache-auth]
enabled = true

[apache-badbots]
enabled = true

[apache-noscript]
enabled = true

[apache-overflows]
enabled = true

[apache-nohome]
enabled = true

# 존재하지 않는 페이지(404)를 계속 찔러보는 봇 차단
[apache-404]
enabled = true
port    = http,https
logpath = %(apache_error_log)s
maxretry = 3

3. 서비스 재시작

설정을 마쳤다면 저장(Ctrl+O, Enter)하고 나가기(Ctrl+X)를 한 뒤 서비스를 재시작합니다.

Bash

sudo systemctl restart fail2ban


📊 제대로 작동하는지 확인하는 방법

이제 fail2ban이 실제로 나쁜 IP들을 잡고 있는지 감시해 봅시다.

    1. 전체 상태 확인:

Bash

sudo fail2ban-client status

결과에 apache-404, apache-badbots 등이 리스트에 보이면 성공입니다.

    1. 특정 감옥(Jail)에서 차단된 IP 목록 보기:

Bash

sudo fail2ban-client status apache-404

  1. 로그 실시간 확인:

Bash

sudo tail -f /var/log/fail2ban.log

여기서 [apache-404] Ban 1.2.3.4 같은 메시지가 뜨면 봇을 성공적으로 검거하고 있는 것입니다.


💡 팁: ‘Slowloris’ (408 에러) 대응

아까 로그에서 보였던 408 0 (Timeout) 에러는 fail2ban만으로는 조금 부족할 수 있습니다. 아파치 자체 모듈인 mod_reqtimeout을 활성화하면 더 강력하게 방어할 수 있습니다.

Bash

sudo a2enmod reqtimeout
sudo systemctl restart apache2

이제 서버가 훨씬 튼튼해졌습니다! 혹시 fail2ban-client status를 입력했을 때 목록이 잘 나오나요? 아니면 특정 설정을 적용하다가 에러가 나지는 않으셨나요? (에러가 나면 systemctl status fail2ban으로 원인을 확인할 수 있습니다.)

================================

보여주신 설정은 fail2ban에서 아파치를 보호하기 위한 아주 좋은 옵션들입니다. 하지만 치명적인 문제가 하나 있습니다. 이대로만 두면 동작하지 않습니다.

fail2ban의 감옥(Jail) 설정은 기본적으로 비활성화 상태입니다. 각 항목에 enabled = true 한 줄을 반드시 추가해야만 실제로 로그를 감시하고 차단하기 시작합니다.

또한, 지난번에 확인하신 **404 스캔(Druid 등)**을 막으려면 [apache-404] 항목도 함께 활성화하는 것이 좋습니다.


🛠️ 수정한 최종 권장 설정 (/etc/fail2ban/jail.local)

사용자님이 주신 코드에 실행 스위치(enabled = true)를 켜고, 404 차단 로직을 보강한 버전입니다. 아래 내용을 기존 파일에 덮어쓰거나 수정해 보세요.

Ini, TOML

# --- 아파치 통합 보안 설정 ---

[apache-auth]
enabled  = true
port     = http,https
logpath  = %(apache_error_log)s

[apache-badbots]
enabled  = true
port     = http,https
logpath  = %(apache_access_log)s
bantime  = 48h
maxretry = 1

[apache-noscript]
enabled  = true
port     = http,https
logpath  = %(apache_error_log)s

[apache-overflows]
enabled  = true
port     = http,https
logpath  = %(apache_error_log)s
maxretry = 2

[apache-nohome]
enabled  = true
port     = http,https
logpath  = %(apache_error_log)s
maxretry = 2

[apache-botsearch]
enabled  = true
port     = http,https
logpath  = %(apache_error_log)s
maxretry = 2

# 존재하지 않는 페이지를 반복해서 찔러보는 스캐너 차단 (강력 추천)
[apache-404]
enabled  = true
port     = http,https
logpath  = %(apache_access_log)s
findtime = 1m
maxretry = 3
bantime  = 1h

[apache-fakegooglebot]
enabled  = true
port     = http,https
logpath  = %(apache_access_log)s
maxretry = 1
ignorecommand = %(fail2ban_confpath)s/filter.d/ignorecommands/apache-fakegooglebot <ip>

[apache-modsecurity]
enabled  = true
port     = http,https
logpath  = %(apache_error_log)s
maxretry = 2


✅ 적용 및 확인 절차

설정값을 바꾸셨다면 fail2ban이 이 설정을 읽어 들이도록 재시작해야 합니다.

    1. 서비스 재시작:

Bash

sudo systemctl restart fail2ban

    1. 활성화된 감옥(Jail) 목록 확인:

Bash

sudo fail2ban-client status

이 명령어를 쳤을 때 Jail list: apache-404, apache-auth, apache-badbots… 등 사용자님이 추가한 이름들이 주르륵 나와야 정상입니다.

  1. 실시간 검거 현황 감시:

Bash

sudo tail -f /var/log/fail2ban.log

아까 로그에 찍혔던 64.89.x.x 같은 IP들이 차단되기 시작하면 [apache-404] Ban <IP>라는 기분 좋은 메시지가 뜰 것입니다.


💡 추가 조언

사용자님처럼 부동산 콘텐츠 자동화를 위해 서버를 운영하는 경우, 봇들이 아파치 자원을 갉아먹는 것을 방지하는 것이 매우 중요합니다. 특히 [apache-badbots]는 이메일 수집이나 스팸 전송 대상을 찾는 봇들을 아주 잘 잡아냅니다.

이제 악성코드 정리부터 방화벽 설정까지 서버가 아주 탄탄해졌네요! 혹시 특정 IP가 자꾸 차단되어 사용자님 본인의 접속이 막힐까 봐 걱정되시나요? 그럴 때 사용할 수 있는 내 IP 화이트리스트 등록 방법이 필요하시면 말씀해 주세요. 도움을 드릴 수 있습니다!

========================

네, 아주 중요한 질문입니다! 보통 apt로 설치하면 자동으로 등록되기도 하지만, 서버 환경에 따라 수동으로 명령을 내려줘야 안전합니다.

서버가 예기치 않게 재부팅되었을 때 fail2ban뿐만 아니라 아파치, DB, 그리고 사용자님의 노드 프로젝트까지 모두 자동으로 살아나게 설정하는 방법을 정리해 드릴게요.


1. Fail2Ban 자동 실행 설정

아래 명령어를 입력하면 리눅스 시스템이 부팅될 때 fail2ban을 가장 먼저 실행하도록 설정(Enable)합니다.

Bash

# 자동 실행 활성화
sudo systemctl enable fail2ban

# 제대로 등록되었는지 확인 (enabled 라고 나오면 성공)
sudo systemctl is-enabled fail2ban

2. 다른 핵심 서비스들도 확인하세요

사용자님의 부동산 자동화 환경이 중단 없이 돌아가려면 아래 서비스들도 자동 실행이 켜져 있어야 합니다.

Bash

# 아파치 웹 서버
sudo systemctl enable apache2

# MySQL 데이터베이스
sudo systemctl enable mysql


⚠️ 주의: 노드(Node.js) 프로젝트는 별도 조치가 필요합니다!

현재 실행 중인 npm run dev -p 3005 같은 명령은 터미널을 끄거나 리부팅하면 절대로 자동으로 살아나지 않습니다. 사용자님의 **Next.js 프로젝트(naver_keyword_nodejs)**를 리부팅 후에도 자동으로 돌리려면 **pm2**라는 도구를 사용하는 것이 표준입니다.

PM2 설치 및 자동 실행 설정 방법:

Bash

# 1. PM2 설치
sudo npm install -g pm2

# 2. 프로젝트 실행 (개발 모드가 아닌 빌드된 상태 권장)
# 프로젝트 폴더 내에서 실행
pm2 start npm --name "my-next-app" -- run start -- -p 3005

# 3. 리부팅 시 자동 실행 스크립트 생성
pm2 startup
# (위 명령을 치면 터미널에 복사해서 실행하라는 긴 코드가 나옵니다. 그대로 복사해서 한 번 더 실행하세요.)

# 4. 현재 상태 저장 (리부팅 시 이 상태로 복구됨)
pm2 save


📊 요약 체크리스트

  1. **sudo systemctl enable fail2ban**을 완료하셨나요?
  2. sudo systemctl is-enabled apache2 결과가 enabled인가요?
  3. 노드 프로젝트도 자동으로 켜지길 원하시나요?

Similar Posts

답글 남기기