iptables "Плохой аргумент" MASQUERADE ""

385
user21303

Я пытаюсь создать в Kali Linux точку доступа "злой двойник" для себя с VirtualBo. Я пытаюсь подключить свой 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 - это реальный аргумент, но его просто не признают. Больше информации нет, поэтому мне не с чем работать. Я также очень мало знаю о правилах пересылки iptable. Я пытался, но я потратил 2 часа, пытаясь распутать структуру TCP / IP, и теперь я знаю столько же, сколько и при запуске, а это очень мало. Как я могу дополнительно диагностировать причину этой проблемы?

1

1 ответ на вопрос

2
Kamil Maciorowski

В сообщении об ошибке упоминается, 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. Парсер командной строки обманут, и команда может пожаловаться только на другой аргумент, как MASQUERADEв вашем случае. Альтернатива хуже: в общем, если эти «сдвинутые» аргументы создают правильное продолжение, команда будет работать с массивом опций, которые вы никогда не намеревались передать. Это может быть плохо; с sudoэтим может быть очень плохо.

Урок: процитируйте свои переменные.

Можете ли вы уточнить? Я попробовал eth0 без переменной, и это сработало, но почему? Если бы я делал «$ apt» в кавычках, он просто дал бы мне буквальное значение, которое было бы недействительным. user21303 5 лет назад 0
@ user21303 Там нет ничего сложного. Опечатка: `$ atp` против` $ apt`. Kamil Maciorowski 5 лет назад 0
Попался. У меня было ощущение, что понимание модели OSI было погоней за диким гусем. Решение для таких людей, как я, всегда было чем-то простым. Спасибо чувак! Чем, как говорится, есть какие-нибудь хорошие объяснения по OSI для идиотов, как я? Мне искренне любопытно user21303 5 лет назад 0
Все учебники, которые я видел, от вааааааыыы до продвинутых для ne. Я уверен, что это не сложно, люди просто объясняют это странно. user21303 5 лет назад 0
@ user21303 Я не могу помочь вам с моделью OSI, не мои знания. Здесь я только что обнаружил опечатку и применил свои знания о поведении оболочки и об общей процедуре разбора параметров командной строки, таких как `-j`. Этот подход будет работать практически с любой командой, испытывающей опечатку такого рода. Я думаю, что этот конкретный вопрос решен. Если вы хотите спросить рекомендации по учебным материалам в * отдельном * вопросе, пожалуйста, обратите внимание, что это не по теме здесь, на Супер пользователя. Kamil Maciorowski 5 лет назад 1

Похожие вопросы