내부 LAN 호스트가 단일 고정 인터넷 IP로 가장하도록 허용하는 방법이 있습니까?
다음 스크립트를 사용했는데 게이트웨이 콘솔만 차단했지만 LAN 시스템은 여전히 게이트웨이 시스템을 통해 모든 주소에 연결할 수 있습니다.
#iptables -I FORWARD -j DROP all; echo blocked everything!
LAN_IN="eth0"
INTERNET="eth1"
#get IP of FQDN
ip="184.28.161.165"
#ip=`nslookup $1 | grep -m2 Address | tail -n1 | cut -d : -f 2`
#[[ -z "$ip" ]] && { echo "Error: URL not found in $_db"; exit 1; }
# Clean old firewall
iptables -F
iptables -X
iptables -t nat -F
iptables -t nat -X
iptables -t mangle -F
iptables -t mangle -X
# Unlimited access to loop back
iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT
# Drop everything
iptables -P INPUT DROP
iptables -P OUTPUT DROP
# Allow DNS
iptables -A OUTPUT -p udp --dport 53 -j ACCEPT
iptables -A OUTPUT -p tcp --dport 53 -j ACCEPT
iptables --table nat --append POSTROUTING --out-interface $INTERNET -j MASQUERADE
echo "Attemptin to open ip $ip"
echo "----------------------------"
# Now, allow connection to website site on port 80, 443, and icmp
iptables -A OUTPUT -p tcp -d $ip -j ACCEPT
iptables -A OUTPUT -p udp -d $ip -j ACCEPT
iptables -A OUTPUT -p icmp -d $ip -j ACCEPT
iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
# unlimited access to LAN
iptables -A INPUT -i $LAN_IN -j ACCEPT
iptables -A OUTPUT -o $LAN_IN -j ACCEPT
# Drop everything
iptables -P INPUT DROP
iptables -P OUTPUT DROP
echo " "
echo " --------- new fw -------------- "
iptables --list-rules
내 결과가 목록에 반영됩니다.
Attempting to open just access to www.apple.com( 184.28.161.165)
----------------------------
--------- new fw --------------
-P INPUT DROP
-P FORWARD ACCEPT
-P OUTPUT DROP
-A INPUT -i lo -j ACCEPT
-A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A INPUT -i eth0 -j ACCEPT
-A OUTPUT -o lo -j ACCEPT
-A OUTPUT -p udp -m udp --dport 53 -j ACCEPT
-A OUTPUT -p tcp -m tcp --dport 53 -j ACCEPT
-A OUTPUT -d 184.28.161.165/32 -p tcp -j ACCEPT
-A OUTPUT -d 184.28.161.165/32 -p udp -j ACCEPT
-A OUTPUT -d 184.28.161.165/32 -p icmp -j ACCEPT
-A OUTPUT -o eth0 -j ACCEPT
어떤 도움이라도 대단히 감사하겠습니다.
답변1
이것은 오래된 질문이지만, 여전히 필요한 경우 답변해 드리겠습니다.
간단히 말해서:
허용된 제약 조건 외부에 적용되지 않도록 MASQUERADE 규칙을 제한해야 합니다.
추가 배경/세부정보
네트워크 패킷의 조건/경로에 따라 모든 테이블/체인이 항상 트리거되는 것은 아니라는 점을 이해해야 합니다.
라우팅된 트래픽은 여러 테이블과 체인을 통과하지만 로컬에서 생성되거나 대상으로 지정된 트래픽과는 다릅니다.
보다 구체적으로, 기본 테이블의 INPUT/OUTPUT 체인은 외부에서 수신된 패킷을 라우팅하는 데 목적이 없지만 전달 테이블뿐만 아니라 raw, manle 및 nat 테이블의 PREROUTING/POSTROUTING 체인을 (제한 없이) 통과합니다. .
귀하의 경우 스푸핑된 LAN 패킷 타겟팅만 허용하려는 경우애플 웹사이트다음과 같이 변장 규칙을 작성할 수 있습니다.
LAN_NETWORK=192.168.0.0/24
TARGET_IP=184.28.161.165
iptables --table nat --append POSTROUTING --source $LAN_NETWORK --destination $TARGET_IP --out-interface $INTERNET -j MASQUERADE
"대상 제한" 단계와 손상/바인딩 단계가 더 자주 분할되는 것을 볼 수 있지만 여전히 소스에 따라 트래픽을 다르게 처리해야 할 수도 있습니다(예: NAT IP가 여러 개인 경우).
LAN_NETWORK=192.168.0.0/24
TARGET_IP=184.28.161.165
# allow routing/forwarding this specific trafic:
iptables --append FORWARD --source $LAN_NETWORK --destination $TARGET_IP -j ALLOW
# disable everything else (using a custom LOGDROP chain that would LOG and then DROP)
# you could simply DROP, or even change the default for FORWARD to DROP
iptables --append FORWARD -j LOGDROP
# Then you'd have a more generic NAT rule in POSTROUTING:
iptables --table nat --append POSTROUTING --source $LAN_NETWORK --out-interface $INTERNET -j MASQUERADE
여러 목적지
허용해야 하는 주소/네트워크가 여러 개인 경우 여러 솔루션이 있습니다. 가장 좋은 솔루션은 아마도 직접 nftable 구문으로 전환하는 것이지만 iptables를 사용하면 다음을 수행할 수 있습니다.
각 목적지를 동일한 규칙에 넣습니다.
iptables --append FORWARD --source $LAN_NETWORK --destination $TARGET_IP,$TARGET_IP2,$TARGET_NET1 -j ACCEPT
여러 규칙 사용
iptables --append FORWARD --source $LAN_NETWORK --destination $TARGET_IP -j ACCEPT
iptables --append FORWARD --source $LAN_NETWORK --destination $TARGET_IP2 -j ACCEPT
iptables --append FORWARD --source $LAN_NETWORK --destination $TARGET_NET1 -j ACCEPT
또는 맞춤형 체인을 사용하세요.
대상 목록은 여러 규칙에서 사용하는 경우 구성의 가독성을 높이는 데 도움이 될 수 있습니다. 예를 들면 다음과 같습니다.
iptables -N IPLIST
iptables --append IPLIST --destination $TARGET_IP -j ACCEPT
iptables --append IPLIST --destination $TARGET_IP2 -j ACCEPT
iptables --append IPLIST --destination $TARGET_NET1 -j ACCEPT
# limit routed (and so masqueraded) trafic:
iptables --append FORWARD --source $LAN_NETWORK -j IPLIST
iptables --append FORWARD -j DROP
# also limit local outbound trafic:
iptables --append OUTPUT -j IPLIST
iptables --append OUTPUT -j DROP
이런 일을 하는 방법은 여러 가지가 있습니다
상세한 아키텍처
이 주제에 대해 더 알고 싶다면거기다음은 iptables에서 패킷을 처리하는 데 사용할 수 있는 다양한 경로를 보여주는 Phil Hagen의 훌륭한 다이어그램입니다.