Можете ли вы порекомендовать хорошее введение в iptables? [закрыто]

15

Я должен настроить брандмауэр на сервере Linux (весь мой предыдущий опыт был с Windows). Мои правила должны быть довольно простыми: запретить все, разрешить некоторые порты со всеми, разрешить некоторые порты для определенных подсетей IP, в то время как сеть небольшая, но сложная (каждый хост имеет IP как минимум в 2 192.168 ... сетей, каждый может соединить много разных способов). Я думаю, что использование оболочек iptables может чрезмерно усложнить систему, логически вводя множество ненужных объектов, и было бы лучше сохранить ее простоту и использовать iptables напрямую.

Можете ли вы порекомендовать хорошее краткое введение о том, как писать правила iptables?

Иван
источник

Ответы:

26

Ссылки на официальную и рекомендованную документацию имеются на веб-сайте Netfilter.

Это не новая тема, ресурсы безграничны .

Большинство основных команд довольно интуитивно понятны и могут легко ссылаться на справочную страницу .

netfilter, технология уровня ядра, которая обеспечивает фильтрацию пакетов, достаточно продвинута. Существуют дополнительные таблицы, которые могут искажать пакеты, транслировать пакеты и иным образом влиять на маршрутизацию. iptablesУтилита является инструментом для программы пользователей , взаимодействующих с Netfilter. Если вы хотите узнать о расширенных функциональных возможностях, я предлагаю вам обратиться к вышеупомянутой документации. Для ознакомления с основными функциями, пожалуйста, прочитайте дальше.

Чтобы перечислить все существующие правила:

iptables -L -n

-n не позволяет iptables разрешать ips, что приводит к более быстрому выводу.

По умолчанию используется filterтаблица, которая используется для применения основных правил брандмауэра к трем цепочкам. Три стандартные цепи в filterтаблице INPUT, OUTPUTи FORWARD.

Цепи в значительной степени говорят сами за себя. Цепочка INPUT влияет на входящие пакеты, цепочка OUTPUT влияет на локально сгенерированные пакеты и, наконец, FORWARD для любых пакетов, которые проходят через систему.

Среди целей, которые вы можете указать, вы можете DROPпакеты, то есть просто игнорировать и не отвечать. Вы можете REJECTпакеты, где ICMP-ответ будет отправлен к источнику отказа. Наконец, вы можете ACCEPTих, что позволяет пакетам продолжать маршрутизацию.

Часто с внешним обращенным брандмауэром выбор по умолчанию будет DROPпротивоположен REJECT, так как он уменьшает видимую площадь вашей сети в Интернете. Например, IP-адрес, который в противном случае ограничивает услуги конкретным хостом, будет менее заметен DROP.

Обратите внимание, -Aзначит добавить в конец цепочки. Если вы хотите вставить сверху, вы можете использовать -I. Все правила обрабатываются сверху вниз. -Dдля удаления.

Для DROPвходящего пакета, поступающего от 192.168.235.235:

iptables -A INPUT -s 192.168.235.235 -j DROP

Это переходит к DROPцели для всех протоколов, поступающих с этого IP.

Принять:

iptables -A INPUT -s 192.168.235.235 -j ACCEPT

Чтобы запретить доступ к этому IP с вашего локального сервера или сети:

iptables -A OUTPUT -d 192.168.235.235 -j DROP

Вы можете указать -pпротокол, -sисточник пакета, -dпункт назначения пакета, порт назначения, порт --dportисточника --sportи многие другие флаги, которые будут влиять на то, как правила обрабатываются для пакетов.

Если ваша INPUTполитика по умолчанию была DROPи вы хотите, чтобы все в 192.168.123.0/24подсети имели доступ к SSH на вашем сервере, вот пример:

iptables -A INPUT -s 192.168.123.0/24 -p tcp --dport 22 -j ACCEPT

Правильно, вы также можете использовать нотацию CIDR !

Вообще говоря, лучшая политика по умолчанию DROPдля всех цепочек. Каждая цепочка имеет политику по умолчанию, которая указывается -Pфлагом. Даже если для вашей политики установлено значение по умолчанию DROP, все равно рекомендуется иметь окончательную запись в цепочке DROP.

Например, чтобы изменить политику DROPдля цепочек INPUT, FORWARD и OUTPUT:

iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT DROP

Будьте внимательны , если вы укажете политику по умолчанию DROP для INPUT на удаленной системе, предварительно не предоставив себе доступ по SSH, вы можете запретить себе доступ к системе. Если в удаленной системе вы можете указать временный crontab для сброса всех правил каждые 5 минут в качестве отказоустойчивого.

Чтобы удалить все правила и разрешить весь трафик:

iptables -P INPUT ACCEPT
iptables -P OUTPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -X
iptables -F

Обратите внимание, -Xудаляет все созданные цепочки. -Fсбрасывает все правила.

Существуют встроенные инструменты для сохранения и восстановления правил. В частности, iptables-saveи iptables-restore. Большинство современных дистрибутивов Linux имеют saveи restoreфункционируют в файле инициализации iptables, поставляемом с системой.

Существуют и другие рекомендации брандмауэра, такие как удаление некорректных пакетов и другой тип нежелательного трафика. Это одно из преимуществ использования утилиты внешнего интерфейса, такой как Shorewall , поскольку она по умолчанию реализует многие из этих политик. Тем не менее, я согласен с вашим подходом и предпочитаю также поддерживать свои собственные правила напрямую, и эти самые лучшие практики могут быть реализованы без внешнего интерфейса.

сигнализатор
источник
2
Просто наткнулся на этот ответ, когда искал здесь какие-то случайные материалы по iptables (я ищу SF / SO перед Google!), И этот очень подробный ответ, похоже, заслуживает большей любви при голосовании, поэтому я дал ему немного!
Эндрю Барбер
+1 хороший ответ. Я бы также упомянул Debian WIKI .
michal.kreuzman
1

Я нашел https://help.ubuntu.com/community/IptablesHowTo полезным в последнее время. Я не думаю, что там есть что-то особенно специфичное для Ubuntu.

gbroiles
источник
Я использую Arch на своем ноутбуке, но Ubuntu Lucid Server - это именно то, что нужно для настройки. Так что это может пригодиться, если не устарело (насколько я вижу, это относится к Ubuntu 8.04).
Иван