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

Используйте iptables для регистрации соединений, кроме двух адресов

Мы хотели бы использовать 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 устанавливать"