서버 설치 · 10 min read · Nov 02, 2025
Apache, Postfix, Dovecot, Pure-FTPD, BIND 및 ISPConfig 3.1이 포함된 완벽한 서버 CentOS 7.3 - 페이지 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
루트 사용자로 로그인할 수 없도록 보장합니다.
루트 비밀번호를 설정하시겠습니까? [Y/n] <-- ENTER
새 비밀번호: <-- yourrootsqlpassword
새 비밀번호를 다시 입력하세요: <-- yourrootsqlpassword
비밀번호가 성공적으로 업데이트되었습니다!
권한 테이블을 다시 로드하는 중..
... 성공!
기본적으로 MariaDB 설치에는 익명 사용자가 있어 누구나
사용자 계정을 생성하지 않고도 MariaDB에 로그인할 수 있습니다. 이는
테스트 용도로만 사용되며 설치를 조금 더 원활하게 진행하기 위한 것입니다.
생산 환경으로 이동하기 전에 제거해야 합니다.
익명 사용자를 제거하시겠습니까? [Y/n] <-- ENTER
... 성공!
일반적으로 루트는 'localhost'에서만 연결할 수 있어야 합니다.
이는 누군가가 네트워크에서 루트 비밀번호를 추측할 수 없도록 보장합니다.
원격으로 루트 로그인을 허용하지 않으시겠습니까? [Y/n] <-- ENTER
... 성공!
기본적으로 MariaDB에는 누구나 접근할 수 있는 'test'라는 데이터베이스가 있습니다.
이는 테스트 용도로만 사용되며 생산 환경으로 이동하기 전에 제거해야 합니다.
테스트 데이터베이스 및 접근을 제거하시겠습니까? [Y/n] <-- ENTER
- 테스트 데이터베이스 삭제 중...
... 성공!
- 테스트 데이터베이스에 대한 권한 제거 중...
... 성공!
권한 테이블을 다시 로드하면 지금까지 수행된 모든 변경 사항이
즉시 적용됩니다.
권한 테이블을 지금 다시 로드하시겠습니까? [Y/n] <-- ENTER
... 성공!
정리 중...
모든 작업이 완료되었습니다! 위의 모든 단계를 완료했다면 MariaDB
설치가 이제 안전해야 합니다.
MariaDB를 사용해 주셔서 감사합니다!
[root@server1 tmp]#이제 phpMyAdmin을 구성합니다. phpMyAdmin이 localhost에서만 연결을 허용하도록 Apache 구성을 변경합니다 (두 개의 “Require ip” 줄을 주석 처리하고
nano /etc/httpd/conf.d/phpMyAdmin.conf# phpMyAdmin - php로 작성된 웹 기반 MySQL 브라우저
#
# 기본적으로 localhost만 허용
#
# 그러나 phpMyAdmin을 localhost 이외의 누구에게 허용하는 것은
# SSL로 적절히 보호되지 않는 한 위험하다고 간주해야 합니다.
Alias /phpMyAdmin /usr/share/phpMyAdmin
Alias /phpmyadmin /usr/share/phpMyAdmin
# Apache 2.4
# Require ip 127.0.0.1
# Require ip ::1
Require all granted
# 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[...]
/* 인증 유형 */
$cfg['Servers'][$i]['auth_type'] = 'http';
[...]그런 다음 Apache의 시스템 시작 링크를 생성하고 시작합니다:
systemctl enable httpd.service
systemctl restart httpd.service이제 브라우저를 http://server1.example.com/phpmyadmin/ 또는 http://192.168.1.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 re2cfreshclam 구성 파일 /etc/freshclam.conf를 편집합니다:
nano /etc/freshclam.conf그리고 “Example” 줄을 주석 처리합니다:
[....]
# Example
[....]freshclam으로 ClamAV 서명 자동 업데이트를 활성화하려면 /etc/sysconfig/freshclam 파일을 편집합니다:
nano /etc/sysconfig/freshclam마지막 줄 앞에 #을 추가하여 다음과 같이 만듭니다:
# FRESHCLAM_DELAY=disabled-warn # REMOVE ME그런 다음 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/PHP5, PHP-FPM이 포함된 Apache 설치
ISPConfig 3은 mod_php, mod_fcgi/PHP, cgi/PHP 및 PHP-FPM을 웹사이트별로 사용할 수 있도록 허용합니다.
mod_php5, 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 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는 CGI에 대한 *실제* PATH_INFO/PATH_TRANSLATED 지원을 제공합니다. PHP의
; 이전 동작은 PATH_TRANSLATED를 SCRIPT_FILENAME으로 설정하고 PATH_INFO가 무엇인지 이해하지 못하는 것이었습니다.
; PATH_INFO에 대한 자세한 내용은 cgi 사양을 참조하십시오.
; 이를 1로 설정하면 PHP CGI가 경로를 사양에 맞게 수정합니다.
; 0으로 설정하면 PHP가 이전과 같이 동작합니다. 기본값은 1입니다.
; 스크립트를 SCRIPT_FILENAME을 사용하도록 수정해야 합니다.
; 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이제 certboot-auto 명령을 실행하여 소프트웨어와 종속성을 다운로드하고 설치합니다.
./certbot-auto명령은 “구성 파일에서 이름을 찾을 수 없습니다”라고 알려주고 계속할 것인지 묻습니다. 여기서 “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 줄 앞의 #을 제거하여 1로 설정합니다. TLS를 활성화하는 것이 강력히 권장됩니다.
[...]
# 이 옵션은 세 가지 값을 수용할 수 있습니다 :
# 0 : SSL/TLS 암호화 계층 비활성화 (기본값).
# 1 : 전통적인 세션과 암호화된 세션 모두 수용.
# 2 : SSL/TLS 보안 메커니즘을 사용하지 않는 연결을 거부,
# 익명 세션 포함.
# 이 주석을 맹목적으로 제거하지 마십시오. 반드시 확인하십시오:
# 1) 서버가 SSL/TLS 지원으로 컴파일되었는지 (--with-tls),
# 2) 유효한 인증서가 있는지,
# 3) 호환 가능한 클라이언트만 로그인할 수 있는지.
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”).
주 또는 지방 이름 (전체 이름) []: <– 주 또는 지방 이름 입력.
지역 이름 (예: 도시) [기본 도시]: <– 도시 입력.
조직 이름 (예: 회사) [기본 회사]: <– 조직 이름 입력 (예: 회사 이름).
조직 단위 이름 (예: 섹션) []: <– 조직 단위 이름 입력 (예: “IT 부서”).
공통 이름 (예: 이름 또는 서버의 호스트 이름) []: <– 시스템의 완전한 도메인 이름 입력 (예: “server1.example.com”).
이메일 주소 []: <– 이메일 주소 입력.
SSL 인증서의 권한을 변경합니다:
chmod 600 /etc/ssl/private/pure-ftpd.pem마지막으로 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
//
// ISC BIND named(8) DNS 서버를 캐싱 전용 이름 서버로 구성하기 위해 Red Hat bind 패키지에서 제공됩니다 (로컬호스트 DNS 리졸버 전용).
//
// 예제 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하는 데 사용됩니다. 다음과 같이 설치할 수 있습니다 (중요: Jailkit은 ISPConfig 이전에 설치해야 하며, 이후에는 설치할 수 없습니다!):
cd /tmp
wget http://olivier.sessink.nl/jailkit/jailkit-2.19.tar.gz
tar xvfz jailkit-2.19.tar.gz
cd jailkit-2.19
./configure
make
make install
cd ..
rm -rf jailkit-2.19*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의 시스템 시작 링크를 생성하고 시작합니다:
mkdir /var/run/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를 누르십시오… <– 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://
새 게시물을 받은 편지함에서 받기
스팸은 없습니다. 언제든지 구독 해지 가능합니다.