인터넷에 연결된 모든 서버는 24시간 내내 수많은 침입 시도에 노출되어 있습니다. 불필요한 포트를 열어두는 것은 마치 대문을 열어두고 외출하는 것과 같습니다. 리눅스 서버 보안의 첫걸음은 바로 **방화벽(Firewall)**을 통해 꼭 필요한 트래픽만 허용하고 나머지는 모두 차단하는 것입니다.
오늘은 우분투(Ubuntu)에서 가장 쉽고 직관적으로 사용할 수 있는 방화벽 도구인 **UFW(Uncomplicated Firewall)**의 설정법을 완벽하게 정리해 보겠습니다.
1. UFW란 무엇인가?
UFW는 이름 그대로 '복잡하지 않은 방화벽'입니다. 리눅스 커널의 패킷 필터링 기능을 담당하는 iptables를 사용자가 더 쉽게 다룰 수 있도록 만든 인터페이스입니다. 복잡한 명령어 대신 단순한 규칙(Allow/Deny)만으로 서버를 보호할 수 있다는 장점이 있습니다.
2. UFW 시작하기: 기본 설정
2.1 UFW 상태 확인
현재 방화벽이 활성화되어 있는지 확인합니다. 처음에는 보통 inactive 상태입니다.
sudo ufw status
2.2 기본 정책 설정 (Default Policy)
가장 안전한 방화벽 전략은 **"들어오는 것은 모두 막고, 나가는 것은 허용하는 것"**입니다.
# 모든 들어오는 접속 차단
sudo ufw default deny incoming
# 모든 나가는 접속 허용
sudo ufw default allow outgoing
3. 필수 서비스 허용하기 (주의사항)
중요: 방화벽을 활성화하기 전에 반드시 **SSH(22번 포트)**를 허용해야 합니다. 그렇지 않으면 본인도 서버에 접속하지 못하는 '락아웃(Lock-out)' 현상이 발생합니다.
3.1 SSH 및 웹 서비스 허용
# SSH 허용 (기본 22번 포트)
sudo ufw allow ssh
# HTTP(80) 및 HTTPS(443) 허용
sudo ufw allow http
sudo ufw allow https
3.2 특정 포트 범위 허용
특정 범위의 포트를 한꺼번에 열어야 할 때 사용합니다. (예: 8000~8100번)
sudo ufw allow 8000:8100/tcp
4. 특정 IP 주소 관리하기 (화이트리스트)
보안을 더욱 강화하려면, 관리자 페이지나 DB 접속 포트 등은 특정 IP에서만 접속할 수 있도록 제한하는 것이 좋습니다.
4.1 특정 IP 허용
# 특정 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를 즉시 차단할 때 유용합니다.
sudo ufw deny from 123.123.123.123
5. 방화벽 활성화 및 규칙 삭제
모든 규칙을 설정했다면 이제 방화벽을 가동합니다.
5.1 활성화 및 비활성화
# 방화벽 활성화 (SSH 허용 여부 재차 확인!)
sudo ufw enable
# 방화벽 비활성화
sudo ufw disable
5.2 규칙 삭제
설정된 규칙을 삭제하고 싶을 때는 번호를 확인한 뒤 삭제하는 것이 가장 정확합니다.
# 규칙 번호 확인
sudo ufw status numbered
# 2번 규칙 삭제
sudo ufw delete 2
6. 결론: 보안은 겹겹이 쌓는 층(Layer)입니다
UFW는 서버를 지키는 든든한 성벽입니다. 하지만 방화벽 하나만으로 모든 공격을 막을 수는 없습니다. 앞서 다뤘던 SSH 포트 변경, Root 로그인 차단 등과 함께 적용할 때 비로소 강력한 보안 체계가 완성됩니다.