web-dev-qa-db-ja.com

iptables "不正な引数` MASQUERADE '"

VirtualBoを使用してKaliLinuxで自分用の「悪魔の双子」アクセスポイントを作成しようとしています。 iPhoneを接続して、偽の「利用規約」ページに再ルーティングしようとしています。これが私が今までやっていることです

$apt=eth0
$wifi=wlan0
#when monitor mode is enabled, the enviroment varible will adapt the name wlan0mon


Sudo sysctl -w net.ipv4.ip_forward=1
Sudo systemctl start Apache2
Sudo ifconfig $wifi down
Sudo ifconfig $wifi mode monitor
Sudo ifconfig $wifi up
Sudo airmon-ng check
Sudo airmon-ng start $wifi

$ wifiのターミナルを終了して再度開き、wlan0monという名前を変更します

Sudo airodump-ng $wifi

Sudo airbase-ng -a $gatewayBSSID -e $gatewayESSID -c $ch $wifi

Sudo cp /etc/dhcp/dhcpd.et.conf /etc/dhcp/dhcpd.conf
#et.conf is the non-original.
Sudo ifconfig at0 up
Sudo ifconfig at0 192.168.2.1 netmask 255.255.255.0
Sudo dhcpd -cf /etc/dhcp/dhcpd.conf -pf /var/run/dhcpd.pid at0
Sudo service isc-dhcp-server restart

Sudo iptables --table nat --append POSTROUTING --out-interface $atp -j MASQUERADE

今、これは私が立ち往生しているところです。私のiptablesコマンドの出力は

悪い議論 `MASQUERADE '

理由が想像できません。私はすべての要件を満たしました。 MASQUERADEは本当の議論ですが、認識されていないだけです。これ以上の情報はないので、私は何もしません。また、iptable転送ルールについてはほとんど知りません。私は試しましたが、TCP/IP構造を解くために2時間費やしました。今では、始めたときと同じくらい多くのことを知っていますが、それはごくわずかです。この問題の原因をさらに診断するにはどうすればよいですか?

1
user21303

エラーメッセージにはMASQUERADEが記載されていますが、問題の原因は$atpです。タイプミスがあります。あなたの命令

Sudo iptables --table nat --append POSTROUTING --out-interface $atp -j MASQUERADE

本当に

Sudo iptables --table nat --append POSTROUTING --out-interface -j MASQUERADE

$apt=eth0を定義した後、引用符で囲まれていない$atp$apt、タイプミスではありません!)を使用すると、引用符で囲まれていない空の文字列に解決されて消えます。

事実上、-jはインターフェース名として使用されるため、MASQUERADEはスタンドアロンの引数として表示され、-j MASQUERADEが通常行うようには動作しません。

変数を引用するためのベストプラクティスに従った場合、--out-interface "$atp"Empty interface is likely to be undesiredを生成し、実際の問題が存在する"$atp"引数に注意を向けます。引用符で囲まれた空の文字列は、コマンドに対する空の引数を生成します(この場合、iptablesは、ここではSudoを脇に置いておくことが正当化されます)。

引用符で囲まれていない空の文字列は消えます。これは、続く引数を「シフト」します。あなたのiptablesは、--out-interface-jの間に何かがあることを知りませんでした。コマンドラインパーサーはだまされ、コマンドはanother引数についてのみ文句を言う可能性があります(あなたの場合のMASQUERADEのように)。代替案はさらに悪いです。一般に、これらの「シフトされた」引数が適切な継続を構築する場合、コマンドは、渡すことを意図していなかったオプションの配列で実行されます。これは悪いかもしれません。 Sudoを使用すると、これは非常に悪い場合があります。

レッスンは次のとおりです。変数を引用します。

2