리눅스 서버를 처음 세팅할 때는 패키지 설치보다 기본 보안 설정을 먼저 잡는 게 훨씬 중요하다. 특히 외부에 바로 노출되는 VPS나 홈서버라면 초기 10분 설정이 이후 운영 난이도를 크게 바꾼다.

1. 가장 먼저 할 일: 업데이트

배포판을 설치한 직후에는 패키지 인덱스와 보안 업데이트부터 반영하는 게 좋다.

sudo apt update && sudo apt upgrade -y

운영 서버라면 커널 업데이트 이후 재부팅이 필요한지도 함께 확인하자.

2. SSH 설정 점검

기본 SSH 설정은 공격 대상이 되기 쉽다. 다음 항목은 최소 기준으로 보는 편이 좋다.

  • root 직접 로그인 비활성화
  • 비밀번호 로그인 비활성화
  • 공개키 로그인 사용
  • 기본 포트 변경은 보조 수단으로만 사용

예를 들어 /etc/ssh/sshd_config 에서 이런 식으로 잡는다.

PermitRootLogin no
PasswordAuthentication no
PubkeyAuthentication yes

설정 변경 후에는 반드시 문법과 접속 가능 여부를 먼저 확인해야 한다.

sudo sshd -t
sudo systemctl restart ssh

3. 방화벽은 기본 deny부터

우분투 계열이라면 UFW만으로도 충분히 깔끔하게 운영 가능하다.

sudo ufw default deny incoming
sudo ufw default allow outgoing
sudo ufw allow OpenSSH
sudo ufw enable
sudo ufw status verbose

중요한 건 “필요한 포트만 열기”다. 웹서버면 80, 443 정도만 열고, DB 포트는 외부 공개를 피하는 편이 안전하다.

4. 꼭 필요한 패키지만 설치

설치 편의 때문에 이것저것 다 올리면 공격면도 같이 넓어진다. 서버 용도에 맞는 최소 구성으로 시작하는 게 좋다.

예를 들면:

  • 웹서버: nginx 또는 apache 하나만
  • DB: mysql/mariadb/postgresql 중 실제 필요한 것만
  • 모니터링: htop, ncdu, curl, jq 정도부터
sudo apt install -y htop curl jq ncdu fail2ban

5. fail2ban은 여전히 유효하다

SSH 브루트포스 같은 단순 공격 방어에는 fail2ban이 아직도 꽤 실용적이다.

sudo systemctl enable --now fail2ban
sudo fail2ban-client status

공격이 많은 환경이면 jail 설정을 별도로 조정하는 게 좋다.

6. 로그 확인 습관 만들기

문제는 보통 “설정할 때”보다 “운영하면서” 생긴다. 그래서 로그 확인 습관이 중요하다.

sudo journalctl -xe
sudo journalctl -u ssh -n 100
sudo tail -f /var/log/auth.log

마무리

리눅스 서버 운영은 고급 튜닝보다 기본기가 더 중요하다. 업데이트, SSH 보안, 방화벽, 최소 설치, 로그 확인만 제대로 해도 대부분의 초반 사고를 많이 줄일 수 있다.

처음 서버를 만든다면, 기능 설치 전에 이 체크리스트부터 먼저 끝내는 걸 추천한다.