서버 설치 · 7 min read · Oct 28, 2025

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

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

Apache 2.4, PHP 7.2, phpMyAdmin, FCGI, suExec 및 Pear는 다음과 같이 설치할 수 있습니다:

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

다음과 같은 질문을 보게 될 것입니다:

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.2-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.2-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 (영어)
누락된 사이트 목록 <– 확인

Job for mailman.service failed because the control process exited with error code. ‘라는 오류는 지금은 무시할 수 있습니다.

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에서 메일링 리스트 아카이브를 찾을 수 있습니다.

구성을 활성화하려면:

a2enconf mailman

그 후 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:/opt/metronome# quotacheck -avugm  
quotacheck: /dev/mapper/server1--vg-root [/] 스캔 완료  
quotacheck: 이전 사용자 쿼타 파일 //quota.user를 찾을 수 없습니다: 그런 파일이나 디렉터리가 없습니다. 사용량이 차감되지 않습니다.  
quotacheck: 이전 그룹 쿼타 파일 //quota.group를 찾을 수 없습니다: 그런 파일이나 디렉터리가 없습니다. 사용량이 차감되지 않습니다.  
quotacheck: 이전 사용자 쿼타 파일 //quota.user를 찾을 수 없습니다: 그런 파일이나 디렉터리가 없습니다. 사용량이 차감되지 않습니다.  
quotacheck: 이전 그룹 쿼타 파일 //quota.group를 찾을 수 없습니다: 그런 파일이나 디렉터리가 없습니다. 사용량이 차감되지 않습니다.  
quotacheck: 13602 디렉터리와 96597 파일을 확인했습니다  
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

그런 다음 다음 명령을 실행하여 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
[pure-ftpd]
enabled  = true
port     = ftp
filter   = pure-ftpd
logpath  = /var/log/syslog
maxretry = 3

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

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

그 후 fail2ban을 재시작합니다:

service fail2ban restart

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

apt-get install ufw
Share: X/Twitter LinkedIn

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

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