네트워크 내부의 컴퓨터에 포트 80, 443, 32400을 전달하려고 합니다. 따라서 EXTIP:80의 트래픽은 SERVERIP:80으로 전송되어야 하며 이러한 변경 사항이 지속되면 라우터를 다시 시작하는 것도 도움이 됩니다. 라우터에는 EXTIP와 INTIP라는 두 개의 IP가 있습니다. NAT 없이 모뎀에 직접 연결됩니다. 라우터는 내부 서버의 NAT를 관리합니다.
나는 인터넷에서 많은 iptable 변경을 시도했는데, 일반적으로 더 이상 라우터에 SSH를 연결할 수 없거나 아웃바운드 트래픽이 작동하지 않는 등의 부작용이 있었습니다. 라우터는 ufw 및 failure2ban도 실행합니다.
답변1
아직 테스트하지는 않았지만 다음과 같이 시도해 보겠습니다.
iptables -t nat -A PREROUTING --protocol tcp --destination EXTIP --destination-port 80 -j DNAT --to-destination SERVERIP
다른 포트도 비슷합니다. 이것이 도움이 될 수 있습니까?
답변2
이것은 비교적 간단한 규칙 집합처럼 들립니다.
- 루프백 시 무엇이든 허용
- 아웃바운드 요청의 "나머지 절반"에 있는 모든 것을 허용합니다.
- 모든 콘텐츠가 유출되도록 허용합니다(라우터에서 INT로, 라우터에서 EXT로, INT에서 EXT로).
- INT에서 포트 22 허용(설명에서 유추됨)
- EXT에서 포트 80을 허용하고 이를 내부 서버로 전달합니다.
- EXT에서 포트 443을 허용하고 이를 내부 서버로 전달합니다.
- EXT에서 포트 32400을 허용하고 내부 서버로 전달합니다.
이것이 나의 제안입니다. 현재 사용 가능한 두 개의 인터페이스 VM이 없으므로 테스트되지 않았습니다.
# Definitions
INTIF=eth1 # Internal interface
EXTIF=eth0 # External interface
SERVERIP=192.168.1.12 # Internal webserver address
# Prepare to wipe the ruleset, so default to allowing everything
iptables -P INPUT ACCEPT
iptables -P OUTPUT ACCEPT
iptables -P FORWARD ACCEPT
# Erase the rulesets
iptables -F INPUT
iptables -F OUTPUT
iptables -F FORWARD
iptables -t nat -F PREROUTING
iptables -t nat -F POSTROUTING
# Allow anything on loopback
iptables -i lo -j ACCEPT
# Allow anything in that is the "other half" of an outbound request
iptables -A INPUT -m state --state ESTABLISHED,RELATED
# Allow anything out (from router to INT, router to EXT, or INT to EXT)
iptables -A OUTPUT -j ACCEPT
# Allow port 22 in from INT (inferred from your explanation)
# Strictly, this is only required if you apply additional restrictions
# in the next rule, but I'm going to leave it here anyway
iptables -A INPUT -i $INTIF -p tcp --dport 22 -j ACCEPT
# Allow everything through from INT
# This allows internal access to the router too. You could add some extra
# rules here that disallow access to both the router's own IP addresses
iptables -A INPUT -i $INTIF -j ACCEPT
# Allow port 80 in from EXT, and forward it on to the internal server
# Allow port 443 in from EXT, and forward it on to the internal server
# Allow port 32400 in from EXT, and forward it on to the internal server
iptables -t nat -A PREROUTING -i $EXTIF -p tcp --dport 80 -j DNAT --to-destination $SERVERIP
iptables -t nat -A PREROUTING -i $EXTIF -p tcp --dport 443 -j DNAT --to-destination $SERVERIP
iptables -t nat -A PREROUTING -i $EXTIF -p tcp --dport 32400 -j DNAT --to-destination $SERVERIP
# Set the default action to discard all traffic
iptables -P INPUT DENY
iptables -P OUTPUT DENY
# Enable forwarding
echo 1 >/proc/sys/net/ipv4/ip_forward