인터넷에 연결된 모든 서버는 24시간 내내 수많은 침입 시도에 노출되어 있습니다. 불필요한 포트를 열어두는 것은 마치 대문을 열어두고 외출하는 것과 같습니다. 리눅스 서버 보안의 첫걸음은 바로 **방화벽(Firewall)**을 통해 꼭 필요한 트래픽만 허용하고 나머지는 모두 차단하는 것입니다.

오늘은 우분투(Ubuntu)에서 가장 쉽고 직관적으로 사용할 수 있는 방화벽 도구인 **UFW(Uncomplicated Firewall)**의 설정법을 완벽하게 정리해 보겠습니다.


1. UFW란 무엇인가?

UFW는 이름 그대로 '복잡하지 않은 방화벽'입니다. 리눅스 커널의 패킷 필터링 기능을 담당하는 iptables를 사용자가 더 쉽게 다룰 수 있도록 만든 인터페이스입니다. 복잡한 명령어 대신 단순한 규칙(Allow/Deny)만으로 서버를 보호할 수 있다는 장점이 있습니다.


2. UFW 시작하기: 기본 설정

2.1 UFW 상태 확인

현재 방화벽이 활성화되어 있는지 확인합니다. 처음에는 보통 inactive 상태입니다.

Bash
 
sudo ufw status

2.2 기본 정책 설정 (Default Policy)

가장 안전한 방화벽 전략은 **"들어오는 것은 모두 막고, 나가는 것은 허용하는 것"**입니다.

Bash
 
# 모든 들어오는 접속 차단
sudo ufw default deny incoming

# 모든 나가는 접속 허용
sudo ufw default allow outgoing

3. 필수 서비스 허용하기 (주의사항)

중요: 방화벽을 활성화하기 전에 반드시 **SSH(22번 포트)**를 허용해야 합니다. 그렇지 않으면 본인도 서버에 접속하지 못하는 '락아웃(Lock-out)' 현상이 발생합니다.

3.1 SSH 및 웹 서비스 허용

Bash
 
# SSH 허용 (기본 22번 포트)
sudo ufw allow ssh

# HTTP(80) 및 HTTPS(443) 허용
sudo ufw allow http
sudo ufw allow https

3.2 특정 포트 범위 허용

특정 범위의 포트를 한꺼번에 열어야 할 때 사용합니다. (예: 8000~8100번)

Bash
 
sudo ufw allow 8000:8100/tcp

4. 특정 IP 주소 관리하기 (화이트리스트)

보안을 더욱 강화하려면, 관리자 페이지나 DB 접속 포트 등은 특정 IP에서만 접속할 수 있도록 제한하는 것이 좋습니다.

4.1 특정 IP 허용

Bash
 
# 특정 IP(예: 123.123.123.123)에서의 모든 접속 허용
sudo ufw allow from 123.123.123.123

# 특정 IP가 특정 포트(예: 3306 DB 포트)에만 접속하게 허용
sudo ufw allow from 123.123.123.123 to any port 3306

4.2 특정 IP 차단 (Blacklist)

공격이 의심되는 특정 IP를 즉시 차단할 때 유용합니다.

Bash
 
sudo ufw deny from 123.123.123.123

5. 방화벽 활성화 및 규칙 삭제

모든 규칙을 설정했다면 이제 방화벽을 가동합니다.

5.1 활성화 및 비활성화

Bash
 
# 방화벽 활성화 (SSH 허용 여부 재차 확인!)
sudo ufw enable

# 방화벽 비활성화
sudo ufw disable

5.2 규칙 삭제

설정된 규칙을 삭제하고 싶을 때는 번호를 확인한 뒤 삭제하는 것이 가장 정확합니다.

Bash
 
# 규칙 번호 확인
sudo ufw status numbered

# 2번 규칙 삭제
sudo ufw delete 2

6. 결론: 보안은 겹겹이 쌓는 층(Layer)입니다

UFW는 서버를 지키는 든든한 성벽입니다. 하지만 방화벽 하나만으로 모든 공격을 막을 수는 없습니다. 앞서 다뤘던 SSH 포트 변경, Root 로그인 차단 등과 함께 적용할 때 비로소 강력한 보안 체계가 완성됩니다.

 

리눅스 서버(Ubuntu)를 처음 생성하고 공인 IP를 할당받으면, 그 순간부터 전 세계의 수많은 봇(Bot)들이 여러분의 서버에 접속하기 위해 무차별 대입 공격(Brute-force)을 시도합니다. 특히 기본 설정인 22번 포트와 root 계정은 해커들의 주요 타겟이 됩니다.

오늘은 내 소중한 서버를 안전하게 보호하기 위한 가장 기초적이면서도 필수적인 보안 설정 두 가지, SSH 포트 변경과 Root 로그인 차단 방법을 상세히 알아보겠습니다.


1. 왜 기본 설정을 변경해야 하는가?

서버 운영에 있어 '보안의 기본'은 공격자가 예측하기 어렵게 만드는 것입니다.

  • SSH 기본 포트(22번): 누구나 알고 있는 포트입니다. 공격자들은 자동화된 스크립트로 22번 포트가 열려 있는지 확인하고 접속을 시도합니다. 포트 번호만 바꿔도 자동화 공격의 90% 이상을 차단할 수 있습니다.
  • Root 계정: 리눅스에서 모든 권한을 가진 절대적인 계정입니다. ID가 'root'라는 것을 이미 알고 있기 때문에, 비밀번호만 알아내면 서버의 모든 제어권을 뺏기게 됩니다.

따라서 별도의 관리자 계정을 생성하고, root 접속은 원천 차단하는 것이 서버 보안의 시작입니다.


2. 작업 전 주의사항 (필독)

설정을 변경하다가 실수하면 **본인조차 서버에 접속하지 못하는 상황(Lock-out)**이 발생할 수 있습니다. 작업을 시작하기 전에 아래 사항을 반드시 확인하세요.

  1. 관리자 권한을 가진 일반 사용자 계정이 미리 생성되어 있어야 합니다.
  2. 사용 중인 클라우드(AWS, GCP, Azure 등)의 방화벽(Security Group) 설정에서 변경할 포트 번호를 미리 허용(Inbound)해 두어야 합니다.

3. SSH 설정 파일 수정하기

모든 SSH 관련 설정은 /etc/ssh/sshd_config 파일에서 관리합니다. 안전을 위해 원본 파일을 백업하고 수정을 시작해 보겠습니다.

3.1 설정 파일 백업 및 열기

Bash
 
# 설정 파일 백업
sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak

# 설정 파일 편집 (nano 또는 vim 사용)
sudo nano /etc/ssh/sshd_config

3.2 SSH 포트 번호 변경

파일 상단 근처에 #Port 22라는 문구를 찾으세요. 주석(#)을 제거하고 원하는 포트 번호로 수정합니다.

  • 추천 범위: 1024 ~ 65535 사이의 사용하지 않는 번호 (예: 2026, 8822 등)
Plaintext
 
# 수정 전
#Port 22

# 수정 후
Port 2026

3.3 Root 로그인 차단 설정

파일을 아래로 내리다 보면 PermitRootLogin 항목이 보입니다. 이를 no로 변경하여 외부에서 root 계정으로 직접 접속하는 것을 막습니다.

Plaintext
 
# 수정 전
#PermitRootLogin prohibit-password (또는 yes)

# 수정 후
PermitRootLogin no

 


4. 변경 사항 적용 및 테스트

설정을 마쳤다면 파일을 저장하고(Nano 기준: Ctrl+O -> Enter -> Ctrl+X), SSH 서비스를 재시작해야 적용됩니다.

4.1 서비스 재시작

Bash
 
sudo systemctl restart ssh

4.2 방화벽 설정 (UFW 기준)

서버 자체 방화벽인 UFW를 사용 중이라면 새 포트를 허용해 주어야 합니다.

Bash
 
# 새 포트 허용 (예: 2026)
sudo ufw allow 2026/tcp

# 기존 22번 포트 차단 (선택 사항)
sudo ufw delete allow 22/tcp

# 방화벽 상태 확인
sudo ufw status

5. 접속 테스트 (매우 중요!)

현재 접속되어 있는 터미널 창을 절대 끄지 마세요. 설정이 잘못되었을 경우를 대비해 현재 세션을 유지한 상태에서, 새로운 터미널 창을 열어 접속을 시도합니다.

Bash
 
# 새로운 터미널에서 접속 시도
ssh -p [변경한포트번호] [사용자계정]@[서버IP주소]

# 예시
ssh -p 2026 yumina@1.23.456.78

정상적으로 접속이 된다면 모든 설정이 성공적으로 완료된 것입니다. 이제 root 계정으로의 직접 접속은 차단되었으며, 지정한 포트를 통해서만 서버에 접근할 수 있습니다.


6. 결론 및 요약

서버 보안은 거창한 솔루션을 도입하는 것보다, 이처럼 기본적인 설정을 꼼꼼히 챙기는 것에서 시작됩니다.

오늘 배운 내용 요약:

  1. SSH 포트 변경: 자동화된 봇 공격으로부터 서버를 은닉합니다.
  2. PermitRootLogin no: 서버의 심장인 root 계정을 외부 노출로부터 보호합니다.
  3. 방화벽 설정: 서버 내부와 클라우드 외부 방화벽 모두에서 새 포트를 열어주어야 합니다.

가장 단순하지만 가장 강력한 이 두 가지 설정을 통해 더욱 안전한 서버 운영 환경을 구축하시기 바랍니다.

+ Recent posts