DEVOPS

Linux 서버 보안 설정 완벽 체크리스트

junetapa2026. 2. 2512 min read

서버를 운영하다 보면 "설마 내 서버가 해킹당하겠어?"라는 안일한 생각이 들 때가 있다. 하지만 Linux 서버는 인터넷에 노출되는 순간부터 수많은 자동화된 공격에 시달린다. SSH 설정부터 방화벽, 모니터링까지 수년간 서버를 운영하면서 정리한 보안 체크리스트를 공유한다.

SSH 보안 강화 - 서버의 첫 번째 방어선

SSH는 Linux 서버에 원격 접속하는 가장 기본적인 방법이다. 그만큼 공격자들이 가장 먼저 노리는 지점이기도 하다. 기본 포트인 22번으로 서버를 열어두면, 하루에 수천 건의 로그인 시도가 들어온다.

기본 포트 변경과 root 로그인 비활성화

가장 먼저 할 일은 /etc/ssh/sshd_config 파일을 수정하는 것이다. SSH 기본 포트를 22에서 다른 번호(예: 2222, 10022 등)로 변경하면 자동화된 스캐닝 공격의 대부분을 걸러낼 수 있다. 그리고 PermitRootLogin no로 root 직접 로그인을 반드시 차단해야 한다. 일반 사용자로 접속한 뒤 sudo를 사용하는 습관을 들이는 게 훨씬 안전하다.

SSH 키 인증으로 전환하기

비밀번호 인증은 아무리 복잡한 비밀번호를 설정해도 브루트포스 공격에 취약하다. SSH 키 기반 인증으로 전환하면 이 문제를 근본적으로 해결할 수 있다. ssh-keygen으로 키 쌍을 생성하고, 공개키를 서버의 ~/.ssh/authorized_keys에 등록한 뒤, PasswordAuthentication no로 비밀번호 로그인을 완전히 차단한다.

Fail2Ban으로 반복 로그인 시도 차단

Fail2Ban은 SSH 로그를 실시간으로 모니터링하다가 일정 횟수 이상 로그인에 실패한 IP를 자동으로 방화벽에서 차단해주는 도구다. 5회 실패 시 1시간 차단, 재차 시도 시 24시간 차단으로 설정하면 된다.

방화벽 설정 - 불필요한 문을 닫아라

Linux 서버 보안에서 방화벽은 외부와 내부를 나누는 가장 중요한 경계다. 필요한 포트만 열고 나머지는 전부 닫는 것이 기본 원칙이다.

UFW vs iptables vs firewalld 비교

항목UFWiptablesfirewalld
난이도쉬움 (초보 친화적)어려움 (직접 규칙 작성)보통 (zone 개념)
유연성보통매우 높음높음
주요 배포판Ubuntu/Debian전 배포판 공통CentOS/RHEL/Fedora
추천 대상개인 서버, 소규모고급 사용자, 대규모기업 환경, RHEL 계열

Ubuntu 서버라면 UFW를 추천한다. ufw default deny incoming으로 인바운드를 전부 차단한 뒤, 필요한 것만 열면 된다.

아웃바운드 규칙도 신경 쓸 것

많은 사람이 인바운드만 신경 쓰는데, 아웃바운드도 중요하다. 서버가 침해당했을 때 아웃바운드가 열려 있으면, 공격자가 외부 C2 서버로 데이터를 빼돌리거나 다른 서버를 공격하는 경유지로 악용될 수 있다.

사용자 및 권한 관리 - 최소 권한 원칙

sudo 권한 세밀하게 제어하기

/etc/sudoers 파일을 visudo로 편집하여 각 사용자가 실행할 수 있는 명령어를 제한할 수 있다. 배포 담당자에게는 systemctl restart nginx만 허용하고, 데이터베이스 관리자에게는 systemctl restart mysql만 허용하는 식이다.

불필요한 서비스와 계정 정리

systemctl list-unit-files --state=enabled로 활성화된 서비스 목록을 확인하고, 사용하지 않는 서비스는 과감하게 비활성화해야 한다. 열려 있는 서비스 하나하나가 잠재적인 공격 표면이다.

시스템 업데이트와 모니터링

자동 보안 업데이트 설정

Ubuntu/Debian 계열에서는 unattended-upgrades 패키지를 통해 보안 패치를 자동으로 적용할 수 있다. CentOS/RHEL에서는 dnf-automatic이 동일한 역할을 한다.

로그 모니터링과 침입 탐지

/var/log/auth.log, /var/log/syslog를 정기적으로 확인하는 습관을 들여야 한다. AIDE나 OSSEC 같은 호스트 기반 침입 탐지 시스템(HIDS)을 설치하면 파일 시스템의 변경을 추적하고, 의심스러운 활동이 감지되면 알림을 보내준다.

파일 무결성 검사와 백업

보안 설정을 아무리 잘 해도 100% 안전한 서버는 없다. 최소 주 1회 전체 백업, 매일 증분 백업을 수행하고, 백업 데이터는 서버 외부에 보관해야 한다.

실전 팁과 추천 대상

Tip 1

SSH 접속 시 2FA 적용하기. Google Authenticator PAM 모듈을 설치하면 SSH 접속에 OTP 인증을 추가할 수 있다. 키 인증 + OTP 조합이면 사실상 뚫리기 매우 어렵다.

Tip 2

서버 세팅 직후 즉시 스냅샷 찍기. 클라우드 환경이라면 보안 설정을 모두 마친 "클린 상태"의 스냅샷을 저장해 둬야 한다. 문제가 생겼을 때 빠르게 복원할 수 있다.

Tip 3

Lynis로 보안 감사 자동화하기. lynis audit system 한 줄이면 서버의 전반적인 보안 상태를 점검해 준다.

Tip 4

커널 파라미터 튜닝. /etc/sysctl.conf에서 역방향 경로 필터링, Smurf 공격 방지 등을 설정하면 네트워크 레벨의 보안이 강화된다.

Tip 5

보안 설정을 코드로 관리하기. Ansible이나 Terraform으로 서버 보안 설정을 IaC로 관리하면, 새 서버를 프로비저닝할 때마다 동일한 보안 수준을 자동으로 적용할 수 있다.

추천 대상

  • 개인 프로젝트용 VPS를 처음 세팅하는 개발자
  • 스타트업에서 DevOps를 겸하는 백엔드 개발자
  • 온프레미스 Linux 서버를 관리하는 시스템 관리자
  • 클라우드 인프라를 학습 중인 학생

마무리

Linux 서버 보안은 거창한 것이 아니다. SSH 포트 변경, 키 인증 전환, 방화벽 설정, 불필요한 서비스 제거, 자동 업데이트 - 이 다섯 가지만 확실히 해도 대부분의 자동화된 공격을 막을 수 있다. 중요한 건 "완벽한 보안"을 추구하다 아무것도 안 하는 것보다, 기본적인 것부터 하나씩 적용해 나가는 것이다.

Linux서버 보안SSH방화벽Fail2BanDevOps
junetapa
junetapa
AI 도구를 직접 써보고 솔직한 경험을 공유하는 개발자.
TwitterFacebookURL 복사