서버 설정 · 19 min read · Sep 11, 2025

완벽한 서버 - Apache, PHP, MariaDB, PureFTPD, BIND, Postfix, Dovecot 및 ISPConfig 3.2가 포함된 Ubuntu 20.04

이 튜토리얼은 Apache 2.4, Postfix, Dovecot, Bind 및 PureFTPD가 포함된 Ubuntu 20.04 (Focal Fossa) 웹 호스팅 서버의 설치를 보여주며, ISPConfig 3.2 설치를 준비합니다. 결과 시스템은 웹, 메일, 메일링 리스트, DNS 및 FTP 서버를 제공합니다.

ISPConfig는 웹 브라우저를 통해 다음 서비스를 구성할 수 있는 웹 호스팅 제어판입니다: Apache 또는 Nginx 웹 서버, Postfix 메일 서버, Courier 또는 Dovecot IMAP/POP3 서버, MySQL 대체로서의 MariaDB, BIND 또는 MyDNS 네임서버, PureFTPd, SpamAssassin, ClamAV 등. 이 설정은 Apache(대신 Nginx), BIND(대신 MyDNS) 및 Dovecot(대신 Courier)의 설치를 포함합니다.

ISPConfig를 설치하는 방법은 두 가지가 있습니다. 아래의 수동 설치 지침을 사용할 수 있으며, 또는 ISPConfig 자동 설치 프로그램을 사용하여 몇 분 안에 ISPConfig를 자동으로 설치할 수 있습니다. 자동 설치 프로그램을 사용하는 것을 권장하며, 이는 Ubuntu 22.04도 지원합니다. ISPConfig 자동 설치에 대한 지침을 참조하여 ISPConfig를 자동으로 설치하는 방법을 확인하세요.

1. 사전 주의사항

이 튜토리얼에서는 호스트 이름 server1.example.com과 IP 주소 192.168.0.100 및 게이트웨이 192.168.0.1을 사용합니다. 이러한 설정은 여러분의 환경에 따라 다를 수 있으므로 적절한 곳에서 교체해야 합니다. 진행하기 전에 튜토리얼에 설명된 대로 Ubuntu 20.04의 기본 최소 설치가 필요합니다.

이 튜토리얼의 명령은 루트 권한으로 실행해야 합니다. 각 명령 앞에 sudo를 추가하지 않으려면 다음 명령을 실행하여 루트 사용자로 전환해야 합니다:

sudo -s

진행하기 전에 이 명령을 실행하세요.

2. /etc/apt/sources.list 편집 및 Linux 설치 업데이트

/etc/apt/sources.list를 편집합니다. 파일에서 설치 CD를 주석 처리하거나 제거하고 universe 및 multiverse 리포지토리가 활성화되어 있는지 확인합니다. 이후에는 다음과 같이 보여야 합니다:

nano /etc/apt/sources.list
# See http://help.ubuntu.com/community/UpgradeNotes for how to upgrade to
# newer versions of the distribution.
deb http://de.archive.ubuntu.com/ubuntu focal main restricted
# deb-src http://de.archive.ubuntu.com/ubuntu focal main restricted

## Major bug fix updates produced after the final release of the
## distribution.
deb http://de.archive.ubuntu.com/ubuntu focal-updates main restricted
# deb-src http://de.archive.ubuntu.com/ubuntu focal-updates main restricted

## N.B. software from this repository is ENTIRELY UNSUPPORTED by the Ubuntu
## team. Also, please note that software in universe WILL NOT receive any
## review or updates from the Ubuntu security team.
deb http://de.archive.ubuntu.com/ubuntu focal universe
# deb-src http://de.archive.ubuntu.com/ubuntu focal universe
deb http://de.archive.ubuntu.com/ubuntu focal-updates universe
# deb-src http://de.archive.ubuntu.com/ubuntu focal-updates universe

## N.B. software from this repository is ENTIRELY UNSUPPORTED by the Ubuntu
## team, and may not be under a free licence. Please satisfy yourself as to
## your rights to use the software. Also, please note that software in
## multiverse WILL NOT receive any review or updates from the Ubuntu
## security team.
deb http://de.archive.ubuntu.com/ubuntu focal multiverse
# deb-src http://de.archive.ubuntu.com/ubuntu focal multiverse
deb http://de.archive.ubuntu.com/ubuntu focal-updates multiverse
# deb-src http://de.archive.ubuntu.com/ubuntu focal-updates multiverse

## N.B. software from this repository may not have been tested as
## extensively as that contained in the main release, although it includes
## newer versions of some applications which may provide useful features.
## Also, please note that software in backports WILL NOT receive any review
## or updates from the Ubuntu security team.
deb http://de.archive.ubuntu.com/ubuntu focal-backports main restricted universe multiverse
# deb-src http://de.archive.ubuntu.com/ubuntu focal-backports main restricted universe multiverse

## Uncomment the following two lines to add software from Canonical's
## 'partner' repository.
## This software is not part of Ubuntu, but is offered by Canonical and the
## respective vendors as a service to Ubuntu users.
# deb http://archive.canonical.com/ubuntu focal partner
# deb-src http://archive.canonical.com/ubuntu focal partner

deb http://de.archive.ubuntu.com/ubuntu focal-security main restricted
# deb-src http://de.archive.ubuntu.com/ubuntu focal-security main restricted
deb http://de.archive.ubuntu.com/ubuntu focal-security universe
# deb-src http://de.archive.ubuntu.com/ubuntu focal-security universe
deb http://de.archive.ubuntu.com/ubuntu focal-security multiverse
# deb-src http://de.archive.ubuntu.com/ubuntu focal-security multiverse

그런 다음 다음 명령을 실행하여

apt-get update

apt 패키지 데이터베이스를 업데이트하고

apt-get upgrade

최신 업데이트를 설치합니다(있는 경우). 업데이트의 일환으로 새로운 커널이 설치되는 경우, 이후 시스템을 재부팅해야 합니다:

reboot

3. 기본 셸 변경

/bin/sh는 /bin/dash에 대한 심볼릭 링크이지만, 우리는 /bin/dash가 아닌 /bin/bash가 필요합니다. 따라서 다음과 같이 진행합니다:

dpkg-reconfigure dash

Use dash as the default system shell (/bin/sh)? <– 아니요

이 작업을 수행하지 않으면 ISPConfig 설치가 실패합니다.

4. AppArmor 비활성화

AppArmor는 확장된 보안을 제공해야 하는 보안 확장(SELinux와 유사)입니다. 제 생각에는 보안 시스템을 구성하는 데 필요하지 않으며, 일반적으로 장점보다 더 많은 문제를 일으킵니다(어떤 서비스가 예상대로 작동하지 않아 일주일 동안 문제를 해결한 후, 모든 것이 정상이라는 것을 알게 되고, 단지 AppArmor가 문제를 일으켰다는 것을 알게 되는 경우를 생각해 보세요). 따라서 이를 비활성화합니다(나중에 ISPConfig를 설치하려면 반드시 필요합니다).

다음과 같이 비활성화할 수 있습니다:

service apparmor stop  
update-rc.d -f apparmor remove   
apt-get remove apparmor apparmor-utils

5. 시스템 시계 동기화

물리 서버를 실행할 때 NTP(network time protocol) 서버와 시스템 시계를 동기화하는 것이 좋습니다. 가상 서버를 실행하는 경우 이 단계를 건너뛰어야 합니다. 다음 명령을 실행하세요:

apt-get -y install ntp

그러면 시스템 시간이 항상 동기화됩니다.

6. Postfix, Dovecot, MariaDB, rkhunter 및 binutils 설치

Postfix를 설치하기 위해서는 sendmail이 설치되어 있지 않고 실행되고 있지 않아야 합니다. sendmail을 중지하고 제거하려면 다음 명령을 실행합니다:

service sendmail stop; update-rc.d -f sendmail remove

오류 메시지:

Failed to stop sendmail.service: Unit sendmail.service not loaded.

이는 괜찮습니다. sendmail이 설치되지 않았다는 의미이므로 제거할 것이 없었습니다.

이제 Postfix, Dovecot, MariaDB( MySQL 대체로서), rkhunter 및 binutils를 단일 명령으로 설치할 수 있습니다:

apt-get -y install postfix postfix-mysql postfix-doc mariadb-client mariadb-server openssl getmail4 rkhunter binutils dovecot-imapd dovecot-pop3d dovecot-mysql dovecot-sieve sudo patch

다음 질문이 표시됩니다:

General type of mail configuration: <-- Internet Site  
System mail name: <-- server1.example.com

시스템 메일 이름으로는 server1.example.com 또는 server1.yourdomain.com과 같은 서브도메인을 사용하는 것이 중요하며, 나중에 이메일 도메인으로 사용할 도메인(예: yourdomain.tld)을 사용하지 않아야 합니다.

다음으로 Postfix에서 TLS/SSL 및 제출 포트를 엽니다:

nano /etc/postfix/master.cf

제출 및 smtps 섹션의 주석을 제거하고 다음과 같이 -o smtpd_client_restrictions=permit_sasl_authenticated,reject를 두 섹션 모두에 추가하고 그 이후의 모든 것은 주석 처리된 상태로 둡니다:

[...]
submission inet n       -       y       -       -       smtpd
  -o syslog_name=postfix/submission
  -o smtpd_tls_security_level=encrypt
  -o smtpd_sasl_auth_enable=yes  
  -o smtpd_tls_auth_only=yes
  -o smtpd_client_restrictions=permit_sasl_authenticated,reject
#  -o smtpd_reject_unlisted_recipient=no
#  -o smtpd_client_restrictions=$mua_client_restrictions
#  -o smtpd_helo_restrictions=$mua_helo_restrictions
#  -o smtpd_sender_restrictions=$mua_sender_restrictions
#  -o smtpd_recipient_restrictions=permit_sasl_authenticated,reject
#  -o milter_macro_daemon_name=ORIGINATING
smtps     inet  n       -       y       -       -       smtpd
  -o syslog_name=postfix/smtps
  -o smtpd_tls_wrappermode=yes
  -o smtpd_sasl_auth_enable=yes
  -o smtpd_client_restrictions=permit_sasl_authenticated,reject
#  -o smtpd_reject_unlisted_recipient=no
#  -o smtpd_client_restrictions=$mua_client_restrictions
#  -o smtpd_helo_restrictions=$mua_helo_restrictions
#  -o smtpd_sender_restrictions=$mua_sender_restrictions
#  -o smtpd_recipient_restrictions=permit_sasl_authenticated,reject
#  -o milter_macro_daemon_name=ORIGINATING
[...]

참고: -o …. 앞의 공백은 중요합니다!

그 후 Postfix를 재시작합니다:

service postfix restart

MySQL이 localhost뿐만 아니라 모든 인터페이스에서 수신 대기하도록 하려면 /etc/mysql/mariadb.conf.d/50-server.cnf를 편집하고 bind-address = 127.0.0.1 줄의 주석을 제거합니다:

nano /etc/mysql/mariadb.conf.d/50-server.cnf
[...]
# Instead of skip-networking the default is now to listen only on
# localhost which is more compatible and is not less secure.
#bind-address           = 127.0.0.1  
[...]

이제 MariaDB에서 루트 비밀번호를 설정합니다. 다음 명령을 실행하세요:

mysql_secure_installation

다음 질문이 표시됩니다:

Enter current password for root (enter for none): <-- press enter  
Set root password? [Y/n] <-- y  
New password: <-- Enter the new MariaDB root password here  
Re-enter new password: <-- Repeat the password  
Remove anonymous users? [Y/n] <-- y  
Disallow root login remotely? [Y/n] <-- y  
Reload privilege tables now? [Y/n] <-- y

MariaDB에서 비밀번호 인증 방법을 기본으로 설정하여 나중에 PHPMyAdmin을 통해 루트 사용자로 연결할 수 있도록 합니다:

echo "update mysql.user set plugin = 'mysql_native_password' where user='root';" | mysql -u root

파일 /etc/mysql/debian.cnf를 편집하고 MYSQL / MariaDB 루트 비밀번호를 해당 행에 두 번 설정합니다:

nano /etc/mysql/debian.cnf

추가해야 하는 MySQL 루트 비밀번호는 빨간색으로 표시됩니다. 이 예제에서는 비밀번호가 “howtoforge”입니다. mysql_secure_installation 명령으로 설정한 MySQL 루트 사용자 비밀번호로 “howtoforge”를 교체하세요.

# Automatically generated for Debian scripts. DO NOT TOUCH!  
[client]  
host = localhost  
user = root  
password = howtoforge  
socket = /var/run/mysqld/mysqld.sock  
[mysql_upgrade]  
host = localhost  
user = root  
password = howtoforge  
socket = /var/run/mysqld/mysqld.sock  
basedir = /usr

편집기에서 /etc/security/limits.conf 파일을 엽니다:

nano /etc/security/limits.conf

그리고 파일 끝에 다음 줄을 추가합니다.

mysql soft nofile 65535  
mysql hard nofile 65535

다음으로 mkdir 명령으로 새 디렉토리 /etc/systemd/system/mysql.service.d/를 만듭니다.

mkdir /etc/systemd/system/mysql.service.d/

그리고 그 안에 새 파일을 추가합니다:

nano /etc/systemd/system/mysql.service.d/limits.conf

다음 줄을 해당 파일에 붙여넣습니다:

[Service]  
LimitNOFILE=infinity

파일을 저장하고 nano 편집기를 닫습니다.

그런 다음 systemd를 다시 로드하고 MariaDB를 재시작합니다:

systemctl daemon-reload  
service mariadb restart

이제 네트워킹이 활성화되어 있는지 확인합니다. 다음 명령을 실행하세요:

netstat -tap | grep mysql

출력은 다음과 같아야 합니다:

root@server1:~# netstat -tap | grep mysql  
tcp6       0      0 [::]:mysql              [::]:*                  LISTEN      51836/mysqld  
root@server1:~#

7. Amavisd-new, SpamAssassin 및 Clamav 설치

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

apt-get -y install amavisd-new spamassassin clamav clamav-daemon 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 postgrey

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

service spamassassin stop  
update-rc.d -f spamassassin remove

ClamAV를 시작하려면:

freshclam  
service clamav-daemon start

freshclam의 첫 번째 실행에서 다음 오류는 무시할 수 있습니다.

ERROR: /var/log/clamav/freshclam.log is locked by another process  
ERROR: Problem with internal logger (UpdateLogFile = /var/log/clamav/freshclam.log).

8. Apache, PHP, phpMyAdmin, FCGI, SuExec, Pear 설치

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

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

다음 질문이 표시됩니다:

Web server to reconfigure automatically: <-- apache2

Apache2에서 PHPMyAdmin 활성화


Configure database for phpmyadmin with dbconfig-common? <-- Yes

MySQL application password for phpmyadmin: <-- Press enter  

MySQL 애플리케이션 비밀번호

그런 다음 다음 명령을 실행하여 Apache 모듈 suexec, rewrite, ssl, actions 및 include(plus dav, dav_fs, 및 auth_digest를 사용하려는 경우)를 활성화합니다:

a2enmod suexec rewrite ssl actions include cgi alias proxy_fcgi
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

9. Let’s Encrypt 설치

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

이제 Let’s Encrypt 지원을 추가합니다.

apt-get install certbot

10. Mailman 설치

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

apt-get -y install mailman

최소한 하나의 언어를 선택합니다. 예:

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

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

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-available/mailman.conf ``` 이것은 모든 Apache vhost에 대해 /cgi-bin/mailman/이라는 별칭을 정의하며, 이는 http:///cgi-bin/mailman/admin/에서 메일링 리스트의 Mailman 관리 인터페이스에 접근할 수 있음을 의미합니다. 메일링 리스트 사용자에 대한 웹 페이지는 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 ``` Country Name (2 letter code) [AU]: <-- 귀하의 국가 이름을 입력하세요(예: "DE"). State or Province Name (full name) [Some-State]: <-- 귀하의 주 또는 지방 이름을 입력하세요. Locality Name (eg, city) []: <-- 귀하의 도시를 입력하세요. Organization Name (eg, company) [Internet Widgits Pty Ltd]: <-- 귀하의 조직 이름을 입력하세요(예: 귀하의 회사 이름). Organizational Unit Name (eg, section) []: <-- 귀하의 조직 단위 이름을 입력하세요(예: "IT 부서"). Common Name (eg, YOUR name) []: <-- 시스템의 완전한 도메인 이름을 입력하세요(예: "server1.example.com"). 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). # # /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:/tmp# quotacheck -avugm quotacheck: Scanning /dev/mapper/server1--vg-root [/] done quotacheck: Cannot stat old user quota file //quota.user: No such file or directory. Usage will not be subtracted. quotacheck: Cannot stat old group quota file //quota.group: No such file or directory. Usage will not be subtracted. quotacheck: Cannot stat old user quota file //quota.user: No such file or directory. Usage will not be subtracted. quotacheck: Cannot stat old group quota file //quota.group: No such file or directory. Usage will not be subtracted. quotacheck: Checked 13602 directories and 96597 files quotacheck: Old file not found. quotacheck: Old file not found. root@server1:/tmp# quotaon -avug /dev/mapper/server1--vg-root [/]: group quotas turned on /dev/mapper/server1--vg-root [/]: user quotas turned on ``` ## 12. BIND DNS 서버 설치 BIND는 다음과 같이 설치할 수 있습니다: ``` apt-get -y install bind9 dnsutils haveged ``` haveged 데몬을 활성화하고 시작합니다: ``` systemctl enable haveged systemctl start haveged ``` ## 13. Vlogger, Webalizer, AWStats 및 GoAccess 설치 Vlogger, Webalizer 및 AWStats는 다음과 같이 설치할 수 있습니다: ``` apt-get -y install vlogger webalizer awstats geoip-database libclass-dbi-mysql-perl ``` GoAccess의 최신 버전을 GoAccess 리포지토리에서 직접 설치합니다: ``` echo "deb https://deb.goaccess.io/ $(lsb_release -cs) main" | sudo tee -a /etc/apt/sources.list.d/goaccess.list wget -O - https://deb.goaccess.io/gnugpg.key | sudo apt-key --keyring /etc/apt/trusted.gpg.d/goaccess.gpg add - sudo apt-get update sudo apt-get install goaccess ``` 그 후 /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 ``` ## 14. Jailkit 설치 Jailkit는 ISPConfig에서 셸 사용자와 cronjob을 감옥에 가두는 데 사용됩니다. apt로 jailkit을 설치합니다: ``` apt-get -y install jailkit ``` ## 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 ``` ## 16. Roundcube 웹메일 설치 Roundcube 웹메일을 설치하려면 다음 명령을 실행합니다: ``` apt-get -y install roundcube roundcube-core roundcube-mysql roundcube-plugins roundcube-plugins-extra javascript-common libjs-jquery-mousewheel php-net-sieve tinymce ``` 설치 프로그램이 다음 질문을 할 수 있습니다: ``` Configure database for roundcube with dbconfig-common? <-- Yes MySQL application password for roundcube: <-- Press enter ``` 이 질문이 표시되지 않거나 ucf 스크립트에 대한 경고가 표시되더라도 걱정하지 마세요. 괜찮습니다. 쉘에서 표시되는 ucf 경고는 무시할 수 있으며, 설치에 부정적인 영향을 미치지 않습니다. 그런 다음 RoundCube apache 구성 파일을 편집합니다. ``` nano /etc/apache2/conf-enabled/roundcube.conf ``` 그리고 Alias 줄 앞의 #을 제거한 다음 /webmail에 대한 두 번째 Alias 줄을 추가하고 "" 줄 바로 뒤에 "AddType application/x-httpd-php .php" 줄을 추가합니다: ``` # Those aliases do not work properly with several hosts on your apache server # Uncomment them to use it or adapt them to your configuration Alias /roundcube /var/lib/roundcube Alias /webmail /var/lib/roundcube [...] AddType application/x-httpd-php .php [...] ``` 그리고 Apache를 재시작합니다: ``` service apache2 restart ``` 그런 다음 RoundCube config.inc.php 구성 파일을 편집합니다: ``` nano /etc/roundcube/config.inc.php ``` 그리고 기본 호스트를 localhost로 변경합니다: ``` $config['default_host'] = 'localhost'; ``` SMTP 서버를 다음으로 변경합니다: ``` $config['smtp_server'] = 'localhost'; ``` 그리고 ``` $config['smtp_port']  = 25; ``` 이렇게 하면 Roundcube가 로그인 양식에 서버 이름 입력 필드를 표시하지 않도록 방지합니다. ## 17. ISPConfig 3.2 설치 여기서는 ISPConfig 3.2 안정 빌드를 사용할 것입니다. ``` cd /tmp wget -O ispconfig.tar.gz https://www.ispconfig.org/downloads/ISPConfig-3-stable.tar.gz tar xfz ispconfig.tar.gz cd ispconfig3*/install/ ``` 다음 단계는 다음을 실행하는 것입니다: ``` php -q install.php ``` 이렇게 하면 ISPConfig 3 설치 프로그램이 시작됩니다. 설치 프로그램이 Postfix, Dovecot 등과 같은 모든 서비스를 구성합니다. ``` # php -q install.php ``` ``` -------------------------------------------------------------------------------- _____ ___________ _____ __ _ ____ |_ _/ ___| ___ \ / __ \ / _(_) /__ \ | | \–.| |/ / | / \/ __ __ | | __ / /
| | `–. \ __/ | | /
\| ‘ \| | |/ ` | | |
| |\// / | | \/\ () | | | | | | | (| | \ \
\
/_/\| __/_/|| ||| |\, | __/ / |
|_/


초기 구성

운영 체제: Ubuntu 20.04.1 LTS (Focal Fossa)

다음은 기본 구성을 위한 몇 가지 질문이 있을 것입니다.
기본값은 [대괄호]에 있으며 로 수락할 수 있습니다.
“quit”(따옴표 없이)를 입력하여 설치 프로그램을 중지할 수 있습니다.

언어 선택 (en,de) [en]: <– Enter 키를 누르세요

설치 모드 (standard,expert) [standard]: <– Enter 키를 누르세요

서버의 완전한 호스트 이름 (FQDN), 예: server1.domain.tld [server1.canomi.com]: <– Enter 키를 누르세요

MySQL 서버 호스트 이름 [localhost]: <– Enter 키를 누르세요

MySQL 서버 포트 [3306]: <– Enter 키를 누르세요

MySQL 루트 사용자 이름 [root]: <– Enter 키를 누르세요

MySQL 루트 비밀번호 []: <– MySQL 루트 비밀번호를 입력하세요

생성할 MySQL 데이터베이스 [dbispconfig]: <– Enter 키를 누르세요

MySQL 문자 집합 [utf8]: <– Enter 키를 누르세요

Postgrey 구성
Postfix 구성
4096 비트 RSA 개인 키 생성
……………………………………………………………..++
……………………………………………………………………………………………………………………….++
‘smtpd.key’에 새 개인 키를 작성 중입니다.

—–
인증서 요청에 통합될 정보를 입력해야 합니다.
입력할 내용은 ‘구별 이름’ 또는 DN이라고 합니다.
여러 필드가 있지만 일부는 비워둘 수 있습니다.
일부 필드에는 기본값이 있습니다.
‘.’를 입력하면 필드가 비워집니다.

—–
국가 이름 (2자리 코드) [AU]: <– 2자리 국가 코드를 입력하세요
주 또는 지방 이름 (전체 이름) [Some-State]: <– 주 이름을 입력하세요
지역 이름 (예: 도시) []: <– 도시를 입력하세요
조직 이름 (예: 회사) [Internet Widgits Pty Ltd]: <– 회사 이름을 입력하세요 또는 Enter 키를 누르세요
조직 단위 이름 (예: 섹션) []: <– Enter 키를 누르세요
공통 이름 (예: 서버 FQDN 또는 귀하의 이름) []: <– 서버 호스트 이름을 입력하세요. 제 경우에는: server1.example.com
이메일 주소 []: <– Enter 키를 누르세요
Mailman 구성
Dovecot 구성
Spamassassin 구성
Amavisd 구성
Getmail 구성
BIND 구성
Jailkit 구성
Pureftpd 구성
Apache 구성
vlogger 구성
Metronome XMPP 서버 구성
‘localhost.key’에 새 개인 키를 작성 중입니다.

—–
국가 이름 (2자리 코드) [AU]: <– 2자리 국가 코드를 입력하세요
지역 이름 (예: 도시) []: <– 도시를 입력하세요
조직 이름 (예: 회사) [Internet Widgits Pty Ltd]: <– 회사 이름을 입력하세요 또는 Enter 키를 누르세요
조직 단위 이름 (예: 섹션) []: <– Enter 키를 누르세요
공통 이름 (예: 서버 FQDN 또는 귀하의 이름) [server1.canomi.com]: <– 서버 호스트 이름을 입력하세요. 제 경우에는: server1.example.com
이메일 주소 []: <– Enter 키를 누르세요

Ubuntu 방화벽 구성
Fail2ban 구성
[INFO] OpenVZ 서비스가 감지되지 않았습니다.
Apps vhost 구성
ISPConfig 설치
ISPConfig 포트 [8080]:

관리자 비밀번호 [admin]:

ISPConfig 웹 인터페이스에 대한 보안(SSL) 연결을 원하십니까 (y,n) [y]: <– Enter 키를 누르세요

4096 비트 RSA 개인 키 생성 중, 4096 비트 길이 모듈
…………………..++
………………………………………………………………………………………………………………..++

e는 65537 (0x10001)입니다.
인증서 요청에 통합될 정보를 입력해야 합니다.
입력할 내용은 ‘구별 이름’ 또는 DN이라고 합니다.
여러 필드가 있지만 일부는 비워둘 수 있습니다.
일부 필드에는 기본값이 있습니다.
‘.’를 입력하면 필드가 비워집니다.

—–
국가 이름 (2자리 코드) [AU]: <– 2자리 국가 코드를 입력하세요
주 또는 지방 이름 (전체 이름) [Some-State]: <– 주 이름을 입력하세요
지역 이름 (예: 도시) []: <– 도시를 입력하세요
조직 이름 (예: 회사) [Internet Widgits Pty Ltd]: <– 회사 이름을 입력하세요 또는 Enter 키를 누르세요
조직 단위 이름 (예: 섹션) []: <– Enter 키를 누르세요
공통 이름 (예: 서버 FQDN 또는 귀하의 이름) []: <– 서버 호스트 이름을 입력하세요. 제 경우에는: server1.example.com
이메일 주소 []: <– Enter 키를 누르세요

다음 ‘추가‘ 속성을 입력하세요
인증서 요청과 함께 전송됩니다.
도전 비밀번호 []: <– Enter 키를 누르세요
선택적 회사 이름 []: <– Enter 키를 누르세요
새 RSA 키 작성 중

ISPConfig LE SSL 인증서를 Postfix에 심볼릭 링크 하시겠습니까? (y,n) [y]:  <– Enter 키를 누르세요

ISPConfig LE SSL 인증서를 Pureftpd에 심볼릭 링크 하시겠습니까? dhparam 파일 생성에는 시간이 걸립니다. (y,n) [y]:  <– Enter 키를 누르세요

DH 매개변수 생성 중, 2048 비트 길이 안전 소수, 생성기 2
이 작업은 오랜 시간이 걸립니다.
…………………………………………………….+…………………………………………………………………………………………………………………………………………………….+……………….

DBServer 구성
ISPConfig crontab 설치
root에 대한 crontab 없음
getmail에 대한 crontab 없음
IP 주소 감지
서비스 재시작 …
설치 완료.


설치 프로그램은 모든 기본 서비스를 자동으로 구성하므로 수동 구성은 필요하지 않습니다.

그 후 http(s)://server1.example.com:8080/ 또는 http(s)://192.168.0.100:8080/ (HTTP 또는 HTTPS는 설치 중 선택한 것에 따라 다름)에서 ISPConfig 3에 접근할 수 있습니다. 사용자 이름 admin과 비밀번호 admin으로 로그인하세요(첫 로그인 후 기본 비밀번호를 변경해야 합니다):

![Ubuntu 18.04 LTS에서 ISPConfig 로그인](/files/24a359d6-6ef5-41f5-934b-3c7d69d55dcf.png)  
  
![ISPConfig 3.2 대시보드](/files/0aadd86c-90dd-42d7-9206-15914f387fbb.png)  
  

시스템이 이제 사용 준비가 완료되었습니다.

## 18. 이 튜토리얼의 가상 머신 이미지 다운로드

이 튜토리얼은 VMWare 및 Virtualbox와 호환되는 ovf/ova 형식의 사용 준비가 완료된 가상 머신 이미지로 제공됩니다. 가상 머신 이미지는 다음 로그인 세부정보를 사용합니다:

SSH / 셸 로그인

사용자 이름: administrator  
비밀번호: howtoforge

이 사용자는 sudo 권한이 있습니다.

ISPConfig 로그인

사용자 이름: admin  
비밀번호: howtoforge

MySQL 로그인

사용자 이름: root  
비밀번호: howtoforge

VM의 IP는 192.168.0.100이며, 파일 */etc/netplan/01-netcfg.yaml*에서 변경할 수 있습니다. 위의 모든 비밀번호를 변경하여 가상 머신을 안전하게 보호하세요.

## 19. 링크

- Ubuntu: http://www.ubuntu.com/  
- ISPConfig: http://www.ispconfig.org/
Share: X/Twitter LinkedIn

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

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