Мне нужно установить брандмауэр на сервере Linux (весь мой предыдущий опыт связан с Windows). Мои правила должны быть довольно простыми - запретить все, разрешить некоторые порты для всех, разрешить некоторые порты для определенных IP-подсетей, в то время как сеть небольшая, но сложная (каждый хост имеет IP-адреса как минимум в 2 192.168 ... сетях, каждый может соединить много разных способов). Я думаю, что использование оберток iptables может чрезмерно усложнить систему, логически вводя множество ненужных сущностей, и было бы лучше сделать ее простой и напрямую использовать iptables.
Можете ли вы порекомендовать хорошее краткое введение о том, как писать правила iptables?
Ссылки на официальную и рекомендуемую документацию существуют на веб-сайте Netfilter.
Это не новый предмет, ресурсы безграничны.
Большинство основных команд довольно интуитивно и может легко быть ссылкой на страницу справочника.
netfilter, который является технологией уровня ядра, которая включает пакетную фильтрацию, вполне совершенствуется. Существуют дополнительные таблицы, которые могут исказить пакеты, перевести пакеты и иначе влиять на маршрутизацию. iptables
утилита является инструментом пространства пользователя для взаимодействия с netfilter. Если Вы хотите узнать о передовой функциональности, я предлагаю, чтобы Вы сослались на вышеупомянутую документацию. Для введения в основную функциональность читайте далее.
Перечислять все существующие правила:
iptables -L -n
-n
препятствует тому, чтобы iptables разрешил дюйм/с, который производит быстрее вывод.
Таблица по умолчанию filter
таблица, которая является, что используется для применения основных правил брандмауэра к этим трем цепочкам. Три цепочки по умолчанию в filter
таблица 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
, все еще рекомендуется иметь заключительную запись в цепочке, чтобы быть a DROP
также.
Например, для изменения политики на DROP
для ВХОДА ПЕРЕДАЙТЕ и ПРОИЗВЕДИТЕ цепочки:
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT DROP
Будьте осторожны при определении политики по умолчанию ОТБРАСЫВАНИЯ для ВХОДА в удаленной системе без первого разрешения себе доступ 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 init файл предоставляют систему.
Существуют другие лучшие практики брандмауэра, такие как отбрасывание уродливых пакетов и другого типа нежелательного трафика. Это - одно преимущество использования утилиты фронтэнда, такой как Shorewall, поскольку это реализует многих из этих полицейских по умолчанию. Тем не менее, я соглашаюсь с Вашим подходом и предпочитаю поддерживать свои собственные правила непосредственно также, и эти те же лучшие практики могут быть реализованы без фронтэнда.
Я нашел https://help.ubuntu.com/community/IptablesHowTo полезным недавно. Я не думаю, что что-либо там является особенно определенным для Ubuntu.