Доброго времени суток. Прошу прощения за большое количество символов, но, к сожаления, нет знакомых, которые могли бы помочь в изучении iptables.
Во время прочтения статей по iptables появились вопросы по правилам. Как написано в мануале, правило состоит из условия, действия и счетчика.
Пример №1:
iptables -A INPUT -i eth1 -s 10.8.0.0/24 -p tcp --dport ssh -j ACCEPT
-A INPUT -i eth1 -s 10.8.0.0/24 -p tcp --dport ssh -это условие
-j ACCEPT -это действие
Правильно?
Нет.
Услови
я - это:
-i eth1
-s 10.8.0.0/24
-p tcp
--dport ssh
Действие (вернее, в терминах iptables - ЦЕЛЬ) - это ACCEPT. Кстати, цели у правила может и не быть…
Ключ -j является производным (сокращением) от какого слова? Jump?
Хотя ОБЫЧНО короткие опции имеют длинные аналоги, огульно утверждать, что каждая короткая опция имеет "исходный" длинный аналог - попросту неверно.
man find для примера. А для ответа на ваш вопрос -
man iptables.
Почему перед некоторыми ключами ставится символ "-", а перед другими "--"?
Стандарт GNU. Один дефис предваряет однобуквенную опцию или набор однобуквенных опций. При этом то, понимает приложение нагромождения типа "-jvVktN" как набор опций "-j -v -V -k -t -N" или как один параметр "jvVktN" - зависит целиком и полностью от самого приложения. Никаких "общих правил" тут нет. Читайте маны.
dport это сокращение от destination port?
Читайте маны. Это не сокращение, это обозначение.
Если ssh будет висеть на нестандартном порту, то при этом правиле iptables будет нормально пропускать трафик?
Загляните в файл /etc/services (в Windows - "%SystemRoot%\System32\drivers\etc\services") - просветитесь. Вся трансляция имён сервисов в номера зависит от этого файла.
Какая разница между ключами -A и -I? Первый дописывает правило в конец цепочки, а второй - на указанную позицию?
На какую позицию в цепочке ставится правило с ключом -I без дополнительных аргументов?
Серьёзно, начните с начала - прочитайте хотя бы man, чтобы иметь представление о формате команды. -A,--append - добавить [в конец], -I,--insert - вставить [в начало].
"Существует множество модулей которые могут использоваться для расширения возможностей iptables, такие как connlimit, conntrack, limit и recent.
Эти модули дополняют iptables новой функциональностью для того, чтобы были возможны более сложные правила фильтрации. "
Вместо conntrack используте модуль state, пожалуйста.
Модули устанавливаются вместе с iptables или необходима ручная установка?
Часть идёт вместе с iptables, часть можно/нужно устанавливать/включать вручную.
Список текущих активных условий (и не только) можно посмотреть в файлах
/proc/net/ip_tables_*
Хочу, для лучшего понимания, уяснить, как правильно "прочитать" правило.
iptables -A INPUT -i eth1 -s 10.8.0.0/24 -p tcp --dport ssh -j ACCEPT
Добавить(A - append) в талицу filter, в цепочку INPUT правило для пакетов, приходящих на (-i) интерфейт eth1,
источником (-s) которых является сеть 10.8.0.0/24, по протоколу tcp6, порт назначения ssh22. Применить действие принятьПРИНЯТЬ (ACCEPT).
Все символьные ссылки на цифровые значения разрешаются в момент чтения правила. На самом деле, даже имя интерфейса разрешается в его номер, но в диком виде номера интерфейсов знают только разработчики модулей ядра. Так что оставим.
Пример №2:
iptables -A FORWARD -j REJECT --reject-with icmp-host-prohibited
Добавить в таблицу filter в конец цепочки FORWARD правило, запрещающее весь трафик, ответить "хост недоступен".
Доступ к хосту запрещён, вообще-то.
Пример #3:
iptables -t nat -A POSTROUTING -s 192.168.20.0/24 -o tun0 -j MASQUERADE
Добавить в таблицу nat в конец цепочки POSTROUTING правило для пакетов, источником которых является сеть 192.168.20.0/24, ( -o tun0 - что это? Output tun0?). Действие MASQUERADE.
-o tun0 обозначает именно это пакеты, уходящие(собирающиеся уходить) с интерфейса tun0.
Можно ли -s 192.168.20.0/24 заменить на -s eth0? Т.е. на интерфейс, соответствующий подсети 192.168.20.0/24.
Нет конечно.
Пример #4:
iptables -I FORWARD -i eth1 -o tun0 -j ACCEPT
Добавить в таблицу filter в цепочку FORWARD правило. Принимать пакеты, которые идут с интерфейса tun0 на eth1.
Строго обратно. Правило разрешает транзит пакетов с eth1 на tun0.
Пример #5:
# iptables -A interfaces -i lo -j ACCEPT
В таблице filter будет созданна новая цепочка interfaces и туда добавлено правило, разрешающее прием трафика на интерфейс lo.
Не будет ничего создано. Если цепочка не была создана заранее, вывалится ошибка.