Настройка брандмауэра Ubuntu iptables
Обновлено: 21.11.2024
Настройка хорошего брандмауэра – важный шаг для обеспечения безопасности любой современной операционной системы. Большинство дистрибутивов Linux поставляются с несколькими различными инструментами брандмауэра, которые мы можем использовать для настройки наших брандмауэров. В этом руководстве мы рассмотрим брандмауэр iptables.
Iptables — это стандартный брандмауэр, включенный в большинство дистрибутивов Linux по умолчанию (его начнет заменять современный вариант под названием nftables). На самом деле это внешний интерфейс для перехватчиков сетевых фильтров на уровне ядра, которые могут манипулировать сетевым стеком Linux. Он работает, сопоставляя каждый пакет, проходящий через сетевой интерфейс, с набором правил, чтобы решить, что делать.
Примечание. В этом руководстве рассматривается безопасность IPv4. В Linux безопасность IPv6 поддерживается отдельно от IPv4. Например, «iptables» поддерживает правила брандмауэра только для адресов IPv4, но у него есть аналог IPv6, называемый «ip6tables», который можно использовать для поддержки правил брандмауэра для сетевых адресов IPv6.
Если ваш VPS настроен для IPv6, не забудьте защитить сетевые интерфейсы IPv4 и IPv6 с помощью соответствующих инструментов. Дополнительные сведения об инструментах IPv6 см. в этом руководстве: Как настроить инструменты для использования IPv6 на Linux VPS
Предпосылки
Прежде чем вы начнете использовать это руководство, на вашем сервере должна быть настроена отдельная учетная запись суперпользователя без полномочий root — пользователь с правами sudo. Если вам нужно настроить это, следуйте этому руководству: Initial Server Setup with Ubuntu 14.04.
Основные команды iptables
Теперь, когда вы хорошо понимаете концепции iptables, мы должны рассмотреть основные команды, которые будут использоваться для формирования сложных наборов правил и для управления интерфейсом iptables в целом.
Во-первых, вы должны знать, что команды iptables должны выполняться с привилегиями root. Это означает, что вам нужно войти в систему как root, использовать su или sudo -i для получения корневой оболочки или предварять все команды sudo . В этом руководстве мы будем использовать sudo, так как это предпочтительный метод в системе Ubuntu.
Хорошей отправной точкой является список текущих правил, настроенных для iptables. Вы можете сделать это с помощью флага -L:
Как видите, у нас есть три цепочки по умолчанию (INPUT, OUTPUT и FORWARD). Мы также можем видеть политику по умолчанию каждой цепочки (каждая цепочка имеет ACCEPT в качестве политики по умолчанию). Мы также видим некоторые заголовки столбцов, но не видим никаких реальных правил. Это связано с тем, что Ubuntu не поставляется с набором правил по умолчанию.
Мы можем увидеть вывод в формате, отражающем команды, необходимые для включения каждого правила и политики, используя вместо этого флаг -S:
Чтобы воспроизвести конфигурацию, нам просто нужно ввести sudo iptables, а затем каждую из строк вывода. (В зависимости от конфигурации это может быть немного сложнее, если мы подключены удаленно, чтобы мы не устанавливали политику удаления по умолчанию до того, как будут установлены правила для перехвата и разрешения нашего текущего подключения.)
Если у вас есть действующие правила и вы хотите отменить их и начать заново, вы можете сбросить текущие правила, набрав:
Опять же, здесь важна политика по умолчанию, потому что, хотя все правила удаляются из ваших цепочек, политика по умолчанию не изменится с помощью этой команды. Это означает, что если вы подключены удаленно, вы должны убедиться, что политика по умолчанию для ваших цепочек INPUT и OUTPUT установлена на ACCEPT, прежде чем сбрасывать ваши правила. Вы можете сделать это, набрав:
После того как вы установили правила, явно разрешающие подключение, вы можете снова изменить политику сброса по умолчанию на DROP. Мы рассмотрим, как это сделать, чуть позже.
Составьте свое первое правило
Мы начнем создавать политики брандмауэра. Как мы уже говорили выше, мы будем работать с цепочкой INPUT, так как это воронка, через которую будет проходить входящий трафик. Мы собираемся начать с правила, о котором мы говорили немного выше: правило, которое явно принимает ваше текущее SSH-соединение.
Полное правило, которое нам нужно, таково:
Это может показаться невероятно сложным, но большая часть этого станет понятной, когда мы рассмотрим компоненты:
-A INPUT: флаг -A добавляет правило в конец цепочки. Это часть команды, которая сообщает iptables, что мы хотим добавить новое правило, что мы хотим, чтобы это правило было добавлено в конец цепочки, и что цепочка, с которой мы хотим работать, является цепочкой INPUT.
-m conntrack: iptables имеет набор основных функций, а также набор расширений или модулей, предоставляющих дополнительные возможности.
В этой части команды мы заявляем, что хотим получить доступ к функциям, предоставляемым модулем conntrack. Этот модуль предоставляет доступ к командам, которые можно использовать для принятия решений на основе связи пакета с предыдущими подключениями.
–ctstate: это одна из команд, доступных при вызове модуля conntrack.Эта команда позволяет нам сопоставлять пакеты на основе того, как они связаны с пакетами, которые мы видели ранее.
Мы передаем ему значение ESTABLISHED, чтобы разрешить пакеты, являющиеся частью существующего соединения. Мы передаем ему значение RELATED, чтобы разрешить пакеты, связанные с установленным соединением. Это часть правила, которая соответствует нашему текущему сеансу SSH.
-j ACCEPT: указывает цель сопоставления пакетов. Здесь мы сообщаем iptables, что пакеты, соответствующие предыдущим критериям, должны быть приняты и пропущены.
Мы поместили это правило в начало, потому что хотим убедиться, что соединения, которые мы уже используем, сопоставляются, принимаются и извлекаются из цепочки до того, как будут достигнуты какие-либо правила DROP.
Мы можем увидеть изменения, если перечислим правила:
Теперь, когда вы знаете общий синтаксис, давайте добавим еще несколько случаев, когда мы хотим принять соединение.
Принять другие необходимые соединения
Мы сказали iptables оставлять открытыми все соединения, которые уже открыты, и разрешать новые соединения, связанные с этими соединениями. Однако нам нужно создать некоторые правила, чтобы установить, когда мы хотим принимать новые подключения, которые не соответствуют этим критериям.
Мы хотим оставить открытыми два порта. Мы хотим, чтобы наш SSH-порт оставался открытым (в этом руководстве мы предполагаем, что это порт 22 по умолчанию. Если вы изменили это в своей конфигурации SSH, измените свое значение здесь). Мы также предполагаем, что на этом компьютере работает веб-сервер с портом 80 по умолчанию. Если это не так, вам не нужно добавлять это правило.
- -p tcp: Этот параметр сопоставляет пакеты, если используется протокол TCP. Это протокол на основе соединения, который будет использоваться большинством приложений, поскольку он обеспечивает надежную связь.
- –dport: этот параметр доступен, если указан флаг TCP -p. Это дает дополнительное требование соответствия порта назначения для соответствующего пакета. Первое правило соответствует TCP-пакетам, предназначенным для порта 22, а второе правило соответствует TCP-трафику, направленному на порт 80.
Есть еще одно правило принятия, которое необходимо для обеспечения правильной работы нашего сервера. Часто службы на компьютере взаимодействуют друг с другом, отправляя друг другу сетевые пакеты. Они делают это с помощью псевдосетевого интерфейса, называемого петлевым устройством , которое направляет трафик на себя, а не на другие компьютеры.
Поэтому, если одна служба хочет связаться с другой службой, которая прослушивает соединения через порт 4555, она может отправить пакет на порт 4555 устройства обратной связи. Мы хотим, чтобы такое поведение было разрешено, поскольку оно необходимо для правильной работы многих программ.
Нам нужно добавить следующее правило:
Это выглядит немного иначе, чем другие наши команды. Давайте посмотрим, что он делает:
-I INPUT 1: Флаг -I указывает iptables вставить правило. Это отличается от флага -A, который добавляет правило в конец. Флаг -I принимает цепочку и позицию правила, в которую вы хотите вставить новое правило.
В данном случае мы добавляем это правило в качестве самого первого правила цепочки INPUT. Это снизит остальные правила. Мы хотим, чтобы это было наверху, потому что оно является фундаментальным и не должно затрагиваться последующими правилами.
-i lo: этот компонент правила соответствует, если интерфейс, который использует пакет, является интерфейсом «lo». Интерфейс «lo» — это другое название петлевого устройства. Это означает, что любой пакет, использующий этот интерфейс для связи (пакеты, сгенерированные на нашем сервере, для нашего сервера), должен быть принят.
Чтобы увидеть наши текущие правила, мы должны использовать флаг -S. Это связано с тем, что флаг -L не включает некоторую информацию, например интерфейс, к которому привязано правило, что является важной частью только что добавленного правила:
Реализация правила удаления
Теперь у нас есть четыре отдельных правила, которые явно принимают пакеты на основе определенных критериев. Однако в настоящее время наш брандмауэр ничего не блокирует.
Если пакет входит в цепочку INPUT и не соответствует ни одному из четырех созданных нами правил, он передается нашей политике по умолчанию, которая все равно принимает пакет. Нам нужно это изменить.
Есть два разных способа сделать это с некоторыми довольно важными отличиями.
Первый способ сделать это — изменить политику по умолчанию для нашей цепочки INPUT. Мы можем сделать это, набрав:
Это позволит перехватывать все пакеты, проходящие через нашу цепочку INPUT, и отбрасывать их. Это то, что мы называем политикой удаления по умолчанию. Одно из следствий этого типа дизайна заключается в том, что он отбрасывает пакеты, если правила сбрасываются.
Это может быть более безопасным, но также может иметь серьезные последствия, если у вас нет другого способа доступа к вашему серверу. С DigitalOcean вы можете войти через нашу веб-консоль, чтобы получить доступ к вашему серверу, если это произойдет.Веб-консоль действует как виртуальное локальное соединение, поэтому правила iptables на нее не повлияют.
Возможно, вы захотите, чтобы ваш сервер автоматически разрывал все подключения в случае сброса правил. Это помешает вашему серверу оставаться открытым. Это также означает, что вы можете легко добавлять правила в конец цепочки, продолжая отбрасывать пакеты по своему усмотрению.
Альтернативный подход состоит в том, чтобы сохранить политику по умолчанию для цепочки, как принятую, и добавить правило, которое отбрасывает все оставшиеся пакеты в конец самой цепочки.
Если вы изменили политику по умолчанию для цепочки INPUT, приведенной выше, вы можете снова установить ее, набрав:
Теперь вы можете добавить правило в конец цепочки, которое будет отбрасывать все оставшиеся пакеты:
Результат при нормальных условиях работы точно такой же, как и при использовании политики удаления по умолчанию. Это правило работает, сопоставляя каждый оставшийся пакет, достигший его. Это предотвращает когда-либо отбрасывание пакета по всей цепочке для достижения политики по умолчанию.
В основном это используется для сохранения политики по умолчанию для приема трафика. Таким образом, если возникнут какие-либо проблемы и правила сбросятся, вы все равно сможете получить доступ к машине по сети. Это способ реализации действия по умолчанию без изменения политики, которая будет применяться к пустой цепочке.
Конечно, это также означает, что любое правило, которое вы хотите добавить в конец цепочки, должно быть добавлено перед правилом удаления. Вы можете сделать это, либо временно удалив правило удаления:
Или вы можете вставить нужные вам правила в конце цепочки (но до перетаскивания), указав номер строки. Чтобы вставить правило в строку номер 4, вы можете ввести:
Если у вас возникли проблемы с определением номера строки каждого правила, вы можете сообщить iptables о нумерации правил, набрав:
Это может быть полезно, чтобы убедиться, что вы добавляете правило в нужное место.
Список и удаление правил Iptables
Если вы хотите узнать подробности о выводе списка и удалении правил iptables, ознакомьтесь с этим руководством: Как составить список и удалить правила брандмауэра Iptables.
Сохранение конфигурации Iptables
По умолчанию правила, которые вы добавляете в iptables, являются эфемерными. Это означает, что когда вы перезапустите свой сервер, ваши правила iptables исчезнут.
На самом деле это функция для некоторых пользователей, поскольку она дает им возможность вернуться, если они случайно заблокировали доступ к серверу. Однако большинству пользователей нужен способ автоматического сохранения созданных вами правил и их загрузки при запуске сервера.
Есть несколько способов сделать это, но проще всего использовать пакет iptables-persistent. Вы можете скачать это из стандартных репозиториев Ubuntu:
Во время установки вас спросят, хотите ли вы сохранить текущие правила для автоматической загрузки. Если вас устраивает ваша текущая конфигурация (и вы проверили свою способность создавать независимые подключения SSH, вы можете сохранить текущие правила.
Также вас спросят, хотите ли вы сохранить настроенные вами правила IPv6. Они настраиваются с помощью отдельной утилиты под названием ip6tables, которая управляет потоком пакетов IPv6 почти таким же образом.
После завершения установки у вас появится новая служба iptables-persistent, настроенная на запуск при загрузке. Эта служба загрузит ваши правила и применит их при запуске сервера.
Сохранение обновлений
Если вы когда-нибудь обновите свой брандмауэр и захотите сохранить изменения, вы должны сохранить свои правила iptables, чтобы они были постоянными.
Сохраните правила брандмауэра с помощью этой команды:
Заключение
Теперь у вас должна быть хорошая отправная точка для разработки брандмауэра, отвечающего вашим потребностям. Есть много других утилит брандмауэра, и некоторые из них могут быть проще, но iptables — хороший инструмент для обучения, хотя бы потому, что он раскрывает часть базовой структуры сетевого фильтра и присутствует во многих системах.
Чтобы узнать больше о защите вашей сети с помощью iptables, ознакомьтесь с этими руководствами:
Хотите узнать больше? Присоединяйтесь к сообществу DigitalOcean!
Присоединяйтесь к нашему сообществу DigitalOcean, насчитывающему более миллиона разработчиков, бесплатно! Получайте помощь и делитесь знаниями в нашем разделе "Вопросы и ответы", находите руководства и инструменты, которые помогут вам расти как разработчику и масштабировать свой проект или бизнес, а также подписывайтесь на интересующие вас темы.
Прикладная программа iptables пользовательского пространства позволяет настраивать таблицы, предоставляемые брандмауэром ядра Linux, а также цепочки и правила, которые он хранит. Модуль ядра, используемый в настоящее время для iptables, применяется только к трафику IPv4, для настройки правил брандмауэра для соединений IPv6 вместо этого используйте ip6tables, которые реагируют на те же структуры команд, что и iptables.
Список текущих правил
Серверы Ubuntu по умолчанию не применяют никаких ограничений, но для дальнейшего использования проверьте текущие правила iptable с помощью следующей команды.
При этом будет распечатан список из трех цепочек: ввод, пересылка и выход, как в примере с пустой таблицей правил ниже.< /p>
Имена цепочек указывают, к какому трафику будут применяться правила в каждом списке, вход — для всех подключений, входящих на ваш облачный сервер, выход — любой исходящий трафик и вперед для любого прохода. Каждая цепочка также имеет свою настройку policy, которая определяет, как обрабатывается трафик, если он не соответствует каким-либо конкретным правилам. По умолчанию установлено значение принять.
Добавление правил
Брандмауэры обычно можно настроить одним из двух способов: либо установить правило по умолчанию, чтобы принять, а затем заблокировать любой нежелательный трафик с помощью определенных правил, либо использовать правила для определения разрешенного трафика и блокировки всего остального. Последний часто является рекомендуемым подходом, поскольку он позволяет упреждающе блокировать трафик, вместо того, чтобы реактивно отклонять подключения, которые не должны пытаться получить доступ к вашему облачному серверу.
Чтобы начать использовать iptables, сначала необходимо добавить правила для разрешенного входящего трафика для необходимых вам служб. Iptables может отслеживать состояние подключения, поэтому используйте приведенную ниже команду, чтобы разрешить установленные подключения.
Вы можете убедиться, что правило было добавлено, с помощью того же sudo iptables -L, что и раньше.
Далее разрешите трафик на определенный порт, чтобы активировать SSH-соединения со следующим.
После добавления всех разрешенных правил, которые вам нужны, измените политику ввода на удаление.
Предупреждение. Если изменить правило по умолчанию на сброс, будет разрешено только специально принятое соединение. Перед изменением правила по умолчанию убедитесь, что вы включили как минимум SSH, как показано выше.
Эти же правила политики можно определить и для других цепочек, введя имя цепочки и выбрав либо DROP, либо ACCEPT.
Сохранение и восстановление правил
Теперь, если вы перезапустите свой облачный сервер, все эти конфигурации iptables будут стерты. Чтобы этого не произошло, сохраните правила в файл.
Затем вы можете просто восстановить сохраненные правила, прочитав сохраненный файл.
Вы можете автоматизировать процесс восстановления при перезагрузке, установив дополнительный пакет для iptables, который берет на себя загрузку сохраненных правил. Для этого с помощью следующей команды.
После установки первоначальная настройка попросит сохранить текущие правила для IPv4 и IPv6, просто выберите Да и нажмите Enter для обоих.
Если вы вносите дальнейшие изменения в свои правила iptables, не забудьте сохранить их снова, используя ту же команду, что и выше. iptables-persistent ищет файлы rules.v4 и rules.v6 в папке /etc/iptables.
Это всего лишь несколько простых команд, которые вы можете использовать с iptables, который способен на гораздо большее. Читайте дальше, чтобы узнать о некоторых других параметрах, доступных для более расширенного управления правилами iptable.
Расширенная настройка правила
Согласно базовому поведению брандмауэра, правила считываются в том порядке, в котором они перечислены в каждой цепочке, а это значит, что вам нужно расположить правила в правильном порядке. Добавление новых правил добавляет их в конец списка. Вы можете добавить новые правила в определенную позицию списка, вставив их с помощью команды iptables -I, где - это порядковый номер, по которому вы хотите вставить правило. Чтобы узнать, какой порядковый номер вводить, используйте следующую команду.
Число в начале каждой строки правила указывает позицию в цепочке. Чтобы вставить новое правило над определенным существующим правилом, просто используйте порядковый номер этого существующего правила. Например, чтобы вставить новое правило в начало цепочки, используйте следующую команду с номером индекса 1.
Если вы хотите удалить существующее правило из определенной цепочки, используйте команду удаления с параметром -D. Самый простой способ выбрать правило для удаления — использовать порядковые номера, описанные выше. Например, чтобы удалить второе правило в цепочке ввода, используйте эту команду.
Также можно сбросить все правила определенной цепочки или даже всех iptables, используя параметр -F. Это полезно, если вы подозреваете, что iptables мешает вашему сетевому трафику, или вы просто хотите снова начать настройку с чистой таблицы.
Предупреждение. Прежде чем очищать любую цепочку, убедитесь, что для правила по умолчанию задано значение ПРИНЯТЬ.
После этого вы можете очистить другие правила. Не забудьте сохранить правила в файл перед очисткой таблицы на случай, если позже вы захотите восстановить конфигурацию.
Если iptable очищен, ваш сервер может быть уязвим для атак. Убедитесь, что ваша система защищена альтернативным методом, даже временно отключив iptables.
Главный редактор и технический писатель UpCloud с 2015 года.Облачные энтузиасты, пишущие о серверных технологиях и программном обеспечении.
Вы ищете полное руководство по iptables? Оставайся на месте. В этой статье мы покажем вам, как установить и использовать iptables в системе Ubuntu. Узнав об этом инструменте брандмауэра Linux, вы сможете защитить свой Linux VPS с помощью интерфейса командной строки.
Что такое Iptables и как он работает?
Проще говоря, iptables — это брандмауэр для Linux. Он будет отслеживать трафик с вашего сервера и на ваш сервер с помощью таблиц. Эти таблицы содержат наборы правил, называемых цепочками, которые будут фильтровать входящие и исходящие пакеты данных.
Когда пакет соответствует правилу, ему назначается цель, которая может быть другой цепочкой или одним из следующих специальных значений:
- ПРИНЯТЬ — разрешает прохождение пакета.
- DROP — не пропустит пакет.
- RETURN – останавливает передачу пакета по цепочке и указывает ему вернуться к предыдущей цепочке.
В этом руководстве по iptables мы будем работать с одной из таблиц по умолчанию, которая называется filter. Он состоит из трех цепочек:
- INPUT — контролирует входящие пакеты на сервер.
- FORWARD – фильтрует входящие пакеты, которые будут переадресованы в другое место.
- OUTPUT – фильтрация пакетов, исходящих с вашего сервера.
Прежде чем мы начнем это руководство, убедитесь, что у вас есть доступ SSH root или sudo к вашему компьютеру, работающему под управлением Ubuntu 16.04 или более поздней версии. Вы можете установить соединение через PuTTY (Windows) или терминальную оболочку (Linux, macOS). Если вы являетесь владельцем Hostinger VPS, вы можете получить данные для входа по SSH на вкладке «Серверы» в hPanel.
Правила iptables применяются только к ipv4. Если вы хотите настроить брандмауэр для протокола ipv6, вместо этого вам нужно будет использовать ip6tables.
Как установить и использовать брандмауэр Iptables Linux
Мы разделим это руководство по iptables на три этапа. Во-первых, вы узнаете, как установить инструмент на Ubuntu. Во-вторых, мы собираемся показать вам, как определить правила. Наконец, мы поможем вам внести постоянные изменения в iptables.
Шаг 1 — Установка Iptables
Iptables предустановлен в большинстве дистрибутивов Linux. Однако, если он не установлен в системе Ubuntu/Debian по умолчанию, выполните следующие действия:
- Подключитесь к серверу через SSH. Если вы не знаете, вы можете прочитать наше руководство по SSH.
- Выполните следующие команды одну за другой:
- Проверьте состояние текущей конфигурации iptables, выполнив:
Здесь опция -L используется для отображения всех правил, а -v — для отображения информации в более подробном формате. Ниже приведен пример вывода:
Теперь у вас установлен брандмауэр Linux. На этом этапе вы можете заметить, что все цепочки настроены на ACCEPT и не имеют правил. Это небезопасно, так как любой пакет может пройти без фильтрации.
Не волнуйтесь. Мы расскажем вам, как определить правила, на следующем этапе нашего руководства по iptables.
Шаг 2. Определение правил цепочки
Определение правила означает добавление его в цепочку. Для этого вам нужно вставить опцию -A (Добавить) сразу после команды iptables, например:
Это предупредит iptables, что вы добавляете новые правила в цепочку. Затем вы можете комбинировать команду с другими параметрами, такими как:
Если вы хотите использовать их все, вы должны написать команду в следующем порядке:
После того как вы поймете основной синтаксис, вы сможете приступить к настройке брандмауэра, чтобы повысить безопасность вашего сервера. В этом руководстве по iptables мы будем использовать цепочку INPUT в качестве примера.
Включение трафика на локальном хосте
Чтобы разрешить трафик на локальном хосте, введите следующую команду:
В этом руководстве по iptables мы используем интерфейс lo или loopback. Он используется для всех коммуникаций на локальном хосте. Приведенная выше команда обеспечит правильную работу соединений между базой данных и веб-приложением на одном компьютере.
Пришло время проверить, добавлены ли правила в iptables:
Он должен вернуться с приведенными ниже результатами, что означает, что все соединения протокола TCP с указанных портов будут приняты:
Фильтрация пакетов по источнику
Iptables позволяет фильтровать пакеты на основе IP-адреса или диапазона IP-адресов. Вам нужно указать его после опции -s. Например, чтобы принимать пакеты от 192.168.1.3, команда будет выглядеть так:
Вы также можете отклонять пакеты с определенного IP-адреса, заменив цель ACCEPT на DROP.
Если вы хотите отбрасывать пакеты с диапазона IP-адресов, вы должны использовать параметр -m и модуль iprange. Затем укажите диапазон IP-адресов с помощью –src-range. Помните, что дефис должен отделять диапазон IP-адресов без пробела, например:
Отбрасывание всего остального трафика
Очень важно использовать цель DROP для всего остального трафика после определения правил –dport. Это предотвратит несанкционированный доступ к серверу через другие открытые порты. Для этого просто введите:
Теперь соединение за пределами указанного порта будет разорвано.
Удаление правил
Если вы хотите удалить все правила и начать с чистого листа, вы можете использовать параметр -F (сбросить):
Эта команда удаляет все текущие правила. Однако для удаления конкретного правила необходимо использовать параметр -D. Во-первых, вам нужно просмотреть все доступные правила, введя следующую команду:
Вы получите список правил с номерами:
Чтобы удалить правило, вставьте соответствующую цепочку и номер из списка. Допустим, для этого руководства по iptables мы хотим избавиться от правила номер три в цепочке INPUT. Команда должна быть:
Шаг 3. Сохранение изменений
Созданные нами правила iptables сохраняются в памяти. Это означает, что мы должны переопределить их при перезагрузке. Чтобы эти изменения сохранялись после перезапуска сервера, вы можете использовать эту команду:
Текущие правила будут сохранены в файле конфигурации системы, который будет использоваться для перенастройки таблиц при каждой перезагрузке сервера.
Обратите внимание, что вы всегда должны запускать эту команду каждый раз, когда вносите изменения в правила. Например, если вы хотите отключить iptables, вам нужно выполнить следующие две строки:
Вы увидите следующие результаты:
Заключение
Iptables – это мощный брандмауэр, который можно использовать для защиты вашего сервера Linux или VPS. Что здорово, так это то, что вы можете определять различные правила в зависимости от ваших предпочтений.
В этом руководстве по iptables вы узнали, как установить и использовать этот инструмент. Теперь мы надеемся, что вы сможете управлять своими наборами правил для фильтрации входящих и исходящих пакетов.
Пришло время проверить это на себе и удачи!
Притвирадж – эксперт по кибербезопасности, который любит сложные задачи. Когда он не управляет серверами и не устраняет бреши в системе безопасности, он пишет об этом в различных блогах.
Iptables — это брандмауэр, установленный по умолчанию во всех официальных дистрибутивах Ubuntu (Ubuntu, Kubuntu, Xubuntu). Когда вы устанавливаете Ubuntu, iptables есть, но он по умолчанию разрешает весь трафик. Ubuntu поставляется с ufw — программой для простого управления брандмауэром iptables.
Существует множество информации об iptables, но большая ее часть довольно сложна, и если вы хотите сделать несколько основных вещей, это руководство для вас.
Основные команды
перечисляет ваши текущие правила в iptables. Если вы только что настроили свой сервер, у вас не будет правил, и вы должны увидеть
Основные параметры Iptables
- НОВОЕ – соединение еще не обнаружено.
- СВЯЗАННЫЕ — подключение новое, но оно связано с другим уже разрешенным подключением.
- УСТАНОВЛЕНО — соединение уже установлено.
- INVALID – по какой-то причине не удалось идентифицировать трафик.
Разрешение установленных сеансов
- В приведенном выше правиле нет пробелов по обе стороны от запятой в ESTABLISHED,RELATED
Если указанная выше строка не работает, возможно, вы используете кастрированный VPS, поставщик которого не предоставил расширение, и в этом случае в качестве крайней меры можно использовать более низкую версию:
Разрешение входящего трафика через определенные порты
Вы можете начать с блокировки трафика, но вы можете работать через SSH, где вам нужно будет разрешить SSH, прежде чем блокировать все остальное.
Чтобы разрешить входящий трафик через SSH-порт по умолчанию (22), вы можете разрешить iptables разрешать весь TCP-трафик через этот порт.
- добавьте это правило к цепочке ввода (-A INPUT), чтобы мы могли отслеживать входящий трафик
- проверьте, не TCP ли это (-p tcp).
- если да, проверьте, идет ли ввод на порт SSH (--dport ssh).
- если это так, примите ввод (-j ПРИНЯТЬ).
Давайте проверим правила: (показаны только первые несколько строк, вы увидите больше)
Теперь разрешим весь входящий веб-трафик
Проверив наши правила, мы обнаружили
Мы специально разрешили tcp-трафик к ssh- и веб-портам, но, поскольку мы ничего не блокировали, любой трафик все еще может поступать.
Блокировка трафика
После того как принято решение о приеме пакета, на него больше не действуют никакие правила. Поскольку наши правила, разрешающие ssh и веб-трафик, идут первыми, пока наше правило, блокирующее весь трафик, идет после них, мы все равно можем принимать тот трафик, который нам нужен. Все, что нам нужно сделать, это поставить правило, чтобы блокировать весь трафик в конце.
Поскольку мы не указали интерфейс или протокол, блокируется любой трафик для любого порта на любом интерфейсе, за исключением веб и ssh.
Редактирование iptables
Единственная проблема с нашей установкой на данный момент заключается в том, что даже петлевой порт заблокирован. Мы могли бы написать правило отбрасывания только для eth0, указав -i eth0, но мы также могли бы добавить правило для замыкания на себя. Если мы добавим это правило, оно придет слишком поздно — после того, как весь трафик будет отброшен. Нам нужно вставить это правило перед этим. Поскольку это большой объем трафика, мы вставим его в качестве первого правила, чтобы оно обрабатывалось первым.
Первая и последняя строки выглядят почти одинаково, поэтому мы опишем iptables более подробно.
Теперь вы можете увидеть гораздо больше информации. Это правило на самом деле очень важно, так как многие программы используют петлевой интерфейс для связи друг с другом. Если вы не позволите им говорить, вы можете сломать эти программы!
Ведение журнала
В приведенных выше примерах трафик не регистрируется. Если вы хотите регистрировать потерянные пакеты в системном журнале, это будет самый быстрый способ:
Дополнительные идеи по ведению журнала см. в разделе "Советы".
Сохранение iptables
Если бы вы перезагрузили компьютер прямо сейчас, ваша конфигурация iptables исчезла бы. Однако вместо того, чтобы вводить это каждый раз при перезагрузке, вы можете сохранить конфигурацию и запустить ее автоматически. Чтобы сохранить конфигурацию, вы можете использовать iptables-save и iptables-restore.
Конфигурация при запуске
ВНИМАНИЕ! Iptables и NetworkManager могут конфликтовать. Кроме того, если вы достаточно обеспокоены безопасностью, чтобы установить брандмауэр, вы можете не доверять NetworkManager. Также обратите внимание, что NetworkManager и iptables имеют противоположные цели. Iptables стремится предотвратить любой сомнительный сетевой трафик. NetworkManager стремится держать вас на связи в любое время. Поэтому, если вам нужна постоянная безопасность, запускайте iptables во время загрузки. Если вам иногда нужна безопасность, то NetworkManager может быть правильным выбором.
ВНИМАНИЕ! Если вы используете NetworkManager (установленный по умолчанию на Feisty и более поздних версиях), эти шаги не позволят вам использовать NetworkManager для изменяемых вами интерфейсов. Вместо этого выполните действия, описанные в следующем разделе.
ПРИМЕЧАНИЕ. На Hardy появляется проблема с NetworkManager, которая неправильно сохраняет и восстанавливает правила iptable при использовании метода, описанного в следующем разделе. Использование этого первого метода работает. Если вы обнаружите обратное, обновите это примечание.
Сохраните правила брандмауэра в файл
На данный момент у вас есть несколько вариантов. Вы можете внести изменения в /etc/network/interfaces или добавить сценарии в /etc/network/if-pre-up.d/ и /etc/network /if-post-down.d/ для достижения аналогичных целей. Скриптовое решение обеспечивает немного большую гибкость.
(Примечание: будьте осторожны: ввод неправильных директив конфигурации в файл интерфейса может отключить все интерфейсы, что может привести к блокировке вашего доступа к удаленному компьютеру.)
Измените файл конфигурации /etc/network/interfaces, чтобы правила применялись автоматически. Вам нужно будет знать интерфейс, который вы используете, чтобы применить правила — если вы не знаете, вы, вероятно, используете интерфейс eth0, хотя сначала вы должны проверить с помощью следующей команды, чтобы увидеть, есть ли какие-либо беспроводные карты:
Если вы получаете вывод, подобный следующему, значит, у вас вообще нет беспроводных карт, и вам, вероятно, лучше всего подойдет eth0.
Когда вы узнали, какой интерфейс вы используете, отредактируйте (используя sudo) свой /etc/network/interfaces:
В файле найдите найденный интерфейс и в конце строк, связанных с сетью, для этого интерфейса добавьте строку:
Вы также можете подготовить набор правил отключения, сохранить их во второй файл /etc/iptables.downrules и применить его автоматически, выполнив описанные выше действия:
Полностью работающий пример с использованием обоих из приведенных выше:
Вы также можете сохранить данные счетчиков байтов и пакетов.
ПРИМЕЧАНИЕ. В этом решении используется iptables-save -c для сохранения счетчиков. Просто удалите -c, чтобы сохранить только правила.
В качестве альтернативы вы можете добавить iptables-restore и iptables-save в if-pre-up.d и if -post-down.d в каталоге /etc/network вместо прямого изменения /etc/network/interface.
ПРИМЕЧАНИЕ. Скрипты в if-pre-up.d и if-post-down.d не должны содержать точку в своих именах.
Сценарий /etc/network/if-pre-up.d/iptablesload будет содержать:
и /etc/network/if-post-down.d/iptablessave будет содержать:
Затем обязательно дайте обоим скриптам права на выполнение:
Установите и используйте пакет iptables-persistent.
Конфигурация NetworkManager при запуске
NetworkManager позволяет запускать сценарии при активации или деактивации интерфейса. Чтобы сохранить правила iptables при завершении работы и восстановить их при запуске, мы собираемся создать такой скрипт. Чтобы начать, нажмите Alt+F2 и введите следующую команду:
Затем вставьте этот скрипт в свой редактор, сохраните и выйдите из редактора.
Наконец, нам нужно убедиться, что NetworkManager может выполнить этот скрипт. В окне терминала введите эту команду:
Если вы регулярно редактируете iptables вручную
Вышеописанные шаги посвящены настройке правил брандмауэра и предполагают, что они будут относительно статичными (и для большинства людей они должны быть такими). Но если вы много работаете над разработкой, вы можете захотеть, чтобы ваши iptables сохранялись при каждой перезагрузке. Вы можете добавить строку, подобную этой, в /etc/network/interfaces:
Строка «post-down iptables-save > /etc/iptables.rules» сохранит правила, которые будут использоваться при следующей загрузке.
Использование iptables-save/restore для проверки правил
Если вы редактируете свои iptables помимо этого руководства, вы можете использовать функции iptables-save и iptables-restore для редактирования и проверки ваших правил. Для этого откройте файл правил в вашем любимом текстовом редакторе (в данном примере это gedit).
У вас будет файл, похожий на (в приведенном выше примере):
Обратите внимание, что это команды iptables без команды iptable. Не стесняйтесь редактировать это в файл и сохранить, когда закончите. Затем просто протестировать:
ПРИМЕЧАНИЕ. В iptables 1.4.1.1-1 и выше сценарий позволяет протестировать новые правила, не рискуя вывести из строя удаленный сервер. Если вы применяете правила на удаленном сервере, вам следует протестировать его с помощью:
После тестирования, если вы не добавили указанную выше команду iptables-save в свой /etc/network/interfaces, не забудьте не потерять свои изменения:
Более подробное ведение журнала
Отключение брандмауэра
Если вам нужно временно отключить брандмауэр, вы можете сбросить все правила с помощью
или создайте сценарий с помощью текстового редактора, например nano
Убедитесь, что вы можете выполнить скрипт
Вы можете запустить скрипт
Простая настройка через графический интерфейс
UFW и GUFW
GUFW — Gufw представляет собой графический интерфейс для UFW (простой брандмауэр).
Дополнительная информация
Shoreline Firewall, также известный как Shorewall, представляет собой генератор брандмауэра для iptables, который позволяет выполнять расширенную настройку с помощью простых файлов конфигурации. Он доступен в репозиториях Ubuntu через apt-get.
Кредиты
Спасибо Расти Расселу и его практическим рекомендациям, так как многое из этого основано на этом.
IptablesHowTo (последний удаленный пользователь gunnarhj 11.04.2020 23:42:18)
Материалы этой вики доступны по бесплатной лицензии, подробности см. в разделе Авторские права / Лицензия
Вы можете внести свой вклад в эту вики, подробности см. в Руководстве по вики
Все современные операционные системы оснащены брандмауэром – программным приложением, которое регулирует сетевой трафик, поступающий на компьютер. Брандмауэры создают барьер между надежной сетью (например, офисной сетью) и ненадежной (например, Интернетом). Брандмауэры работают, определяя правила, определяющие, какой трафик разрешен, а какой заблокирован. Утилита брандмауэра, разработанная для систем Linux, называется iptables.
Из этого руководства вы узнаете, как установить, настроить и использовать iptables в Linux.
- Учетная запись пользователя с правами sudo
- Доступ к окну терминала/командной строке (Ctrl-Alt-T, Ctrl-Alt-F2)
Как работает iptables
Сетевой трафик состоит из пакетов. Данные разбиваются на более мелкие части (называемые пакетами), отправляются по сети, а затем снова собираются вместе. Iptables идентифицирует полученные пакеты, а затем использует набор правил, чтобы решить, что с ними делать.
Iptables фильтрует пакеты на основе:
- Таблицы. Таблицы – это файлы, объединяющие похожие действия. Таблица состоит из нескольких цепочек.
- Цепи. Цепочка – это набор правил. Когда пакет получен, iptables находит соответствующую таблицу, затем прогоняет ее по цепочке правил, пока не найдет соответствие.
- Правила. Правило — это инструкция, которая сообщает системе, что делать с пакетом. Правила могут блокировать один тип пакета или пересылать другой тип пакета. Результат, в который отправляется пакет, называется целью.
- Цели. Цель – это решение о том, что делать с пакетом. Как правило, это означает принять его, удалить или отклонить (что возвращает отправителю сообщение об ошибке).
Таблицы и цепочки
В iptables брандмауэра Linux есть четыре таблицы по умолчанию. Мы перечислим все четыре вместе с цепочками, которые содержит каждая таблица.
Таблица фильтров используется чаще всего. Он действует как вышибала, решая, кто входит и выходит из вашей сети. Он имеет следующие цепочки по умолчанию:
- Вход — правила в этой цепочке контролируют пакеты, полученные сервером.
- Выход – эта цепочка управляет пакетами для исходящего трафика.
- Пересылка — этот набор правил управляет пакетами, которые направляются через сервер.
Эта таблица содержит правила NAT (трансляции сетевых адресов) для маршрутизации пакетов в сети, к которым нет прямого доступа. Когда необходимо изменить пункт назначения или источник пакета, используется таблица NAT. Он включает в себя следующие цепочки:
- Предварительная маршрутизация — эта цепочка назначает пакеты, как только сервер их получает.
- Вывод — работает так же, как цепочка вывода, описанная в таблице фильтров.
- Отправка – правила в этой цепочке позволяют вносить изменения в пакеты после того, как они покидают выходную цепочку.
Таблица Mangle корректирует свойства IP-заголовков пакетов. В таблице есть все следующие цепочки, которые мы описали выше:
Таблица Raw используется для освобождения пакетов от отслеживания соединения. Необработанная таблица содержит две цепочки, о которых мы упоминали ранее:
<р>5. Безопасность (необязательно)
Некоторые версии Linux также используют таблицу безопасности для управления специальными правилами доступа. Эта таблица включает входные, выходные и прямые цепочки, как и таблица фильтров.
Цели
Цель — это то, что происходит после того, как пакет соответствует критериям правила. Незавершающие цели продолжают сопоставлять пакеты с правилами в цепочке, даже если пакет соответствует правилу.
- Принять — это правило разрешает прохождение пакетов через брандмауэр iptables.
- Отбросить — отброшенный пакет не сопоставляется ни с какой другой цепочкой. Когда Linux iptables сбрасывает входящее соединение с вашим сервером, человек, пытающийся подключиться, не получает сообщение об ошибке. Похоже, что они пытаются подключиться к несуществующей машине.
- Возврат: это правило отправляет пакет обратно в исходную цепочку, чтобы вы могли сопоставить его с другими правилами.
- Отклонить — брандмауэр iptables отклоняет пакет и отправляет ошибку на подключающееся устройство.
Как установить и настроить iptables брандмауэра Linux
Установка Iptables Ubuntu
Iptables устанавливаются по умолчанию в большинстве систем Linux. Чтобы убедиться, что iptables установлен, используйте следующую команду:
Пример вывода в Ubuntu подтверждает, что последняя версия iptables уже установлена:
Если вы хотите сохранить правила брандмауэра iptables при перезагрузке системы, установите постоянный пакет:
Установка Iptables CentOS
В CentOS 7 iptables был заменен на firewalld.
Чтобы установить iptables, сначала необходимо остановить firewalld. Введите следующие команды:
Эти команды останавливают и предотвращают запуск firewalld при загрузке, а также не позволяют другим службам запускать firewalld.
Далее установите и включите iptables. Сначала установите пакет служб iptables с помощью следующей команды:
Этот пакет сохраняет ваши правила после перезагрузки системы. Отображаемая ниже информация подтверждает, что установка завершена:
Введите следующие команды, чтобы включить и запустить iptables в CentOS 7:
Команда status подтверждает статус приложения:
Примечание. Существует две разные версии iptables для IPv4 и IPv6. Правила, которые мы рассматриваем в этом руководстве по iptables для Linux, предназначены для IPv4.
Чтобы настроить iptables для IPv6, необходимо использовать утилиту iptables6. Эти два разных протокола не работают вместе и должны настраиваться независимо.
Основной синтаксис команд и параметров iptables
В целом команда iptables выглядит следующим образом:
Вот список некоторых распространенных параметров iptables:
- -A --append — добавить правило в цепочку (в конец).
- -C --check — поиск правила, соответствующего требованиям цепочки.
- -D --delete — удалить указанные правила из цепочки.
- -F --flush — удалить все правила.
- -I --insert — добавить правило в цепочку в заданной позиции.
- -L --list — показать все правила в цепочке.
- -N -new-chain — создать новую цепочку.
- -v --verbose — Показать дополнительную информацию при использовании параметра списка.
- -X --delete-chain — удалить указанную цепочку.
Iptables чувствителен к регистру, поэтому убедитесь, что вы используете правильные параметры.
Настройка iptables в Linux
По умолчанию эти команды влияют на таблицу фильтров. Если вам нужно указать другую таблицу, используйте параметр –t, за которым следует имя таблицы.
Проверить текущий статус iptables
Чтобы просмотреть текущий набор правил на вашем сервере, введите в окне терминала следующее:
Система отображает статус ваших цепочек. На выходе будут перечислены три цепочки:
Включить петлевой трафик
Разрешить трафик из вашей собственной системы (локального хоста) безопасно. Добавьте цепочку Input, введя следующее:
Эта команда настраивает брандмауэр на прием трафика для интерфейса localhost ( lo ) ( -i ). Теперь все, что исходит из вашей системы, будет проходить через ваш брандмауэр. Вам нужно установить это правило, чтобы разрешить приложениям общаться с локальным интерфейсом.
Разрешить трафик через определенные порты
Эти правила разрешают трафик через разные порты, указанные вами с помощью перечисленных ниже команд. Порт — это конечная точка связи, указанная для определенного типа данных.
Чтобы разрешить только входящий трафик SSH (Secure Shell), введите следующее:
Эти параметры работают следующим образом:
- -p — проверить указанный протокол (tcp).
- --dport — укажите порт назначения.
- -j jump — выполнить указанное действие.
Управление трафиком по IP-адресу
Используйте следующую команду, чтобы ПРИНЯТЬ трафик с определенного IP-адреса.
Замените IP-адрес в команде IP-адресом, который вы хотите разрешить.
Вы также можете УДАЛИТЬ трафик с IP-адреса:
Вы можете ОТКЛОНИТЬ трафик с диапазона IP-адресов, но команда будет более сложной:
Параметры iptables, которые мы использовали в примерах, работают следующим образом:
- -m — соответствует указанному параметру.
- -iprange — указывает системе ожидать диапазон IP-адресов вместо одного.
- --src-range — определяет диапазон IP-адресов.
Отключение нежелательного трафика
Если вы определяете правила брандмауэра dport iptables, вам необходимо предотвратить несанкционированный доступ, отбрасывая любой трафик, поступающий через другие порты:
Опция -A добавляет в цепочку новое правило. Если какое-либо соединение осуществляется через порты, отличные от указанных вами, оно будет разорвано.
Удалить правило
Вы можете использовать параметр -F, чтобы очистить все правила брандмауэра iptables. Более точный метод — удалить номер строки правила.
Сначала перечислите все правила, введя следующее:
Найдите строку правила брандмауэра, которое вы хотите удалить, и выполните следующую команду:
Замените фактическим номером строки правила, которое вы хотите удалить.
Сохранить изменения
Iptables не сохраняет созданные вами правила при перезагрузке системы. Всякий раз, когда вы настраиваете iptables в Linux, все сделанные вами изменения применяются только до первого перезапуска.
Чтобы сохранить правила в системах на базе Debian, введите:
Чтобы сохранить правила в системах на основе Red Hat, введите:
При следующем запуске системы iptables автоматически перезагрузит правила брандмауэра.
После прочтения этого руководства по iptables в Linux вы должны лучше понять, как работает iptables и как установить инструмент iptables.
Теперь вы также можете настроить базовые правила брандмауэра iptables для вашей системы Linux. Не стесняйтесь экспериментировать, так как вы всегда можете удалить правила, которые вам не нужны, или сбросить все правила и начать заново.
Читайте также: