Если у вас используются одинаковые правила, но для разных критериев (IP, PORT, MAC, ...) вы можете объединить их в одно правило с помощью ipset.
Пример:
-A FORWARD -s 192.168.0.200 -m tcp -p tcp --dport 25 -j ACCEPT
-A FORWARD -s 192.168.0.201 -m tcp -p tcp --dport 25 -j ACCEPT
-A FORWARD -s 192.168.0.210 -m tcp -p tcp --dport 25 -j ACCEPT
...
-A FORWARD -s 192.168.0.225 -m tcp -p tcp --dport 25 -j ACCEPT
можно заменить одним правилом:
-A FORWARD -m set --set accept_email src,src -j ACCEPT
Компиляция ipset.
Для начала качаем исходник ядра и ipset (ipset-2.3.3a.tar.bz2)
Конфигурируем ядро как обычно + включаем xtables в "Y" ("*")
Качаем последний patch-o-matic-ng, патчим ядро с параметром set
cd patch-o-matic-ng-yyyymmdd
./runme set
Далее, возвращаемся в папку с исходником ядра и собираем его с поддержкой ipset:
cd /usr/src/linux/
make config
все что касается ipset можно оставить по умолчанию.
make && make modules && make install && make modules_install
Далее распаковываем и ставил ipset, сейчас мы только добавили поддержку ipset в ядро и iptables. Не забываем пересобрать iptables.
Пример использования
ipset -N accept_email iphash --resize 0 #Создаем новый set с именем foo
ipset -A accept_email 192.168.0.200 #Добавляем данные в Set
ipset -A accept_email 192.168.0.201
...
ipset -A accept_email 192.168.0.225
#И наконец, само правило:
iptables -t filter -A FORWARD -m set --set accept_email src,src -j ACCEPT
Более подробно можно прочитать на офф сайте.