본문 바로가기
Linux

Firewalld Redirection (port forwarding)

by Nirah 2023. 3. 11.

 

레드헷 공식 문서

https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/7/html/security_guide/sec-port_forwarding

 

 


firewall-cmd는 zone별로 구분하여 정책설정을 할 수 있음을 기억할 것

죵류
의미
Public
firewalld의 기본 영역
Drop
들어오는 패킷을 모두 버린다
Block
들어오는 패킷을 모두 거부하지만 응답 메시지를 전달한다
External
라우터를 사용하여 내부 연결에 사용된다
DMZ
내부 네트워크는 제한적으로 설정하고 외부 네트워크에 접근한다
Work
신뢰하는 네트워크만 허용한다
Trusted
모든 네트워크를 허용할 경우 사용한다
Internal
내부 네크워크에 선택한 연결만 허용한다

 

 

 

[root@linux-1 ~]# firewall-cmd --list-all
public (active)
  target: default
  icmp-block-inversion: no
  interfaces: bond0 ens32 ens34 ens35
  sources:
  services: dhcpv6-client ssh
  ports:
  protocols:
  masquerade: no
  forward-ports:
  source-ports:
  icmp-blocks:
  rich rules:
 

[ 의미 ]

public
zone에 대한 종류를 나타낸다
active
run-time 활성화 여부를 나타낸다
target: default
해당 zone의 기본 보안 정책을 따른다는 의미
icmp-block-inversion: no
ICMP 를 허용하겠다, yes : 거부
interfaces : ...
zone에 적용이 되는 인터페이스
sources:...
ip주소를 의미
services:...
서비스를 의미
ports:...
포트를 의미
protocols:
프로토콜을 의미
masquerade: no
NAT 사용여부, no는 하지 않겠다
forward-ports:
포트 포워딩을 허용 여부
icmp-blocks:
블러킹할 ICMP 타입지정
rich rules:
세밀한 방화벽 정책
 

 

 

 

0. 기본 firewalld 명령어

firewalld 실행여부 확인하기
firewall-cmd --state

* 디펄트 존 확인하기
firewall-cmd --get-default-zone

* 활성화된 존과 연결된 인터페이스 확인하기
firewall-cmd --get-active-zones

* 디펄트 존의 환경설정 보기 
firewall-cmd --list-all

* 사용가능한 존 목록 확인하기
firewall-cmd --get-zones

* home존의 환경설정 보기
firewall-cmd --zone=home --list-all

* 인터페이스의 존을 변경하기
firewall-cmd --zone=home --change-interface=eth0
or "/etc/sysconfig/network-scripts/"에 있는 ifcfg-eth0와 같은  파일에 ZONE=home과 같이 설정을 추가하면 해당 존으로 인터페이스가 잡힌다.

* 디펄트 존 변경하기
firewall-cmd --set-default-zone=home

사용자 존 생성하기
firewall-cmd --permanent --new-zone=publicweb

* 사용자 존 삭제하기
firewall-cmd --permanent --delete-zone=publicweb

* external존을 Masquerading 가능상태인지 확인하기
firewall-cmd --zone=external --query-masquerade

* external존을 Masquerading 가능상태로 만들기
firewall-cmd --zone=external --add-masquerade

* external존을 Masquerading 불가능상태로 만들기
firewall-cmd --zone=external --remove-masquerade

 

 

 

 

 

 

 

 

 

 

firewalld 사용하여 port forwarding 설정하기 with CentOS7

1. firewalld 설치

# yum install -y firewalld



2. 사용중인 서비스 port 오픈 미리 허용 설정


  1)TCP 특정 포트 허용 (예 1~65535 전부 허용)

# firewall-cmd --permanent --zone=public --add-port=1-65535/tcp

 2) UDP 특정 포트 허용(예 3000번)

# firewall-cmd --permanent --add-port=3000/udp


 
3. redirect 80 to 443 설정하기 (http to httpd)


   1) 동일 서버내에서 redirect 하는 경우

# firewall-cmd --add-forward-port=port=80:proto=tcp:toport=443
# firewall-cmd --runtime-to-permanent

  2) A서버의 80포트를 B서버의 443포트로 redirect 하는 경우, Enable masquerade 추가

# firewall-cmd --add-forward-port=port=80:proto=tcp:toport=443:toaddr=SERVER_B_IP_ADDRESS
# firewall-cmd --add-masquerade

 


4. 설정 확인하기

# firewall-cmd --list-all
public
  target: default
  icmp-block-inversion: no
  interfaces:
  sources:
  services: dhcpv6-client ssh
  ports:
  protocols:
  masquerade: no
  forward-ports: port=80:proto=tcp:toport=443:toaddr=
  source-ports:
  icmp-blocks:
  rich rules:
#

 

firewall-cmd --zone=default --query-masquerade



5. 실행 명령

# systemctl enable firewalld  // 기능 활성화 
# systemctl disable firewalld  // 기능 비활성화
 
# systemctl start firewalld  // 시작
# systemctl stop  firewalld  // 중지 
# systemctl restart  firewalld  // 재시작

 

 

 

 

 

===========================================================

 

번외)  IP 허용 설정하기

“--add-rich-rule=” :  다음의 하위 옵션을 사용하여 추가할 rich rule을 지정합니다.

“rule family=” : IP 버전에 따라 ipv4 또는 ipv6 중에 선택하여 지정합니다.
“source address=” : 룰을 적용할 출발지 IP 를 입력합니다.
“accept/drop/reject” : 룰의 액션을 지정합니다. 허용 정책은 accept 를 입력합니다.

 

192.168.240.100 의 출발지 IP 허용 룰을 public zone에 영구 활성화하려면 아래와 같이 수행 후 firewall-cmd --reload 로 반영합니다.

# firewall-cmd --permanent --zone=public --add-rich-rule="rule family="ipv4" source address="192.168.240.100" accept"

여기에 포트와 프로토콜 옵션도 추가 가능
port port="22" protocol="tcp"


# firewall-cmd --reload

 

add-rich-rule 을 remove-rich-rule 로 바꾸어 수행하면 설정한 룰이 삭제됩니다.

# firewall-cmd --permanent --zone=public --remove-rich-rule="rule family="ipv4" source address="192.168.240.100" accept"

 

아니면 간단하게는 이렇게 허용

firewall-cmd --permanent --zone=public --add-source=[허용할 IP]/32