Мы хотели бы использовать 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
работает в порядке правил, поэтому разрешение чего-либо раньше - это конец обработки.
По этой же причине вы добавляете в конец большинства наборов правил брандмауэра универсальный вариант «запретить все». Если что-то не подпадает под ваши правила, указанные выше, отрицайте это, потому что это неожиданно и, вероятно, нежелательно.
Пример (при необходимости отрегулируйте, не просто скопируйте и вставьте это):
-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
Вы можете создать собственную цепочку, которую можно назвать 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 "
Другой вариант - использовать 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
устанавливать"