Я ввел правила 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
Что делают эти команды:
logger
.192.168.0.0/16
и 10.51.0.0/16
). Если да, все идет нормально ( RETURN
target возвращает управление исходной таблице).В качестве побочного эффекта вы можете позже использовать эту новую таблицу и для других задач - например, для ОТКЛОНЕНИЯ пакетов или для любых других целей. На мой взгляд, лучше всего, если мы будем рассматривать 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