iptables에서 포트 전달이 작동하지 않습니다

iptables에서 포트 전달이 작동하지 않습니다

CentOS 7을 게이트웨이 서버로 사용합니다. 여기에는 ens28과 ens29라는 두 개의 네트워크 인터페이스가 있습니다.

ens28은 개인 192.168.xx 네트워크를 사용하며 WAN으로 간주됩니다. Ens29는 172.16.0.0 서브넷이 있는 LAN 영역입니다.

iptables를 통해 NAT 구성을 구성했기 때문에 172... 서브넷의 호스트가 인터넷에 연결할 수 있습니다.

이제 서브넷 172의 호스트가 포트 443에서 웹 서버를 브로드캐스트하기를 원합니다.

포트 포워딩 전의 기본 구성은 다음과 같습니다.

# Generated by iptables-save v1.4.21 on Mon Nov 30 21:45:11 2020
*nat
:PREROUTING ACCEPT [65:4705]
:INPUT ACCEPT [1:60]
:OUTPUT ACCEPT [1:72]
:POSTROUTING ACCEPT [0:0]
-A POSTROUTING -o ens28 -j MASQUERADE
COMMIT
# Completed on Mon Nov 30 21:45:11 2020
# Generated by iptables-save v1.4.21 on Mon Nov 30 21:45:11 2020
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [24:4585]
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -i ens28 -o ens29 -m state --state RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -i ens29 -o ens28 -j ACCEPT
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
COMMIT

전달에 관해서는 다음 규칙을 사용해 보았습니다.

iptables -A PREROUTING -t nat -i ens28 -p tcp --dport 443 -j DNAT --to 172.16.0.202:443
iptables -A FORWARD -p tcp -d 172.16.0.202 --dport 443 -j ACCEPT

새 규칙을 추가한 후 내 iptables 구성:

# Generated by iptables-save v1.4.21 on Tue Dec  1 15:39:36 2020
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [434:52068]
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -i ens28 -o ens29 -m state --state RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -i ens29 -o ens28 -j ACCEPT
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -d 172.16.0.202/32 -p tcp -m tcp --dport 443 -j ACCEPT
COMMIT
# Completed on Tue Dec  1 15:39:36 2020
# Generated by iptables-save v1.4.21 on Tue Dec  1 15:39:36 2020
*nat
:PREROUTING ACCEPT [297:55943]
:INPUT ACCEPT [0:0]
:OUTPUT ACCEPT [7:532]
:POSTROUTING ACCEPT [7:532]
-A PREROUTING -i ens28 -p tcp -m tcp --dport 443 -j DNAT --to-destination 172.16.0.202:443
-A POSTROUTING -o ens28 -j MASQUERADE
COMMIT
# Completed on Tue Dec  1 15:39:36 2020
  1. 웹 서버 호스트의 IP 주소는 172.16.0.202입니다.
  2. ens28 카드의 주소는 192.168.1.254입니다.
  3. ens29 카드의 주소는 172.16.0.253입니다.

포트 443은 외부 라우터(192.168.1.0 > 공용 IP)로 전달되며 인터넷에서 볼 수 있습니다.

sysctl에서 전달이 활성화됩니다.

net.ipv4.ip_forward = 1

그럼 내가 무엇을 놓치고 있는 걸까요? 172...에서 전달이 작동하지 않는 이유는 무엇입니까?

미리 감사드립니다.

답변1

규칙은 하나씩 확인됩니다.
거부 이후의 각 규칙은 무시됩니다.

뒤집어야지

-A FORWARD -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -d 172.16.0.202/32 -p tcp -m tcp --dport 443 -j ACCEPT

에게

-A FORWARD -d 172.16.0.202/32 -p tcp -m tcp --dport 443 -j ACCEPT
-A FORWARD -j REJECT --reject-with icmp-host-prohibited

관련 정보