Iptables - to, кажется, работает вместо -to-destination, не так ли?
Моя строка в /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
Какую директиву я бы ожидал. На странице руководства по расширениям iptables есть 4 упоминания о "--to ". Какой из них используется?
Почему это все еще работает? Это правильное использование? Если нет, безопасно ли это использовать таким образом, или я должен изменить его на --to-destination?
1 ответ
Парсер xtables (arptables/ebtables/iptables/ip6tables) позволяет использовать короткие имена опций match/target, если он может быть распознан: парсер аргументов пытается угадать опцию путем сравнения начала строки аргумента с именем опции. Но это не всегда безопасно. Параметры соответствия имеют более высокий приоритет в порядке распознавания, чем целевые параметры.
Пример небезопасного использования --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
Кроме того, вы не можете использовать короткие версии совпадений и целевых имен.