서버 설정 · 7 min read · Feb 09, 2026

완벽한 서버 - Ubuntu 14.04 (nginx, BIND, MySQL, PHP, Postfix, Dovecot 및 ISPConfig 3) - 페이지 4

12 Postfix, Dovecot, MySQL, phpMyAdmin, rkhunter, binutils 설치

Postfix, Dovecot, MySQL, rkhunter 및 binutils를 단일 명령으로 설치할 수 있습니다:

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

다음 질문이 표시됩니다:

MySQL “root” 사용자에 대한 새 비밀번호: <– yourrootsqlpassword
MySQL “root” 사용자에 대한 비밀번호를 반복 입력하세요: <– yourrootsqlpassword
메일 구성의 일반 유형: <– 인터넷 사이트
시스템 메일 이름: <– server1.example.com
자체 서명된 SSL 인증서를 생성하시겠습니까?: <– 예

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

vi /etc/postfix/master.cf

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

| [...] submission inet n - - - - smtpd -o syslog_name=postfix/submission -o smtpd_tls_security_level=encrypt -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 smtps inet n - - - - 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 [...] |

그 후 Postfix를 재시작합니다:

service postfix restart

MySQL이 localhost뿐만 아니라 모든 인터페이스에서 수신 대기하도록 하려면 /etc/mysql/my.cnf를 편집하고 bind-address = 127.0.0.1 라인을 주석 처리합니다:

vi /etc/mysql/my.cnf

| [...] # skip-networking 대신 기본값은 이제 localhost에서만 수신 대기하는 것입니다. # 이는 더 호환성이 높고 덜 안전하지 않습니다. #bind-address = 127.0.0.1 [...] |

그런 다음 MySQL을 재시작합니다:

service mysql restart

이제 네트워킹이 활성화되었는지 확인합니다. 다음을 실행합니다:

netstat -tap | grep mysql

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

root@server1:~# netstat -tap | grep mysql  
tcp        0      0 *:mysql                 *:*                     LISTEN     17300/mysqld  
root@server1:~#

13 Amavisd-new, SpamAssassin 및 Clamav 설치

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

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

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

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

14 Nginx, PHP5 (PHP-FPM) 및 Fcgiwrap 설치

Nginx는 Ubuntu용 패키지로 제공되며 다음과 같이 설치할 수 있습니다:

apt-get install nginx

시스템에 Apache2가 이미 설치되어 있다면 지금 중지합니다…

service apache2 stop

… 그리고 Apache의 시스템 시작 링크를 제거합니다:

update-rc.d -f apache2 remove

그 후 nginx를 시작합니다:

service nginx start

(만약 Apache2와 nginx가 모두 설치되어 있다면 ISPConfig 3 설치 프로그램이 어떤 것을 사용할지 물어볼 것입니다 - 이 경우 nginx라고 대답하세요. 이 둘 중 하나만 설치되어 있다면 ISPConfig가 필요한 구성을 자동으로 수행합니다.)

PHP5를 nginx에서 PHP-FPM을 통해 작동하게 할 수 있습니다 (PHP-FPM (FastCGI 프로세스 관리자)은 모든 크기의 사이트, 특히 더 바쁜 사이트에 유용한 몇 가지 추가 기능이 있는 대체 PHP FastCGI 구현입니다) 다음과 같이 설치합니다:

apt-get install php5-fpm

PHP-FPM은 /var/run/php5-fpm.sock 소켓에서 FastCGI 서버를 실행하는 데몬 프로세스입니다 (시작 명령은 service php5-fpm start입니다).

PHP에서 MySQL 지원을 받으려면 php5-mysql 패키지를 설치할 수 있습니다. 애플리케이션에 필요할 수 있는 다른 PHP5 모듈도 설치하는 것이 좋습니다. 사용 가능한 PHP5 모듈을 다음과 같이 검색할 수 있습니다:

apt-cache search php5

필요한 모듈을 선택하고 다음과 같이 설치합니다:

apt-get install php5-mysql php5-curl php5-gd php5-intl php-pear php5-imagick php5-imap php5-mcrypt php5-memcache php5-ming php5-ps php5-pspell php5-recode php5-snmp php5-sqlite php5-tidy php5-xmlrpc php5-xsl snmp

PHP5 mcrypt 모듈은 수동으로 활성화해야 합니다:

php5enmod mcrypt

APC는 PHP 중간 코드를 캐싱하고 최적화하기 위한 무료 오픈 PHP opcode 캐셔입니다. eAccelerator 및 XCache와 같은 다른 PHP opcode 캐셔와 유사합니다. PHP 페이지 속도를 높이기 위해 이러한 것 중 하나를 설치하는 것이 강력히 권장됩니다.

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

apt-get install php-apc

다음으로 /etc/php5/fpm/php.ini를 엽니다…

vi /etc/php5/fpm/php.ini

… 그리고 cgi.fix_pathinfo=0 및 시간대를 설정합니다:

| [...] cgi.fix_pathinfo=0 [...] date.timezone="Europe/Berlin" [...] |

(사용 가능한 모든 시간대는 /usr/share/zoneinfo 디렉토리 및 하위 디렉토리에서 찾을 수 있습니다.)

이제 PHP-FPM을 다시 로드합니다:

service php5-fpm reload

nginx에서 CGI 지원을 받으려면 Fcgiwrap을 설치합니다.

Fcgiwrap은 복잡한 CGI 스크립트에도 작동해야 하는 CGI 래퍼로, 각 vhost가 자체 cgi-bin 디렉토리를 사용할 수 있도록 하여 공유 호스팅 환경에서 사용할 수 있습니다.

fcgiwrap 패키지를 설치합니다:

apt-get install fcgiwrap

설치 후 fcgiwrap 데몬은 이미 시작되어 있어야 하며, 그 소켓은 /var/run/fcgiwrap.socket입니다. 실행되고 있지 않다면 service fcgiwrap 스크립트를 사용하여 시작할 수 있습니다.

그게 전부입니다! 이제 nginx vhost를 생성하면 ISPConfig가 올바른 vhost 구성을 처리합니다.

14.1 추가 PHP 버전

ISPConfig 3.0.5부터는 하나의 서버에서 여러 PHP 버전을 가질 수 있으며 (ISPConfig를 통해 선택 가능) PHP-FPM을 통해 실행할 수 있습니다. 추가 PHP 버전 (PHP-FPM)을 빌드하는 방법과 ISPConfig를 구성하는 방법에 대한 자세한 내용은 다음 튜토리얼을 확인하세요: ISPConfig 3 (Ubuntu 12.10)와 함께 여러 PHP 버전 (PHP-FPM 및 FastCGI) 사용 방법 (Ubuntu 14.04에서도 작동합니다).

14.2 phpMyAdmin 설치

다음과 같이 phpMyAdmin을 설치합니다:

apt-get install phpmyadmin

다음 질문이 표시됩니다:

자동으로 재구성할 웹 서버: <– 아무것도 선택하지 않음 (apache2와 lighttpd만 옵션으로 제공됨)
phpmyadmin을 dbconfig-common으로 구성하시겠습니까? <– 아니오

이제 /usr/share/phpmyadmin/ 디렉토리에서 phpMyAdmin을 찾을 수 있습니다.

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

nginx의 포트 8081에 있는 ISPConfig 앱 vhost는 phpMyAdmin 구성을 포함하고 있으므로 http://server1.example.com:8081/phpmyadmin 또는 http://server1.example.com:8081/phpMyAdmin을 사용하여 phpMyAdmin에 접근할 수 있습니다.

웹사이트에서 사용할 수 있는 /phpmyadmin 또는 /phpMyAdmin 별칭을 사용하려면, nginx는 전역 별칭이 없기 때문에 (즉, 모든 vhost에 대해 정의할 수 있는 별칭) 이 별칭을 phpMyAdmin에 접근하려는 vhost에 대해 정의해야 합니다.

이를 위해 ISPConfig의 웹사이트 옵션 탭의 nginx Directives 필드에 다음을 붙여넣습니다:

| location /phpmyadmin { root /usr/share/; index index.php index.html index.htm; location ~ ^/phpmyadmin/(.+\.php)$ { try_files $uri =404; root /usr/share/; fastcgi_pass unix:/var/run/php5-fpm.sock; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $request_filename; include /etc/nginx/fastcgi_params; fastcgi_param PATH_INFO $fastcgi_script_name; fastcgi_buffer_size 128k; fastcgi_buffers 256 4k; fastcgi_busy_buffers_size 256k; fastcgi_temp_file_write_size 256k; fastcgi_intercept_errors on; } location ~* ^/phpmyadmin/(.+\.(jpg|jpeg|gif|css|png|js|ico|html|xml|txt))$ { root /usr/share/; } } location /phpMyAdmin { rewrite ^/* /phpmyadmin last; } |

vhost에 대해 http s를 사용하는 경우, phpMyAdmin 구성에 fastcgi_param HTTPS on; 라인을 다음과 같이 추가해야 합니다:

| location /phpmyadmin { root /usr/share/; index index.php index.html index.htm; location ~ ^/phpmyadmin/(.+\.php)$ { try_files $uri =404; root /usr/share/; fastcgi_pass unix:/var/run/php5-fpm.sock; fastcgi_param HTTPS on; # <-- 이 라인을 추가하세요 fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $request_filename; include /etc/nginx/fastcgi_params; fastcgi_param PATH_INFO $fastcgi_script_name; fastcgi_buffer_size 128k; fastcgi_buffers 256 4k; fastcgi_busy_buffers_size 256k; fastcgi_temp_file_write_size 256k; fastcgi_intercept_errors on; } location ~* ^/phpmyadmin/(.+\.(jpg|jpeg|gif|css|png|js|ico|html|xml|txt))$ { root /usr/share/; } } location /phpMyAdmin { rewrite ^/* /phpmyadmin last; } |

vhost에 대해 http와 https를 모두 사용하는 경우, /etc/nginx/nginx.conf의 http {} 섹션에 다음 섹션을 추가해야 합니다 (모든 include 라인 이전에) 이는 방문자가 http 또는 https를 사용하는지 감지하고 $fastcgi_https 변수를 설정합니다 (phpMyAdmin 구성에서 사용할 것입니다):

vi /etc/nginx/nginx.conf

| [...] http { [...] ## HTTPS 사용 시 감지 map $scheme $fastcgi_https { default off; https on; } [...] } [...] |

nginx를 다시 로드하는 것을 잊지 마세요:

service nginx reload

그런 다음 nginx Directives 필드로 다시 가서 fastcgi_param HTTPS on; 대신 fastcgi_param HTTPS $fastcgi_https; 라인을 추가하여 http 및 https 요청 모두에 대해 phpMyAdmin을 사용할 수 있도록 합니다:

| location /phpmyadmin { root /usr/share/; index index.php index.html index.htm; location ~ ^/phpmyadmin/(.+\.php)$ { try_files $uri =404; root /usr/share/; fastcgi_pass unix:/var/run/php5-fpm.sock; fastcgi_param HTTPS $fastcgi_https; # <-- 이 라인을 추가하세요 fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $request_filename; include /etc/nginx/fastcgi_params; fastcgi_param PATH_INFO $fastcgi_script_name; fastcgi_buffer_size 128k; fastcgi_buffers 256 4k; fastcgi_busy_buffers_size 256k; fastcgi_temp_file_write_size 256k; fastcgi_intercept_errors on; } location ~* ^/phpmyadmin/(.+\.(jpg|jpeg|gif|css|png|js|ico|html|xml|txt))$ { root /usr/share/; } } location /phpMyAdmin { rewrite ^/* /phpmyadmin last; } |

15 Mailman 설치

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

apt-get install mailman

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

지원할 언어: <– en (영어)
누락된 사이트 목록 <– 확인

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를 눌러 mailman 소유자에게 알리세요… <– ENTER

root@server1:~#

그 후 /etc/aliases를 엽니다…

vi /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 데몬을 시작합니다:

service mailman start

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

nginx의 포트 8081에 있는 ISPConfig 앱 vhost는 Mailman 구성을 포함하고 있으므로 http://server1.example.com:8081/cgi-bin/mailman/admin/ 또는 http://server1.example.com:8081/cgi-bin/mailman/listinfo/를 사용하여 Mailman에 접근할 수 있습니다.

웹사이트에서 Mailman을 사용하려면, nginx는 전역 별칭이 없기 때문에 (즉, 모든 vhost에 대해 정의할 수 있는 별칭) 이 별칭을 Mailman에 접근하려는 vhost에 대해 정의해야 합니다.

이를 위해 ISPConfig의 웹사이트 옵션 탭의 nginx Directives 필드에 다음을 붙여넣습니다:

| location /cgi-bin/mailman { root /usr/lib/; fastcgi_split_path_info (^/cgi-bin/mailman/[^/]*)(.*)$; include /etc/nginx/fastcgi_params; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_param PATH_INFO $fastcgi_path_info; fastcgi_param PATH_TRANSLATED $document_root$fastcgi_path_info; fastcgi_intercept_errors on; fastcgi_pass unix:/var/run/fcgiwrap.socket; } location /images/mailman { alias /usr/share/images/mailman; } location /pipermail { alias /var/lib/mailman/archives/public; autoindex on; } |

이것은 vhost에 대한 /cgi-bin/mailman/ 별칭을 정의하며, 이는 http:///cgi-bin/mailman/admin/에서 리스트의 Mailman 관리 인터페이스에 접근할 수 있음을 의미하며, 메일링 리스트 사용자에 대한 웹 페이지는 http:///cgi-bin/mailman/listinfo/에서 찾을 수 있습니다.

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

Share: X/Twitter LinkedIn

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

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