Мы хотели бы использовать iptables для входа всех сетевых соединений кроме того, если соединяющийся адрес A.B.C.D
или соединяющийся адрес E.F.G.H
. Эти два адреса не могут быть объединены в единственный диапазон CIDR без диапазона включая адреса, которые мы действительно хотим включать. Я добираюсь отчасти там путем добавления этого правила iptables:
-I INPUT ! -s A.B.D.E -p tcp -m tcp --dport 3306 -m state --state NEW -j LOG --log-level 1 --log-prefix "New Connection "
Однако это все еще регистрирует соединения от E.F.G.H
. Существует ли способ получить все, не регистрируясь также?
(Эти два адреса генерируют много соединений, и мы не должны регистрировать их.)
Добавьте правило или два над процитированной строкой, разрешающее A.B.C.D. или E.F.G.H., затем выполните запись в журнал ниже. iptables
работает в порядке с правилами, поэтому разрешение чего-либо ранее - это конец обработки.
Это также причина, по которой вы добавляете общее "deny all" в конец большинства наборов правил брандмауэра. Если что-то не охвачено вашими правилами выше, тогда запретите это, потому что это неожиданно и, скорее всего, нежелательно.
Пример (настраивайте по мере необходимости, не просто копируйте это):
-A INPUT -s A.B.C.D -p tcp -m tcp --dport 3306 -m state --state NEW -j ACCEPT
-A INPUT -s E.F.G.H -p tcp -m tcp --dport 3306 -m state --state NEW -j ACCEPT
-A INPUT -p tcp -m tcp --dport 3306 -m state --state NEW -j LOG --log-level 1 --log-prefix "New Connection "
-A INPUT -j DROP
Другой вариант - использовать ipset
.
Сначала вы создаете правильный набор IP:
ipset create DO_NOT_LOG hash:ip
Затем добавьте адреса, которые хотите исключить:
ipset add DO_NOT_LOG A.B.C.D
ipset add DO_NOT_LOG E.F.G.H
Наконец, в правиле ведения журнала iptables добавьте отрицательное совпадение:
-I INPUT -m set ! --match-set DO_NOT_LOG src -p tcp -m tcp --dport 3306 -m state --state NEW -j LOG --log-level 1 --log-prefix "New Connection "
! --match-set DO_NOT_LOG src
означает: «Сопоставить пакеты, адрес источника которых ( src
) НЕ найден в наборе DO_NOT_LOG
»
Вы можете создать пользовательскую цепочку, которую можно назвать LOG_UNLESS
, а затем сделать так:
-A INPUT -p tcp -m tcp --dport 3306 -m state --state NEW -j LOG_UNLESS
-A LOG_UNLESS -s 192.0.2.1 -j RETURN
-A LOG_UNLESS -s 203.0.113.2 -j RETURN
-A LOG_UNLESS -j LOG --log-level 1 --log-prefix "New Connection "