서버 보안 · 3 min read · Jan 02, 2026
CentOS 5.3/ISPConfig 3에서 SquirrelMail과 함께 fail2ban 구성하기
CentOS 5.3/ISPConfig 3에서 SquirrelMail과 함께 fail2ban 구성하기
소개
이 튜토리얼은 fail2ban을 사용하여 SquirrelMail 웹 로그인에 대한 무제한 로그인 시도를 방지하고 따라서 무차별 대입 공격을 방지하는 방법을 보여줍니다.
1. 요구 사항
CentOS v5.3/ISPConfig 3 머신에 fail2ban과 SquirrelMail이 모두 설치되어 있는지 확인하십시오.
그러나 설치는 간단합니다:
yum install fail2ban squirrelmailiptables를 방화벽으로 적극적으로 사용해야 합니다. Fail2ban은 무단 소스 IP 주소에 대한 임시 드롭 규칙을 생성하여 작동합니다.
2. SquirrelMail 로깅 구성
CentOS v5.3/ISPConfig 3에서 SquirrelMail (imapd)은 기본적으로 /var/log/maillog에 로그를 기록하지만 IP 주소 127.0.0.1 (localhost)로만 기록됩니다. 특정 소스 주소를 차단하려고 하기 때문에 fail2ban은 이 파일을 사용할 수 없습니다. 따라서 로그인 시도의 실제 소스 주소를 캡처하기 위해 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-2.3-1.2.7
cp config_example.php config.php이 플러그인은 Squirrel Logger의 최신 버전이지만, 수정된 버전이 있다면 SquirrelMail 플러그인 사이트에서 직접 다운로드하십시오.
기계가 GMT가 아닌 로컬 시간을 사용하는 경우, vi를 사용하여 config.php에서 $sl_use_GMT = 1을 $sl_use_GMT = 0으로 변경하십시오:
원본 config.php:
...
// Log dates in GMT? If you do not do this, dates will
// be logged in whatever timezone each user is in (or
// has set in their personal preferences)
//
// 1 = yes
// 0 = no
//
$sl_use_GMT = 1;
...수정된 config.php:
...
// Log dates in GMT? If you do not do this, dates will
// be logged in whatever timezone each user is in (or
// has set in their personal preferences)
//
// 1 = yes
// 0 = no
//
$sl_use_GMT = 0;
...다운로드한 Squirrel Logger gzip 파일을 삭제하십시오:
cd /usr/share/squirrelmail/plugins
rm squirrel_logger-2.3-1.2.7.tar.gzSquirrelMail이 Squirrel Logger 플러그인을 사용하도록 구성하십시오:
/usr/share/squirrelmail/config/conf.plSquirrelMail 구성 : 읽기: config.php (1.4.0)
---------------------------------------------------------
메인 메뉴 --
1. 조직 기본 설정
2. 서버 설정
3. 폴더 기본값
4. 일반 옵션
5. 테마
6. 주소록
7. 오늘의 메시지 (MOTD)
8. 플러그인
9. 데이터베이스
10. 언어
D. 특정 IMAP 서버에 대한 미리 정의된 설정 설정
C 색상 켜기
S 데이터 저장
Q 종료
명령 >>선택: 플러그인SquirrelMail 구성 : 읽기: config.php (1.4.0)
---------------------------------------------------------
플러그인
설치된 플러그인
1. delete_move_next
2. squirrelspell
3. newmail
사용 가능한 플러그인:
4. listcommands
5. fortune
6. filters
7. translate
8. abook_take
9. spamcop
10. squirrel_logger
11. mail_fetch
12. calendar
13. sent_subfolders
14. message_details
15. administrator
16. info
17. bug_report
R 메인 메뉴로 돌아가기
C 색상 켜기
S 데이터 저장
Q 종료
명령 >> 선택: squirrel_loggerSquirrelMail 구성 : 읽기: config.php (1.4.0)
---------------------------------------------------------
플러그인
설치된 플러그인
1. delete_move_next
2. squirrelspell
3. newmail
4. squirrel_logger
사용 가능한 플러그인:
5. listcommands
6. fortune
7. filters
8. translate
9. abook_take
10. spamcop
11. mail_fetch
12. calendar
13. sent_subfolders
14. message_details
15. administrator
16. info
17. bug_report
R 메인 메뉴로 돌아가기
C 색상 켜기
S 데이터 저장
Q 종료
명령 >> 선택: 데이터 저장, 종료3. Fail2ban 구성
fail2ban 구성 디렉토리로 변경하십시오:
cd /etc/fail2banSquirrelMail에 http 전송을 사용한다고 가정하고, vi를 사용하여 jail.conf 파일에 다음 줄을 추가하십시오:
[squirrelmail-iptables]
enabled = true
filter = squirrelmail
action = iptables[name=SquirrelMail, port=http, protocol=tcp]
sendmail-whois[name=SquirrelMail, dest=you@your_domain.com, sender=fail2ban@your_domain.com]
logpath = /var/lib/squirrelmail/prefs/squirrelmail_access_log
maxretry = 4maxretry 및 dest와 sender의 이메일 주소가 요구 사항에 맞게 설정되었는지 확인하십시오.
fail2ban 필터 디렉토리로 변경하십시오:
cd filter.dfilter.d 디렉토리에서 vi를 사용하여 squirrelmail.conf 파일을 다음 내용으로 생성하십시오:
# Fail2Ban 구성 파일
#
# 저자: Bill Landry ((email_protected))
#
# $Revision: 510 $
[정의]
# 옵션: failregex
# 참고: 로그 파일에서 비밀번호 실패 메시지와 일치하는 정규 표현식. 호스트는 "host"라는 그룹으로 일치해야 합니다. 태그 ""는 표준 IP/호스트 이름 일치에 사용될 수 있으며, (?:::f{4,6}:)?(?P\S+)의 별칭입니다.
# 값: 텍스트
failregex = \[LOGIN_ERROR\].*from : Unknown user or password incorrect
# 옵션: ignoreregex
# 참고: 이 정규 표현식과 일치하면 해당 줄이 무시됩니다.
# 값: 텍스트
ignoreregex = Fail2ban은 squirrelmail_access_log 파일에서 사용된 날짜 형식을 인식해야 합니다.
cd /usr/share/fail2ban/servervi를 사용하여 datedetector.py 파일을 편집하고 Apache 형식과 Exim 형식 섹션 사이에 다음 줄을 추가하십시오:
# SquirrelMail 09/13/2007 06:43:20
template = DateStrptime()
template.setName("Month/Day/Year Hour:Minute:Second")
template.setRegex("\d{2}/\d{2}/\d{4} \d{2}:\d{2}:\d{2}")
template.setPattern("%m/%d/%Y %H:%M:%S")
self.__templates.append(template)새 게시물을 받은 편지함에서 받기
스팸은 없습니다. 언제든지 구독 해지 가능합니다.