서버 설치 · 9 min read · Jan 25, 2026

완벽한 서버 - Debian 8.4 Jessie (Apache2, BIND, Dovecot, ISPConfig 3.1) - 페이지 2

10 Apache2, PHP, FCGI, suExec, Pear, phpMyAdmin 및 mcrypt 설치

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

apt-get install apache2 apache2.2-common apache2-doc apache2-mpm-prefork apache2-utils libexpat1 ssl-cert libapache2-mod-php5 php5 php5-common 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 libruby libapache2-mod-python php5-curl php5-intl php5-memcache php5-memcached php5-pspell php5-recode php5-sqlite php5-tidy php5-xmlrpc php5-xsl memcached libapache2-mod-passenger

다음 질문이 표시됩니다:

Web server to reconfigure automatically: <- apache2  
 Configure database for phpmyadmin with dbconfig-common? <- yes  
Enter the password of the administrative user? <- yourrootmysqlpassword  
Enter the phpmyadmin application password? <-  Just press enter

그런 다음 다음 명령을 실행하여 Apache 모듈 suexec, rewrite, ssl, actions 및 include를 활성화합니다(웹DAV를 사용하려면 dav, dav_fs 및 auth_digest도 포함):

a2enmod suexec rewrite ssl actions include dav_fs dav auth_digest cgi headers

서버가 HTTPOXY 취약점을 통해 공격받지 않도록 하기 위해, /etc/apache2/conf-available/httpoxy.conf 구성 파일을 추가하여 HTTP_PROXY 헤더를 전역적으로 비활성화합니다.

sudo nano /etc/apache2/conf-available/httpoxy.conf

다음 내용을 파일에 붙여넣습니다:


    RequestHeader unset Proxy early

그리고 다음 명령을 실행하여 모듈을 활성화합니다:

a2enconf httpoxy  
service apache2 restart

10.1 HHVM (HipHop Virtual Machine) 설치

이 단계에서는 공식 Debian 저장소에서 HHVM을 설치합니다. HHVM 저장소를 추가하고 키를 가져옵니다.

sudo apt-key adv --recv-keys --keyserver hkp://keyserver.ubuntu.com:80 0x5a16e7281be7a449  
echo deb http://dl.hhvm.com/debian jessie main | sudo tee /etc/apt/sources.list.d/hhvm.list

패키지 목록을 업데이트합니다:

sudo apt-get update

그리고 HHVM을 설치합니다:

sudo apt-get install hhvm

10.2 SuPHP 설치 (선택 사항, 권장하지 않음)

업데이트된 참고 사항: SuPHP는 더 이상 설치하지 않아야 하며, 11단계로 진행하십시오.

Debian Jessie에서는 SuPHP를 사용할 수 없습니다. ISPConfig에서는 php-fpm 및 php-fcgi와 같은 더 나은 PHP 모드를 사용할 수 있으므로 suphp 모드를 더 이상 사용하지 않아야 합니다. 레거시 이유로 suphp가 정말 필요하다면, 이 장의 단계를 따라 수동으로 컴파일하십시오. 그러나 설치를 권장하지 않습니다.

apt-get install apache2-dev build-essential autoconf automake libtool flex bison debhelper binutils
cd /usr/local/src  
wget http://suphp.org/download/suphp-0.7.2.tar.gz  
tar zxvf suphp-0.7.2.tar.gz  
wget -O suphp.patch https://lists.marsching.com/pipermail/suphp/attachments/20130520/74f3ac02/attachment.patch  
patch -Np1 -d suphp-0.7.2 < suphp.patch  
cd suphp-0.7.2  
autoreconf -if  
./configure --prefix=/usr/ --sysconfdir=/etc/suphp/ --with-apr=/usr/bin/apr-1-config --with-apache-user=www-data --with-setid-mode=owner --with-logfile=/var/log/suphp/suphp.log  
make  
make install  

suphp 구성 디렉토리 및 suphp.conf 파일을 생성합니다:

mkdir /var/log/suphp  
mkdir /etc/suphp  
nano /etc/suphp/suphp.conf
[global]  
;Path to logfile  
logfile=/var/log/suphp/suphp.log  
  
;Loglevel  
loglevel=info  
  
;User Apache is running as  
webserver_user=www-data  
  
;Path all scripts have to be in  
docroot=/var/www  
  
;Path to chroot() to before executing script  
;chroot=/mychroot  
  
; Security options  
allow_file_group_writeable=false  
allow_file_others_writeable=false  
allow_directory_group_writeable=false  
allow_directory_others_writeable=false  
  
;Check wheter script is within DOCUMENT_ROOT  
check_vhost_docroot=true  
  
;Send minor error messages to browser  
errors_to_browser=false  
  
;PATH environment variable  
env_path=/bin:/usr/bin  
  
;Umask to set, specify in octal notation  
umask=0022  
  
; Minimum UID  
min_uid=100  
  
; Minimum GID  
min_gid=100  
  
[handlers]  
;Handler for php-scripts  
x-httpd-suphp="php:/usr/bin/php-cgi"  
  
;Handler for CGI-scripts  
x-suphp-cgi=execute:!self  
umask=0022

그런 다음 Apache에서 suphp 모듈을 로드하는 구성 파일을 추가합니다:

echo "LoadModule suphp_module /usr/lib/apache2/modules/mod_suphp.so" > /etc/apache2/mods-available/suphp.load

그리고 /etc/apache2/mods-available/suphp.conf를 엽니다…

nano /etc/apache2/mods-available/suphp.conf

… 다음 내용을 추가합니다:


        AddType application/x-httpd-suphp .php .php3 .php4 .php5 .phtml
        suPHP_AddHandler application/x-httpd-suphp

    
        suPHP_Engine on
    

    # By default, disable suPHP for debian packaged web applications as files
    # are owned by root and cannot be executed by suPHP because of min_uid.
    
        suPHP_Engine off
    

# # Use a specific php config file (a dir which contains a php.ini file)
#       suPHP_ConfigPath /etc/php5/cgi/suphp/
# # Tells mod_suphp NOT to handle requests with the type .
#       suPHP_RemoveHandler 

Apache에서 suphp 모듈을 활성화합니다:

a2enmod suphp

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

service apache2 restart

11 Let’s Encrypt 설치

ISPConfig 3.1은 무료 SSL 인증 기관인 Let’s Encrypt를 지원합니다. Let’s Encrypt 기능을 사용하면 ISPConfig 내에서 웹사이트에 대한 무료 SSL 인증서를 생성할 수 있습니다.

이제 Let’s Encrypt 지원을 추가하겠습니다.

mkdir /opt/certbot  
cd /opt/certbot  
wget https://dl.eff.org/certbot-auto  
chmod a+x ./certbot-auto

이제 certboot-auto 명령을 실행하여 소프트웨어와 그 종속성을 다운로드하고 설치합니다.

./certbot-auto

명령이 “구성 파일에서 이름을 찾을 수 없습니다”라고 알려주고 계속할 것인지 묻습니다. 여기서 “아니오”를 선택하십시오. 인증서는 ISPConfig에 의해 생성됩니다.

12 PHP-FPM 및 XCache 설치

XCache는 PHP 중간 코드를 캐싱하고 최적화하기 위한 무료 오픈 PHP opcode 캐셔입니다. eAccelerator 및 APC와 같은 다른 PHP opcode 캐셔와 유사합니다. PHP 페이지 속도를 높이기 위해 이러한 것 중 하나를 설치하는 것이 강력히 권장됩니다.

12.1 PHP-FPM (권장)

ISPConfig 3.0.5부터 Apache와 함께 사용할 수 있는 추가 PHP 모드가 있습니다: PHP-FPM.

Apache와 함께 PHP-FPM을 사용하려면 mod_fastcgi Apache 모듈이 필요합니다(이것을 mod_fcgid와 혼동하지 마십시오 - 매우 유사하지만 PHP-FPM을 mod_fcgid와 함께 사용할 수 없습니다). PHP-FPM 및 mod_fastcgi는 다음과 같이 설치할 수 있습니다:

apt-get install libapache2-mod-fastcgi php5-fpm

모듈을 활성화하고 Apache를 재시작하는 것을 잊지 마십시오:

a2enmod actions fastcgi alias  
service apache2 restart

12.2 XCache 설치

XCache는 다음과 같이 설치할 수 있습니다:

apt-get install php5-xcache

이제 Apache를 재시작합니다:

service apache2 restart

13 Mailman 설치

ISPConfig를 사용하면 Mailman 메일링 리스트를 관리(생성/수정/삭제)할 수 있습니다. 이 기능을 사용하려면 다음과 같이 Mailman을 설치하십시오:

apt-get install mailman

최소한 하나의 언어를 선택하십시오. 예:

Languages to support: <-- en (English)  
 Missing site list <-- Ok

Mailman을 시작하기 전에 mailman이라는 첫 번째 메일링 리스트를 생성해야 합니다:

newlist mailman
root@server1:~# newlist mailman  
Enter the email of the person running the list: <-- admin email address, e.g. [email protected]  
Initial mailman password: <-- admin password for the mailman list  
To finish creating your mailing list, you must edit your /etc/aliases (or  
equivalent) file by adding the following lines, and possibly running the  
`newaliases' program:  
   
## mailman mailing list  
mailman:              "|/var/lib/mailman/mail/mailman post mailman"  
mailman-admin:        "|/var/lib/mailman/mail/mailman admin mailman"  
mailman-bounces:      "|/var/lib/mailman/mail/mailman bounces mailman"  
mailman-confirm:      "|/var/lib/mailman/mail/mailman confirm mailman"  
mailman-join:         "|/var/lib/mailman/mail/mailman join mailman"  
mailman-leave:        "|/var/lib/mailman/mail/mailman leave mailman"  
mailman-owner:        "|/var/lib/mailman/mail/mailman owner mailman"  
mailman-request:      "|/var/lib/mailman/mail/mailman request mailman"  
mailman-subscribe:    "|/var/lib/mailman/mail/mailman subscribe mailman"  
mailman-unsubscribe:  "|/var/lib/mailman/mail/mailman unsubscribe mailman"  
   
Hit enter to notify mailman owner... <-- ENTER  
   
root@server1:~#

그런 다음 /etc/aliases를 엽니다…

nano /etc/aliases

… 다음 줄을 추가합니다:

[...]  
## mailman mailing list  
mailman:              "|/var/lib/mailman/mail/mailman post mailman"  
mailman-admin:        "|/var/lib/mailman/mail/mailman admin mailman"  
mailman-bounces:      "|/var/lib/mailman/mail/mailman bounces mailman"  
mailman-confirm:      "|/var/lib/mailman/mail/mailman confirm mailman"  
mailman-join:         "|/var/lib/mailman/mail/mailman join mailman"  
mailman-leave:        "|/var/lib/mailman/mail/mailman leave mailman"  
mailman-owner:        "|/var/lib/mailman/mail/mailman owner mailman"  
mailman-request:      "|/var/lib/mailman/mail/mailman request mailman"  
mailman-subscribe:    "|/var/lib/mailman/mail/mailman subscribe mailman"  
mailman-unsubscribe:  "|/var/lib/mailman/mail/mailman unsubscribe mailman"

실행:

newaliases

그리고 Postfix를 재시작합니다:

service postfix restart

마지막으로 Mailman Apache 구성을 활성화해야 합니다:

ln -s /etc/mailman/apache.conf /etc/apache2/conf-enabled/mailman.conf

이것은 모든 Apache vhosts에 대해 /cgi-bin/mailman/이라는 별칭을 정의합니다. 즉, http://server1.example.com/cgi-bin/mailman/admin/에서 메일링 리스트의 Mailman 관리 인터페이스에 접근할 수 있으며, 메일링 리스트 사용자에 대한 웹 페이지는 http://server1.example.com/cgi-bin/mailman/listinfo/에서 찾을 수 있습니다.

http://server1.example.com/pipermail에서 메일링 리스트 아카이브를 찾을 수 있습니다.

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

service apache2 restart

그런 다음 Mailman 데몬을 시작합니다:

service mailman start

14 PureFTPd 및 Quota 설치

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

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

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

nano /etc/default/pure-ftpd-common

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

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

이제 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
Country Name (2 letter code) [AU]: <-- Enter your Country Name (e.g., "DE").  
State or Province Name (full name) [Some-State]: <-- Enter your State or Province Name.  
Locality Name (eg, city) []: <-- Enter your City.  
Organization Name (eg, company) [Internet Widgits Pty Ltd]: <-- Enter your Organization Name (e.g., the name of your company).  
Organizational Unit Name (eg, section) []: <-- Enter your Organizational Unit Name (e.g. "IT Department").  
Common Name (eg, YOUR name) []: <-- Enter the Fully Qualified Domain Name of the system (e.g., "server1.example.com").  
Email Address []: <-- Enter your Email Address.

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

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

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

service pure-ftpd-mysql restart

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

nano /etc/fstab
# /etc/fstab: static file system information.  
#  
# Use 'blkid' to print the universally unique identifier for a  
# device; this may be used with UUID= as a more robust way to name devices  
# that works even if disks are added and removed. See fstab(5).  
#  
#        
# / was on /dev/sda1 during installation  
UUID=3dc3b58d-97e5-497b-8254-a913fdfc5408 / ext4 errors=remount-ro,usrjquota=quota.user,grpjquota=quota.group,jqfmt=vfsv0 0 1  
# swap was on /dev/sda5 during installation  
UUID=36bf486e-8f76-492d-89af-5a8eb3ce8a02 none swap sw 0 0  
/dev/sr0 /media/cdrom0 udf,iso9660 user,noauto 0 0

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

mount -o remount /
quotacheck -avugm  
quotaon -avug

15 BIND DNS 서버 설치

BIND는 다음과 같이 설치할 수 있습니다:

apt-get install bind9 dnsutils

서버가 가상 머신인 경우 DNSSEC 서명을 위한 더 높은 엔트로피를 얻기 위해 haveged 데몬을 설치하는 것이 강력히 권장됩니다. 비가상 서버에서도 haveged를 설치할 수 있으며, 해가 되지 않습니다.

apt-get install haveged

이 주제에 대한 설명은 여기에서 찾을 수 있습니다.

16 Webalizer 및 AWStats 설치

Webalizer 및 AWStats는 다음과 같이 설치할 수 있습니다:

apt-get install webalizer awstats geoip-database libclass-dbi-mysql-perl libtimedate-perl

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

nano /etc/cron.d/awstats

… 그리고 해당 파일의 모든 내용을 주석 처리합니다:

#MAILTO=root

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

# Generate static reports:
#10 03 * * * www-data [ -x /usr/share/awstats/tools/buildstatic.sh ] && /usr/share/awstats/tools/buildstatic.sh

17 Jailkit 설치

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

apt-get install build-essential autoconf automake libtool flex bison debhelper binutils
cd /tmp  
wget http://olivier.sessink.nl/jailkit/jailkit-2.19.tar.gz  
tar xvfz jailkit-2.19.tar.gz  
cd jailkit-2.19  
./debian/rules binary

이제 Jailkit.deb 패키지를 다음과 같이 설치할 수 있습니다:

cd ..  
dpkg -i jailkit_2.19-1_*.deb  
rm -rf jailkit-2.19*

18 fail2ban 및 UFW 방화벽 설치

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

apt-get install fail2ban

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

nano /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

[postfix-sasl]
enabled  = true
port     = smtp
filter   = postfix-sasl
logpath  = /var/log/mail.log
maxretry = 3

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

nano /etc/fail2ban/filter.d/pureftpd.conf
[Definition]
failregex = .*pure-ftpd: \(.*@\) \[WARNING\] Authentication failed for user.*
ignoreregex =
nano /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 =

그런 다음 postfix-sasl 필터 파일에 ignoreregex 줄을 추가하려면 다음을 실행합니다:

echo "ignoreregex =" >> /etc/fail2ban/filter.d/postfix-sasl.conf

그런 다음 fail2ban을 재시작합니다:

service fail2ban restart

UFW 방화벽을 설치하려면 다음 apt 명령을 실행합니다:

apt-get install ufw
Share: X/Twitter LinkedIn

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

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