본문 바로가기
IT·디지털/IT 개발자 팁

리눅스 서버 보안 설정 완벽 가이드 | 방화벽·SSH·PostgreSQL·SoftEther VPN 실전 구성

by 가을이짱짱 2025. 12. 15.
반응형

규모가 크지 않은 IT 조직에서 서버 보안을 어떻게 지킬 수 있을까?

최근 여러 서비스 기업에서 보안 사고가 잇따르면서, 서버를 직접 운영하는 조직이라면 규모에 상관없이 보안의 중요성을 다시 생각하게 됩니다. 저 역시 보안 담당자는 아니지만, 회사에서 데이터를 다루는 파트를 책임지는 입장에서 기본 방화벽이 구축된 환경에서 직접 서버 보안 설정을 구성하며 느꼈던 경험을 바탕으로 이 글을 정리했습니다.
전담 보안 인력이 없거나, 내부 인력 중심으로 시스템을 운영하는 기업 환경에서도 기본 원칙을 정확히 지키기만 해도 보안 수준을 크게 높일 수 있습니다. 이 글에서는 CentOS와 Ubuntu 계열 모두에서 공통적으로 적용할 수 있는 실전 서버 보안 구성 방법을 단계별로 정리했습니다. 자세한 부분은 포스팅을 기반으로 구글링하시어 설정하시면 됩니다.

1. 보안의 핵심 원칙: 기본 차단(Deny All) 후 필요한 것만 허용

규모가 크지 않은 조직에서 서버 보안을 강화할 때 가장 먼저 고려해야 할 원칙은 “기본적으로는 모두 차단하고, 필요한 서비스만 선택적으로 허용한다”는 것입니다.

  • 웹 서비스(80/443) 이외 외부 공개는 최소화
  • SSH, DB, 관리 포트는 내부망 또는 지정된 IP만 접속 가능
  • 외부 원격 접속이 필요한 경우에도 VPN을 통한 내부망 접근 방식 권장

이 원칙을 기반으로 방화벽, SSH, DB 보안을 단계별로 구성하면 많은 보안 사고를 선제적으로 방어할 수 있습니다.

리눅스 서버 보안 요소를 상징적으로 표현한 가로형 일러스트. 방화벽, Linux, SSH, PostgreSQL, VPN 보안 구조를 아이콘 형태로 배치한 이미지
방화벽, SSH, DB 보안을 단계별로 구성하면 많은 보안 사고를 선제적으로 방어 할 수 있습니다

2. 리눅스 방화벽 구성 – CentOS(CMD) / Ubuntu(UFW)

제가 실제 회사 시스템에서 구성한 방식도 다음 단계와 거의 동일합니다. 방화벽 단계에서 최대한 차단하는 것이 가장 효과적이기 때문에, 어떤 배포판이든 불필요한 포트는 모두 막고, 필요한 포트만 열어두는 방식을 기본으로 합니다.

2-1. CentOS – firewalld

① 현재 설정 확인

firewall-cmd --list-all

② 웹 서비스 포트 허용

firewall-cmd --permanent --add-service=http
firewall-cmd --permanent --add-service=https

③ SSH를 특정 IP로만 제한

firewall-cmd --permanent --add-rich-rule="rule family='ipv4' \
source address='123.123.123.123' port protocol='tcp' port='22' accept"

firewall-cmd --reload

2-2. Ubuntu – UFW

① 기본 정책 – 외부 IN 모두 차단

ufw default deny incoming
ufw default allow outgoing

② 웹 서비스 허용

ufw allow 80/tcp
ufw allow 443/tcp

③ SSH는 지정된 IP만 허용

ufw allow from 123.123.123.123 to any port 22

④ 방화벽 활성화

ufw enable

방화벽 한 단계만 제대로 구성해도 공격 표면이 대폭 줄어듭니다. 하지만 방화벽 설정 권한이 없거나, 외부 시스템을 관리해야 하는 경우에는 아래 기술들이 2차 방어선 역할을 해줍니다.

3. tcp wrapper – 서비스 단위 접근 제어

방화벽이 제어되지 않는 환경에서는 tcp wrapper로 서비스별 접근 제한을 하는 것도 매우 효과적입니다. 제가 회사에서 초기에 방화벽 전에 적용했던 방식이기도 합니다.

3-1. 모든 접근 기본 차단

/etc/hosts.deny
ALL: ALL

3-2. 특정 IP만 허용

/etc/hosts.allow
sshd: 123.123.123.123

이 방식은 방화벽 설정이 여의치 않은 환경에서도 명확하게 허용된 IP만 접속 가능하도록 제한하는데 도움을 줍니다.

4. SSHD 보안 설정 – 실제 운영 환경에서 가장 먼저 손봐야 하는 부분

SSH는 서버 관리의 핵심이자 가장 많은 공격이 들어오는 지점입니다. 회사 서버를 설정하면서 가장 먼저 강화했던 부분도 바로 SSH 설정입니다.

4-1. root 직접 로그인 차단

PermitRootLogin no

4-2. 특정 사용자만 로그인 가능하도록

AllowUsers deployuser adminuser

4-3. 비밀번호 로그인 금지(키 기반 인증만 허용)

PasswordAuthentication no
PubkeyAuthentication yes

4-4. SSH 포트 변경(선택)

Port 2222

이 설정 조합은 무차별 대입 공격 차단에 효과적이며, 서버 접근 권한을 최소한으로 좁힐 수 있습니다.

5. PostgreSQL 접근 제어 – DB는 절대 외부와 직접 연결하지 않기

DB는 공격을 받을 경우 피해가 가장 큰 서비스 중 하나입니다. 그래서 실제 운영 환경에서도 DB는 항상 내부망에서만 접근 가능하도록 구성했습니다.

5-1. postgresql.conf – Listen 대상 IP 제한

listen_addresses = 'localhost'

기본적으로 로컬에서만 접속 가능하도록 설정됩니다.

내부 특정 서버만 접근해야 할 경우

listen_addresses = '192.168.0.10'

5-2. pg_hba.conf – IP 기반 접근 제어

특정 고정 IP만 접속 허용

host    all    all    123.123.123.123/32    md5

사내망 전체 허용

host    all    all    192.168.0.0/24         md5

이 두 파일을 조합해 설정하면, 외부 위협으로부터 데이터베이스를 안전하게 보호할 수 있습니다.

6. SoftEther VPN – 외부 접속은 VPN을 통해 내부망으로

외부에서 서버를 관리할 때, SSH 포트를 외부에 그대로 열어두는 것은 위험합니다. 제가 운영 환경에서 선택한 방법은 SoftEther VPN을 구성하여 외부 관리자는 VPN으로 내부망에 먼저 접속한 뒤 서버에 접근하도록 하는 방식입니다.(접속 클라이언트와 관리자 콘솔은 검색해 보시면 다운로드 가능합니다.)

 
SoftEther VPN 윈도우 프로그램 설정 화면
SoftEther VPN

6-1. Ubuntu에서 설치 예시

apt update
apt install build-essential -y
wget <SoftEther VPN 서버 최신 릴리스 URL>
tar xzf softether-vpnserver-*.tar.gz
cd vpnserver
make

6-2. 서비스 실행

/usr/local/vpnserver/vpnserver start

6-3. 관리자 콘솔에서 설정

  • 가상 허브 생성
  • VPN 사용자 생성
  • L2TP/IPsec 또는 SSTP 활성화

6-4. 방화벽에서 VPN 포트만 허용

  • 500/udp
  • 4500/udp
  • 1701/tcp
  • 443/tcp

6-5. VPN 접속 후 SSH 연결

ssh user@192.168.30.10

이 방식은 SSH 포트를 외부에서 완전히 숨길 수 있다는 점에서 매우 강력하며, 별도 비용 없이도 안전한 원격 관리 환경을 만들 수 있습니다.

7. 실전 경험으로 정리한 단계별 서버 보안 체크리스트

  • 1단계 – 방화벽: 기본 차단 후 필요한 포트만 허용
  • 2단계 – SSH 보안: root 금지, 특정 사용자만 허용, 키 인증 사용
  • 3단계 – tcp wrapper: 허용한 IP만 서비스 접근 가능
  • 4단계 – PostgreSQL: listen_addresses와 pg_hba.conf로 IP 접근 제한
  • 5단계 – VPN: 외부 접속은 반드시 VPN → 내부망 → 서버 구조로

규모가 크지 않은 조직이라도, 정확한 원칙과 실전 설정만 갖추면 충분히 높은 수준의 서버 보안을 유지할 수 있습니다. 저 역시 이러한 설정을 직접 구성하며, 보안은 선택이 아닌 필수라는 점을 다시 한번 느꼈습니다.

함께 하면 좋은글

PostgreSQL 외부 접속 허용 설정 방법: postgresql.conf · pg_hba.conf 완벽 정리

PostgreSQL 외부 접속 허용 설정 방법: postgresql.conf · pg_hba.conf 완벽 정리

PostgresSQL을 리눅스나 윈도우 서버에 설치 후 DBeaver등의 접속은 거의 필수입니다.보안을 위해 쿼리 수행이나 DB작업을 위해서 매번 서버에 접속하여 작업을 한다면 불편함을 감수해야 하고요.Postg

www.ddolmang.com

AWS EC2에서 root 계정 활성화 및 권한 전환 방법 (ec2-user → root)

AWS EC2에서 root 계정 활성화 및 권한 전환 방법 (ec2-user → root)

기본적으로 AWS EC2에서 인스턴스 생성 시 OS이미지로 Amazon Linux를 선택할 경우 ec2-user가 디폴트유저로 생성됩니다.AWS EC2는 보안 관계상 root를 통한 SSH 접근을 제한하며 AWS에서 생성해준 ec2-user(또

www.ddolmang.com

반응형