VMware로 인프라 구축할 때 매번 막히는 부분이 생기면 대부분의 경우가 이 방화벽이었다.

정확이 이게 뭐고 왤캐 나를 걸고 넘어지는지 알아봐야겠다.

 

목차

 

  • 방화벽(Firewall)이란?
    • 네트워크 트래픽 흐름을 제어하는 보안 장치
    • 방화벽의 계층적 분류
      • 호스트 기반 방화벽
      • 네트워크 기반 방화벽
      • 애플리케이션 방화벽
  • 방화벽 계층별 역할
    • Layer 3~4: 패킷 차단 중심 (iptables, ASA 등)
    • Layer 7: 콘텐츠 기반 필터링 (WAF 등)
  • 호스트 기반 방화벽의 개념과 특징
    • 개별 서버에서의 포트 제어
    • 기본적으로 모든 트래픽을 막는다
    • 리눅스에서 사용되는 대표 도구: iptables, firewalld, ufw
  • Rocky Linux의 firewalld 구조 이해
    • firewalld는 iptables 위에서 동작하는 인터페이스
    • Zone 기반 모델 설명
      • 기본 제공 Zone 종류와 보안 수준
      • --permanent, --reload, 서비스 단위 관리
  • 실습: Apache 웹 서버에서 방화벽 설정하기
    • httpd 설치 및 페이지 작성
    • firewalld를 이용한 HTTP 포트 열기
    • ss, curl로 서비스 확인
    • HTTPS 설정 예시 포함
  • 회고: 이제야 방화벽이 보인다
    • 명령어 외우기보다는 구조 이해가 먼저
    • 실무에 필요한 방화벽 체크리스트 필요성

 

 


방화벽(Firewall)

네트워크 트래픽의 흐름을 제어하여 불필요하거나 악의적인 접근을 차단하는 보안 장치

 

1. 호스트 기반 방화벽

2. 네트워크 기반 방화벽 

3. 애플리케이션 방화벽

 

이렇게 계층적으로 구성되어 있다.


방화벽의 계층적 구조

 

호스트 기반 방화벽

VM을 하나 만들면 설정해줘야하는 방화벽이 이것이다.

개별 서버에서 포트를 제어하고 서버 단위로 접근을 제어한다.

ex) iptables, firewalld(Rocky), ufw(Debian)

 

네트워크 기반 방화벽

라우터, 게이트웨이 또는 전용 장비에서 네트워크 흐름 제어

사설망 <->외부망 구간 통제함

ex) Cisco ASA, Fortigate, AWS Security Group

 

애플리케이션 방화벽

HTTP 요청에 포함된 악성 문자열, SQL 인젝션, 경로 우회 등 감지

웹 애플리케이션 취약점 대응

ex) ModSecurity, AWS WAF, Cloudflare

 

이렇게 3,4 계층에서의 방화벽과 7 계층에서의 방화벽으로 계층적으로 접근을 제어해 보안을 높이려하는 것

 

지금까지 실습에서 항상 신경을 써줘야 했던간

호스트 기반 방화벽이었다.

이 방화벽에 대해 더 자세하게 알아보겠다.


 

호스트 기반 방화벽

개별 컴퓨터(호스트, 서버, 가상머신)에 설치되어

호스트 자체로 들어오거나 나가는 네트워크 트래픽을 제어하는 보안 시스템

 

기본적으로 방화벽에는 아래와 같이 적용해 보안을 높이고 있다.

1. 최소 권한 원칙: 꼭 필요한 것만 열기

2. 명시적 허용, 암시적 거부: 요청하기 전까지는 거부가 기본

3. 계층적 방화벽을 두어 보안 강화: 여러 방화벽을 두어 보안 UP

 

여기서 왜 내가 항상 방화벽에서 막혔는지 알 수 있다.

방화벽은 기본적으로 설정을 안해주면 다 막아버리기 때문이다.

 

웹 서버용으로 VM을 만들고 httpd 패키지를 설치해도, 방화벽에서 포트를 열어주지 않으면 접속할 수 없었다.

이런 걸 막고 허용해주는게 호스트 기반 방화벽이었다.

 

리눅스 기반의 호스트 방화벽은

netfilter 라는 리눅스 커널 기능을 기반으로 만든 리눅스 방화벽 엔진인 iptables 가 있고

그걸 사용하기 편리하게 만든게

Rocky 에서 사용하는 게 firewalld

Ubuntu가 속한 Debian 계열에서는 ufw를 사용한다.

 

먼저 firewalld에 대해 알아보겠다.

 


 

Rocky의 firewalld

firewalld는 iptables에 여러 기능이 추가되어 편리하게 사용할 수 있게 해주는 방화벽 프레임워크

 

특징

Zone 기반 모델

미리 정의된 zone과 자신만의 zone을 만들 수도 있다.

zone에는 인터페이스를 넣어 구성할 수 있다.

미리 정의된 zone에는 기본 정책이 설정되어 있고 변경이 불가능하다.

 

Zone  이름기본  정책사용 대상 위치 보안 수준 설명
trusted 모든 트래픽 허용 (ACCEPT ALL) 매우 안전한 내부망, VPN 터널 🔓 매우 낮음 모든 포트/서비스 허용, 위험! 실습/내부망 한정
public 기본 DROP (명시된 것만 허용) 일반 서버 외부 노출용 🔒 보통 인터넷에 노출되는 웹서버 등에 기본 설정
external 기본 DROP + Masquerade 활성화 라우터의 외부 NIC, WAN 🔒 보통~높음 NAT 라우터나 인터넷 연결 서버에서 사용
internal 기본 DROP DB, 파일 서버, 내부망 전용 서버 🔒 보통 외부 접근 불필요한 서버 간 통신용
dmz 기본 DROP DMZ 구간 (반공개 서버) 🔒 중간 HAPROXY, 중간 프록시, 모니터링 등
drop 모든 요청 차단 + 응답 없음 공격 대응, honeypot 🔐 매우 높음 패킷을 아예 무시 (Stealth Mode)
block 모든 요청 차단 + ICMP 응답만 허용 탐지 가능한 차단 🔐 매우 높음 DROP과 달리 응답(RST, ICMP)만 반환
home 기본 DROP, 홈/사설망 대상 내부 네트워크 (SOHO 환경) 🔒 보통 공유기 하단 클라이언트용
work 기본 DROP, 사무실 네트워크용 기업 내부망 사용자 🔒 보통 프린터, NAS와 통신 허용 등
nm-shared 기본 허용, 네트워크 공유용 NetworkManager 전용 공유 NIC ⚠️ 낮음 일반적으로 사용하지 않음 (주의)

 

실습에서는 2개의 인터페이스를 external와 internal에 넣어 구성했다.

 

영구/일시 설정 분리
`--permanent` 옵션 유무로 설정 지속 여부 결정

동적 적용
`firewall-cmd --reload` 로 설정을 재부팅 하지 않아도 즉시 반영 시킬 수 있다.

서비스 단위 관리
포트 대신 http, dns 같은 서비스명으로 제어 `-add-service=http`
이게 `80/tcp`랑 완전 동일

인터페이스 단위 제어
특정 NIC에만 Zone 적용 가능 `--change-interface=ens160`

백엔드 엔진 선택 가능
iptables 또는 nftables 사용 가능 `firewall-cmd --backend`

 

 

Web 서버 방화벽 설정 실습

웹서버에서 방화벽을 어떻게 설정해야 할지 알아보자

#########################################
# 1. Apache 설치 및 서비스 시작
#########################################
dnf install -y httpd             # Apache 웹서버(httpd) 설치
systemctl enable --now httpd     # 부팅 시 자동 실행 설정 + 즉시 실행
systemctl status httpd           # 서비스 상태 확인 (active여야 정상)

#########################################
# 2. 기본 웹 페이지 작성
#########################################
echo "Hello Dawon!" > /var/www/html/index.html  # 기본 웹페이지 내용 설정

#########################################
# 3. firewalld 설정 – HTTP 포트 허용
#########################################
firewall-cmd --get-active-zones                # 현재 NIC에 연결된 Zone 확인
firewall-cmd --zone=public --add-service=http --permanent  # HTTP 서비스 허용
firewall-cmd --reload                          # 설정 반영 (영구 설정 시 필수)
firewall-cmd --zone=public --list-all          # 설정 확인 (http가 services에 있어야 함)

#########################################
# 4. 포트 열려 있는지 확인
#########################################
ss -tuln | grep :80        # 80번 포트가 LISTEN 상태인지 확인
curl http://localhost      # 로컬 테스트
# 또는 외부에서:
# curl http://<서버_IP>
# 브라우저에서 http://<서버_IP> 접속

#########################################
# [선택] HTTPS도 열고 싶을 경우
#########################################
dnf install -y mod_ssl                            # SSL 모듈 설치
firewall-cmd --zone=public --add-service=https --permanent
firewall-cmd --reload

 


 

마무리

배운 걸 바탕으로 기업 인프라를 혼자 구성해보고 있었는데

방화벽이 뭔지 이해하지 못한 채 그냥 명령어만 작성하고 있었는데

이렇게 간단하게나마 정리하니까 방화벽 설정할 때 도움이 될 거 같다.

 

트러블슈팅의 대부분이 이거였는데

적절한 방화벽 관련 체크리스트 하나 만드는 것도 좋을 것 같다.

 

+ Recent posts