서버 설치 · 10 min read · Oct 30, 2025
완벽한 서버 CentOS 7.6 - Apache, PHP 7.2, Postfix, Dovecot, Pure-FTPD, BIND 및 ISPConfig 3.1 설치 - 페이지 2

7 Dovecot 설치
Dovecot은 다음과 같이 설치할 수 있습니다:
yum -y install dovecot dovecot-mysql dovecot-pigeonhole빈 dovecot-sql.conf 파일을 만들고 심볼릭 링크를 생성합니다:
touch /etc/dovecot/dovecot-sql.conf
ln -s /etc/dovecot/dovecot-sql.conf /etc/dovecot-sql.conf
ln -s /etc/dovecot/dovecot.conf /etc/dovecot.conf이제 시스템 시작 링크를 생성하고 Dovecot을 시작합니다:
systemctl enable dovecot
systemctl start dovecot8 Postfix 설치
Postfix는 다음과 같이 설치할 수 있습니다:
yum -y install postfix그런 다음 Sendmail을 끄고 Postfix 및 MariaDB (MySQL)를 시작합니다:
systemctl enable mariadb.service
systemctl start mariadb.servicesystemctl stop sendmail.service
systemctl disable sendmail.service
systemctl enable postfix.service
systemctl restart postfix.serviceSendmail이 서버에 설치된 경우 시작되지 않도록 비활성화합니다. 따라서 “Failed to issue method call: Unit sendmail.service not loaded.”라는 오류 메시지는 무시할 수 있습니다.
9 Getmail 설치
Getmail은 다음과 같이 설치할 수 있습니다:
yum -y install getmail10 MySQL 비밀번호 설정 및 phpMyAdmin 구성
MySQL 루트 계정의 비밀번호를 설정합니다:
mysql_secure_installation[root@server1 tmp]# mysql_secure_installation
NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MariaDB
SERVERS IN PRODUCTION USE! PLEASE READ EACH STEP CAREFULLY!MariaDB에 로그인하여 보안을 설정하려면 현재
루트 사용자에 대한 비밀번호가 필요합니다. MariaDB를 방금 설치했으며
루트 비밀번호를 아직 설정하지 않았다면 비밀번호는 비어 있으므로
여기서 그냥 Enter를 누르십시오.Enter current password for root (enter for none):
OK, successfully used password, moving on...루트 비밀번호를 설정하면 적절한 권한 없이 누구도 MariaDB
루트 사용자로 로그인할 수 없도록 보장합니다.
Set root password? [Y/n] <-- ENTER
New password: <-- yourrootsqlpassword
Re-enter new password: <-- yourrootsqlpassword
Password updated successfully!
Reloading privilege tables..
... Success!
기본적으로 MariaDB 설치에는 익명 사용자가 있어 누구나
사용자 계정을 생성하지 않고도 MariaDB에 로그인할 수 있습니다. 이는
테스트 용도로만 사용되며 설치를 조금 더 원활하게 진행하기 위한 것입니다.
생산 환경으로 이동하기 전에 이들을 제거해야 합니다.
Remove anonymous users? [Y/n] <-- ENTER
... Success!
일반적으로 루트는 'localhost'에서만 연결할 수 있어야 합니다.
이는 누군가가 네트워크에서 루트 비밀번호를 추측할 수 없도록 보장합니다.
Disallow root login remotely? [Y/n] <-- ENTER
... Success!
기본적으로 MariaDB에는 누구나 접근할 수 있는 'test'라는 데이터베이스가 있습니다.
이는 테스트 용도로만 사용되며 생산 환경으로 이동하기 전에 제거해야 합니다.
Remove test database and access to it? [Y/n] <-- ENTER
- Dropping test database...
... Success!
- Removing privileges on test database...
... Success!
권한 테이블을 다시 로드하면 지금까지 변경된 모든 사항이
즉시 적용됩니다.
Reload privilege tables now? [Y/n] <-- ENTER
... Success!
정리 중...
모든 작업이 완료되었습니다! 위의 모든 단계를 완료했다면
당신의 MariaDB 설치는 이제 안전해야 합니다.
MariaDB를 사용해 주셔서 감사합니다!
[root@server1 tmp]#이제 phpMyAdmin을 구성합니다. phpMyAdmin이 localhost에서만 연결을 허용하도록 Apache 구성을 변경합니다 (빨간색으로 표시된 줄 주석 처리):
nano /etc/httpd/conf.d/phpMyAdmin.conf# phpMyAdmin - Web based MySQL browser written in php
#
# Allows only localhost by default
#
# But allowing phpMyAdmin to anyone other than localhost should be considered
# dangerous unless properly secured by SSL
Alias /phpMyAdmin /usr/share/phpMyAdmin
Alias /phpmyadmin /usr/share/phpMyAdmin
# Apache 2.4
#
# Require ip 127.0.0.1
# Require ip ::1
#
# Apache 2.2
Order Deny,Allow
Deny from All
Allow from 127.0.0.1
Allow from ::1
다음으로 phpMyAdmin의 인증을 쿠키에서 http로 변경합니다:
nano /etc/phpMyAdmin/config.inc.php[...]
/* Authentication type */
$cfg['Servers'][$i]['auth_type'] = 'http';
[...]그런 다음 Apache의 시스템 시작 링크를 생성하고 시작합니다:
systemctl enable httpd.service
systemctl restart httpd.service이제 브라우저를 http://server1.example.com/phpmyadmin/ 또는 http://192.168.0.100/phpmyadmin/로 이동하여 사용자 이름 root와 새로운 루트 MySQL 비밀번호로 로그인할 수 있습니다.
11 Amavisd-new, SpamAssassin, ClamAV 및 Postgrey 설치
amavisd-new, SpamAssassin 및 ClamAV를 설치하려면 다음 명령을 실행합니다:
yum -y install amavisd-new spamassassin clamav-server clamav-data clamav-update clamav-filesystem clamav clamav-scanner-systemd clamav-devel clamav-lib clamav-server-systemd unzip bzip2 perl-DBD-mysql postgrey re2c그런 다음 freshclam, amavisd 및 clamd.amavisd를 시작합니다:
sa-update
freshclam
systemctl enable amavisd.service
systemctl start amavisd.service
systemctl start [email protected]
systemctl enable postgrey.service
systemctl start postgrey.service12 mod_php, mod_fcgi/PHP, PHP-FPM과 함께 Apache 설치
ISPConfig 3는 웹사이트별로 mod_php, mod_fcgi/PHP, cgi/PHP 및 PHP-FPM을 사용할 수 있습니다.
mod_php, mod_fcgid 및 PHP와 함께 Apache2를 다음과 같이 설치할 수 있습니다:
yum -y install php php-devel php-gd php-imap php-ldap php-mysql php-odbc php-pear php-xml php-xmlrpc php-pecl-apc php-mbstring php-mcrypt php-mssql php-snmp php-soap php-tidy curl curl-devel perl-libwww-perl ImageMagick libxml2 libxml2-devel mod_fcgid php-cli httpd-devel php-fpm php-intl php-imagick php-pspell wget다음으로 /etc/php.ini를 엽니다…
nano /etc/php.ini… 그리고 오류 보고를 변경합니다 (알림이 더 이상 표시되지 않도록), 시간대를 설정하고 cgi.fix_pathinfo=1의 주석을 제거합니다:
[...]
;error_reporting = E_ALL & ~E_DEPRECATED
error_reporting = E_ALL & ~E_NOTICE & ~E_DEPRECATED & ~E_STRICT
[...]
; cgi.fix_pathinfo provides *real* PATH_INFO/PATH_TRANSLATED support for CGI. PHP's
; previous behaviour was to set PATH_TRANSLATED to SCRIPT_FILENAME, and to not grok
; what PATH_INFO is. For more information on PAppp.tldTH_INFO, see the cgi specs. Setting
; this to 1 will cause PHP CGI to fix its paths to conform to the spec. A setting
; of zero causes PHP to behave as before. Default is 1. You should fix your scripts
; to use SCRIPT_FILENAME rather than PATH_TRANSLATED.
; http://www.php.net/manual/en/ini.core.php#ini.cgi.fix-pathinfo
cgi.fix_pathinfo=1
[...]
date.timezone = 'Europe/Berlin'
[...]httpd 및 PHP-FPM이 부팅 시 시작되도록 활성화하고 PHP-FPM 서비스를 시작합니다.
systemctl start php-fpm.service
systemctl enable php-fpm.service
systemctl enable httpd.service마지막으로 Apache를 재시작합니다:
systemctl restart httpd.service이제 Let’s encrypt 지원을 추가합니다.
mkdir /opt/certbot
cd /opt/certbot
wget https://dl.eff.org/certbot-auto
chmod a+x ./certbot-auto이제 certbot-auto 명령을 실행하여 소프트웨어와 그 의존성을 다운로드하고 설치합니다.
./certbot-auto명령은 “no names were found in your configuration files”라는 메시지를 표시하고 계속할 것인지 묻습니다. 여기서 “c”를 선택하여 취소합니다. 인증서는 ispconfig에 의해 생성됩니다.

13 mod_python 설치
Apache 모듈 mod_python은 RPM 패키지로 제공되지 않으므로 소스에서 컴파일합니다. 첫 번째 단계는 python 개발 파일을 설치하고 현재 mod_python 버전을 .tar.gz 파일로 다운로드하는 것입니다.
yum -y install python-develcd /usr/local/src/
wget http://dist.modpython.org/dist/mod_python-3.5.0.tgz
tar xfz mod_python-3.5.0.tgz
cd mod_python-3.5.0그런 다음 모듈을 구성하고 컴파일합니다.
./configure
make컴파일된 모듈에 오류가 있어 설치가 “version = “fatal: Not a git repository (or any of the parent directories): .git“라는 오류로 실패합니다. 이를 수정하려면 이 sed 명령을 실행합니다 (명령은 한 줄입니다!).
sed -e 's/(git describe --always)/(git describe --always 2>\/dev\/null)/g' -e 's/`git describe --always`/`git describe --always 2>\/dev\/null`/g' -i $( find . -type f -name Makefile\* -o -name version.sh )그런 다음 다음 명령으로 모듈을 설치합니다.
make install그리고 Apache에서 모듈을 활성화합니다:
echo 'LoadModule python_module modules/mod_python.so' > /etc/httpd/conf.modules.d/10-python.conf
systemctl restart httpd.service14 PureFTPd 설치
PureFTPd는 다음 명령으로 설치할 수 있습니다:
yum -y install pure-ftpd그런 다음 시스템 시작 링크를 생성하고 PureFTPd를 시작합니다:
systemctl enable pure-ftpd.service
systemctl start pure-ftpd.service이제 PureFTPd를 구성하여 FTP 및 TLS 세션을 허용합니다. FTP는 모든 비밀번호와 모든 데이터가 일반 텍스트로 전송되기 때문에 매우 안전하지 않은 프로토콜입니다. TLS를 사용하면 전체 통신을 암호화할 수 있어 FTP를 훨씬 더 안전하게 만들 수 있습니다.
TLS에 OpenSSL이 필요합니다. OpenSSL을 설치하려면 다음과 같이 실행합니다:
yum install openssl/etc/pure-ftpd/pure-ftpd.conf를 엽니다…
nano /etc/pure-ftpd/pure-ftpd.confFTP 및 TLS 세션을 허용하려면 TLS 줄 앞의 #을 제거하여 TLS를 1로 설정합니다. TLS를 활성화하는 것이 강력히 권장됩니다.
[...]
# This option can accept three values :
# 0 : disable SSL/TLS encryption layer (default).
# 1 : accept both traditional and encrypted sessions.
# 2 : refuse connections that don't use SSL/TLS security mechanisms,
# including anonymous sessions.
# Do _not_ uncomment this blindly. Be sure that :
# 1) Your server has been compiled with SSL/TLS support (--with-tls),
# 2) A valid certificate is in place,
# 3) Only compatible clients will log in.
TLS 1
[...]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자리 코드) [XX]: <– 국가 이름 입력 (예: “DE”).
주 또는 지방 이름 (전체 이름) []: <– 주 또는 지방 이름 입력.
지역 이름 (예: 도시) [Default City]: <– 도시 입력.
조직 이름 (예: 회사) [Default Company Ltd]: <– 조직 이름 입력 (예: 회사 이름).
조직 단위 이름 (예: 섹션) []: <– 조직 단위 이름 입력 (예: “IT 부서”).
공통 이름 (예: 이름 또는 서버의 호스트 이름) []: <– 시스템의 완전한 도메인 이름 입력 (예: “server1.example.com”).
이메일 주소 []: <– 이메일 주소 입력.
SSL 인증서의 권한을 변경합니다:
chmod 600 /etc/ssl/private/pure-ftpd.pemDHParam 파일을 생성합니다:
openssl dhparam -out /etc/ssl/private/pure-ftpd-dhparams.pem 2048마지막으로 PureFTPd를 재시작합니다:
systemctl restart pure-ftpd.service그게 다입니다. 이제 FTP 클라이언트를 사용하여 연결을 시도할 수 있습니다. 그러나 FTP 클라이언트를 TLS를 사용하도록 구성해야 합니다.
15 BIND 설치
BIND는 다음과 같이 설치할 수 있습니다:
yum -y install bind bind-utils haveged기존 /etc/named.conf 파일의 백업을 만들고 다음과 같이 새 파일을 생성합니다:
cp /etc/named.conf /etc/named.conf_bak
cat /dev/null > /etc/named.conf
nano /etc/named.conf// named.conf
//
// Red Hat bind 패키지가 ISC BIND named(8) DNS를 구성하기 위해 제공
// 서버를 캐싱 전용 이름 서버로 설정합니다 (로컬호스트 DNS 해 resolver 전용).
//
// 예제 named 구성 파일은 /usr/share/doc/bind*/sample/에서 확인할 수 있습니다.
//
options {
listen-on port 53 { any; };
listen-on-v6 port 53 { any; };
directory "/var/named";
dump-file "/var/named/data/cache_dump.db";
statistics-file "/var/named/data/named_stats.txt";
memstatistics-file "/var/named/data/named_mem_stats.txt";
allow-query { any; };
allow-recursion {"none";};
recursion no;
};
logging {
channel default_debug {
file "data/named.run";
severity dynamic;
};
};
zone "." IN {
type hint;
file "named.ca";
};
include "/etc/named.conf.local";/etc/named.conf의 끝에 포함된 /etc/named.conf.local 파일을 생성합니다 (ISPConfig에서 DNS 영역을 생성하면 나중에 /etc/named.conf.local이 채워집니다):
touch /etc/named.conf.local그런 다음 시작 링크를 생성하고 BIND를 시작합니다:
systemctl enable named.service
systemctl start named.service
systemctl enable haveged.service
systemctl start haveged.service16 Webalizer 및 AWStats 설치
AWStats는 다음과 같이 설치할 수 있습니다:
yum -y install webalizer awstats perl-DateTime-Format-HTTP perl-DateTime-Format-Builder/etc/httpd/conf.d/awstats.conf 파일을 편집합니다:
nano /etc/httpd/conf.d/awstats.conf그리고 다음 줄을 변경합니다:
Require local를:
Require all granted그리고 Apache를 재시작합니다:
systemctl restart httpd.service17 Jailkit 설치
Jailkit은 SSH 사용자와 cronjob을 chroot하는 데 사용됩니다. 다음과 같이 설치할 수 있습니다:
cd /tmp
wget http://olivier.sessink.nl/jailkit/jailkit-2.20.tar.gz
tar xvfz jailkit-2.20.tar.gz
cd jailkit-2.20
./configure
make
make install
cd ..
rm -rf jailkit-2.20*18 Fail2Ban 설치
선택 사항이지만 권장됩니다. ISPConfig 모니터가 로그를 표시하려고 시도하기 때문입니다.
yum -y install iptables-services fail2ban fail2ban-systemd
systemctl stop firewalld.service
systemctl mask firewalld.service
systemctl disable firewalld.service
systemctl stop firewalld.service그런 다음 /etc/fail2ban/jail.local 파일을 생성하고 ssh, email 및 ftp 서비스에 대한 모니터링을 활성화합니다.
nano /etc/fail2ban/jail.localjail.local 파일에 다음 내용을 추가합니다:
[sshd]
enabled = true
action = iptables[name=sshd, port=ssh, protocol=tcp]
[pure-ftpd]
enabled = true
action = iptables[name=FTP, port=ftp, protocol=tcp]
maxretry = 3
[dovecot]
enabled = true
action = iptables-multiport[name=dovecot, port="pop3,pop3s,imap,imaps", protocol=tcp]
maxretry = 5
[postfix-sasl]
enabled = true
action = iptables-multiport[name=postfix-sasl, port="smtp,smtps,submission", protocol=tcp]
maxretry = 3그런 다음 fail2ban의 시스템 시작 링크를 생성하고 시작합니다:
systemctl enable fail2ban.service
systemctl start fail2ban.service19 rkhunter 설치
rkhunter는 다음과 같이 설치할 수 있습니다:
yum -y install rkhunter20 Mailman 설치
서버에서 Mailman으로 메일링 리스트를 관리하려면 지금 Mailman을 설치하십시오. Mailman은 ISPConfig에서 지원되므로 나중에 ISPConfig를 통해 새로운 메일링 리스트를 생성할 수 있습니다.
yum -y install mailmanMailman을 시작하기 전에 mailman이라는 첫 번째 메일링 리스트를 생성해야 합니다:
touch /var/lib/mailman/data/aliases
postmap /var/lib/mailman/data/aliases
/usr/lib/mailman/bin/newlist mailman
ln -s /usr/lib/mailman/mail/mailman /usr/bin/mailman[root@server1 tmp]# /usr/lib/mailman/bin/newlist mailman
메일링 리스트를 운영하는 사람의 이메일 입력: <– 관리자 이메일 주소, 예: [email protected]
초기 mailman 비밀번호: <– 메일링 리스트의 관리자 비밀번호
메일링 리스트를 생성하려면 /etc/aliases (또는 동등한) 파일을 편집하여 다음 줄을 추가하고,
가능하면 newaliases 프로그램을 실행해야 합니다:
mailman 메일링 리스트
mailman: “|/usr/lib/mailman/mail/mailman post mailman”
mailman-admin: “|/usr/lib/mailman/mail/mailman admin mailman”
mailman-bounces: “|/usr/lib/mailman/mail/mailman bounces mailman”
mailman-confirm: “|/usr/lib/mailman/mail/mailman confirm mailman”
mailman-join: “|/usr/lib/mailman/mail/mailman join mailman”
mailman-leave: “|/usr/lib/mailman/mail/mailman leave mailman”
mailman-owner: “|/usr/lib/mailman/mail/mailman owner mailman”
mailman-request: “|/usr/lib/mailman/mail/mailman request mailman”
mailman-subscribe: “|/usr/lib/mailman/mail/mailman subscribe mailman”
mailman-unsubscribe: “|/usr/lib/mailman/mail/mailman unsubscribe mailman”
Enter를 눌러 mailman 소유자에게 알리십시오… <– ENTER
[root@server1 tmp]#
그런 다음 /etc/aliases를 엽니다…
nano /etc/aliases… 그리고 다음 줄을 추가합니다:
[...]
mailman: "|/usr/lib/mailman/mail/mailman post mailman"
mailman-admin: "|/usr/lib/mailman/mail/mailman admin mailman"
mailman-bounces: "|/usr/lib/mailman/mail/mailman bounces mailman"
mailman-confirm: "|/usr/lib/mailman/mail/mailman confirm mailman"
mailman-join: "|/usr/lib/mailman/mail/mailman join mailman"
mailman-leave: "|/usr/lib/mailman/mail/mailman leave mailman"
mailman-owner: "|/usr/lib/mailman/mail/mailman owner mailman"
mailman-request: "|/usr/lib/mailman/mail/mailman request mailman"
mailman-subscribe: "|/usr/lib/mailman/mail/mailman subscribe mailman"
mailman-unsubscribe: "|/usr/lib/mailman/mail/mailman unsubscribe mailman"그런 다음
newaliases를 실행하고 Postfix를 재시작합니다:
systemctl restart postfix.service이제 Mailman Apache 구성 파일 /etc/httpd/conf.d/mailman.conf를 엽니다…
nano /etc/httpd/conf.d/mailman.conf… 그리고 다음 줄을 추가합니다 ScriptAlias /cgi-bin/mailman/ /usr/lib/mailman/cgi-bin/. Alias /pipermail/ /var/lib/mailman/archives/public/의 주석을 제거하고 다음 줄을 추가합니다 Alias /pipermail /var/lib/mailman/archives/public/:
#
# httpd 구성 설정은 mailman과 함께 사용됩니다.
#
ScriptAlias /mailman/ /usr/lib/mailman/cgi-bin/
ScriptAlias /cgi-bin/mailman/ /usr/lib/mailman/cgi-bin/
AllowOverride None
Options ExecCGI
Order allow,deny
Allow from all
#Alias /pipermail/ /var/lib/mailman/archives/public/
Alias /pipermail /var/lib/mailman/archives/public/
Options Indexes MultiViews FollowSymLinks
AllowOverride None
Order allow,deny
Allow from all
AddDefaultCharset Off
# 다음 줄의 주석을 제거하여 /mailman에 대한 쿼리를
# listinfo 페이지로 리디렉션합니다 (권장).
# RedirectMatch ^/mailman[/]*$ /mailman/listinfoApache를 재시작합니다:
systemctl restart httpd.serviceMailman의 시스템 시작 링크를 생성하고 시작합니다:
systemctl enable mailman.service
systemctl start mailman.serviceISPConfig 3를 설치한 후 다음과 같이 Mailman에 접근할 수 있습니다:
모든 Apache vhosts에 대해 /cgi-bin/mailman 별칭을 사용할 수 있습니다 (Mailman에 접근하려는 모든 vhosts에서 suExec 및 CGI가 비활성화되어야 함을 유의하십시오!), 즉, http://
http://
새 게시물을 받은 편지함에서 받기
스팸은 없습니다. 언제든지 구독 해지 가능합니다.