서버 설정 · 8 min read · Nov 29, 2025

완벽한 서버 - Ubuntu 16.10 (Yakkety Yak)와 Apache, PHP, MySQL, PureFTPD, BIND, Postfix, Dovecot 및 ISPConfig 3.1 - 페이지 2

8. Apache, PHP, phpMyAdmin, FCGI, SuExec, Pear 및 mcrypt 설치하기

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

apt-get -y install apache2 apache2-doc apache2-utils libapache2-mod-php php7.0 php7.0-common php7.0-gd php7.0-mysql php7.0-imap phpmyadmin php7.0-cli php7.0-cgi libapache2-mod-fcgid apache2-suexec-pristine php-pear php7.0-mcrypt mcrypt imagemagick libruby libapache2-mod-python php7.0-curl php7.0-intl php7.0-pspell php7.0-recode php7.0-sqlite3 php7.0-tidy php7.0-xmlrpc php7.0-xsl memcached php-memcache php-imagick php-gettext php7.0-zip php7.0-mbstring

다음 질문이 표시됩니다:

Web server to reconfigure automatically: <-- apache2   
Configure database for phpmyadmin with dbconfig-common? <-- Yes  
MySQL application password for phpmyadmin: <-- Press enter  

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

a2enmod suexec rewrite ssl actions include cgi
a2enmod dav_fs dav auth_digest headers

서버가 HTTPOXY 취약점을 통해 공격받지 않도록 하기 위해, Apache에서 HTTP_PROXY 헤더를 전역적으로 비활성화하겠습니다.

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

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


    RequestHeader unset Proxy early

다음 명령을 실행하여 구성 파일을 활성화합니다:

a2enconf httpoxy

그 후 Apache를 재시작합니다:

service apache2 restart

ISPConfig를 통해 생성된 웹사이트에서 .rb 확장자를 가진 Ruby 파일을 호스팅하려면, /etc/mime.types에서 application/x-ruby rb 줄을 주석 처리해야 합니다:

nano /etc/mime.types
[...]
#application/x-ruby                             rb
[...]

(이는 .rb 파일에만 필요하며, .rbx 확장자를 가진 Ruby 파일은 기본적으로 작동합니다.)

그 후 Apache를 재시작합니다:

service apache2 restart

8.1 PHP Opcode 캐시 (선택 사항)

Opcache는 PHP 중간 코드를 캐시하고 최적화하기 위한 무료 PHP opcode 캐셔입니다. APCu는 많은 CMS 캐싱 시스템에서 사용되는 Opcache에 대한 APC 호환 기능을 제공하는 호환 모듈입니다. PHP 페이지 속도를 높이기 위해 이러한 PHP 확장을 설치하는 것이 좋습니다.

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

apt-get -y install php7.0-opcache php-apcu

이제 Apache를 재시작합니다:

service apache2 restart

8.2 PHP-FPM

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

apt-get -y install libapache2-mod-fastcgi php7.0-fpm

모듈을 활성화하고 Apache를 재시작해야 합니다:

a2enmod actions fastcgi alias   
service apache2 restart

8.3 추가 PHP 버전

하나의 서버에서 여러 PHP 버전을 가질 수 있으며(ISPConfig를 통해 선택 가능), FastCGI 및 PHP-FPM을 통해 실행할 수 있습니다. 추가 PHP 버전(PHP-FPM 및 FastCGI)을 빌드하는 방법과 ISPConfig을 구성하는 방법에 대한 자세한 내용은 이 튜토리얼을 확인하십시오: https://www.howtoforge.com/tutorial/how-to-install-php-5-6-on-ubuntu-16-04/ (Ubuntu 16.10에서도 작동합니다).

10.1 HHVM (HipHop Virtual Machine) 설치 (선택 사항)

Ubuntu 16.10에 사용할 수 있는 HHVM 패키지가 없습니다. HHVM이 필요하다면, 이 튜토리얼과 함께 Ubuntu 16.04 LTS를 운영 체제로 사용하십시오: https://www.howtoforge.com/tutorial/perfect-server-ubuntu-16-04-with-apache-php-myqsl-pureftpd-bind-postfix-doveot-and-ispconfig/

9. Let’s Encrypt 설치하기

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

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

apt-get -y install certbot

10. Mailman 설치하기

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

apt-get install mailman

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

지원할 언어: <– en (영어)
누락된 사이트 목록 <– 확인

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

newlist mailman

root@server1:~# newlist mailman
리스트를 운영하는 사람의 이메일을 입력하십시오: <– 관리자 이메일 주소, 예: [email protected]
초기 mailman 비밀번호: <– mailman 리스트의 관리자 비밀번호
메일링 리스트 생성을 완료하려면, 다음 줄을 추가하여 /etc/aliases(또는 동등한) 파일을 수정해야 하며, newaliases 프로그램을 실행해야 할 수 있습니다:

mailman 메일링 리스트

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”

메일맨 소유자에게 알리려면 Enter를 누르십시오… <– ENTER

root@server1:~#

그 후 /etc/aliases를 엽니다…

nano /etc/aliases

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

[...]
## mailman 메일링 리스트
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-available/mailman.conf

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

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

그 후 Apache를 재시작합니다:

service apache2 restart

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

service mailman start

11. PureFTPd 및 Quota 설치하기

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

apt-get -y 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

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

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: 정적 파일 시스템 정보.  
#  
# 'blkid'를 사용하여 장치의 보편적으로 고유한 식별자를 인쇄합니다; 이는 UUID=와 함께 사용하여 장치를 명명하는 더 강력한 방법이 될 수 있습니다.  
# 디스크가 추가되거나 제거되더라도 작동합니다. fstab(5)을 참조하십시오.  
#  
# <파일 시스템> <마운트 지점> <유형> <옵션> <덤프> <패스>  
/dev/mapper/server1--vg-root / ext4 errors=remount-ro,usrjquota=quota.user,grpjquota=quota.group,jqfmt=vfsv0 0 1  
# /boot는 설치 중 /dev/sda1에 있었습니다.  
UUID=39762f15-3a49-4982-add3-139d5040b48a /boot ext2 defaults 0 2  
/dev/mapper/server1--vg-swap_1 none swap sw 0 0  
/dev/fd0 /media/floppy0 auto rw,user,noauto,exec,utf8 0 0

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

mount -o remount /
quotacheck -avugm  
quotaon -avug

다음과 같은 출력이 표시됩니다:

root@server1:/# quotacheck -avugm  
quotacheck: /dev/mapper/server1--vg-root [/] 스캔 완료  
quotacheck: 이전 사용자 쿼타 파일 //quota.user를 찾을 수 없습니다: 그런 파일이나 디렉토리가 없습니다. 사용량이 차감되지 않습니다.  
quotacheck: 이전 그룹 쿼타 파일 //quota.group를 찾을 수 없습니다: 그런 파일이나 디렉토리가 없습니다. 사용량이 차감되지 않습니다.  
quotacheck: 이전 사용자 쿼타 파일 //quota.user를 찾을 수 없습니다: 그런 파일이나 디렉토리가 없습니다. 사용량이 차감되지 않습니다.  
quotacheck: 이전 그룹 쿼타 파일 //quota.group를 찾을 수 없습니다: 그런 파일이나 디렉토리가 없습니다. 사용량이 차감되지 않습니다.  
quotacheck: 12563개의 디렉토리와 89343개의 파일을 확인했습니다.  
quotacheck: 이전 파일을 찾을 수 없습니다.  
quotacheck: 이전 파일을 찾을 수 없습니다.  
root@server1:/opt/metronome# quotaon -avug  
/dev/mapper/server1--vg-root [/]: 그룹 쿼타가 켜졌습니다.  
/dev/mapper/server1--vg-root [/]: 사용자 쿼타가 켜졌습니다.  
root@server1:/#

12. BIND DNS 서버 설치하기

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

apt-get -y install bind9 dnsutils haveged

13. Vlogger, Webalizer 및 AWstats 설치하기

Vlogger, webalizer 및 AWstats는 다음과 같이 설치할 수 있습니다:

apt-get install vlogger webalizer awstats geoip-database libclass-dbi-mysql-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

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

14. Jailkit 설치하기

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

apt-get -y install build-essential autoconf automake1.11 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   
echo 5 > debian/compat

현재 Jailkit의 2.19 버전에는 컴파일을 방해하는 구문 오류가 있습니다. 이를 수정하려면 nano로 debian/changelog 파일을 엽니다:

nano debian/changelog

그리고 5번째 줄에 다음 줄과 빈 줄을 추가합니다:

 -- Olivier   Wed, 18 Nov 2015 20:38:44 +0100

따라서 결과적으로 파일의 첫 부분은 다음과 같이 보입니다(삽입된 줄은 빨간색으로 표시됨):

jailkit (2.19-1) UNRELEASED; urgency=medium
* 어떤 이유로 인해 버그 URL이 소스 코드의 ini 파일 위치에 붙여넣어졌습니다. 수정됨.
-- Olivier  Wed, 18 Nov 2015 20:38:44 +0100
jailkit (2.18-1) UNRELEASED; urgency=medium
* 유지 관리 릴리스, 매우 높은 uid 번호에 대한 uid_t 인쇄 수정  
* jk_init.ini에 대한 사소한 개선  
* jk_chrootsh에서 --login을 강제할 수 있는 가능성 추가
-- Olivier  Wed, 18 Nov 2015 20:38:44 +0100

그런 다음 다음 명령을 실행하여 jailkit 패키지를 빌드합니다:

./debian/rules binary

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

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

15. fail2ban 및 UFW 설치하기

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

apt-get -y 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

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

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