Нам нужно установить одно правило iptables, которое соответствует каждому исходному / 32 пользовательскому ip и перейти к 'цепочке пользователей':
iptables -A INPUT -s "EVERY_USER-IP/32" -j "USER_IP/32_CHAIN"
поскольку у нас есть сотни пользователей, нам нужно / мы предпочитаем избегать использования множества правил user-ip / 32, например:
iptables -A INPUT -s "USER-IP1/32" -j "USER_IP1/32_CHAIN"
iptables -A INPUT -s "USER-IP2/32" -j "USER_IP2/32_CHAIN"
...
Если вы хотите иметь другой набор правил брандмауэра для каждого пользователя-ip, вам нужно создать цепочку для каждого пользователя-ip. Тогда вам нужно заполнить каждую цепочку правильными правилами.
Мы не можем предложить лучшего способа, если вы не расскажете нам о вашем наборе правил и о том, действительно ли необходимо иметь совершенно другой набор правил для каждого user-ip.
Если вы беспокоитесь о возможности iptables обрабатывать большой набор правил, у меня есть работающий брандмауэр с +60,000 правил.
. Первая половина вашего вопроса звучит как идеальный вариант использования ipset
Вы управляете коллекцией ip-адресов с помощью ipset
, и в ваших наборах правил iptables вы ссылаетесь на эту коллекцию, а не на отдельные ip-адреса. Это делает вашу базу правил намного меньше и будет работать гораздо лучше.
ipset create our-users hash:net hashsize 4096
Добавьте ip-адреса в эту новую коллекцию:
ipset add our-users 192.168.0.5
ipset add our-users 192.168.0.100
А затем, когда исходный ip-адрес присутствует в этой коллекции, сделайте что-нибудь полезное:
iptables -I INPUT -m set --match-set our-users src -j ALLOW
Но вторая часть вашего текущего вопроса, кажется, подразумевает, что для каждого известного IP-адреса источника у вас есть (некоторые) пользовательские правила в уникальной цепочке. Если это действительно так, то вы действительно получите множество правил.
.