内部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の素晴らしい図です。