В Linux мы обычно используем таблицу «filter» для выполнения общей фильтрации:
iptables --table filter --append INPUT --source 1.2.3.4 --jump DROP
iptables --table filter --append INPUT --in-interface lo --jump ACCEPT
Согласно приведенной ниже блок-схеме сетевого фильтра, пакеты сначала проходят через «необработанную» таблицу:
Итак, мы можем написать:
iptables --table raw --append PREROUTING --source 1.2.3.4 --jump DROP
iptables --table raw --append PREROUTING --in-interface lo --jump ACCEPT
- пакеты обрабатываются быстрее, без необходимости проходить через conntrack + mangle + nat + маршрутизацию. Таким образом, используется немного меньше ресурсов процессора / памяти (и, в свою очередь, слегка компенсируется тем, что модуль iptable_raw должен быть загружен)
- только одно правило в случае, если блок также является маршрутизатором (очевидно, он не подходит для всех правил), поскольку нет необходимости добавлять одно и то же правило для фильтра / пересылки
Я делал только быстрые тесты, и это прекрасно работает.
Документация, которую я нашел, всегда описывает необработанную таблицу, которая будет использоваться в строгих случаях. Но никто не дает даже малейшего оправдания.
Вопрос: есть ли причины не использовать необработанные таблицы, кроме догматических?
Ответы:
От человека Iptables :
Анализ :
Таким образом, таблица RAW находится перед conntrack и была разработана с целью ее использования для установки метки NOTRACK на пакетах, которые вы не хотите отслеживать в netfilter.
Цели -j не ограничиваются только NOTRACK, поэтому вы можете фильтровать пакеты в необработанной таблице с преимуществами меньшего потребления ЦП / памяти.
Чаще всего серверам не нужно отслеживать все соединения. Отслеживание необходимо только в том случае, если вам нужно отфильтровать пакеты в iptables на основе ранее установленных соединений. На серверах, которые служат только простой цели, например, с открытым только портом 80 (и, возможно, 21), этого не требуется. В этих случаях вы можете отключить отслеживание соединения.
Однако, если вы пытаетесь запустить маршрутизатор NAT, все становится немного сложнее. Для того, чтобы что-то NAT, вам нужно отслеживать эти соединения, чтобы вы могли доставлять пакеты из внешней сети во внутреннюю сеть.
Если целое соединение установлено с помощью NOTRACK, то вы также не сможете отслеживать связанные соединения, помощники conntrack и nat просто не будут работать для неотслеживаемых соединений, равно как и связанные ошибки ICMP. Другими словами, вам придется открыть их вручную. Когда дело доходит до сложных протоколов, таких как FTP и SCTP и других, это может быть очень трудно управлять.
Варианты использования :
Одним из примеров может быть, если у вас есть маршрутизатор с интенсивным трафиком, на котором вы хотите настроить брандмауэр входящего и исходящего трафика, но не маршрутизируемого трафика. Затем вы можете установить метку NOTRACK, чтобы игнорировать перенаправленный трафик для экономии вычислительной мощности.
Еще один пример использования NOTRACK: если у вас есть веб-сервер с высокой посещаемостью, вы можете настроить правило, которое включает отслеживание для порта 80 на всех локальных IP-адресах или на тех, которые фактически обслуживают веб-трафик. После этого вы можете наслаждаться отслеживанием состояния во всех других службах, за исключением веб-трафика, который может сэкономить некоторую вычислительную мощность в уже перегруженной системе.
Пример -> запуск-полу-состояния-linux-router-for-private-network
Вывод : нет веских причин не использовать необработанную таблицу, но есть некоторые причины, по которым следует соблюдать осторожность при использовании цели NOTRACK в необработанной таблице.
источник