Моя строка в / etc / network / interfaces следующая:
post-up iptables -t nat -A PREROUTING -i vmbr0 -p tcp --dport 7997 -j DNAT --to 10.4.0.3:22
Кажется, что пересылка SSH и другие подобные правила работают нормально; HTTP и HTTPS трафик. Когда я смотрю на страницы руководства, директива:
--to
похоже, делает что-то совершенно другое:
--to-destination
чего я и ожидал. Есть 4 упоминания "--to" в страница руководства по расширениям iptables. Какой из них используется?
Почему до сих пор работает? Это правильное использование? Если это небезопасно использовать таким образом, или мне следует изменить его на --to-destination?
Парсер xtables (arptables / ebtables / iptables / ip6tables) позволяет использовать короткие имена опций соответствия / цели, если они могут быть распознаны: парсер аргументов пытается угадать опцию путем сравнения начала строки аргумента с именем опции. Но это не всегда безопасно. Параметры сопоставления имеют более высокий приоритет в порядке распознавания, чем параметры цели.
Пример небезопасного использования --to
вариант:
:~# iptables -t nat -A PREROUTING -p udp -m string --string "badword" \
-j DNAT --to 192.168.10.1
iptables v1.6.2: string: bad value for option "--to", or out of range (0-65535).
Try `iptables -h' or 'iptables --help' for more information.
В этом примере парсер распознал --to
в качестве опции совпадения строки, и команда завершится ошибкой, потому что субпарсер совпадения строки ожидает целочисленное значение, а не IP-адрес.
Но эта версия той же команды будет выполнена без ошибок:
:~# iptables -t nat -A PREROUTING -p udp -m string --st "badword" --al bm \
-j DNAT --to-d 192.168.10.1
В этом примере:
--st
знак равно --string
--al
знак равно --algo
--to-d
знак равно --to-destination
Кроме того, вы не можете использовать короткие версии имен совпадений и целей.