앞서 PHP 설정 단계에서는 php.ini
에서 disable_functions
등을 통해 PHP 수준에서 보안을 강화했었다.
이번에는 웹 서버 레벨에서의 보안 설정을 해보자. 특히 HTTPS 적용과 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
현재 허용된 포트와 서비스 목록을 확인할 수 있다.
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
'서버 개발 > Nginx' 카테고리의 다른 글
당신의 서버는 안전한가요? 해커가 가장 싫어하는 nginx.conf 설정 7가지 (2) | 2025.05.15 |
---|---|
PHP-FPM + Nginx 테스트 및 디버깅 (1) | 2025.04.17 |
Nginx와 PHP8.4-FPM 연동 - location 블록 설정과 통신 방식 (1) | 2025.04.04 |
Ubuntu에서 Nginx 최신 버전 설치 방법 (Ondřej Surý PPA 저장소 사용) (0) | 2025.04.02 |