CB정보통신 인프라 보안 구축 — 7개 파트 구축 · 통합 검증 완료 ✓

PART 04 // WEB · DMZ

누구나 보되,
아무나 못 건드리는

DMZ 에 게시판 기능이 있는 웹 서버를 세웠습니다. 웹 페이지는 누구에게나 열고, 서버 관리는 보안 담당자 한 사람에게만 열었습니다.

대민 서비스는
DMZ 에 따로

172.16.10.10CB-WEB
:80 · :443PUBLIC
:2222SSH ADMIN ONLY
PDO → :3306DB CONNECTION

// WHAT WE BUILT

Web / DMZ에서 만든 것

APACHE + PHP

게시판이 있는 웹

Ubuntu 22.04 에 Apache 와 PHP 를 올리고, 서버팜의 MySQL 과 PDO 로 연동한 게시판(list · write)을 올렸습니다.

HARDENING

정보는 덜 드러나게

ServerTokens Prod · ServerSignature Off 로 버전을 숨기고, 디렉터리 목록 · SSI · CGI 를 껐습니다.

SSH :2222

기본 포트를 바꿨다

모든 서버의 SSH 를 2222 로 옮기고 root 로그인을 막았습니다. 방화벽 정책상 담당자 PC 만 닿습니다.

// CONFIGURATION

실제로 넣은 설정

장비에 입력한 순서 그대로입니다. 계정 비밀번호는 공개 사이트라 가렸습니다.

STEP 01

네트워크

netplan 으로 DMZ 주소와 게이트웨이를 줍니다.

/etc/netplan/00-cb.yaml
network:
  version: 2
  ethernets:
    ens160:
      addresses: [172.16.10.10/24]
      routes: [{to: default, via: 172.16.10.1}]
$ sudo netplan apply && sudo hostnamectl set-hostname cb-web

STEP 02

SSH 포트 변경

전 서버 공통 작업입니다.

bash
sudo sed -i 's/^#\?Port .*/Port 2222/' /etc/ssh/sshd_config
sudo sed -i 's/^#\?PermitRootLogin .*/PermitRootLogin no/' /etc/ssh/sshd_config
sudo systemctl disable --now ssh.socket
sudo systemctl restart ssh

STEP 03

Apache 하드닝

설치 후 정보 노출을 줄이는 설정을 켭니다.

/etc/apache2/conf-available/hardening.conf
ServerTokens Prod
ServerSignature Off
<Directory /var/www/html>
    Options -Indexes -Includes -ExecCGI
</Directory>
$ sudo a2enconf hardening && sudo systemctl reload apache2

STEP 04

DB 연동

접속 정보는 웹 루트 밖(/var/www/private)에 둡니다. 비밀번호는 가렸습니다.

/var/www/private/db.php
<?php
$pdo = new PDO("mysql:host=192.168.30.20;dbname=cbboard;charset=utf8mb4",
    "boarduser", "********",
    [PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION]);

// VERIFICATION

검증 완료

curl
cb-web$ ss -tlnp | grep 2222
LISTEN 0 128 0.0.0.0:2222        ✓ sshd

cb-web$ curl -I http://127.0.0.1
HTTP/1.1 200 OK
Server: Apache                    ✓ 버전 숨김

outside$ curl -s http://203.0.113.20/list.php | head -1
<!doctype html>                   ✓ 게시판 응답
  • 로컬 · 외부 모두 200 응답curl 127.0.0.1 · 203.0.113.20
  • Server 헤더에 버전 없음ServerTokens Prod
  • SSH 2222 · root 로그인 차단ss -tlnp
  • 게시판 글쓰기 → DB 저장list.php · write.php

// PITFALLS

겪었던 문제와 해결

증상원인해결
SSH 포트가 안 바뀜ssh.socket 이 22 를 잡고 있음ssh.socket 비활성화
게시판 DB 에러DB 쪽 계정 호스트 불일치'boarduser'@'172.16.10.10'