Notice
Recent Posts
Recent Comments
Link
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
Archives
Today
Total
관리 메뉴

밤빵's 개발일지

단체개발일지: 서버 보안?! 본문

단체개발일지

단체개발일지: 서버 보안?!

최밤빵 2024. 9. 22. 22:03

🤓서버 보안

지금까지 두 번의 프로젝트를 진행했지만, 아직 서버 보안에 대해 깊이 있게 고민해 본 적이 없었다. 이번 기회를 통해 서버 보안의 기초 개념을 공부하고, 프로젝트에서 실제로 적용할 수 있는 방법들을 정리해 보기로 했다. 서버 보안은 해킹과 같은 외부 공격으로부터 애플리케이션과 데이터를 보호하는 매우 중요한 부분이다. 보안의 기본 원칙을 이해하고 실천하는 것은 서버 안정성과 신뢰성을 높이는 핵심적인 요소이다😆

 

▶ 서버 보안의 중요성

서버 보안은 서버와 그 위에 운영되는 애플리케이션을 외부의 위협으로부터 보호하기 위한 여러 가지 방어 기법과 원칙을 말한다. 서버 보안이 제대로 구축되지 않으면, 데이터 유출, 서비스 중단, 악성 코드 감염 등 심각한 문제를 초래할 수 있다. 특히 개인정보나 금융 정보와 같은 민감한 데이터를 다루는 경우, 서버 보안은 필수적이다. 그렇다면 서버 보안을 강화하기 위해 어떤 기본적인 조치들이 필요할까

 

▶ 서버 보안의 기본 요소

 

▷방화벽 설정

방화벽은 서버와 외부 네트워크 간의 트래픽을 필터링해서, 허가되지 않은 접근을 차단하는 역할을 한다. 방화벽은 외부의 불법적인 접근 시도를 감지하고, 미리 설정된 규칙에 따라 트래픽을 차단한다. 공격자가 서버에 접속하는 것을 방지할 수 있다.

# UFW (Uncomplicated Firewall) 사용 예시
sudo ufw allow 22/tcp   # SSH 접속 허용
sudo ufw allow 80/tcp   # HTTP 접속 허용
sudo ufw allow 443/tcp  # HTTPS 접속 허용
sudo ufw enable         # 방화벽 활성화

→ 위와 같이 방화벽 설정을 통해 특정 포트에만 접근을 허용하고, 불필요한 포트는 차단할 수 있다. 서버의 보안을 강화하는 가장 기본적인 단계이다.

 

▷SSH 보안

원격 접속을 위해 SSH(Secure Shell)를 사용하는 경우, 기본 설정을 변경하여 보안을 강화할 수 있다. 예를 들어, 기본 포트인 22번 포트를 다른 번호로 변경하거나, 비밀번호 인증 대신 공개 키 기반 인증을 사용하는 방법이 있다. 이를 통해 브루트 포스(무작위 대입 공격)로부터 서버를 보호할 수 있다.

# SSH 포트 변경 (sshd_config 파일 수정)
sudo nano /etc/ssh/sshd_config

# 포트 변경 (예: 2222)
Port 2222

        # 공개 키 인증 사용
PubkeyAuthentication yes
PasswordAuthentication no

→ 비밀번호 인증을 비활성화하고, 공개 키 인증을 설정하면 보안성이 크게 향상된다.

 

▷ SSH?

SSH(Secure Shell)는 네트워크 상에서 안전하게 원격 접속을 할 수 있도록 도와주는 프로토콜이다. 주로 원격 서버에 접속하거나 명령을 실행할 때 사용되며, 통신 내용을 암호화하여 데이터 유출이나 해킹으로부터 보호할 수 있다.

 

SSH의 주요 특징:

  • 암호화된 통신: SSH는 모든 통신을 암호화하여, 중간에서 도청이나 데이터 변조를 방지한다.
  • 원격 로그인: SSH는 서버에 안전하게 접속하여 원격으로 명령을 실행하고 파일을 전송할 수 있다.
  • 공개 키 인증: 비밀번호 대신 공개 키-개인 키 방식을 사용하여 더 높은 보안성을 제공한다.

SSH는 서버 관리자나 개발자가 원격에서 서버를 제어하고 관리하는 데 매우 유용하고, 보안적인 면에서 필수적인 도구이다.

 

▶ 소프트웨어 업데이트

서버에 설치된 운영체제와 애플리케이션의 소프트웨어는 항상 최신 버전으로 유지해야 한다. 해커는 종종 알려진 보안 취약점을 악용하여 서버를 공격하는데, 이를 방지하기 위해서는 소프트웨어의 보안 패치를 주기적으로 적용해야 한다.

# Ubuntu 시스템 업데이트 예시
sudo apt update
sudo apt upgrade

→ 정기적인 업데이트는 새로운 보안 취약점으로부터 서버를 보호하는 가장 효과적인 방법 중 하나이다.

 

▶HTTPS 적용

서버와 클라이언트 간의 통신을 HTTPS(SSL/TLS)로 암호화하면, 데이터가 중간에서 도청되거나 변조되는 것을 막을 수 있다. HTTPS는 특히 로그인 페이지, 결제 페이지와 같은 민감한 정보를 다루는 웹 애플리케이션에서 필수적이다.

# Let's Encrypt를 사용한 HTTPS 인증서 발급 예시
sudo apt install certbot python3-certbot-nginx
sudo certbot --nginx -d yourdomain.com -d www.yourdomain.com

→ 이렇게 HTTPS를 적용하면, 브라우저와 서버 간의 통신이 암호화되어 안전하게 데이터를 주고받을 수 있다.

 

▶ 로그 모니터링

서버에서 발생하는 로그를 주기적으로 모니터링하면, 비정상적인 접근 시도를 빠르게 감지하고 대응할 수 있다. syslog, auth.log 같은 시스템 로그를 확인함으로써, 누군가 불법적으로 서버에 접근하려는 시도를 쉽게 파악할 수 있다.

# auth.log 확인 예시
sudo tail -f /var/log/auth.log

→ 로그 모니터링을 통해 보안 침해를 실시간으로 감시하고, 문제가 발생했을 때 신속하게 대응할 수 있다.

 

▶ 추가적인 보안 강화 방법

 

▷ 2단계 인증(2FA)

2단계 인증은 비밀번호 외에 추가적인 인증 수단을 요구하여, 계정 탈취로부터 서버를 더 안전하게 보호하는 방법이다. 예를 들어, 구글 OTP와 같은 2단계 인증을 SSH에 적용할 수 있다.

 

▷ 사용자 권한 최소화

서버에서는 최소 권한 원칙(Least Privilege Principle)을 준수하여, 사용자가 필요한 권한만을 부여하는 것이 중요하다. 불필요한 관리 권한을 가진 계정을 제한하고, 각 사용자는 자신의 작업에 필요한 권한만 부여받도록 설정해야 한다.

 

▷ 자동 백업 설정

서버 데이터를 정기적으로 자동 백업하는 것은 매우 중요하다. 보안 공격이나 시스템 장애로 인해 데이터가 손실되더라도, 백업이 있으면 신속하게 복구할 수 있다.

 

▶결론

방화벽 설정, SSH 보안, 소프트웨어 업데이트, HTTPS 적용, 로그 모니터링과 같은 기본적인 보안 조치는 서버의 안전성을 높이는 중요한 방법들이다. 추가적으로 2단계 인증, 사용자 권한 최소화, 자동 백업과 같은 추가적인 보안 강화 방법도 함께 고려해야 한다. 서버 보안은 단순히 한 번 설정하고 끝나는 것이 아니라, 지속적인 관리와 모니터링이 필요한 영역이다.