본문 바로가기
IT

[리눅스 기초 #35] 내 서버를 지키는 파수꾼: UFW 방화벽으로 요새화하기

by sunyjiny 2026. 2. 7.
반응형

리눅스 기초 시리즈의 35번째 시간입니다! 지난 시간에는 도커 컴포즈(Docker Compose)를 통해 여러 컨테이너를 조율하는 지휘법을 배웠습니다. 이제 우리 서버에는 웹, DB, 캐시 등 다양한 서비스가 활기차게 돌아가고 있을 텐데요. 문이 많아진 만큼, 외부의 원치 않는 손님이 들어올 확률도 높아졌습니다.

열심히 구축한 서버가 보안 허점 때문에 공격받는 것만큼 허탈한 일도 없겠죠. 오늘은 리눅스에서 가장 쉽고 강력하게 네트워크 문단속을 할 수 있는 UFW(Uncomplicated Firewall)를 통해 내 서버를 요새로 만드는 과정을 저의 경험담과 함께 정리해 보겠습니다.


1. 나의 경험담: "새벽의 불청객, 무차별 대입 공격(Brute Force)"

최근 제가 운영하는 IT 개발자 블로그의 서버 로그를 점검하던 중 소름 끼치는 사실을 발견했습니다. 해외의 낯선 IP들이 제 서버의 SSH 포트(22번)를 통해 수천 번이나 로그인을 시도한 흔적이 있었거든요. 이른바 무차별 대입 공격이었습니다.

다행히 비밀번호를 복잡하게 설정해두어 뚫리지는 않았지만, "누군가 내 집 대문을 끊임없이 흔들고 있었다"는 사실만으로도 등골이 오싹했습니다. 그날 이후 저는 단순히 비밀번호에만 의존하지 않고, UFW를 사용해 허용된 포트 외에는 모든 통로를 원천 차단했습니다. 보안은 '뚫린 뒤에' 후회하는 게 아니라, '미리' 성벽을 쌓는 것이라는 점을 뼈저리게 느꼈습니다.


2. Before: "누구나 들어오세요" 활짝 열린 무방비 서버

방화벽 설정 전의 서버는 말 그대로 사방이 뚫린 광장과 같습니다. 어떤 포트가 열려 있는지, 누가 내 서버의 특정 서비스에 접근하고 있는지 전혀 제어할 수 없는 상태죠. 특히 도커를 쓰다 보면 자신도 모르게 외부로 노출되는 포트들이 생기기 마련이라 더욱 위험합니다.

기본 상태 확인 (Ubuntu 기준):

Terminal
 
# UFW 현재 상태 확인 sudo ufw status

보통 'Status: inactive'로 나옵니다. 성문이 활짝 열려 있다는 뜻이죠.

(▲ Before: 방화벽이 비활성화된 상태에서는 시스템의 모든 포트가 잠재적인 공격 경로가 됩니다. 윈도우 커널 위에서 돌아가는 WSL2 환경도 예외는 아닙니다.)


3. Action: UFW로 성벽 쌓기 (방화벽 활성화 전략)

UFW의 가장 큰 장점은 이름처럼 '복잡하지 않다'는 것입니다. 아래 순서대로 명령어를 입력하여 꼭 필요한 통로만 열어주겠습니다.

방화벽 설정 코드:

Bash Terminal
 
# 1. SSH(22번)는 반드시 먼저 허용해야 합니다! (안 그러면 쫓겨나요) sudo ufw allow 22/tcp

2. 웹 서비스(80, 443번) 허용
sudo ufw allow 80/tcp sudo ufw allow 443/tcp

3. 방화벽 활성화
sudo ufw enable

4. 특정 포트(예: DB 3306) 차단하기
sudo ufw deny 3306 

(▲ Action: allow 명령어를 통해 우리가 인지하는 안전한 통로만 열어주었습니다. 이제 지정되지 않은 모든 접근은 리눅스가 알아서 거부합니다.)


4. After: 평화를 되찾은 나의 요새 서버

방화벽을 활성화하고 다시 sudo ufw status verbose를 입력해 보면, 마치 성벽 위에 경비병들이 배치된 것처럼 든든한 규칙들이 나열됩니다.

달라진 점들:

  • 외부 공격 차단: 불필요한 포트를 노리는 자동화된 공격 봇들이 더 이상 내 서버 내부에 접근하지 못합니다.
  • 네트워크 가시성: 내 서버의 어떤 문이 열려 있는지 한눈에 관리할 수 있어 실수를 방지합니다.
  • 보안 심리적 안정: 새벽마다 날아오던 알 수 없는 로그인 시도 로그가 사라지며 진정한 개발의 평화를 누리게 되었습니다.

5. 실험 요약 및 핵심 명령어

명령어 역할 비유
ufw enable / disable 방화벽 켜기 / 끄기 성문 폐쇄 / 완전 개방
ufw allow [포트] 특정 포트 접근 허용 믿을 수 있는 통로 만들기
ufw deny [포트] 특정 포트 접근 거부 위험한 뒷문 폐쇄하기
ufw status numbered 규칙 번호와 함께 상태 보기 경비 명부 확인하기

6. 마치며: 보안은 도구가 아니라 습관입니다.

리눅스 기초 35단계를 거치며 우리는 이제 시스템을 구축하는 법을 넘어, 그것을 '지키는 법'까지 배웠습니다. 아무리 화려한 웹 서비스를 만들었더라도 보안이 무너지면 모든 노력이 물거품이 됩니다. UFW는 그 성벽의 가장 첫 번째 벽돌입니다.

오늘의 인사이트: "편리함과 보안은 항상 반비례한다. 조금 귀찮더라도 성문을 닫는 습관이 내 코드를 지킨다."


35번째 이야기를 마칩니다. 이제 우리 서버는 안전한 요새가 되었습니다. 다음 시간에는 리눅스 시스템의 전반적인 건강 상태를 한눈에 대시보드처럼 모니터링할 수 있는 **'리눅스 모니터링 도구(Glances, Netdata)로 서버 관리의 화룡점정 찍기'**에 대해 다뤄보겠습니다.

이 글이 여러분의 서버 보안을 강화하는 데 도움이 되었나요? 혹시 UFW를 켰는데 갑자기 SSH 접속이 안 되어 당황하고 계신가요?

실수로 차단된 접속을 복구하기 위해 '비상 탈출구'를 마련하는 팁을 다음 포스팅 부록으로 준비해 드릴까요?

반응형