7.10. 영역 간에 전달된 트래픽 필터링
firewalld
를 사용하면 서로 다른 firewalld
영역 간의 네트워크 데이터 흐름을 제어할 수 있습니다. 규칙과 정책을 정의하면 이러한 영역 간에 이동할 때 트래픽이 허용되거나 차단되는 방법을 관리할 수 있습니다.
정책 오브젝트 기능은 firewalld
에서 전달 및 출력 필터링 기능을 제공합니다. firewalld
를 사용하여 다른 영역 간 트래픽을 필터링하여 로컬 호스트 VM에 대한 액세스를 통해 호스트를 연결할 수 있습니다.
7.10.1. 정책 오브젝트와 영역 간의 관계
정책 오브젝트를 사용하면 사용자가 서비스, 포트 및 리치 규칙과 같은 firewalld 기본 기능을 정책에 연결할 수 있습니다. 상태 저장 및 단방향 방식으로 영역 간에 통과하는 트래픽에 정책 오브젝트를 적용할 수 있습니다.
# firewall-cmd --permanent --new-policy myOutputPolicy # firewall-cmd --permanent --policy myOutputPolicy --add-ingress-zone HOST # firewall-cmd --permanent --policy myOutputPolicy --add-egress-zone ANY
HOST
및 ANY
는 수신 및 송신 영역 목록에 사용되는 심볼릭 영역입니다.
-
HOST
심볼릭 영역을 사용하면 에서 시작되는 트래픽에 대한 정책이 허용되거나 firewalld를 실행하는 호스트의 대상이 있습니다. -
ANY
심볼릭 영역은 현재 및 향후 모든 영역에 정책을 적용합니다.ANY
심볼릭 영역은 모든 영역의 와일드카드 역할을 합니다.
7.10.2. 우선순위를 사용하여 정책 정렬
여러 정책을 동일한 트래픽 집합에 적용할 수 있으므로 적용할 수 있는 정책에 대한 우선 순위 순서를 생성하는 데 우선순위를 사용해야 합니다.
정책을 정렬할 우선 순위를 설정하려면 다음을 수행합니다.
# firewall-cmd --permanent --policy mypolicy --set-priority -500
위의 예에서 -500 은 우선 순위가 낮지만 우선 순위가 높습니다. 따라서 -500은 -100 이전에 실행됩니다.
낮은 숫자 우선순위 값은 우선순위가 높고 먼저 적용됩니다.
7.10.3. 정책 오브젝트를 사용하여 로컬 호스트 컨테이너와 호스트에 물리적으로 연결된 네트워크 간의 트래픽을 필터링
정책 오브젝트 기능을 사용하면 사용자가 Podman과 firewalld 영역 간의 트래픽을 필터링할 수 있습니다.
Red Hat은 기본적으로 모든 트래픽을 차단하고 Podman 유틸리티에 필요한 선택적 서비스를 여는 것이 좋습니다.
절차
새 방화벽 정책을 생성합니다.
# firewall-cmd --permanent --new-policy podmanToAny
Podman에서 다른 영역으로의 모든 트래픽을 차단하고 Podman에서 필요한 서비스만 허용합니다.
# firewall-cmd --permanent --policy podmanToAny --set-target REJECT # firewall-cmd --permanent --policy podmanToAny --add-service dhcp # firewall-cmd --permanent --policy podmanToAny --add-service dns # firewall-cmd --permanent --policy podmanToAny --add-service https
새 Podman 영역을 생성합니다.
# firewall-cmd --permanent --new-zone=podman
정책의 수신 영역을 정의합니다.
# firewall-cmd --permanent --policy podmanToHost --add-ingress-zone podman
다른 모든 영역에 대한 송신 영역을 정의합니다.
# firewall-cmd --permanent --policy podmanToHost --add-egress-zone ANY
송신 영역을 ANY로 설정하면 Podman에서 다른 영역으로 필터링합니다. 호스트에 필터링하려면 송신 영역을 HOST로 설정합니다.
firewalld 서비스를 다시 시작합니다.
# systemctl restart firewalld
검증
Podman 방화벽 정책을 다른 영역에 확인합니다.
# firewall-cmd --info-policy podmanToAny podmanToAny (active) ... target: REJECT ingress-zones: podman egress-zones: ANY services: dhcp dns https ...
7.10.4. 정책 오브젝트의 기본 대상 설정
정책에 --set-target 옵션을 지정할 수 있습니다. 다음 대상을 사용할 수 있습니다.
-
ACCEPT
- 패킷을 수락 -
DROP
- 원하지 않는 패킷을 삭제합니다. -
REJECT
- ICMP 응답을 사용하여 원하지 않는 패킷을 거부 CONTINUE
(기본값) - 패킷에는 다음 정책 및 영역의 규칙이 적용됩니다.# firewall-cmd --permanent --policy mypolicy --set-target CONTINUE
검증
정책에 대한 정보 확인
# firewall-cmd --info-policy mypolicy
7.10.5. DNAT를 사용하여 HTTPS 트래픽을 다른 호스트로 전달
웹 서버가 개인 IP 주소가 있는 DMZ에서 실행되는 경우 인터넷의 클라이언트가 이 웹 서버에 연결할 수 있도록 대상 네트워크 주소 변환(DNAT)을 구성할 수 있습니다. 이 경우 웹 서버의 호스트 이름이 라우터의 공용 IP 주소로 확인됩니다. 클라이언트에서 라우터의 정의된 포트에 대한 연결을 설정하면 라우터가 패킷을 내부 웹 서버로 전달합니다.
사전 요구 사항
- DNS 서버는 웹 서버의 호스트 이름을 라우터의 IP 주소로 확인합니다.
다음 설정을 알고 있습니다.
- 전달할 개인 IP 주소 및 포트 번호입니다.
- 사용할 IP 프로토콜
- 패킷을 리디렉션할 웹 서버의 대상 IP 주소 및 포트
절차
방화벽 정책을 생성합니다.
# firewall-cmd --permanent --new-policy <example_policy>
영역과 달리 정책은 입력, 출력 및 전달된 트래픽에 대한 패킷 필터링을 허용합니다. 로컬에서 웹 서버, 컨테이너 또는 가상 머신에서 끝점으로 트래픽을 전달하려면 이러한 기능이 필요하므로 중요합니다.
라우터 자체에서 로컬 IP 주소에 연결하고 이 트래픽을 전달할 수 있도록 수신 및 송신 트래픽에 대한 심볼릭 영역을 구성합니다.
# firewall-cmd --permanent --policy=<example_policy> --add-ingress-zone=HOST # firewall-cmd --permanent --policy=<example_policy> --add-egress-zone=ANY
--add-ingress-zone=HOST
옵션은 로컬에서 생성되어 로컬 호스트에서 전송된 패킷을 나타냅니다.--add-egress-zone=ANY
옵션은 모든 영역으로 이동하는 트래픽을 나타냅니다.트래픽을 웹 서버로 전달하는 리치 규칙을 추가합니다.
# firewall-cmd --permanent --policy=<example_policy> --add-rich-rule='rule family="ipv4" destination address="192.0.2.1" forward-port port="443" protocol="tcp" to-port="443" to-addr="192.51.100.20"'
리치 규칙은 라우터의 IP 주소에 있는 포트 443에서 웹 서버(192.51.100.20)의 IP 주소의 포트 443으로 TCP 트래픽을 전달합니다.
방화벽 구성 파일을 다시 로드합니다.
# firewall-cmd --reload success
커널에서 127.0.0.0/8의 라우팅을 활성화합니다.
영구 변경 사항의 경우 다음을 실행합니다.
# echo "net.ipv4.conf.all.route_localnet=1" > /etc/sysctl.d/90-enable-route-localnet.conf
이 명령은
route_localnet
커널 매개 변수를 영구적으로 구성하고 시스템이 재부팅된 후 설정이 보존되도록 합니다.시스템 재부팅없이 설정을 즉시 적용하려면 다음을 실행합니다.
# sysctl -p /etc/sysctl.d/90-enable-route-localnet.conf
sysctl
명령은 변경 사항을 적용하는 데 유용하지만 시스템 재부팅 시 구성은 유지되지 않습니다.
검증
라우터의 IP 주소 및 웹 서버로 전달된 포트에 연결합니다.
# curl https://192.0.2.1:443
선택 사항:
net.ipv4.conf.all.route_localnet
커널 매개변수가 활성화되어 있는지 확인합니다.# sysctl net.ipv4.conf.all.route_localnet net.ipv4.conf.all.route_localnet = 1
가
<example_policy>
활성화되어 있고 필요한 설정, 특히 소스 IP 주소와 포트, 사용할 프로토콜, 대상 IP 주소와 포트가 포함되어 있는지 확인합니다.# firewall-cmd --info-policy=<example_policy> example_policy (active) priority: -1 target: CONTINUE ingress-zones: HOST egress-zones: ANY services: ports: protocols: masquerade: no forward-ports: source-ports: icmp-blocks: rich rules: rule family="ipv4" destination address="192.0.2.1" forward-port port="443" protocol="tcp" to-port="443" to-addr="192.51.100.20"
추가 리소스
-
firewall-cmd(1)
,firewalld.policies(5)
,firewalld.richECDHE(5)
,sysctl(8)
,sysctl.conf(5)
매뉴얼 페이지 - /etc/sysctl.d/의 설정 파일을 사용하여 커널 매개변수 조정