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

완벽한 서버 – CentOS 7 (Apache2, Dovecot, ISPConfig 3)

이 튜토리얼은 ISPConfig 3 설치를 위한 CentOS 7 x86_64 서버를 준비하는 방법과 ISPConfig 3을 설치하는 방법을 보여줍니다. ISPConfig 3은 웹 브라우저를 통해 다음 서비스를 구성할 수 있는 웹 호스팅 제어판입니다: Apache 웹 서버, Postfix 메일 서버, MySQL, BIND 네임서버, PureFTPd, SpamAssassin, ClamAV, Mailman 등. 3.0.4 버전부터 ISPConfig는 Apache 외에도 nginx 웹 서버에 대한 완전한 지원을 제공합니다. 이 튜토리얼은 nginx가 아닌 Apache를 사용하는 서버 설정을 다룹니다.

ISPConfig 3 매뉴얼

ISPConfig 3 사용 방법을 배우기 위해 ISPConfig 3 매뉴얼을 다운로드하는 것을 강력히 추천합니다.

300페이지가 넘는 이 매뉴얼은 ISPConfig의 개념(관리자, 재판매자, 클라이언트)을 다루고, ISPConfig 3 설치 및 업데이트 방법을 설명하며, ISPConfig의 모든 양식 및 양식 필드에 대한 참조와 유효한 입력의 예를 포함하고, ISPConfig 3에서 가장 일반적인 작업에 대한 튜토리얼을 제공합니다. 또한 서버를 더 안전하게 만드는 방법을 설명하고 마지막에 문제 해결 섹션이 포함되어 있습니다.

1 요구 사항

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

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

2 사전 참고

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

3 키보드 레이아웃 설정

현재 CentOS 7 설치 프로그램에는 버그가 있어 설치 중 선택한 것과 다른 키보드 레이아웃으로 셸에 들어갈 수 있습니다. 이 버그에 걸리면, localectl 명령어를 사용하여 올바른 키보드로 전환할 수 있습니다(제 경우에는 독일어 키보드 레이아웃인 “de”).

localectl set-keymap de

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

localectl list-keymaps

이 튜토리얼의 끝에서 ISPConfig를 설치하고자 하므로, 기본 CentOS 방화벽을 지금 비활성화합니다. 물론, 방화벽을 켜두고 필요에 맞게 구성할 수 있지만(그렇다면 나중에 다른 방화벽을 사용하지 않아야 합니다. 왜냐하면 CentOS 방화벽과 충돌할 가능성이 높기 때문입니다).

실행:

systemctl stop firewalld.service  
systemctl disable firewalld.service

이제 다음 단계에서 필요한 기본 네트워크 도구와 셸 기반 편집기를 설치하겠습니다:

yum -y install nano wget net-tools NetworkManager-tui

설치 중 네트워크 카드를 구성하지 않았다면 지금 구성할 수 있습니다. 실행:

nmtui

… 그리고 연결 편집으로 이동합니다:

네트워크 인터페이스를 선택합니다:

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

다음으로 네트워크 설정에서 변경한 내용을 확인하기 위해 확인을 선택합니다.

그리고 nmtui 네트워크 구성 도구를 닫기 위해 종료를 선택합니다.

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

ifconfig
[root@server1 ~]# ifconfig
ens33: flags=4163  mtu 1500
        inet 192.168.1.100  netmask 255.255.255.0  broadcast 192.168.1.255
        inet6 fe80::20c:29ff:fecd:cc52  prefixlen 64  scopeid 0x20

        ether 00:0c:29:cd:cc:52  txqueuelen 1000  (Ethernet)
        RX packets 55621  bytes 79601094 (75.9 MiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 28115  bytes 2608239 (2.4 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 0  (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

네트워크 카드가 여기에 표시되지 않으면 부팅 시 활성화되지 않은 것입니다. 이 경우, /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

를 실행하고 누락된 네임서버를 다시 추가합니다.

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

4 /etc/hosts 조정

다음으로 /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

5 방화벽 구성

(기본 시스템 설치가 끝날 때 방화벽을 이미 비활성화한 경우 이 장을 건너뛸 수 있습니다.)

이 튜토리얼의 끝에서 ISPConfig를 설치하고자 하므로, 기본 CentOS 방화벽을 지금 비활성화합니다. 물론, 방화벽을 켜두고 필요에 맞게 구성할 수 있지만(그렇다면 나중에 다른 방화벽을 사용하지 않아야 합니다. 왜냐하면 CentOS 방화벽과 충돌할 가능성이 높기 때문입니다).

실행:

systemctl stop firewalld.service  
systemctl disable firewalld.service

방화벽을 비활성화합니다.

방화벽이 실제로 비활성화되었는지 확인하려면, 다음을 실행할 수 있습니다:

ip6tables -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 ~]#

6 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

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

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

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

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

rpm -ivh http://dl.fedoraproject.org/pub/epel/7/x86_64/e/epel-release-7-2.noarch.rpm
yum -y install yum-priorities

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

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

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

[epel]
name=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 update

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

yum -y groupinstall 'Development Tools'

8 쿼터

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

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

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="rd.lvm.lv=centos/swap vconsole.font=latarcyrheb-sun16 rd.lvm.lv=centos/root crashkernel=auto  vconsole.keymap=us 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  
# 2014년 9월 21일 일요일에 anaconda에 의해 생성됨  
#  
# 참조에 의해 접근 가능한 파일 시스템은 '/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

쿼터를 활성화합니다.

9 Apache, MySQL, phpMyAdmin 설치

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

yum -y install ntp httpd mod_ssl mariadb-server php php-mysql php-mbstring phpmyadmin
Share: X/Twitter LinkedIn

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

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