서버 개발/Nginx

Nginx 웹서버 보안 강화-SSL 인증서 발급

itsdev 2025. 4. 5. 23:23

 

앞서 PHP 설정 단계에서는 php.ini에서 disable_functions 등을 통해 PHP 수준에서 보안을 강화했었다.
이번에는 웹 서버 레벨에서의 보안 설정을 해보자. 특히 HTTPS 적용과 UFW 방화벽 설정을 통해 외부 공격에 대한 방어력을 높일 수 있다. 


📚 목차

  1. Nginx에서 HTTPS 설정
  2. UFW 방화벽 구성

1. Nginx에서 HTTPS 설정

HTTPS는 데이터를 암호화하여 전송하는 방식으로, 사이트 보안의 핵심 요소이다.
이를 적용하려면 먼저 SSL 인증서를 발급받고, Nginx 설정 파일을 수정해야 한다.

1.1 SSL 인증서 발급

🔸 무료 인증서 - Let's Encrypt

Let's Encrypt는 무료로 SSL 인증서를 제공하는 인증기관(CA)이다.
인증서 발급을 자동화하기 위해 Certbot 도구를 사용한다.

sudo apt install certbot python3-certbot-nginx
sudo certbot --nginx

 

🔸 Let’s Encrypt 재발급하는 방법 (Certbot + Nginx 기준)

sudo certbot --nginx -d itsyour.kr -d www.itsyour.kr
 

성공 시 메시지 예:

Congratulations! Your certificate and chain have been saved at: /etc/letsencrypt/live/itsyour.kr/fullchain.pem
 

그리고 자동 갱신 설정 확인:

sudo systemctl list-timers | grep certbot
 
 

🔸 유료 인증서

기업용 서비스나 고객 신뢰도를 고려할 때는 유료 인증서를 구매하여 사용하는 것도 좋은 방법이다.
인증기관(CA)으로부터 인증서를 받은 후, 동일한 방식으로 Nginx에 적용하면 된다.
 
 

1.2 Nginx 설정 파일에 HTTPS 구성 추가

  • /etc/nginx/sites-available/default 또는
  • /etc/nginx/conf.d/default.conf 경로 중 하나를 사용한다.
server {
    listen 443 ssl;
    server_name yourdomain.com;

    ssl_certificate /etc/letsencrypt/live/yourdomain.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/yourdomain.com/privkey.pem;

    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers HIGH:!aNULL:!MD5;
    ssl_prefer_server_ciphers on;

    location / {
        root /var/www/html;
        index index.html index.php;
    }
}

1.3 HTTP → HTTPS 리다이렉트

HTTP 요청을 HTTPS로 강제 리다이렉트하면 보안성이 더욱 향상된다.

server {
    listen 80;
    server_name yourdomain.com;
    return 301 https://$host$request_uri;
}

2. 방화벽 구성

방화벽은 외부의 불필요하거나 악의적인 접근을 차단하여 서버를 보호하는 중요한 보안 요소이다.
Ubuntu 서버에서는 UFW (Uncomplicated Firewall)를 통해 손쉽게 방화벽을 설정할 수 있다.

2.1 UFW 설치 및 활성화

sudo apt install ufw
sudo ufw allow 'Nginx Full'
sudo ufw enable

Nginx Full은 HTTP(80)과 HTTPS(443) 포트를 동시에 허용하는 기본 규칙이다.

2.2 개별 포트 허용

sudo ufw allow 80
sudo ufw allow 443

포트를 별도로 지정하여 더 세밀하게 제어할 수도 있다.

2.3 방화벽 상태 확인

sudo ufw status

현재 허용된 포트와 서비스 목록을 확인할 수 있다.

ufw status 목록 예시
ufw status 목록 예시

2.4 추가 보안 - SSH 제한

기본 SSH 포트(22번)는 외부 공격의 타겟이 되기 쉬우므로 필요 시 포트를 변경하거나 접근을 제한할 수 있다.

# 예: 특정 IP만 SSH 허용
sudo ufw allow from 192.168.0.100 to any port 22

또는 SSH 포트를 22 → 2222 등으로 변경 후 아래와 같이 허용한다.

sudo ufw allow 2222/tcp

마무리

보안은 단순히 설정 하나로 끝나는 것이 아니라, 다층적인 접근이 필요하다.
PHP 수준에서의 함수 제한, HTTPS 적용, 방화벽 구성 등은 웹서버 운영자라면 반드시 갖추어야 할 기본 보안 수칙이다. 
정기적인 업데이트와 점검을 통해 안전하고 신뢰할 수 있는 서버 환경을 유지하자. 

 

 

이전글: Nginx와 PHP8.4-FPM 연동 - location 블록 설정과 통신 방식

 

Nginx와 PHP8.4-FPM 연동 - location 블록 설정과 통신 방식

PHP-FPM과 연동할 때, Nginx 설정에서 가장 중요한 부분 중 하나는 location 블록 설정이다. 이 설정을 통해 PHP 요청이 어떻게 처리될지, 어떤 방식으로 PHP-FPM과 통신할지를 정의할 수 있다.이번 포스트

itsdev.tistory.com

 

다음글: PHP-FPM + Nginx 테스트 및 디버깅

 

PHP-FPM + Nginx 테스트 및 디버깅

Nginx와 PHP-FPM의 설정을 모두 마친 후에는 반드시 작동 여부를 테스트하고, 문제 발생 시 빠르게 디버깅할 수 있어야 한다.특히 운영 환경에서는 설정 오류나 소켓 연결 실패, 권한 문제 등이 실시

itsdev.tistory.com

 

728x90
반응형
이 포스팅은 제휴마케팅 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다.