보안 · 4 min read · Dec 29, 2025

Debian Lenny 5.0/ISPConfig 3에서 SquirrelMail과 함께 fail2ban 구성하기

Debian Lenny 5.0/ISPConfig 3에서 SquirrelMail과 함께 fail2ban 구성하기

이 기사에서는 Squirrel Logger 플러그인을 사용하여 SquirrelMail 웹 로그인에 대한 무차별 대입 공격을 방지하는 방법을 보여줍니다.

1. 요구 사항

Debian Lenny/ISPConfig 3 머신에 fail2ban과 SquirrelMail이 설치되어 있는지 확인하십시오.
ISPConfig 3 + SquirrelMail을 설치하려면 이 가이드를 따르십시오.
fail2ban을 설치하려면 이 가이드를 따르십시오.

2. Squirrel Logger

Squirrel Logger를 다운로드하고 설치하십시오:

cd /usr/share/squirrelmail/plugins  
wget http://squirrelmail.org/countdl.php?fileurl=http%3A%2F%2Fwww.squirrelmail.org%2Fplugins%2Fsquirrel_logger-2.3-1.2.7.tar.gz  
tar zxvf squirrel_logger-2.3-1.2.7.tar.gz  
cd squirrel_logger  
cp config_example.php config.php

Squirrel Logger를 구성하십시오:

vi config.php

서버가 GMT 로컬 시간을 사용하지 않는 경우, $sl_use_GMT = 1을 $sl_use_GMT = 0으로 변경하십시오:

...  
// 로그 날짜를 GMT로 기록합니까?  이렇게 하지 않으면 날짜는  
// 각 사용자가 있는 시간대(또는  
// 개인 설정에서 설정한 시간대)로 기록됩니다.  
//  
//    1 = 예  
//    0 = 아니오  
//  
$sl_use_GMT = 0;  
...

로그 파일의 위치를 $sl_logfile = $data_dir . ‘squirrelmail_access_log’;에서 $sl_logfile = ‘/var/log/squirrelmail.log’;로 변경하십시오:

...  
// 파일에 기록할 때 로그 파일의 위치입니다.  
// 웹 서버가 실행되는 사용자가 이 파일에 쓸 수 있는지 확인하십시오.  
// 로그 파일을 SquirrelMail 데이터  
// 디렉토리에 배치하려면 $data_dir 변수를 사용하십시오.  
//  
// $sl_logs에 "file"이 포함될 때만 적용됩니다.  
//  
// $sl_logfile = $data_dir . 'squirrelmail_access_log';  
$sl_logfile = '/var/log/squirrelmail.log';  
...

날짜 형식을 fail2ban 정규 표현식과 일치하도록 $sl_dateformat = ‘m/d/Y H:i:s’;에서 $sl_dateformat = ‘M j H:i:s’;로 변경하십시오:

...  
// 원하는 날짜 형식을 지정하십시오.  
//  
// 도움을 받으려면 PHP 매뉴얼의 날짜 함수에서 확인하십시오.  
// http://www.php.net/manual/function.date.php  
//  
// 예시:  
//  
//    'm/d/y H:i:s'     ==  03/10/2001 05:16:08  
//    'F j, Y, g:i a'   ==  March 10, 2001, 5:16 am  
//    'D M j Y H:i:s T' ==  Sat Mar 10 2001 15:16:08 CDT  
//  
// $sl_dateformat = 'm/d/Y H:i:s';  
$sl_dateformat = 'M j H:i:s';  
... 

/var/log/에 새로운 squirrelmail.log 파일을 생성하십시오:

touch /var/log/squirrelmail.log  
chown www-data:www-data /var/log/squirrelmail.log  
chmod 640 /var/log/squirrelmail.log

설치를 정리하십시오:

cd ..  
rm squirrel_logger-2.3-1.2.7.tar.gz

SquirrelMail이 Squirrel Logger 플러그인을 사용하도록 구성하십시오:

squirrelmail-configure
...  
7.  메시지의 날 (MOTD)  
8.  플러그인  
9.  데이터베이스  
...

“플러그인”을 선택하고, 제 경우에는 번호 8입니다.

...  
18. spamcop  
19. squirrel_logger  
20. squirrelspell  
21. test  
...

squirrel_logger를 선택하고, 제 경우에는 번호 19입니다.

...  
설치된 플러그인  
1. delete_move_next  
2. squirrelspell  
3. newmail  
4. squirrel_logger  
...

이제 squirrel_logger가 설치된 플러그인의 일부입니다.
데이터를 저장하려면 “S”를 누르고 종료하려면 “Q”를 누르십시오.

3. Fail2ban 구성

fail2ban이 SquirrelMail 로그를 사용하도록 구성하십시오:

cd /etc/fail2ban

jail.local 파일을 열고 다음 줄을 추가하십시오. 이 파일이 없으면 기본 jail.conf를 사용하십시오.

vi jail.local
[squirrelmail]  
  
enabled = true  
port = http,https  
filter = squirrelmail  
logpath = /var/log/squirrelmail.log  
bantime = 300  
maxretry = 4 

bantime(초 단위)와 maxretry가 요구 사항에 맞게 설정되어 있는지 확인하십시오.

filter.d 디렉토리에서 squirrelmail.conf 파일을 다음 내용으로 생성하십시오:

cd filter.d  
vi squirrelmail.conf
# Fail2Ban 구성 파일  
#  
# 작성자: Bill Landry ((email_protected))  
#  
# $Revision: 510 $  
  
[Definition]  
  
# 옵션: failregex  
# 주의: 로그 파일에서 비밀번호 실패 메시지와 일치하는 정규 표현식입니다.  
#         호스트는 "host"라는 그룹으로 일치해야 합니다. 태그 ""는  
#         표준 IP/호스트 이름 일치에 사용될 수 있으며,  
#         (?:::f{4,6}:)?(?P)의 별칭입니다.  
# 값: 텍스트  
  
failregex = \[LOGIN_ERROR\].*from : Unknown user or password incorrect  
  
# 옵션: ignoreregex  
# 주의: 무시할 정규 표현식입니다. 이 정규 표현식과 일치하면 해당 줄은 무시됩니다.  
# 값: 텍스트  
  
ignoreregex = 

중요: 영어가 아닌 다른 언어를 사용하는 경우, 5번에서 squirrelmail.log에 표시되는 텍스트로 “failregex” 줄을 변경하십시오.

예: 스페인어를 사용하면 로그 파일에서 다음과 같이 표시됩니다.

Aug 20 15:26:06 [LOGIN_ERROR] [email protected] (server.domain.com) from XXX.XXX.XX.XX: Usuario o contraseña incorrecto. 

따라서 이 변경을 합니다:

failregex = \[LOGIN_ERROR\].*from : Usuario o contraseña incorrecto

…그리고 fail2ban을 재시작합니다.

/etc/init.d/fail2ban restart

5. 설치 테스트

cd /var/log  
tail -f squirrelmail.log

SquirrelMail 웹 인터페이스에 “잘못된 비밀번호”로 “3”번 로그인하십시오.
이 절차는 터미널 창에서 실패한 로그인 시도를 보여줍니다:

Aug 19 13:57:20 [LOGIN_ERROR] [email protected] (server.domain.com) from XXX.XXX.XX.XX: Unknown user or password incorrect.  
Aug 19 13:57:34 [LOGIN_ERROR] [email protected] (server.domain.com) from XXX.XXX.XX.XX: Unknown user or password incorrect.  
Aug 19 13:57:46 [LOGIN_ERROR] [email protected] (server.domain.com) from XXX.XXX.XX.XX: Unknown user or password incorrect.

squirrelmail.log 파일을 닫습니다:

Ctrl-c

fail2ban-regex가 이러한 오류를 잡을 수 있는지 확인하십시오:

fail2ban-regex /var/log/squirrelmail.log /etc/fail2ban/filter.d/squirrelmail.conf
테스트 실행 중  
=============  
  
정규 표현식 파일 사용: /etc/fail2ban/filter.d/squirrelmail.conf  
로그 파일 사용: /var/log/squirrelmail.log  
  
결과  
=======  
  
Failregex  
|- 정규 표현식:  
|  [1] \[LOGIN_ERROR\].*from : Unknown user or password incorrect  
|  
`- 일치 수:  
   [1] 3 match(es)  
  
Ignoreregex  
|- 정규 표현식:  
|  
`- 일치 수:  
  
요약  
=======  
  
발견된 주소:  
[1]  
    200.113.105.235 (Wed Aug 19 13:57:20 2009)  
    200.113.105.235 (Wed Aug 19 13:57:34 2009)  
    200.113.105.235 (Wed Aug 19 13:57:46 2009)  
  
날짜 템플릿 적중:  
3 hit(s): Month Day Hour:Minute:Second  
0 hit(s): Weekday Month Day Hour:Minute:Second Year  
0 hit(s): Weekday Month Day Hour:Minute:Second  
0 hit(s): Year/Month/Day Hour:Minute:Second  
0 hit(s): Day/Month/Year Hour:Minute:Second  
0 hit(s): Day/Month/Year:Hour:Minute:Second  
0 hit(s): Year-Month-Day Hour:Minute:Second  
0 hit(s): Day-Month-Year Hour:Minute:Second[.Millisecond]  
0 hit(s): TAI64N  
0 hit(s): Epoch  
0 hit(s): ISO 8601  
  
성공, 총 일치 수는 3입니다.  
  
그러나 위의 '테스트 실행' 섹션을 확인하십시오. 중요한 정보가 포함될 수 있습니다.

이 줄이 보이면 모든 것이 정상입니다: 성공, 총 일치 수는 3입니다.

6. Fail2ban 테스트해 보겠습니다

SquirrelMail 웹 인터페이스에 “잘못된 비밀번호”로 “4”번 로그인하십시오(또는 maxretry 설정에 따라 더 많이).

차단되면 로그인 페이지를 볼 수 없다는 의미입니다. 다음을 실행하십시오:

iptables -L

이제 iptables 출력에서 차단된 IP xxx-xxx-xxx-xxx를 볼 수 있습니다.

Chain fail2ban-squirrelmail (1 references)  
target     prot opt source               destination  
DROP       all  --  xxx-xxx-xxx-xxx.your.isp.info  anywhere  
RETURN     all  --  anywhere             anywhere  

행운을 빕니다 ;)

Share: X/Twitter LinkedIn

새 게시물을 받은 편지함에서 받기

스팸은 없습니다. 언제든지 구독 해지 가능합니다.