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

완벽한 서버 CentOS 7.4: Apache, Postfix, Dovecot, Pure-FTPD, BIND 및 ISPConfig 3.1 설치

이 튜토리얼은 CentOS 7.4 (64Bit) 서버에 ISPConfig 3.1 설치를 보여줍니다. ISPConfig는 웹 브라우저를 통해 다음 서비스를 구성할 수 있는 웹 호스팅 제어판입니다: Apache 웹 서버, Postfix 메일 서버, MySQL, BIND 네임서버, PureFTPd, SpamAssassin, ClamAV, Mailman 등.

1 요구 사항

이러한 시스템을 설치하려면 다음이 필요합니다:

  • Centos 7.4 최소 서버 시스템. 이는 우리의 Centos 7 최소 서버 튜토리얼에 설명된 대로 처음부터 설치된 서버이거나, 최소 Centos 7.4 설정이 설치된 호스팅 회사의 가상 서버 또는 루트 서버일 수 있습니다.
  • 빠른 인터넷 연결.

2 사전 참고

이 튜토리얼에서는 호스트 이름 server1.example.com과 IP 주소 192.168.0.100 및 게이트웨이 192.168.0.1을 사용합니다. 이러한 설정은 귀하의 경우 다를 수 있으므로 적절한 곳에서 교체해야 합니다.

CentOS 플랫폼에서는 ISPConfig에서 HHVM 및 XMPP가 아직 지원되지 않음을 유의하십시오. ISPConfig 내에서 XMPP 채팅 서버를 관리하거나 ISPConfig 웹사이트에서 HHVM(Hip Hop Virtual Machine)을 사용하려면 CentOS 7.4 대신 Debian 또는 Ubuntu 16.04를 서버 OS로 사용하십시오.

3 서버 준비

키보드 레이아웃 설정

서버의 키보드 레이아웃이 귀하의 키보드와 일치하지 않는 경우, 적절한 키보드로 전환할 수 있습니다(제 경우에는 독일어 키보드 레이아웃인 “de”로, localectl 명령어 사용):

localectl set-keymap de

사용 가능한 모든 키맵 목록을 보려면 다음을 실행하십시오:

localectl list-keymaps

이 튜토리얼의 끝에서 ISPConfig를 설치하고 싶습니다. ISPConfig는 제가 방화벽으로 사용할 Bastille 방화벽 스크립트를 포함하고 있으므로, 이제 기본 CentOS 방화벽을 비활성화합니다. 물론 CentOS 방화벽을 켜두고 필요에 맞게 구성할 수도 있습니다(하지만 그러면 나중에 다른 방화벽을 사용하지 않아야 합니다. 그렇지 않으면 CentOS 방화벽과 충돌할 가능성이 높습니다).

다음 명령어를 실행하여 CentOS 방화벽을 중지하고 비활성화합니다:

yum -y install net-tools  
systemctl stop firewalld.service  
systemctl disable firewalld.service

여기서 오류가 발생하더라도 괜찮습니다. 이는 방화벽이 설치되지 않았음을 나타냅니다.

그런 다음 방화벽이 실제로 비활성화되었는지 확인해야 합니다. 그렇게 하려면 다음 명령어를 실행하십시오:

iptables -L

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

[root@server1 ~]# iptables -L  
Chain INPUT (policy ACCEPT)  
target prot opt source destination
Chain FORWARD (policy ACCEPT)  
target prot opt source destination
Chain OUTPUT (policy ACCEPT)  
target prot opt source destination

또는 firewall-cmd 명령어를 사용하십시오:

firewall-cmd --state
[root@server1 ~]# firewall-cmd --state  
not running  
[root@server1 ~]#

이제 네트워크 구성 편집기와 다음 단계에서 구성 파일을 편집하는 데 사용할 셸 기반 편집기 “nano”를 설치하겠습니다:

yum -y install nano wget NetworkManager-tui

설치 중에 네트워크 카드를 구성하지 않았다면 지금 할 수 있습니다. 다음을 실행하십시오…

nmtui

… 그리고 연결 편집으로 이동하십시오:

네트워크 인터페이스를 선택하십시오:

그런 다음 네트워크 세부정보를 입력하십시오 - DHCP를 비활성화하고 정적 IP 주소, 넷마스크, 게이트웨이 및 하나 또는 두 개의 네임서버를 입력한 후 확인을 누르십시오:

다음으로 네트워크 설정에서 변경 사항을 확인하기 위해 확인을 선택하십시오.

그리고 nmtui 네트워크 구성 도구를 닫으려면 종료를 선택하십시오.

이제 다음을 실행하여 설치 프로그램이 IP 주소를 올바르게 가져왔는지 확인해야 합니다:

ifconfig
[root@localhost ~]# ifconfig  
ens33: flags=4163 mtu 1500  
 inet 192.168.0.100 netmask 255.255.255.0 broadcast 192.168.0.255  
 inet6 fe80::20c:29ff:fe1a:3d8e prefixlen 64 scopeid 0x20  
 ether 00:0c:29:1a:3d:8e txqueuelen 1000 (Ethernet)  
 RX packets 184972 bytes 256696909 (244.8 MiB)  
 RX errors 0 dropped 0 overruns 0 frame 0  
 TX packets 62983 bytes 7236189 (6.9 MiB)  
 TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0  
  
lo: flags=73 mtu 65536  
 inet 127.0.0.1 netmask 255.0.0.0  
 inet6 ::1 prefixlen 128 scopeid 0x10  
 loop txqueuelen 1 (Local Loopback)  
 RX packets 0 bytes 0 (0.0 B)  
 RX errors 0 dropped 0 overruns 0 frame 0  
 TX packets 0 bytes 0 (0.0 B)  
 TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0  
  
[root@localhost ~]#

네트워크 카드가 거기에 표시되지 않으면 부팅 시 활성화되지 않은 것입니다. 이 경우 /etc/sysconfig/network-scripts/ifcfg-eth0 파일을 열어야 합니다:

nano /etc/sysconfig/network-scripts/ifcfg-ens33

그리고 ONBOOT을 yes로 설정하십시오:

[...]  
ONBOOT=yes  
[...]  

그리고 서버를 재부팅하십시오.

/etc/resolv.conf를 확인하여 이전에 구성한 모든 네임서버가 나열되어 있는지 확인하십시오:

cat /etc/resolv.conf

네임서버가 누락된 경우 다음을 실행하십시오:

nmtui

그리고 누락된 네임서버를 다시 추가하십시오.

이제 구성으로 넘어갑니다…

/etc/hosts 및 /etc/hostname 조정

다음으로 /etc/hosts를 편집합니다. 다음과 같이 만드십시오:

nano /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4  
192.168.1.100   server1.example.com     server1  
  
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6

/etc/hostname 파일에서 호스트 이름을 설정하십시오. 이 파일에는 완전한 도메인 이름(예: 제 경우에는 server1.example.com)이 포함되어야 하며, “server1”과 같은 짧은 이름만 포함되어서는 안 됩니다. nano 편집기로 파일을 엽니다:

nano /etc/hostname

그리고 파일에 호스트 이름을 설정하십시오.

server1.example.com

파일을 저장하고 nano를 종료하십시오.

SELinux 비활성화

SELinux는 CentOS의 보안 확장으로, 확장된 보안을 제공해야 합니다. 제 의견으로는 안전한 시스템을 구성하는 데 필요하지 않으며, 일반적으로 장점보다 더 많은 문제를 일으킵니다(어떤 서비스가 예상대로 작동하지 않아 일주일 동안 문제를 해결한 후, 모든 것이 괜찮았고 SELinux가 문제를 일으켰다는 것을 알게 될 때를 생각해 보십시오). 따라서 저는 이를 비활성화합니다(나중에 ISPConfig를 설치하려면 반드시 필요합니다).

/etc/selinux/config를 편집하고 SELINUX=disabled로 설정하십시오:

nano /etc/selinux/config
# 이 파일은 시스템에서 SELinux의 상태를 제어합니다.  
# SELINUX=은 다음 세 가지 값 중 하나를 가질 수 있습니다:  
#     enforcing - SELinux 보안 정책이 시행됩니다.  
#     permissive - SELinux가 시행하는 대신 경고를 출력합니다.  
#     disabled - SELinux 정책이 로드되지 않습니다.  
SELINUX=disabled  
# SELINUXTYPE=은 다음 두 가지 값 중 하나를 가질 수 있습니다:  
#     targeted - 대상 프로세스가 보호됩니다.  
#     mls - 다중 수준 보안 보호.  
SELINUXTYPE=targeted

그 후 시스템을 재부팅해야 합니다:

reboot

4 추가 리포지토리 활성화 및 일부 소프트웨어 설치

먼저 소프트웨어 패키지에 대한 GPG 키를 가져옵니다:

rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY*

그런 다음 CentOS 시스템에서 EPEL 리포지토리를 활성화합니다. 이 튜토리얼에서 설치할 많은 패키지가 공식 CentOS 7 리포지토리에서 사용할 수 없기 때문입니다:

yum -y install epel-release
yum -y install yum-priorities

/etc/yum.repos.d/epel.repo를 편집합니다…

nano /etc/yum.repos.d/epel.repo

… 그리고 [epel] 섹션에 priority=10을 추가합니다:

[epel]  
name=Extra Packages for Enterprise Linux 7 - $basearch  
#baseurl=http://download.fedoraproject.org/pub/epel/7/$basearch  
mirrorlist=https://mirrors.fedoraproject.org/metalink?repo=epel-7&arch=$basearch  
failovermethod=priority  
enabled=1  
priority=10  
gpgcheck=1  
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7  
[...]  

그런 다음 시스템의 기존 패키지를 업데이트합니다:

yum -y update

이제 나중에 필요한 소프트웨어 패키지를 설치합니다:

yum -y groupinstall 'Development Tools'

5 쿼터

(제가 선택한 파티션 구성 방식과 다른 방식을 선택한 경우, 쿼터가 필요한 파티션에 적용되도록 이 장을 조정해야 합니다.)

쿼터를 설치하려면 다음 명령어를 실행합니다:

yum -y install quota

이제 웹사이트(/var/www) 및 메일 데이터(var/vmail)가 저장된 파일 시스템에 대해 쿼터가 이미 활성화되어 있는지 확인합니다. 이 예제 설정에서는 하나의 큰 루트 파티션이 있으므로 ‘ / ‘를 검색합니다:

mount | grep ' / '
[root@server1 ~]# mount | grep ' / '  
/dev/mapper/centos-root on / type xfs (rw,relatime,attr2,inode64,noquota)  
[root@server1 ~]#

별도의 /var 파티션이 있는 경우 다음을 사용하십시오:

mount | grep ' /var '

대신. 줄에 “ noquota “라는 단어가 포함되어 있으면 쿼트를 활성화하기 위해 다음 단계를 진행하십시오.

/ (루트) 파티션에서 쿼트 활성화

일반적으로 /etc/fstab 파일에서 쿼트를 활성화하지만, 파일 시스템이 루트 파일 시스템 “ / “인 경우, 쿼트는 Linux 커널의 부팅 매개변수로 활성화해야 합니다.

grub 구성 파일을 편집합니다:

nano /etc/default/grub

GRUB_CMDLINE_LINUX로 시작하는 줄을 검색하고 rootflags=uquota,gquota를 명령줄 매개변수에 추가하여 결과 줄이 다음과 같아 보이도록 합니다:

GRUB_CMDLINE_LINUX="crashkernel=auto rd.lvm.lv=centos/root rd.lvm.lv=centos/swap rhgb quiet rootflags=uquota,gquota"

그리고 다음 명령어를 실행하여 변경 사항을 적용합니다.

cp /boot/grub2/grub.cfg /boot/grub2/grub.cfg_bak  
grub2-mkconfig -o /boot/grub2/grub.cfg

그리고 서버를 재부팅합니다.

reboot

이제 쿼트가 활성화되었는지 확인합니다:

mount | grep ' / '
[root@server1 ~]# mount | grep ' / '  
/dev/mapper/centos-root on / type xfs (rw,relatime,attr2,inode64,usrquota,grpquota)  
[root@server1 ~]#

쿼트가 활성화되면 마운트 옵션 목록에서 “ usrquota,grpquota “를 볼 수 있습니다.

별도의 /var 파티션에서 쿼트 활성화

별도의 /var 파티션이 있는 경우 /etc/fstab을 편집하고 / 파티션에 ,uquota,gquota를 추가합니다( /dev/mapper/centos-var):

nano /etc/fstab
  
#  
# /etc/fstab  
# anaconda에 의해 2014년 9월 21일 일요일 16:33:45에 생성됨  
#  
# 참조에 의해 접근 가능한 파일 시스템은 '/dev/disk' 아래에 유지됩니다.  
# 더 많은 정보는 man 페이지 fstab(5), findfs(8), mount(8) 및/또는 blkid(8)를 참조하십시오.  
#  
/dev/mapper/centos-root /                       xfs     defaults        1 1  
/dev/mapper/centos-var /var                     xfs     defaults,uquota,gquota        1 2  
UUID=9ac06939-7e43-4efd-957a-486775edd7b4 /boot                   xfs     defaults        1 3  
/dev/mapper/centos-swap swap                    swap    defaults        0 0

그런 다음 다음을 실행합니다:

mount -o remount /var
quotacheck -avugm  
quotaon -avug

쿼트를 활성화합니다. 쿼트가 활성화된 파티션이 없다는 오류가 발생하면 진행하기 전에 서버를 재부팅하십시오.

6 Apache, MySQL, phpMyAdmin 설치

필요한 패키지를 한 번의 명령어로 설치할 수 있습니다:

yum -y install ntp httpd mod_ssl mariadb-server php php-mysql php-mbstring phpmyadmin

서버가 HTTPOXY 취약점을 통해 공격받지 않도록 HTTP_PROXY 헤더를 Apache에서 전역적으로 비활성화합니다.

httpd.conf 파일의 끝에 Apache 헤더 규칙을 추가합니다:

echo "RequestHeader unset Proxy early" >> /etc/httpd/conf/httpd.conf

그리고 구성 변경 사항을 적용하기 위해 httpd를 재시작합니다.

service httpd restart  
Share: X/Twitter LinkedIn

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

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