서버 설정 · 7 min read · Oct 29, 2025

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

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

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

apt-get -y install apache2 apache2-doc apache2-utils libapache2-mod-php php7.1 php7.1-common php7.1-gd php7.1-mysql php7.1-imap phpmyadmin php7.1-cli php7.1-cgi libapache2-mod-fcgid apache2-suexec-pristine php-pear php7.1-mcrypt mcrypt imagemagick libruby libapache2-mod-python php7.1-curl php7.1-intl php7.1-pspell php7.1-recode php7.1-sqlite3 php7.1-tidy php7.1-xmlrpc php7.1-xsl memcached php-memcache php-imagick php-gettext php7.1-zip php7.1-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 헤더를 전역적으로 비활성화하겠습니다. nano로 새로운 httpoxy.conf 파일을 생성합니다:

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.1-opcache php-apcu

이제 Apache를 재시작합니다:

service apache2 restart

8.2 PHP-FPM

Apache와 함께 PHP-FPM을 사용하려면 mod_proxy_fcgi Apache 모듈이 필요하며, 이는 기본적으로 설치되어 있으며 단지 활성화하면 됩니다. PHP-FPM을 다음과 같이 설치할 수 있습니다:

apt-get -y install php7.1-fpm

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

a2enmod actions proxy_fcgi alias   
service apache2 restart

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

이번 단계에서는 apt를 사용하여 HHVM을 설치합니다. HHVM은 Facebook에서 개발한 빠른 PHP 엔진입니다.

apt-get -y install hhvm

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 -y 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”

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/에서 리스트의 Mailman 관리 인터페이스에 접근할 수 있으며, 메일링 리스트 사용자에 대한 웹 페이지는 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  
/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: 19755개의 디렉토리와 117639개의 파일을 확인했습니다.  
quotacheck: 이전 파일을 찾을 수 없습니다.  
quotacheck: 이전 파일을 찾을 수 없습니다.  
root@server1:/opt/metronome# quotaon -avug  
/dev/mapper/server1--vg-root [/]: 그룹 쿼터가 켜졌습니다.  
/dev/mapper/server1--vg-root [/]: 사용자 쿼터가 켜졌습니다.

12. BIND DNS 서버 설치하기

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

apt-get -y install bind9 dnsutils haveged

haveged 데몬을 활성화하고 시작합니다:

systemctl enable haveged  
systemctl start haveged

13. Vlogger, Webalizer 및 AWStats 설치하기

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

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

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

nano debian/changelog

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

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

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

jailkit (2.19-1) UNRELEASED; urgency=medium
* somehow a bug URL was pasted into the ini file location in the sourcecode for jk_chrootsh in the 2.18 release. Fixed.
-- Olivier  Wed, 18 Nov 2015 20:38:44 +0100
jailkit (2.18-1) UNRELEASED; urgency=medium
* maintenance release, fix uid_t printing for very high uid numbers  
* minor improvements to jk_init.ini  
* add possibility to force --login in jk_chrootsh
-- 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

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

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