Настройка Iptables Centos 7

Обновлено: 18.05.2024

CentOS имеет чрезвычайно мощный встроенный брандмауэр, обычно называемый iptables, но точнее iptables/netfilter. Iptables — это модуль пользовательского пространства, бит, с которым вы, пользователь, взаимодействуете в командной строке, чтобы ввести правила брандмауэра в предопределенные таблицы. Netfilter — это модуль ядра, встроенный в ядро, который фактически осуществляет фильтрацию. Существует множество интерфейсов с графическим интерфейсом для iptables, которые позволяют пользователям добавлять или определять правила на основе пользовательского интерфейса «укажи и щелкни», но им часто не хватает гибкости использования интерфейса командной строки, и они ограничивают понимание пользователями того, что на самом деле происходит. Мы собираемся изучить интерфейс командной строки iptables.

Прежде чем мы сможем по-настоящему разобраться с iptables, нам нужно иметь хотя бы общее представление о том, как он работает. Iptables использует концепцию IP-адресов, протоколов (tcp, udp, icmp) и портов. Нам не нужно быть экспертами в этом, чтобы начать работу (поскольку мы можем найти любую необходимую информацию), но это помогает иметь общее представление.

Iptables размещает правила в предопределенных цепочках (INPUT, OUTPUT и FORWARD), которые проверяются на наличие любого сетевого трафика (IP-пакетов), относящегося к этим цепочкам, и решение о том, что делать с каждым пакетом, принимается на основе результатов этих правил. , то есть прием или отбрасывание пакета. Эти действия называются целями, из которых две наиболее распространенные предопределенные цели: DROP, чтобы отбросить пакет, или ACCEPT, чтобы принять пакет.

Цепочки

  • INPUT — все пакеты, предназначенные для хост-компьютера.
  • OUTPUT — все пакеты, исходящие от главного компьютера.
  • FORWARD — все пакеты, не предназначенные для хост-компьютера и не исходящие от него, но проходящие через хост-компьютер (маршрутизируемые им). Эта цепочка используется, если вы используете свой компьютер в качестве маршрутизатора.

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

Правила добавляются списком в каждую цепочку. Пакет проверяется на соответствие каждому правилу по очереди, начиная сверху, и, если он соответствует этому правилу, выполняется действие, например, принятие (ACCEPT) или отбрасывание (DROP) пакета. После сопоставления правила и выполнения действия пакет обрабатывается в соответствии с результатом этого правила и не обрабатывается другими правилами в цепочке. Если пакет проходит через все правила в цепочке и достигает конца, не сравниваясь ни с одним правилом, то выполняется действие по умолчанию для этой цепочки. Это называется политикой по умолчанию и может быть настроено либо на ПРИНЯТИЕ, либо на УДАЛЕНИЕ пакета.

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

<р>1. Мы можем установить политику по умолчанию для DROP всех пакетов, а затем добавить правила, специально разрешающие (ACCEPT) пакеты, которые могут поступать с доверенных IP-адресов или для определенных портов, на которых у нас работают службы, такие как bittorrent, FTP-сервер, веб-сервер, Samba. файловый сервер и т. д.

<р>2. Мы можем установить политику по умолчанию, чтобы ПРИНИМАТЬ все пакеты, а затем добавить правила для специальной блокировки (DROP) пакетов, которые могут исходить от определенных нежелательных IP-адресов или диапазонов, или для определенных портов, на которых у нас есть частные службы или службы не работают.

Как правило, вариант 1 выше используется для цепочки INPUT, где мы хотим контролировать, что разрешено для доступа к нашему компьютеру, а вариант 2 будет использоваться для цепочки OUTPUT, где мы обычно доверяем трафику, исходящему (исходящему) из нашего компьютера. машина.

2. Начало работы

Для работы с iptables из командной строки требуются привилегии суперпользователя, поэтому для большинства действий, которые мы будем выполнять, вам нужно будет стать суперпользователем.

Iptables должны быть установлены по умолчанию во всех установках CentOS 5.x и 6.x. Вы можете проверить, установлен ли iptables в вашей системе:

Чтобы узнать, действительно ли работает iptables, мы можем проверить, загружены ли модули iptables, и использовать ключ -L для проверки загруженных в данный момент правил:

Выше мы видим набор правил по умолчанию в системе CentOS 6. Обратите внимание, что служба SSH разрешена по умолчанию.

Если iptables не запущен, вы можете включить его, выполнив:

3. Написание простого набора правил

Мы будем использовать подход, основанный на примерах, для изучения различных команд iptables. В этом первом примере мы создадим очень простой набор правил для настройки брандмауэра Stateful Packet Inspection (SPI), который разрешает все исходящие соединения, но блокирует все нежелательные входящие соединения:

что должно дать следующий результат:

Наконец, последнее, что нам нужно сделать, это сохранить наши правила, чтобы в следующий раз при перезагрузке компьютера наши правила автоматически перезагружались:

При этом выполняется сценарий инициализации iptables, который запускает /sbin/iptables-save и записывает текущую конфигурацию iptables в /etc/sysconfig/iptables. После перезагрузки сценарий инициализации iptables повторно применяет правила, сохраненные в /etc/sysconfig/iptables, с помощью команды /sbin/iptables-restore.

Очевидно, что ввод всех этих команд в оболочке может стать утомительным, поэтому самый простой способ работы с iptables — создать простой скрипт, который сделает все за вас. Приведенные выше команды можно ввести в ваш любимый текстовый редактор и сохранить как myfirewall, например:

Примечание: мы также можем прокомментировать наш сценарий, чтобы напомнить нам, что мы делали.

сделайте скрипт исполняемым:

Теперь мы можем просто отредактировать наш скрипт и запустить его из оболочки с помощью следующей команды:

4. Интерфейсы

В нашем предыдущем примере мы видели, как мы можем принимать все пакеты, входящие на определенный интерфейс, в данном случае на интерфейс localhost:

Предположим, у нас есть 2 отдельных интерфейса: eth0, который является нашим внутренним подключением к локальной сети, и коммутируемый модем ppp0 (или, может быть, eth1 для сетевого адаптера), который является нашим внешним подключением к Интернету. Мы можем захотеть разрешить все входящие пакеты в нашу внутреннюю локальную сеть, но по-прежнему фильтровать входящие пакеты в нашем внешнем интернет-соединении. Мы могли бы сделать это следующим образом:

Но будьте очень осторожны - если бы мы разрешили все пакеты для нашего внешнего интернет-интерфейса (например, для коммутируемого модема ppp0):

мы фактически просто отключили бы наш брандмауэр!

5. IP-адреса

Открытие всего интерфейса для входящих пакетов может быть недостаточным ограничением, и вам может потребоваться больший контроль над тем, что разрешать, а что отклонять. Предположим, у нас есть небольшая сеть компьютеров, которые используют частную подсеть 192.168.0.x. Мы можем открыть наш брандмауэр для входящих пакетов с одного доверенного IP-адреса (например, 192.168.0.4):

Очевидно, что если мы хотим разрешить входящие пакеты с диапазона IP-адресов, мы можем просто добавить правило для каждого доверенного IP-адреса, и это будет работать нормально. Но если у нас их много, может быть проще добавить диапазон IP-адресов за один раз. Для этого мы можем использовать сетевую маску или стандартную косую черту, чтобы указать диапазон IP-адресов. Например, если мы хотим открыть наш брандмауэр для всех входящих пакетов из полного диапазона 192.168.0.x (где x = от 1 до 254), мы можем использовать любой из следующих методов:

Наконец, помимо фильтрации по одному IP-адресу, мы также можем сопоставить MAC-адрес данного устройства. Для этого нам нужно загрузить модуль (модуль mac), который позволяет выполнять фильтрацию по mac-адресам. Ранее мы видели еще один пример использования модулей для расширения функциональности iptables, когда мы использовали модуль состояния для сопоставления пакетов ESTABLISHED и RELATED. Здесь мы используем модуль mac для проверки mac-адреса источника пакета в дополнение к его IP-адресу:

Сначала мы используем -m mac, чтобы загрузить модуль mac, а затем мы используем --mac-source, чтобы указать mac-адрес исходного IP-адреса (192.168.1.1). 0,4). Вам нужно будет узнать MAC-адрес каждого устройства Ethernet, которое вы хотите фильтровать. Запустив ifconfig (или iwconfig для беспроводных устройств) от имени пользователя root, вы получите MAC-адрес.

Это может быть полезно для предотвращения спуфинга исходного IP-адреса, так как разрешает любые пакеты, которые действительно исходят от 192.168.0.4 (с MAC-адресом 00:50:8D:FD:E6:32), но блокирует любые пакеты. которые подделаны, чтобы прийти с этого адреса. Обратите внимание, что фильтрация по MAC-адресам не работает в Интернете, но, безусловно, работает в локальной сети.

6. Порты и протоколы

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

Прежде чем мы начнем, нам нужно знать, какой протокол и номер порта использует данная служба. Для простого примера давайте посмотрим на битторрент. Bittorrent использует протокол tcp на порту 6881, поэтому нам нужно разрешить все tcp-пакеты на порту назначения (порт, на который они поступают на нашу машину) 6881:

Здесь мы добавляем (-A) правило к цепочке INPUT для пакетов, соответствующих протоколу tcp (-p tcp) и поступающих на нашу машину через порт назначения 6881 (--dport 6881 ).

Примечание. Чтобы использовать совпадения, такие как порты назначения или исходные порты (--dport или --sport), необходимо сначала указать протокол (tcp, udp , icmp, все).

Мы также можем расширить вышеуказанное, включив в него диапазон портов, например, разрешив все TCP-пакеты в диапазоне от 6881 до 6890:

7. Собираем все вместе

Теперь, когда мы рассмотрели основы, мы можем начать комбинировать эти правила.

Популярной службой UNIX/Linux является служба защищенной оболочки (SSH), позволяющая удаленно входить в систему. По умолчанию SSH использует порт 22 и снова использует протокол tcp. Поэтому, если мы хотим разрешить удаленный вход в систему, нам нужно разрешить tcp-соединения на порту 22:

Это откроет порт 22 (SSH) для всех входящих TCP-подключений, что представляет потенциальную угрозу безопасности, поскольку хакеры могут попытаться взломать учетные записи со слабыми паролями методом грубой силы. Однако, если мы знаем IP-адреса доверенных удаленных машин, которые будут использоваться для входа в систему с помощью SSH, мы можем ограничить доступ только этими исходными IP-адресами. Например, если мы просто хотим открыть доступ по SSH к нашей частной локальной сети (192.168.0.x), мы можем ограничить доступ только этим диапазоном исходных IP-адресов:

Использование фильтрации IP-адресов источника позволяет нам безопасно открыть доступ SSH к порту 22 только для доверенных IP-адресов. Например, мы могли бы использовать этот метод, чтобы разрешить удаленный вход между рабочим и домашним компьютерами. Для всех других IP-адресов порт (и служба) будут казаться закрытыми, как если бы служба была отключена, поэтому хакеры, использующие методы сканирования портов, скорее всего, пройдут мимо нас.

8. Резюме

Мы едва коснулись того, чего можно достичь с помощью iptables, но надеемся, что этот HOWTO обеспечил хорошее понимание основ, на основе которых можно создавать более сложные наборы правил.

9. Ссылки

HowTos/Network/IPTables (последним удаленным пользователем NedSlider 27.07.2021 23:21:13)

Последнее обновление: 16 января 2019 г.

Автор: Шон Крамплер

Начиная с Red Hat® Enterprise Linux® (RHEL) 7 и CentOS® 7, firewalld доступен для управления iptables. В результате вам нужно либо использовать команды firewall-cmd, либо отключить firewalld и включить iptables. В этой статье показано, как использовать классическую настройку iptables.

Остановить и замаскировать службу firewalld

Выполните следующие команды, чтобы остановить и замаскировать службу firewalld, которую вы не хотите использовать:

Установить и настроить iptables

Для установки и настройки iptables выполните следующие действия:

Установите пакет iptables-services (если он еще не установлен), выполнив следующую команду:

Включите запуск службы во время загрузки, выполнив следующие команды:

Далее добавьте правила iptables. Это можно сделать одним из следующих способов:

Из интерфейса командной строки (CLI), выполнив команды, аналогичные iptables -I INPUT .

Создав или отредактировав файл /etc/sysconfig/iptables, чтобы он выглядел аналогично следующему базовому примеру, в котором открыты порты 22 и 80:

(Необязательно) Если вы сохраняете свои правила в файлах /etc/sysconfig/iptables, вы также должны выполнить следующие команды:

Затем убедитесь, что служба iptables активна, выполнив следующие команды:

Проверьте правила iptables, выполнив следующие команды:

Убедитесь, что ваш сервер прослушивает открытые вами порты (22 и 80 в приведенном выше примере), выполнив следующую команду:

Запросите в журнале systemd журнал изменений, внесенных вами в службу iptables, выполнив следующие команды:

Перезагрузите сервер. Правила iptables должны быть сохранены и автоматически перезагружены.

Поделитесь этой информацией:

© 2020 Rackspace США, Inc.

Если не указано иное, содержимое этого сайта находится под лицензией Creative Commons Attribution-NonCommercial-NoDerivs 3.0 Unported License

Руководства, учебные пособия, обзоры и новости для системных администраторов.

Как установить брандмауэр Iptables в CentOS 7 Linux

Вы привыкли к классическому брандмауэру iptables и хотите убить firewalld? Что ж, на тебя еще есть надежда! Здесь мы покажем вам, как остановить и отключить брандмауэр firewalld по умолчанию и вместо этого установить и настроить iptables в CentOS 7 Linux.

Стоит отметить, что iptables и firewalld взаимоисключающие, в каждый момент времени должен работать только один из них. Поэтому, если мы хотим использовать либо firewalld, либо iptables, мы должны убедиться, что противоположная служба полностью остановлена, отключена и замаскирована, чтобы она не мешала работе.

Отключить брандмауэр

По умолчанию в CentOS 7 Linux брандмауэр firewalld настроен на автоматический запуск во время загрузки. Поскольку мы можем одновременно запускать только firewalld или iptables, мы сначала отключим firewalld.

Это отключает автоматический запуск firewalld при загрузке системы, однако не останавливает запуск текущего запущенного экземпляра firewalld, поэтому мы делаем это дальше.

Хотя firewalld больше не запускается автоматически при загрузке и в настоящее время не запущен, его по-прежнему можно запустить вручную из командной строки. Чтобы предотвратить это, мы маскируем службу, как показано ниже.

Теперь мы готовы установить и настроить iptables.

Включить Iptables

В моей установке CentOS 7 по умолчанию у меня уже установлен пакет iptables, который можно использовать для запуска команды iptables, однако нам также необходимо установить iptables-services, чтобы iptables запускался автоматически при загрузке системы.

Теперь мы проверим состояние iptables, как показано ниже, после чистой установки он не будет запущен в данный момент и будет отключен, то есть не будет запускаться автоматически при загрузке системы.

После завершения установки мы настроим iptables для автоматического запуска при загрузке системы.

Далее мы запустим iptables, активировав брандмауэр.

Теперь, если мы проверим статус iptables, мы должны увидеть, что он активно работает и может запускаться при загрузке системы.

Теперь вы можете настроить брандмауэр iptables как обычно, изменив файл /etc/sysconfig/iptables. Мы можем подтвердить, что это правильный файл для использования, используя команду rpm -qc для пакета iptables-services, который мы установили ранее, поскольку в нем будут перечислены все файлы конфигурации по умолчанию, связанные с пакетом.

Обратите внимание, что вам также потребуется запустить и включить ip6tables для IPv6, так как iptables поддерживает только IPv4. Аналогичным образом, в файле /etc/sysconfig/ip6tables должна быть задана конфигурация брандмауэра для IPv6.

Каждый из этих файлов содержит конфигурацию по умолчанию, позволяющую разрешить TCP-порт 22 с любого исходного IP-адреса, поэтому вам не нужно беспокоиться о блокировке доступа по SSH во время настройки.

Если вы внесете какие-либо изменения в любой из этих файлов, обязательно перезапустите iptables, чтобы изменения вступили в силу.

Обзор

Мы показали вам, как легко отключить firewalld в CentOS 7 Linux и вместо этого установить и настроить классический брандмауэр iptables. Обратите внимание, что iptables считается устаревшим в CentOS 7, поэтому в будущем, вероятно, стоит потратить время на то, чтобы научиться использовать firewalld.

В этом руководстве вы установите Iptables на CentOS 7. FirewallD — это комплексное решение для брандмауэра. Он управляется утилитой командной строки, а именно firewall-cmd.

Как установить Iptables на CentOS 7

Введение

Прежде чем мы начнем говорить о шагах по установке Iptables в CentOS 7. Во-первых, давайте разберемся, что такое Iptables?

FirewallD заменяет Iptables в качестве инструмента управления брандмауэром по умолчанию в CentOS 7. FirewallD — это комплексное решение для брандмауэра. Он управляется с помощью утилиты командной строки под названием firewall-cmd. Если вам удобнее синтаксис командной строки Iptables, вы можете отключить FirewallD и вернуться к классической настройке Iptables.

В этом руководстве вы установите Iptables на CentOS 7. Мы также ответим на несколько часто задаваемых вопросов, связанных с установкой Iptables.

Предпосылки

1) Обязательно войдите в систему как пользователь с привилегиями sudo.

Шаг 1. Отключение брандмауэраD

1) Во-первых, вам нужно ввести приведенную ниже команду, она остановит службу FirewallD:

2) После этого отключите службу FirewallD для автоматического запуска при загрузке системы с помощью следующей команды:

3) Затем вам нужно будет замаскировать службу FirewallD, чтобы предотвратить ее запуск другими службами:

Шаг 2. Установка и включение Iptables

1) Продолжайте выполнять приведенную ниже команду, и она установит пакет iptables-service из репозиториев CentOS:

2) После установки пакета запустите службы Iptables с помощью следующей команды:

3) После этого включите службу Iptables. Затем он автоматически запускается при загрузке системы:

4) Перейдите к проверке состояния службы Iptables, выполнив следующие действия:

5) Вы можете проверить текущие правила Iptables с помощью следующей команды:

Теперь по умолчанию открыт только SSH-порт 22. Вывод будет выглядеть следующим образом:

Теперь вы успешно включили службу Iptables и можете приступить к созданию брандмауэра. Изменения останутся без изменений после перезагрузки.

Часто задаваемые вопросы по установке Iptables в CentOS 7

1) Что такое цепочка Iptables?

Цепочки Iptables похожи на списки правил, которые обрабатываются по порядку. Они являются одними из фиксированных встроенных, таких как INPUT, OUTPUT, FORWARD в таблице фильтров по умолчанию. Кроме того, некоторые другие таблицы nat или определенные пользователем.

2) Как узнать, запущен ли Iptables?

Пользователь может убедиться в этом, легко проверив статус Iptables. С помощью команды systemctl status iptables .

Заключение

Мы надеемся, что это подробное руководство помогло вам установить Iptables в CentOS 7.

Если у вас есть какие-либо вопросы, оставьте комментарий ниже, и мы обязательно ответим на них.

Читайте также: