Я, вероятно, переместился бы RELATED,ESTABLISHED ... ACCEPT
правило о ВХОДНОЙ цепочке к очень главной из той цепочки. Если большинство Ваших соединений не является чрезвычайно недолгим, я держал бы пари, что подавляющее большинство входящих пакетов будет частью соединения и должно быть ПРИНЯТО тем правилом.
Для получения лучшего ощущения того, где пакеты приземляются в ruleset можно выполнить это:
iptables -t filter -L -n -v
и обратите особое внимание на количества байта и пакет. Вы, вероятно, заметите, что правило, которое я упомянул выше, требовало большинства пакетов довольно большим полем. Если какие-либо другие правила соответствовали значительному количеству пакетов, Вы могли бы оптимизировать свой ruleset путем продвижения их перед менее "популярными" правилами.
Наконец, я замечаю, что Ваша ВЫХОДНАЯ цепочка имеет, ПРИНИМАЮТ политику. Это делает ПРИНЯТЬ правила о ВЫХОДНОЙ цепочке избыточными, и они должны быть удалены. Точно так же, так как Ваша ВХОДНАЯ политика цепочки является ОТБРАСЫВАНИЕМ, заключительное правило ОТБРАСЫВАНИЯ о ВХОДНОЙ цепочке является ненужным.
В общем расположении правил так, чтобы Вы вышли из брандмауэра быстро, хорошая вещь. Если большая часть трафика к портам 80, и 3306 затем они должны, как Вы предполагаете, выше список для Входной таблицы.
Iptables работает над таблицами. Вы имеете 3, ВВОДИТЕ, ПЕРЕДАЕТЕ и ПРОИЗВОДИТЕ. Команда DROP находится во Входной таблице. Правила после ОТБРАСЫВАНИЯ для ВЫХОДНОЙ цепочки, таким образом, они будут обработаны для исходящих пакетов только. Они могли быть удалены, поскольку политика в отношении Таблицы выходных данных состоит в том, чтобы ПРИНЯТЬ, и они, ПРИНИМАЮТ правила.
-A INPUT -p tcp -m tcp --dport 10000 -j ACCEPT
не разделенный на НОВЫЙ / РЭЛ, EST как другие?--state NEW
избыточно, почему создание ЦП решает, было ли это NEW
каждый раз (?). Необходимо создать дополнительную цепочку 'INPUT.NEW' и единственное использование -A INPUT -m state --state NEW -j INPUT.NEW
передавать пакеты по каналу в него.-m multiport
.RELATED
так или иначе.NEW,RELATED,ESTABLISHED
. Разрешите ему подразделение w/o.Хорошие взгляды. Я отбросил бы принятие на порте 20, поскольку это должно быть обработано как связанный пакет к соединению FTP. Я обычно помещал порт 123 как первая проверка для уменьшения задержки для NTP.
Поскольку ВЫХОДНАЯ цепочка только ОТБРАСЫВАЕТ или ОТКЛОНЯЕТ правила, имел бы смысл. Существующие выходные правила ничего не делают кроме дубликата политика.
Можно хотеть посмотреть счетчики и скорректировать упорядочивание правил соответственно.
Рассмотрите использование различных цепочек для новых соединений в каждом интерфейсе.
Полагайте, что вход не принял пакеты.
Используя инструмент как Shorewall для создания брандмауэра мог бы помочь получить все на месте.
Вместо того, чтобы использовать одно явное правило на протокол/комбинацию портов, я настоятельно рекомендовал бы использовать ipset
.
Сделайте 2 набора, один каждый для TCP и UDP:
ipset -N Allowed_TCP_Ports portmap --from 0 --to 65535
ipset -N Allowed_UDP_Ports portmap --from 0 --to 65535
Заполните каждый набор:
for p in $TCP_PORTS; do ipset -A Allowed_TCP_Ports; done
for p in $UDP_PORTS; do ipset -A Allowed_UDP_Ports; done
Можно затем упростить связанные с портом правила во всего 2 правила:
-A INPUT -p tcp -m set --match-set Allowed_TCP_Ports dst -j ACCEPT
-A INPUT -p udp -m set --match-set Allowed_UDP_Ports dst -j ACCEPT
Примечание: Я удаляю -m state --state NEW
соответствия. Я имею в виду, что для? После -m state --state RELATED,ESTABLISHED
правило, все пакеты являются или НОВЫМИ или НЕДОПУСТИМЫМИ.
Примечание 2: Ubuntu ipset
пакет испорчен; необходимо загрузить и установить из источника. Я объяснил как в моем блоге. Можно считать его здесь: http://pepoluan.posterous.com/powertip-howto-install-ipset-on-ubuntu.