Ubuntu에서 firewalld로 방화벽을 구성하는 실용적이고 정확한 가이드입니다. 설치 방법, 영역(zone) 다루기, 서비스 및 포트 개방, 리치 룰 작성, 그리고 운영 중인 VPS에 변경 사항을 안전하게 적용하는 방법까지 다룹니다.
사전 준비 사항
sudo권한을 가진 비루트(non-root) 사용자가 있는 Ubuntu 22.04/24.04 서버.- SSH 접속. 방화벽을 구성하는 동안 현재 SSH 세션을 열어 두세요. 스스로 접속이 차단되더라도 복구할 수 있습니다.
1단계 — firewalld 설치 및 시작
Ubuntu는 기본적으로 firewalld가 아닌 ufw를 함께 제공합니다. ufw가 활성화되어 있다면, 두 관리자가 동일한 백엔드를 두고 충돌하지 않도록 먼저 비활성화하세요:
sudo systemctl disable --now ufw
그런 다음 firewalld를 설치하고 활성화합니다:
sudo apt update
sudo apt install firewalld -y
sudo systemctl enable --now firewalld
실행 중인지 확인합니다:
sudo firewall-cmd --state
running이 표시되어야 합니다.
2단계 — 영역(zone) 이해하기
firewalld는 규칙을 영역(zone) 으로 묶으며, 각 영역은 네트워크 연결에 대한 신뢰 수준을 나타냅니다. 활성 영역이 어떤 트래픽을 허용할지 결정합니다. 가장 흔히 사용되는 영역은 다음과 같습니다:
| 영역 | 일반적인 용도 |
|---|---|
drop |
들어오는 모든 트래픽을 응답 없이 차단(가장 엄격함) |
block |
들어오는 트래픽을 ICMP 메시지와 함께 거부 |
public |
신뢰할 수 없는 네트워크의 기본값; 선택된 서비스만 허용 |
internal |
신뢰할 수 있는 내부 네트워크 |
trusted |
모든 트래픽 허용(가장 느슨함) |
기본 영역과 활성 영역을 확인합니다:
sudo firewall-cmd --get-default-zone
sudo firewall-cmd --get-active-zones
새로 구축한 서버에서는 기본값이 대개 public이며, 이는 공개적으로 노출된 VPS에 적합한 선택입니다. 현재 해당 영역에서 허용된 모든 항목을 확인합니다:
sudo firewall-cmd --zone=public --list-all
3단계 — 런타임 대 영구: 핵심 개념
모든 변경은 기본적으로 런타임(runtime) 구성에 적용되며, 이는 reload 또는 재부팅 시 사라집니다. 변경 사항을 유지하려면 --permanent를 추가하세요. 영구 변경 사항은 reload하기 전까지는 적용되지 않습니다.
안전한 작업 방식은 다음과 같습니다: 런타임에서 테스트한 뒤 영구 저장합니다. 정상적으로 동작하는 런타임 설정을 영구 저장하는 가장 깔끔한 방법은 다음과 같습니다:
sudo firewall-cmd --runtime-to-permanent
또는 각 규칙에 --permanent를 추가한 다음 reload합니다:
sudo firewall-cmd --reload
--reload는 기존에 설정된 연결을 끊지 않고 영구 규칙을 다시 읽어 들이므로, SSH 세션이 유지됩니다.
4단계 — 무엇보다 먼저 SSH 허용하기
방화벽을 강화하기 전에 반드시 SSH가 허용되어 있는지 확인하세요. 그렇지 않으면 다음 재접속 시 실패하게 됩니다. ssh 서비스는 기본 포트 22를 포함합니다:
sudo firewall-cmd --permanent --zone=public --add-service=ssh
SSH를 사용자 지정 포트(예: 2222)에서 실행한다면, 해당 포트를 대신 개방하세요:
sudo firewall-cmd --permanent --zone=public --add-port=2222/tcp
적용합니다:
sudo firewall-cmd --reload
5단계 — 애플리케이션을 위한 서비스 개방
firewalld는 수백 개의 사전 정의된 서비스를 이름으로 알고 있습니다. firewall-cmd --get-services로 목록을 확인하세요. 일반적인 웹 서버라면 HTTP와 HTTPS를 허용합니다:
sudo firewall-cmd --permanent --zone=public --add-service=http
sudo firewall-cmd --permanent --zone=public --add-service=https
sudo firewall-cmd --reload
같은 서버에서 비즈니스 이메일을 호스팅한다면, 관련 submission 및 IMAP 포트를 개방하세요:
sudo firewall-cmd --permanent --zone=public --add-service=smtp-submission
sudo firewall-cmd --permanent --zone=public --add-service=imaps
sudo firewall-cmd --reload
이름이 지정된 서비스로 다룰 수 없는 임의의 포트를 개방하려면, 프로토콜과 함께 --add-port를 사용하세요:
sudo firewall-cmd --permanent --zone=public --add-port=8080/tcp
sudo firewall-cmd --reload
6단계 — 규칙 제거하기
서비스나 포트를 닫으려면 add를 remove로 바꾼 뒤 reload하세요:
sudo firewall-cmd --permanent --zone=public --remove-service=http
sudo firewall-cmd --permanent --zone=public --remove-port=8080/tcp
sudo firewall-cmd --reload
7단계 — 세밀한 제어를 위한 리치 룰(rich rule)
리치 룰을 사용하면 단순한 서비스로는 표현할 수 없는 조건을 지정할 수 있습니다. 예를 들어 출발지 IP로 접근을 제한하는 것이 가능합니다. SSH를 사무실 네트워크에서만 허용하고 그 외에는 모두 거부하려면, 먼저 광범위한 ssh 서비스를 제거한 다음 리치 룰을 추가하세요:
sudo firewall-cmd --permanent --zone=public --remove-service=ssh
sudo firewall-cmd --permanent --zone=public \
--add-rich-rule='rule family="ipv4" source address="203.0.113.10/32" service name="ssh" accept'
sudo firewall-cmd --reload
먼저 (--permanent 없이) 런타임에서 새 규칙을 테스트하고, 허용된 IP에서 여전히 접속할 수 있는지 확인한 후에 영구 저장하세요. 무차별 대입(brute-force) 시도를 늦추기 위해 서비스에 속도 제한을 걸 수도 있습니다:
sudo firewall-cmd --permanent --zone=public \
--add-rich-rule='rule service name="ssh" limit value="5/m" accept'
8단계 — 검증 및 감사
영역의 최종 상태를 나열하여 모든 것이 의도한 대로인지 확인하세요:
sudo firewall-cmd --zone=public --list-all
영구 구성에 문법 오류가 없는지 확인합니다:
sudo firewall-cmd --check-config
접속 차단 상황에서 복구하기
어떤 변경으로 인해 접속이 끊겼다면, 런타임 변경 사항은 재부팅 시 사라지므로 제공업체 콘솔에서 강제 재부팅하면 이전 영구 상태로 복원됩니다. 더 나은 방법은, 제공업체가 제공하는 콘솔 세션에서 작업하거나, 위험한 변경 전에 시간 기반 롤백을 설정해 두는 것입니다. 바로 이런 부분에서 관리형 클라우드 플랫폼에서 운영하는 것이 도움이 됩니다. 대역 외(out-of-band) 콘솔 접근과 스냅샷을 갖추고 있어, 잘못 구성된 규칙 하나가 죽은 서버로 이어지는 일을 막아 줍니다.
결론
이제 동작하는 firewalld 설정을 갖추게 되었습니다. 신뢰 수준을 위한 영역, 애플리케이션을 위한 이름이 지정된 서비스와 포트, 출발지 기반 제한을 위한 리치 룰, 그리고 안전한 런타임-영구(runtime-to-permanent) 워크플로까지 말이죠. 규칙 집합은 최소한으로 유지하세요. 필요한 것만 개방하고, 새 서비스를 추가할 때마다 다시 감사하세요.
이러한 보안 강화를 사우디아라비아 왕국 내에 머무는 인프라에서, PDPL/NCA에 부합하는 데이터 레지던시와 현지 아랍어 지원과 함께 적용하고 싶으신가요? Skyline Cloud에서 VPS 또는 클라우드 서버를 생성하고 몇 분 만에 이 단계들을 적용해 보세요. 계정을 생성하고 시작하세요.
Comments
0 total · 0 threads