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

Опубликовано: 10 Июля, 2021

Что такое брандмауэр?
Брандмауэр - это система сетевой безопасности, которая фильтрует и контролирует трафик по заранее определенному набору правил. Это промежуточная система между устройством и Интернетом.

ПРИМЕЧАНИЕ. - Если вы уже знаете о работе брандмауэра в Linux и просто хотите узнать о командах, перейдите к концу руководства.

Как работает брандмауэр Linux:
Большая часть дистрибутива Linux поставляется с инструментами брандмауэра по умолчанию, которые можно использовать для их настройки. Мы будем использовать «IPTables», инструмент по умолчанию, предоставляемый в Linux, для установки брандмауэра. Iptables используется для настройки, обслуживания и проверки таблиц правил фильтрации пакетов IPv4 и IPv6 в ядре Linux.

Примечание : - Для всех приведенных ниже команд требуются привилегии sudo.

Цепи: -

Цепочки - это набор правил, определенных для конкретной задачи.

У нас есть три цепочки (набор правил), которые используются для обработки трафика: -

  1. ВХОДНЫЕ ЦЕПИ
  2. ВЫХОДНЫЕ ЦЕПИ
  3. FORWARD Цепи

1. ВХОДНЫЕ ЦЕПИ
Любой трафик, поступающий из Интернета (сети) на ваш локальный компьютер, должен проходить через входные цепочки. Это означает, что они должны выполнить все правила, которые были установлены в цепочке ввода.

2. ВЫХОДНЫЕ ЦЕПИ
Любой трафик, идущий с вашего локального компьютера в Интернет, должен проходить через выходные цепочки.

3. Цепочка FORWARD
Любой трафик, поступающий из внешней сети в другую сеть, должен проходить через прямую цепочку. Он используется, когда два или более компьютеров подключены, и мы хотим обмениваться данными между ними.

Различные политики: -

Есть три действия, которые iptables могут выполнять с трафиком.

  1. ПРИНИМАТЬ
  2. УРОНИТЬ
  3. ОТКЛОНЯТЬ

1. ПРИНЯТЬ
Когда трафик проходит правила в указанной цепочке, iptable принимает трафик.
Это означает, что он открывает ворота и позволяет человеку войти в королевство Таноса.

2. УДАЛИТЬ
Когда трафик не может пройти правила в указанной цепочке, iptable блокирует этот трафик.
Это означает, что брандмауэр закрыт.

3. ОТКАЗАТЬ
Этот тип действия аналогичен действию отбрасывания, но отправляет отправителю трафика сообщение о том, что передача данных не удалась.
Как правило, используйте REJECT, если вы хотите, чтобы другой конец знал, что порт недоступен. Используйте DROP для соединений с хостами, которые вы не хотите, чтобы люди видели.


ПРИМЕЧАНИЕ:-
Здесь нужно помнить простое правило: -
Правила, которые вы установили в iptables, проверяются сверху вниз. Всякий раз, когда пакет проходит какое-либо из основных правил, ему разрешается пройти через брандмауэр. Нижние правила не проверяются. Так что будьте осторожны при установке правил.

Основные команды iptables:

1. Перечислите текущие правила iptable:

Чтобы перечислить правила текущих iptables: -

 sudo iptables -L

Результатом будет: -

Как видите, у нас есть три цепочки (INPUT, FORWARD, OUTPUT). Мы также можем видеть заголовки столбцов, но это не настоящие правила. Это потому, что большая часть Linux не имеет предопределенных правил.

Посмотрим, что означает каждый столбец.

Цель:-
Это определяет, какое действие необходимо выполнить с пакетом (ACCEPT, DROP и т. Д.)

прот: -
Это определяет протокол (TCP, IP) пакета.

источник:-
Это сообщает адрес источника пакета.

назначения:-
Это определяет адрес назначения пакета.

2. Очистите правила:

Если вы когда-нибудь захотите очистить / убрать все существующие правила. Выполните следующую команду: -

 sudo iptables -F

Это сбросит iptables.

3. Изменение политики цепочек по умолчанию:

 sudo iptables -P Имя_цепочки Action_to_be_taken

Как вы можете видеть на картинке выше, политика по умолчанию для каждой цепочки - ПРИНЯТЬ.

Например: -
Если вы видите прямую цепочку, вы увидите «Chain FORWARD (policy ACCEPT)». Это означает, что ваш компьютер позволяет перенаправлять любой трафик на другой компьютер.

Для того, чтобы изменить политику переадресации, нужно сбросить: -

 sudo iptables -P FORWARD DROP

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

Создание вашего первого правила:

1. Реализация правила DROP:

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

Синтаксис:-

 sudo iptables -A / -I имя_цепочки -s source_ip -j действие_to_take

Мы возьмем пример, чтобы понять тему.

Предположим, мы хотим заблокировать трафик, исходящий с IP-адреса 192.168.1.3. Можно использовать следующую команду: -

 sudo iptables -A INPUT -s 192.168.1.3 -j DROP

Это может показаться сложным, но большая часть будет иметь смысл, когда мы рассмотрим компоненты:
-ВХОД: -

Флаг -A используется для добавления правила в конец цепочки. Эта часть команды сообщает iptable, что мы хотим добавить правило в конец цепочки INPUT.

-I ВВОД: -
В этом флаге правила добавляются в начало цепочки.

-s 192.168.1.3:-
Флаг -s используется для указания источника пакета. Это указывает iptable искать пакеты, приходящие от источника 192.168.1.3.

-j DROP
Это указывает, что iptable должна делать с пакетом.

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

После того, как вы выполните указанную выше команду, вы сможете увидеть изменения, используя команду: -

 sudo iptables -L

Результатом будет: -

2. Реализация правила ACCEPT:

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

Синтаксис:-

 sudo iptables -A / -I имя_цепочки -s IP-адрес_источника -p имя_протокола --dport номер_порта -j Action_to_take

-p имя_протокола: -
Этот параметр используется для сопоставления пакетов, следующих за протоколом имя_протокола.

-dport номер_порта:
Эта опция доступна только в том случае, если вы укажете опцию -p имя_протокола. Он указывает поиск пакетов, которые идут на порт «номер_порта».

Пример:-
Допустим, мы хотим оставить наш порт SSH открытым (в этом руководстве мы будем предполагать, что порт SSH по умолчанию - 22) из сети 192.168.1.3, которую мы заблокировали в приведенном выше случае. То есть мы хотим разрешить только те пакеты, которые приходят с 192.168.1.3 и которые хотят идти на порт 22.

Что мы делаем:-
Давайте попробуем следующую команду: -

 sudo iptables -A ВХОД -s 192.168.1.3 -p tcp --dport 22 -j ПРИНЯТЬ

Приведенная выше команда говорит, что ищет пакеты, исходящие с IP-адреса 192.168.1.3, имеющие протокол TCP и желающие доставить что-то на порт 22 моего компьютера. Если вы найдете эти пакеты, примите их.

Вывод команды: -

Но есть проблема с приведенной выше командой. На самом деле он не разрешает пакеты. Сможете угадать, что это?
ПОДСКАЗКА: - Это связано со способом доступа к правилам.

Помните, как мы обсуждали ранее, правила, которые вы устанавливаете в iptables, проверяются сверху вниз. Каждый раз, когда пакет обрабатывается по одному из верхних правил, он не проверяется по нижним правилам.

Хорошо! Вот ответ: -
В нашем случае пакет был проверен по самому верхнему правилу, которое гласит, что iptable должен отбрасывать любой пакет, исходящий из 192.168.1.3. Следовательно, как только пакет получил доступ через это правило, он не перешел к следующему правилу, которое разрешало пакеты на порт 22. Следовательно, это не удалось.

Что можно было сделать?
Самый простой ответ - добавить правило в начало цепочки. Все, что вам нужно сделать, это изменить параметр -A на параметр -I. (В нашем сценарии мы сначала удаляем правило [см. Следующий раздел], добавленное в разделе выше, а затем снова добавляем правило ниже)

Команда для этого: -

 sudo iptables -I INPUT -s 192.168.1.3 -p tcp --dport 22 -j ПРИНЯТЬ

Теперь проверьте конфигурацию iptable с помощью команды -L. Результатом будет: -

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

Теперь, когда вы поняли, как блокировать и принимать входящий трафик, давайте посмотрим, как удалять правила: -

3. Удаление правила из iptable:

Синтаксис:-

 sudo iptables -D имя_цепочки номер_правила

Пример:-
Если мы хотим удалить правило, которое принимает трафик на порт 22 и которое мы добавили в предыдущем разделе, тогда: -

 sudo iptables -D ВХОД 1

Помните, что номер правила начинается с 1
Выход : -

4. Сохранение конфигурации:

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

Есть много способов сделать это, но самый простой способ, который я нашел, - использовать пакет iptables-persistent. Вы можете загрузить пакет из репозиториев Ubuntu по умолчанию:

sudo apt-get update
sudo apt-get install iptables-persistent

После завершения установки вы можете сохранить свою конфигурацию с помощью команды: -

 sudo invoke-rc.d постоянное сохранение iptables

Что ж, это конец урока.
Давайте кратко расскажем обо всех командах, которые мы изучили до сих пор: -

Резюме :

1. Перечислите текущие правила iptables:

 sudo iptables -L

2. Чтобы изменить политику по умолчанию:

 sudo iptables -P Имя_цепочки Action_to_be_taken

Пример:-

 sudo iptables -P FORWARD DROP

3. Очистить / сбросить все правила

 sudo iptables -F

4. Чтобы добавить правило в конец цепочки:

 sudo iptables -A

5. Чтобы добавить правило в начало цепочки:

 sudo iptables -I

6. Чтобы реализовать правило ПРИНЯТЬ: -

 sudo iptables -A / -I имя_цепочки -s source_ip -j действие_to_take

Пример:-

 iptables -A ВХОД -s 192.168.1.3 -j ПРИНЯТЬ

7. Чтобы реализовать правило DROP: -

 sudo iptables -A / -I имя_цепочки -s source_ip -j действие_to_take

Пример:-

 iptables -A INPUT -s 192.168.1.3 -j DROP

8. Внедрение правил для определенных портов / протоколов: -

 sudo iptables -A / -I имя_цепочки -s IP-адрес_источника -p имя_протокола --dport номер_порта -j Action_to_take

Пример:-

 sudo iptables -I INPUT -s 192.168.1.3 -p tcp --dport 22 -j ПРИНЯТЬ

9. Чтобы удалить правило: -

 sudo iptables -D имя_цепочки номер_правила

Пример:-

 sudo iptables -D ВХОД 1

10. Чтобы сохранить конфигурацию: -

 sudo invoke-rc.d постоянное сохранение iptables

И это конец урока. Мы видели все необходимые команды, которые вам понадобятся для реализации брандмауэра на вашем локальном компьютере. Есть множество других действий, которые мы можем заставить наш брандмауэр, но невозможно охватить все это в одной статье. Итак, я напишу еще несколько статей, объясняющих все команды. А пока продолжайте экспериментировать !!