서버 설치 · 8 min read · Sep 30, 2025

Debian 6.0에 ISPConfig 3로 웹, 이메일 및 MySQL 데이터베이스 클러스터 설치 - 페이지 2

다음 단계는 서버 1과 서버 2에서 실행해야 합니다.

amavisd-new, SpamAssassin 및 ClamAV를 설치하려면 다음을 실행합니다:

 apt-get install amavisd-new spamassassin clamav clamav-daemon zoo unzip bzip2 arj nomarch lzop cabextract apt-listchanges libnet-ldap-perl libauthen-sasl-perl clamav-docs daemon libio-string-perl libio-socket-ssl-perl libnet-ident-perl zip libnet-dns-perl

ISPConfig 3 설정은 내부적으로 SpamAssassin 필터 라이브러리를 로드하는 amavisd를 사용하므로 RAM을 확보하기 위해 SpamAssassin을 중지할 수 있습니다:

/etc/init.d/spamassassin stop
update-rc.d -f spamassassin remove

그런 다음 Apache2, PHP5, phpMyAdmin, FCGI, suExec, Pear 및 mcrypt를 다음과 같이 설치할 수 있습니다:

 apt-get -y install apache2 apache2.2-common apache2-doc apache2-mpm-prefork apache2-utils libexpat1 ssl-cert libapache2-mod-php5 php5 php5-common php5-curl php5-gd php5-mysql php5-imap phpmyadmin php5-cli php5-cgi libapache2-mod-fcgid apache2-suexec php-pear php-auth php5-mcrypt mcrypt php5-imagick imagemagick libapache2-mod-suphp libruby libapache2-mod-ruby php5-xcache libapache2-mod-perl2 sudo zip wget

다음 질문이 표시됩니다:

웹 서버를 자동으로 재구성하시겠습니까: <– apache2
phpmyadmin의 데이터베이스를 dbconfig-common으로 구성하시겠습니까? <– 아니요

그런 다음 Apache 모듈 suexec, rewrite, ssl, actions 및 include를 활성화하려면 다음 명령을 실행합니다:

a2enmod suexec rewrite ssl actions include ruby dav_fs dav auth_digest

PureFTPd 및 쿼타는 다음 명령으로 설치할 수 있습니다:

apt-get -y install pure-ftpd-common pure-ftpd-mysql quota quotatool

파일 /etc/default/pure-ftpd-common을 편집합니다…

vi /etc/default/pure-ftpd-common

… 그리고 시작 모드가 standalone으로 설정되어 있고 VIRTUALCHROOT=true로 설정되어 있는지 확인합니다:

[...]
STANDALONE_OR_INETD=standalone
[...]
VIRTUALCHROOT=true
[...]

파일 /etc/inetd.conf를 편집하여 inetd가 ftp를 시작하려고 시도하지 않도록 합니다:

vi /etc/inetd.conf

ftp stream tcp로 시작하는 줄이 있으면 주석 처리합니다(해당 파일이 없으면 괜찮으며 /etc/inetd.conf를 수정할 필요는 없습니다):

[...]
#:STANDARD: 이러한 서비스는 표준 서비스입니다.
#ftp    stream  tcp     nowait  root    /usr/sbin/tcpd /usr/sbin/pure-ftpd-wrapper
[...]

/etc/inetd.conf를 수정해야 했다면 지금 inetd를 재시작합니다:

/etc/init.d/openbsd-inetd restart

이제 PureFTPd를 구성하여 FTP 및 TLS 세션을 허용합니다. FTP는 모든 비밀번호와 모든 데이터가 일반 텍스트로 전송되기 때문에 매우 안전하지 않은 프로토콜입니다. TLS를 사용하면 전체 통신을 암호화할 수 있으므로 FTP를 훨씬 더 안전하게 만들 수 있습니다.

FTP 및 TLS 세션을 허용하려면 다음을 실행합니다:

echo 1 > /etc/pure-ftpd/conf/TLS

TLS를 사용하려면 SSL 인증서를 생성해야 합니다. 나는 /etc/ssl/private/에 생성하므로 먼저 해당 디렉토리를 생성합니다:

mkdir -p /etc/ssl/private/

그런 다음 SSL 인증서를 다음과 같이 생성할 수 있습니다:

openssl req -x509 -nodes -days 7300 -newkey rsa:2048 -keyout /etc/ssl/private/pure-ftpd.pem -out /etc/ssl/private/pure-ftpd.pem

국가 이름 (2자리 코드) [AU]: <– 귀하의 국가 이름 입력 (예: “DE”).
주 또는 지방 이름 (전체 이름) [Some-State]: <– 귀하의 주 또는 지방 이름 입력.
지역 이름 (예: 도시) []: <– 귀하의 도시 입력.
조직 이름 (예: 회사) [Internet Widgits Pty Ltd]: <– 귀하의 조직 이름 입력 (예: 귀하의 회사 이름).
조직 단위 이름 (예: 섹션) []: <– 귀하의 조직 단위 이름 입력 (예: “IT 부서”).
공통 이름 (예: 귀하의 이름) []: <– 시스템의 완전한 도메인 이름 입력 (예: “server1.example.com”).
이메일 주소 []: <– 귀하의 이메일 주소 입력.

SSL 인증서의 권한을 변경합니다:

chmod 600 /etc/ssl/private/pure-ftpd.pem

그런 다음 PureFTPd를 재시작합니다:

/etc/init.d/pure-ftpd-mysql restart

/etc/fstab을 편집합니다. 내 것은 다음과 같습니다 (나는 /의 마운트 지점이 있는 파티션에 usrjquota=aquota.user,grpjquota=aquota.group,jqfmt=vfsv0를 추가했습니다):

vi /etc/fstab
# /etc/fstab: 정적 파일 시스템 정보.
#
# 'blkid'를 사용하여 장치의 보편적으로 고유한 식별자를 인쇄합니다; 이는 UUID=와 함께 사용되어 장치를 이름 짓는 보다 강력한 방법이 될 수 있습니다
# 디스크가 추가되거나 제거되더라도 작동합니다. fstab(5)을 참조하십시오.
#
# <파일 시스템> <마운트 지점>   <유형>  <옵션>       <덤프>  <패스>
proc            /proc           proc    defaults        0       0
# /는 설치 중 /dev/sda1에 있었습니다
UUID=92bceda2-5ae4-4e3a-8748-b14da48fb297 /               ext3    errors=remount-ro,usrjquota=aquota.user,grpjquota=aquota.group,jqfmt=vfsv0 0       1
# 스왑은 설치 중 /dev/sda5에 있었습니다
UUID=e24b3e9e-095c-4b49-af27-6363a4b7d094 none            swap    sw              0       0
/dev/scd0       /media/cdrom0   udf,iso9660 user,noauto     0       0
/dev/fd0        /media/floppy0  auto    rw,user,noauto  0       0

쿼타를 활성화하려면 다음 명령을 실행합니다:

 mount -o remount /

quotacheck -avugm
quotaon -avug

BIND DNS 서버를 설치합니다:

apt-get -y install bind9 dnsutils

vlogger, webalizer 및 awstats를 설치합니다:

 apt-get -y install vlogger webalizer awstats geoip-database

그 후 /etc/cron.d/awstats를 엽니다…

vi /etc/cron.d/awstats

… 그리고 해당 파일의 두 cron 작업을 주석 처리합니다:

#*/10 * * * * www-data [ -x /usr/share/awstats/tools/update.sh ] && /usr/share/awstats/tools/update.sh

# 정적 보고서 생성:
 #10 03 * * * www-data [ -x /usr/share/awstats/tools/buildstatic.sh 

Jailkit을 설치합니다: Jailkit은 SSH 사용자를 chroot하려는 경우에만 필요합니다. 다음과 같이 설치할 수 있습니다 (중요: Jailkit은 ISPConfig 이전에 설치해야 하며, 이후에는 설치할 수 없습니다!):

apt-get -y install build-essential autoconf automake1.9 libtool flex bison

cd /tmp
wget http://olivier.sessink.nl/jailkit/jailkit-2.14.tar.gz
tar xvfz jailkit-2.14.tar.gz
cd jailkit-2.14
./configure
make
make install
cd ..
rm -rf jailkit-2.14*

fail2ban을 설치합니다: 이것은 선택 사항이지만 권장됩니다. ISPConfig 모니터가 로그를 표시하려고 시도하기 때문입니다:

apt-get install fail2ban

PureFTPd 및 Dovecot을 모니터링하도록 fail2ban을 설정하려면 파일 /etc/fail2ban/jail.local을 생성합니다:

vi /etc/fail2ban/jail.local
[pureftpd]
enabled  = true
port     = ftp
filter   = pureftpd
logpath  = /var/log/syslog
maxretry = 3

[dovecot-pop3imap]
enabled = true
filter = dovecot-pop3imap
action = iptables-multiport[name=dovecot-pop3imap, port="pop3,pop3s,imap,imaps", protocol=tcp]
logpath = /var/log/mail.log
maxretry = 5

그런 다음 다음 두 필터 파일을 생성합니다:

vi /etc/fail2ban/filter.d/pureftpd.conf
[Definition]
failregex = .*pure-ftpd: \(.*@\) \[WARNING\] Authentication failed for user.*
ignoreregex =
vi /etc/fail2ban/filter.d/dovecot-pop3imap.conf
[Definition]
failregex = (?: pop3-login|imap-login): .*(?:Authentication failure|Aborted login \(auth failed|Aborted login \(tried to use disabled|Disconnected \(auth failed|Aborted login \(\d+ authentication attempts).*rip=(?P\S*),.*
ignoreregex =

그 후 fail2ban을 재시작합니다:

/etc/init.d/fail2ban restart

SquirrelMail 웹메일 클라이언트를 설치하려면 다음을 실행합니다:

apt-get install squirrelmail

그런 다음 다음 심볼릭 링크를 생성합니다…

ln -s /usr/share/squirrelmail/ /var/www/webmail

… 그리고 SquirrelMail을 구성합니다:

squirrelmail-configure

우리는 SquirrelMail에 Dovecot-IMAP/-POP3를 사용하고 있다고 알려야 합니다:

SquirrelMail 구성 : 읽기: config.php (1.4.0)

주 메뉴 –
1.  조직 환경설정
2.  서버 설정
3.  폴더 기본값
4.  일반 옵션
5.  테마
6.  주소 록
7.  오늘의 메시지 (MOTD)
8.  플러그인
9.  데이터베이스
10.  언어

D.  특정 IMAP 서버에 대한 미리 정의된 설정 설정

C   색상 켜기
S   데이터 저장
Q   종료

명령 >> <– D

SquirrelMail 구성 : 읽기: config.php

우리는 SquirrelMail을 구축하는 동안 일부 서버와 더 잘 작동하는 환경설정을 발견했습니다.  이 옵션을 선택하면 해당 서버에 대한 미리 정의된 설정이 설정됩니다.

올바른지 확인하기 위해 모든 것을 확인해야 합니다.  이것은 모든 것을 변경하지 않습니다.  변경되는 설정은 몇 가지뿐입니다.

귀하의 IMAP 서버를 선택하십시오:
bincimap    = Binc IMAP 서버
courier     = Courier IMAP 서버
cyrus       = Cyrus IMAP 서버
dovecot     = Dovecot Secure IMAP 서버
exchange    = Microsoft Exchange IMAP 서버
hmailserver = hMailServer
macosx      = Mac OS X 메일서버
mercury32   = Mercury/32
uw          = 워싱턴대학교의 IMAP 서버
gmail       = Google 메일 (Gmail) 계정에 대한 IMAP 액세스

quit        = 아무것도 변경하지 않음
명령 >> <– dovecot

SquirrelMail 구성 : 읽기: config.php

우리는 SquirrelMail을 구축하는 동안 일부 서버와 더 잘 작동하는 환경설정을 발견했습니다.  이 옵션을 선택하면 해당 서버에 대한 미리 정의된 설정이 설정됩니다.

올바른지 확인하기 위해 모든 것을 확인해야 합니다.  이것은 모든 것을 변경하지 않습니다.  변경되는 설정은 몇 가지뿐입니다.

귀하의 IMAP 서버를 선택하십시오:
bincimap    = Binc IMAP 서버
courier     = Courier IMAP 서버
cyrus       = Cyrus IMAP 서버
dovecot     = Dovecot Secure IMAP 서버
exchange    = Microsoft Exchange IMAP 서버
hmailserver = hMailServer
macosx      = Mac OS X 메일서버
mercury32   = Mercury/32
uw          = 워싱턴대학교의 IMAP 서버
gmail       = Google 메일 (Gmail) 계정에 대한 IMAP 액세스

quit        = 아무것도 변경하지 않음
명령 >> dovecot

imap_server_type = dovecot
default_folder_prefix = 
trash_folder = 휴지통
sent_folder = 보낸편지
draft_folder = 임시저장
show_prefix_option = false
default_sub_of_inbox = false
show_contain_subfolders_option = false
optional_delimiter = detect
delete_folder = false

계속하려면 Enter를 누르세요… <– ENTER 누르기

SquirrelMail 구성 : 읽기: config.php (1.4.0)

주 메뉴 –
1.  조직 환경설정
2.  서버 설정
3.  폴더 기본값
4.  일반 옵션
5.  테마
6.  주소 록
7.  오늘의 메시지 (MOTD)
8.  플러그인
9.  데이터베이스
10.  언어

D.  특정 IMAP 서버에 대한 미리 정의된 설정 설정

C   색상 켜기
S   데이터 저장
Q   종료

명령 >> <– S

SquirrelMail 구성 : 읽기: config.php (1.4.0)

주 메뉴 –
1.  조직 환경설정
2.  서버 설정
3.  폴더 기본값
4.  일반 옵션
5.  테마
6.  주소 록
7.  오늘의 메시지 (MOTD)
8.  플러그인
9.  데이터베이스
10.  언어

D.  특정 IMAP 서버에 대한 미리 정의된 설정 설정

C   색상 켜기
S   데이터 저장
Q   종료

명령 >> <– Q

다음으로 Squirrelmail에 대한 전역 Alias /webmail을 활성화합니다:

cd /etc/apache2/conf.d/
ln -s ../../squirrelmail/apache.conf squirrelmail.conf
/etc/init.d/apache2 reload

이제 /etc/apache2/conf.d/squirrelmail.conf를 엽니다…

vi /etc/apache2/conf.d/squirrelmail.conf

… 그리고 SquirrelMail에 접근하기 위해 mod_php가 사용되도록 보장하는 컨테이너에 다음 줄을 추가합니다. ISPConfig에서 웹사이트에 대해 선택한 PHP 모드와 관계없이:

[...]
Alias /webmail /usr/share/squirrelmail

   Options FollowSymLinks

   AddType application/x-httpd-php .php
   php_flag magic_quotes_gpc Off
   php_flag track_vars On
   php_admin_flag allow_url_fopen Off
   php_value include_path .
   php_admin_value upload_tmp_dir /var/lib/squirrelmail/tmp
   php_admin_value open_basedir /usr/share/squirrelmail:/etc/squirrelmail:/var/lib/squirrelmail:/etc/hostname:/etc/mailname
   php_flag register_globals off


   DirectoryIndex index.php

 
# configtest에 대한 접근은 정보 유출을 방지하기 위해 기본적으로 제한됩니다.

   order deny,allow
   deny from all
   allow from 127.0.0.1


[...]

디렉토리 /var/lib/squirrelmail/tmp를 생성합니다…

mkdir /var/lib/squirrelmail/tmp

… 그리고 www-data 사용자에게 소유권을 부여합니다:

chown www-data /var/lib/squirrelmail/tmp

Apache를 다시 로드합니다:

/etc/init.d/apache2 reload

이제 /etc/apache2/conf.d/squirrelmail.conf는 SquirrelMail 설치 디렉토리 /usr/share/squirrelmail을 가리키는 /squirrelmail이라는 별칭을 정의합니다.

이제 다음과 같이 웹사이트에서 SquirrelMail에 접근할 수 있습니다:

http://www.example.com/squirrelmail

ISPConfig 제어판 vhost에서 다음과 같이 접근할 수도 있습니다 (이것은 ISPConfig에서 구성할 필요가 없습니다):

http://server1.example.com:8080/squirrelmail

다음으로 Unison을 설치합니다. Unison은 마스터와 슬레이브 간에 /var/www 및 /var/vmail 디렉토리를 동기화하는 데 사용됩니다.

apt-get install unison

이제 첫 번째 서버에 unison 구성 파일을 설치합니다.

서버 1에서:

새 파일 /root/.unison/default.prf를 서버1에 생성합니다…

mkdir /root/.unison
vi /root/.unison/default.prf

… 그리고 다음 내용을 추가합니다:

# 동기화의 루트
root = /var
root = ssh://192.168.0.106//var/
 
# 동기화할 경로
path = www
path = vmail
 
# 무시할 이름 및 경로를 지정하는 일부 정규 표현식
#ignore = Path stats    ## /var/www/stats 무시
#ignore = Path stats/*  ## /var/www/stats/* 무시
#ignore = Path */stats  ## /var/www/somedir/stats 무시, 그러나 /var/www/a/b/c/stats는 무시하지 않음
#ignore = Name *stats   ## "stats"로 끝나는 모든 파일/디렉토리 무시
#ignore = Name stats*   ## "stats"로 시작하는 모든 파일/디렉토리 무시
#ignore = Name *.tmp    ## .tmp 확장자를 가진 모든 파일 무시
   
#          true로 설정되면 이 플래그는 사용자 인터페이스가
#          비충돌 변경 사항에 대한 확인을 건너뛰도록 합니다. (더 정확하게는,
#          사용자 인터페이스가 한 항목에 대한 전파 방향을 설정한 후 다음으로 이동할 때
#          비충돌 항목을 건너뛰고 다음 충돌로 직접 이동합니다.)
auto=true
   
#          true로 설정되면 사용자 인터페이스가 전혀 질문하지 않습니다.
#          비충돌 변경 사항이 전파되고; 충돌은 건너뜁니다.
batch=true
   
#          !true로 설정되면 Unison은 전체 복제본이 삭제된 것처럼 보일 경우
#          변경 사항을 전파하기 전에 추가 확인을 요청합니다. 배치 플래그도 설정된 경우
#          동기화가 중단됩니다. 경로 기본 설정이 사용될 때
#          최상위 경로에 대해서도 동일한 확인이 요청됩니다. (현재 이 플래그는
#          텍스트 사용자 인터페이스에만 영향을 미칩니다.) 마운트 포인트 기본 설정도 참조하십시오.
confirmbigdel=true
   
#          이 기본 설정이 true로 설정되면 Unison은
#          업데이트를 위해 복제본을 스캔할 때 파일의 수정 시간과 길이를
#          '의사 inode 번호'로 사용합니다. Windows에서는 이로 인해
#          Unison이 업데이트를 전파하지 못할 수 있습니다.
#          그러나 Unison은 항상 변경 사항을 전파하기 직전에 안전한
#          업데이트 확인을 수행하므로, 업데이트를 간과할 가능성이 있는 경우
#          이 스위치를 사용하는 것이 합리적입니다. 기본값은 auto이며,
#          Unison이 Unix 복제본에서 빠른 확인을 사용하고(안전한 경우)
#          Windows 복제본에서 느린 확인을 사용하도록 합니다. 이전 호환성을 위해
#          yes, no 및 default는 true, false 및 auto 대신 사용할 수 있습니다.
#          "빠른 확인" 섹션을 참조하십시오.
fastcheck=true

#          이 플래그가 true로 설정되면 파일의 그룹 속성이
#          동기화됩니다. 그룹 이름 또는 그룹 식별자가 동기화되는지는
#          preference numerids에 따라 다릅니다.
group=true
   
#          이 플래그가 true로 설정되면 파일의 소유자 속성이
#          동기화됩니다. 소유자 이름 또는 소유자 식별자가 동기화되는지는
#          preference extttnumerids에 따라 다릅니다.
owner=true
   
#          preference -prefer root를 포함하면 Unison은 항상
#          충돌을 root에 유리하게 해결하도록 합니다. (root의 구문은
#          root 기본 설정과 동일하며, 더 특별한 값인 newer 및 older가 포함됩니다.)
#          이 기본 설정은 preferpartial 기본 설정에 의해 무시됩니다.
#          이 기본 설정은 자신이 무엇을 하고 있는지 확실한 경우에만 사용해야 합니다!
prefer=newer
   
#          이 기본 설정이 true로 설정되면 텍스트 사용자 인터페이스가
#          오류가 발생한 경우를 제외하고는 아무것도 인쇄하지 않습니다.
#          silent를 true로 설정하면 자동으로 batch 기본 설정이 true로 설정됩니다.
silent=true
   
#          이 플래그가 true로 설정되면 파일 수정 시간(디렉토리 modtimes는 제외됨)이
#          전파됩니다.
times=true

우리는 동기화를 자동화하고자 하므로 서버1.example.tld에서 이를 위한 cron 작업을 생성합니다:

crontab -e
*/5 * * * * /usr/bin/unison &> /dev/null
Share: X/Twitter LinkedIn

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

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