서버 설치 · 10 min read · Nov 01, 2025

Apache, Postfix, Dovecot, Pure-FTPD, BIND 및 ISPConfig 3.1이 포함된 완벽한 서버 CentOS 7.2 - 페이지 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

이제 시스템 시작 링크를 생성하고 Dovecot을 시작합니다:

systemctl enable dovecot  
systemctl start dovecot

8 Postfix 설치

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

yum -y install postfix

그런 다음 Sendmail을 끄고 Postfix 및 MariaDB(MySQL)를 시작합니다:

systemctl enable mariadb.service  
systemctl start mariadb.service
systemctl stop sendmail.service  
systemctl disable sendmail.service  
systemctl enable postfix.service  
systemctl restart postfix.service

Sendmail이 서버에 설치된 경우 시작되지 않도록 비활성화합니다. 따라서 “Failed to issue method call: Unit sendmail.service not loaded.”라는 오류 메시지는 무시할 수 있습니다.

9 Getmail 설치

Getmail은 다음과 같이 설치할 수 있습니다:

yum -y install getmail

10 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” 줄을 주석 처리하고 구문에 “Require all granted”라는 새 줄을 추가합니다):

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 설치

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

freshclam 구성 파일 /etc/freshclam.conf를 편집합니다.

nano /etc/freshclam.conf

그리고 “Example” 줄을 주석 처리합니다.

[....]  
# Example  
[....]

그런 다음 freshclam, amavisd 및 clamd.amavisd를 시작합니다:

sa-update  
freshclam  
systemctl enable amavisd.service  
systemctl start amavisd.service  
systemctl start [email protected]

12 mod_php, mod_fcgi/PHP5, PHP-FPM이 포함된 Apache 설치

ISPConfig 3는 웹사이트별로 mod_php, mod_fcgi/PHP5, cgi/PHP5 및 suPHP를 사용할 수 있습니다.

mod_php5, mod_fcgid 및 PHP5가 포함된 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
[...]
; cgi.fix_pathinfo는 CGI에 대한 *실제* PATH_INFO/PATH_TRANSLATED 지원을 제공합니다. PHP의
; 이전 동작은 PATH_TRANSLATED를 SCRIPT_FILENAME으로 설정하고 PATH_INFO가 무엇인지 이해하지 못하는 것이었습니다.  
; PATH_INFO에 대한 자세한 내용은 cgi 사양을 참조하십시오. 이를 1로 설정하면 PHP CGI가
; 경로를 사양에 맞게 수정합니다. 0으로 설정하면 PHP가 이전과 같이 동작합니다. 기본값은 1입니다.  
; 스크립트를 수정하여 PATH_TRANSLATED가 아닌 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

그 명령은 “구성 파일에서 이름을 찾을 수 없습니다”라고 알려주고 계속할 것인지 묻습니다. 여기서 “아니오”를 선택하십시오. 인증서는 ISPConfig에 의해 생성됩니다.

13 mod_python 설치

apache 모듈 mod_python은 RPM 패키지로 제공되지 않으므로 소스에서 컴파일합니다. 첫 번째 단계는 python 개발 파일을 설치하고 현재 mod_python 버전을 tar.gz 파일로 다운로드하는 것입니다.

yum -y install python-devel
cd /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  
make install

그리고 Apache에서 모듈을 활성화합니다.

echo 'LoadModule python_module modules/mod_python.so' > /etc/httpd/conf.modules.d/10-python.conf  
systemctl restart httpd.service

14 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.conf

FTP 및 TLS 세션을 허용하려면 TLS를 1로 설정합니다:

[...]
# 이 옵션은 세 가지 값을 허용합니다:
# 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
//
// 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.local을 생성합니다. 이 파일은 /etc/named.conf의 끝에 포함됩니다( /etc/named.conf.local은 ISPConfig에서 DNS 영역을 생성하면 나중에 채워집니다):

touch /etc/named.conf.local

그런 다음 시작 링크를 생성하고 BIND를 시작합니다:

systemctl enable named.service  
systemctl start named.service

16 Webalizer 및 AWStats 설치

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

yum -y install awstats perl-DateTime-Format-HTTP perl-DateTime-Format-Builder

Webalizer는 소스에서 컴파일해야 합니다.

yum install -y libpng-devel gd-devel  
cd /tmp  
wget ftp://ftp.mrunix.net/pub/webalizer/webalizer-2.23-08-src.tgz  
tar xvfz webalizer-2.23-08-src.tgz  
cd webalizer-2.23-08  
./configure  
make  
make install

17 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.local

jail.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.service

19 rkhunter 설치

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

yum -y install rkhunter

20 Mailman 설치

서버에서 Mailman으로 메일링리스트를 관리하려면 지금 mailman을 설치하십시오. Mailman은 ISPConfig에서 지원되므로 나중에 ISPConfig를 통해 새 메일링리스트를 생성할 수 있습니다.

yum -y install mailman

Mailman을 시작하기 전에 mailman이라는 첫 번째 메일링리스트를 생성해야 합니다:

touch /var/lib/mailman/data/aliases  
postmap /var/lib/mailman/data/aliases  
/usr/lib/mailman/bin/newlist 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/listinfo

Apache를 재시작합니다:

systemctl restart httpd.service

Mailman의 시스템 시작 링크를 생성하고 시작합니다:

systemctl enable mailman.service  
systemctl start mailman.service

ISPConfig 3를 설치한 후 다음과 같이 Mailman에 접근할 수 있습니다:

모든 Apache vhosts에 대해 /cgi-bin/mailman 별칭을 사용할 수 있습니다(메일맨에 접근하려는 모든 vhosts에서 suExec 및 CGI가 비활성화되어야 함을 유의하십시오!). 즉, http:///cgi-bin/mailman/admin/에서 메일링리스트의 관리 인터페이스에 접근할 수 있으며, 메일링리스트 사용자에 대한 웹 페이지는 http:///cgi-bin/mailman/listinfo/에서 찾을 수 있습니다.

http:///pipermail/에서 메일링리스트 아카이브를 찾을 수 있습니다.

Share: X/Twitter LinkedIn

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

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