CentOS 7 서버 초기화 및 핵심 서비스 구축 가이드

시스템 초기화 및 패키지 저장소 최적화

CentOS 7의 기본 저장소 속도를 개선하기 위해 미러 서버를 변경하고 필수 도구를 설치합니다. 기존 설정 파일을 백업하거나 삭제한 뒤, 신뢰할 수 있는 미러 서버로 교체합니다.

# 기존 리포지토리 파일 정리
rm -f /etc/yum.repos.d/*.repo

# 최적화된 미러 리포지토리 다운로드 (BFSU 및 Aliyun 활용)
curl -L "http://mirrors.163.com/.help/CentOS7-Base-163.repo" -o /etc/yum.repos.d/CentOS7-Base.repo
curl -L "http://mirrors.aliyun.com/repo/epel-7.repo" -o /etc/yum.repos.d/epel-7.repo
curl -L "http://mirrors.bfsu.edu.cn/docker-ce/linux/centos/docker-ce.repo" -o /etc/yum.repos.d/docker-ce.repo

# 내부 주소 변환 (필요 시 수행)
sed -i 's/mirrors.163.com/mirrors.bfsu.edu.cn/g' /etc/yum.repos.d/CentOS7-Base.repo
sed -i 's/mirrors.aliyun.com/mirrors.bfsu.edu.cn/g' /etc/yum.repos.d/epel-7.repo

# 패키지 업데이트 및 필수 유틸리티 설치
yum clean all
yum makecache
yum update -y
yum install -y dnf yum-utils device-mapper-persistent-data lvm2 net-tools git make gcc zstd axel

Docker 엔진 및 컨테이너 환경 구축

최신 Docker 엔진을 설치하고 성능 향상을 위한 미러 설정을 진행합니다.

# Docker 설치
yum install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin

# Docker 데몬 설정 (저장 경로 및 레지스트리 미러링)
mkdir -p /etc/docker
cat <<EOF > /etc/docker/daemon.json
{
  "data-root": "/var/lib/docker-data",
  "registry-mirrors": ["http://hub-mirror.c.163.com"],
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "50m",
    "max-file": "3"
  }
}
EOF

# 서비스 활성화 및 시작
systemctl daemon-reload
systemctl enable --now docker

Docker Compose를 이용한 주요 서비스 운영

Portainer와 Nginx Proxy Manager(NPM)를 활용하여 컨테이너 관리 및 리버스 프록시 환경을 구성합니다.

# 공용 네트워크 생성
docker network create --subnet=10.20.0.0/24 service_mesh

# Nginx Proxy Manager 설정 예시
mkdir -p /srv/npm/data
cat <<EOF > /srv/npm/docker-compose.yml
services:
  proxy:
    image: jc21/nginx-proxy-manager:latest
    container_name: nginx-proxy-manager
    restart: unless-stopped
    ports:
      - "80:80"
      - "81:81"
      - "443:443"
    volumes:
      - ./data:/data
      - ./letsencrypt:/etc/letsencrypt
    networks:
      service_mesh:
        ipv4_address: 10.20.0.10
EOF

# Portainer 설치
docker volume create portainer_vol
docker run -d -p 9443:9443 --name=portainer_manager --restart=always \
-v /var/run/docker.sock:/var/run/docker.sock \
-v portainer_vol:/data portainer/portainer-ce:latest

커널 업데이트 및 TCP BBR 활성화

네트워크 성능 최적화를 위해 최신 커널로 업데이트하고 구글의 BBR 혼잡 제어 알고리즘을 적용합니다.

# ELRepo 저장소 등록 및 최신 커널 설치
rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org
yum install -y https://www.elrepo.org/elrepo-release-7.el7.elrepo.noarch.rpm
yum --enablerepo=elrepo-kernel install kernel-ml -y

# 기본 부팅 커널 설정 및 재부팅
grub2-set-default 0
# reboot 명령어로 재시작 필요

# BBR 설정 적용 (재부팅 후 수행)
cat <<EOF >> /etc/sysctl.conf
net.core.default_qdisc = fq
net.ipv4.tcp_congestion_control = bbr
EOF
sysctl -p

개발 언어 환경 설정 (Node.js & Go)

런타임 환경을 수동 설치하여 버전 관리의 유연성을 확보합니다.

# Node.js 수동 설치 (v18 기준)
NODE_VER="v18.16.0"
curl -L "https://nodejs.org/dist/$NODE_VER/node-$NODE_VER-linux-x64.tar.xz" -o /tmp/node.tar.xz
tar -xJf /tmp/node.tar.xz -C /usr/local/lib/
ln -sf /usr/local/lib/node-$NODE_VER-linux-x64/bin/node /usr/bin/node
ln -sf /usr/local/lib/node-$NODE_VER-linux-x64/bin/npm /usr/bin/npm

# Go 언어 설정
GO_VER="1.20.4"
curl -L "https://go.dev/dl/go$GO_VER.linux-amd64.tar.gz" -o /tmp/go.tar.gz
tar -C /usr/local -xzf /tmp/go.tar.gz
echo 'export PATH=$PATH:/usr/local/go/bin' >> /etc/profile
source /etc/profile

SSH 보안 강화 및 방화벽 설정

무차별 대입 공격을 방어하기 위해 SSH 설정을 변경하고 sshguard를 도입합니다.

# SSH 포트 변경 및 RSA 인증 활성화
sed -i 's/#Port 22/Port 2222/' /etc/ssh/sshd_config
sed -i 's/#PubkeyAuthentication yes/PubkeyAuthentication yes/' /etc/ssh/sshd_config
systemctl restart sshd

# sshguard 설치 및 연동 (EPEL 필요)
yum install -y sshguard
cat <<EOF > /etc/sshguard.conf
BACKEND="/usr/libexec/sshguard/sshg-fw-firewalld"
LOGREADER="LANG=C /usr/bin/journalctl -afb -p info -n1 -t sshd -o cat"
THRESHOLD=20
BLOCK_TIME=600
EOF
systemctl enable --now sshguard

네트워크 연결 상태 분석

현재 서버에 연결된 클라이언트 IP와 상태별 연결 수를 요약하는 명령입니다.

netstat -ntu | awk '
/^tcp/ {
    split($(NF-1), addr, ":");
    ip = (addr[1] ~ /^[0-9.]+$/) ? addr[1] : addr[4];
    ip_list[ip]++;
    state_list[$NF]++;
    total++;
} 
END {
    for (i in ip_list) printf "%-20s %d\n", i, ip_list[i];
    print "---------------------------";
    for (s in state_list) printf "%-20s %d\n", s, state_list[s];
    printf "TOTAL CONNECTIONS: %d\n", total;
}'

태그: CentOS7 docker BBR LinuxSecurity SystemAdmin

7월 16일 04:23에 게시됨