Назад | Перейти на главную страницу

Iptables правила с! персонаж

Я ввел правила iptables для регистрации определенного соединения на нашем сервере, но похоже, что оно работает не так, как я хотел. Вот правила:

1    LOG        tcp  -- !10.51.0.0/16         0.0.0.0/0           state NEW    tcp dpt:8040 LOG flags 0 level 4 prefix `New Connection_8040TCP: '
2    LOG        tcp  -- !192.168.0.0/16       0.0.0.0/0           state NEW tcp dpt:8040 LOG flags 0 level 4 prefix `New Connection_8040TCP: '

Iptables должен регистрировать только IP-соединения, которые не находятся в указанных сетях, но он продолжает регистрировать все соединения со всех IP-адресов.

Проблема в том, что вы не можете ссылаться на несколько диапазонов IP-адресов в одном правиле iptables, но использование нескольких правил косвенно приводит к дизъюнкции (логическое ИЛИ): соединения будут регистрироваться, если они соответствуют вашему первому ИЛИ второму правилу.

Что вы хотите, так это конъюнктивное поведение (логическое И): новые связи выходят из 10.51.0.0/16, И также из 192.168.0.0/16нужно войти.

Вот почему вы не можете найти то простое решение, которое вам нужно. Нет.

Но вы можете решить эту проблему немного более сложным способом. Вы можете создать новую цепочку:

iptables -N logger
iptables -A INPUT -j logger
iptables -A logger -s 192.168.0.0/16 -j RETURN
iptables -A logger -s 10.51.0.0/16 -j RETURN
iptables -A logger -j LOG

Что делают эти команды:

  1. они создают новую таблицу с именем logger.
  2. Мы настраиваем iptables для каждого подключения, чтобы также попробовать его таблицу.
  3. эта таблица регистратора проверяет, исходят ли ваши пакеты из доверенных сетей (192.168.0.0/16 и 10.51.0.0/16). Если да, все идет нормально ( RETURN target возвращает управление исходной таблице).
  4. В противном случае соединение регистрируется (и, поскольку мы находимся в конце таблицы, управление также возвращается в начало координат).

В качестве побочного эффекта вы можете позже использовать эту новую таблицу и для других задач - например, для ОТКЛОНЕНИЯ пакетов или для любых других целей. На мой взгляд, лучше всего, если мы будем рассматривать iptables так, как будто это какой-то простой язык программирования.

Входящие соединения всегда будут соответствовать одному из этих правил, не так ли?

Связь от 10.51.0.1 например, не войдет в систему по первому правилу, но попадет по второму.

Разве тебе не нужен эквивалент !10.51.0.0/16 && !192.168.0.0/16 (вероятно, неверный синтаксис, но правильный логически).

В зависимости от версии и дистрибутива иногда необходимо активировать расширение iprange:

iptables -A INPUT -s ! 10.51.0.0/16 -m iprange -j LOG