Как я могу программно управлять правилами iptables на лету?

Многие объяснения уже присутствуют, чтобы объяснить, как это происходит и как это исправить, но вы также должны следовать рекомендациям, чтобы избежать NullPointerException вообще.

См. также: A хороший список лучших практик

Я бы добавил, очень важно, хорошо использовать модификатор final. Использование "окончательной" модификатор, когда это применимо в Java

Сводка:

  1. Используйте модификатор final для обеспечения хорошей инициализации.
  2. Избегайте возврата null в методы, например, при возврате пустых коллекций.
  3. Использовать аннотации @NotNull и @Nullable
  4. Быстрое завершение работы и использование утверждений, чтобы избежать распространения нулевых объектов через все приложение, когда они не должен быть пустым.
  5. Сначала используйте значения с известным объектом: if("knownObject".equals(unknownObject)
  6. Предпочитают valueOf() поверх toString ().
  7. Используйте null safe StringUtils StringUtils.isEmpty(null).

39
задан David J. 21 September 2012 в 16:58
поделиться

5 ответов

От netfilter FAQ:

ответ, к сожалению: Нет.

Теперь Вы могли бы думать, 'но что относительно libiptc?'. Как был указан, многочисленные времена на mailinglist (s), libiptc был НИКОГДА , означал использоваться в качестве открытого интерфейса. Мы не гарантируем стабильный интерфейс, и планируется удалить его в следующем воплощении пакетной фильтрации Linux. libiptc является слишком нижним слоем, который будет использоваться обоснованно так или иначе.

Мы хорошо знаем, что существует фундаментальное отсутствие такого API, и мы работаем над улучшением той ситуации. До тех пор это рекомендуется любой системе использования (), или откройте канал в stdin iptables-восстановления. Последний даст Вам путь лучшая производительность.

19
ответ дан Eric Lathrop 27 November 2019 в 02:48
поделиться

Используя iptables-сохранение и iptables-восстановление, чтобы запросить и повторно создать правила легко самый эффективный способ сделать его. Они привыкли для, однажды, быть сценариями оболочки, но теперь они - программы C та работа очень эффективно.

Однако я должен указать, что существует инструмент, который можно использовать, который сделает поддержание iptables намного легче. Самые динамические rulesets являются действительно тем же правилом, повторяемым много раз, таким как:

iptables -A INPUT -s 1.1.1.1 -p tcp -m --dport 22 -j ACCEPT
iptables -A INPUT -s 2.2.2.0/24 -p tcp -m --dport 22 -j ACCEPT
iptables -A INPUT -p tcp -m tcp --dport 22 -j REJECT

Вместо того, чтобы заменить те правила каждый раз Вы хотите изменить, какие порты могут порт доступа 22 (полезный для, говорят, стук порта), можно использовать ipsets. То есть:

ipset -N ssh_allowed nethash
iptables -A ssh_allowed -m set --set ssh_allowed src -p tcp -m --dport 22 -j ACCEPT
ipset -A ssh_allowed 1.1.1.1
ipset -A ssh_allowed 2.2.2.0/24

Наборы могут содержать IP-адреса, сети, порты, мак адреса, и иметь тайм-ауты на их записях. (Когда-нибудь требуемый для добавления чего-то в течение только часа?).

существует даже атомарный способ подкачать набор того с другим, таким образом, обновление означает создавать новый временный набор, затем загружая его как название существующего набора.

12
ответ дан Jerub 27 November 2019 в 02:48
поделиться

Насколько я понимаю (хотя никакая ссылка, кажется, не упоминает его), iptables-restore является атомарным. В конце, когда COMMIT строка читается, iptables вызовы iptc_commit в libiptc (который во внутреннем интерфейсе Вы, как предполагается, не используете), который тогда звонит setsockopt(SO_SET_REPLACE) с Вашим новым rulesets.

, Который звучит почти столь атомарным, как можно добраться: с одним вызовом ядра. Однако более хорошо осведомленные стороны приглашены оспаривать это.:-)

Редактирование: Я могу подтвердить, что Ваше описание корректно. iptables-restore сделан как атомарная операция в ядре.

, Чтобы быть еще больше конкретный операция "только" является атомарной на на основание ЦП. Поскольку мы храним весь ruleset блоб на ЦП (из-за оптимизации кэша).

4
ответ дан NetOptimizer 27 November 2019 в 02:48
поделиться

Нет сознательно никакого API для управления этими правилами. Вы, как предполагается, не хотите сделать так. Или что-то.

при необходимости в правилах, которые являются достаточно динамичными, Вы заботитесь о выполнении выполнения/sbin/iptables, существуют другие способы сделать это:

  • Используя что-то как "недавнее" соответствие или IP соответствие набора, можно добавить/удалить IP-адреса из черных/белых списков, не изменяя набор правила.
  • можно передать пакеты в пространство пользователя для фильтрации NFQUEUE
использования
3
ответ дан MarkR 27 November 2019 в 02:48
поделиться

Право MarkR, Вы, как предполагается, не делаете это. Самый легкий путь состоит в том, чтобы назвать iptables из сценария или записать конфигурацию iptables и 'восстановить' его.

однако, если Вы хотите, читают источник iptables. iptables соответствия использования и таблицы как общие объекты. Можно использовать источник или их.

Linux netfilter также имеет, некоторые включают файлы под/usr/include/netfilter*. Это функции несколько низкого уровня. Это - то, что использует iptables. Это - столь близкий API, как можно добраться без iptables.

, Но этот API 'грязно'. Примите во внимание, что это было разработано, чтобы использоваться только iptables. Это очень хорошо не документируется, можно поразить очень определенные проблемы, API может измениться довольно быстрый без любого предупреждения, таким образом, обновление propably повредит код, и т.д.

0
ответ дан terminus 27 November 2019 в 02:48
поделиться
Другие вопросы по тегам:

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