Centos 8 iptables настройка

Обновлено: 06.07.2024

Прошли времена, когда в нашем офисе было 2 компьютера, и DSL модем на 4 порта с интернетом в 2 мегабита
спасал ситуацию. Сейчас в офисе 5 рабочих машин и 1 сервер для задач разработчиков.

При соединении всех в свич со стандартным Tp Link шлюзом, если кто начинал качать, интернет зависал у всех. Было принято решение создать свой шлюз интернета, с шейпером трафика, DNS, DHCP и статистикой ( squid + sarg) и прокси.

В качестве сервера был выбран DualCore pentium, 4 GB RAM с установленной на борту CentOS 6.4 minimal.
Итак, приступим к конфигурации нашего будущего интернет шлюза.

Первый шаг, установка необходимого базового софта

Добавим необходимые репозитории

Очистим кеш YUM

Установим софт для сборки

Установим другие необходимые утилиты

Второй шаг, установка nginx

Создадим файл nginx.conf:

Файл для запуска:

Для Апача поставим APR, APR-UTIL, PCRE
Установка APR

Создадим файл для запуска:

Четвертый шаг, настройка раздачи интернета

На сервере установлено два сетевых интерфейса:
eth0 — Интернет от провайдера
eth1 — Наша локальная сеть

Создаем файл /iptables с содержимым:

Даем права на запуск файла:

Редактируем сетевой интерфейс:

GATEWAY — айпи eth0 интерфейса

Пятый шаг, настройка dhcpd

Устанавливаем его через yum

Здесь мы указали dns сервер, айпи нашего шлюза. В качестве DNS логично использовать что то простое, я выбрал dnsmasq

Шаг шестой, настройка dns сервера


DHCP у нас уже установлен, остальной функционал нам не нужен, конфиг файл довольно простой по принципу включать только то, что нужно


В /etc/hosts для нашей локальной сети необходимы были некоторые хосты:


SARG — генератор логов для SQUID

Шаг седьмой, установка squid

Конфигурационный файл правим до такого состояния:

Шаг восьмой, установка sarg

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


SARG желательно добавить в крон, что бы он каждый день сохранял статистику. Генерация логов производится запуском команды:

Шаг девятый, настройка HTB

Настройки шейпера зависят от ваших нужд. В нашем случае исходные данные были:
Ширина канала: 6Mbit/sec
Пользователей: 5
Примечание: Пользователи редко скачивают, часто «серфят» в интернете.


eth1-2.root — Задаем правила для всей цепочки


eth1-2:06.astraPC1 — Файл для машины, для удобства расширение файла — хост компьютера, а префикс — последний октет айпи

Утилита командной строки iptables используется для настройки брандмауэра netfilter, встроенного в систему на базе ядра Linux.

Данная инструкция подходит как для чайников, которые хотят разбираться в аспектах защиты сети, так и опытных специалистов в качестве шпаргалки.

Принцип настройки

Общий синтаксис использования iptables:

iptables -t <таблица> <команда> <цепочка> [номер] <условие> <действие>

<таблица>

Правила netfilter распределены по 4-м таблицам, каждая из которых имеет свое назначение (подробнее ниже). Она указывается ключом -t, но если данный параметр не указан, действие будет выполняться для таблицы по умолчанию — filter.

<команда>

Команды указывают, какое именно действие мы совершаем над netfilter, например, создаем или удаляем правило.

<цепочка>

В каждой таблице есть цепочки, для каждой из которых создаются сами правила. Например, для вышеупомянутой таблицы filter есть три предопределенные цепочки — INPUT (входящие пакеты), OUTPUT (исходящие) и FORWARD (транзитные).

[номер]

Некоторые команды требуют указания номера правила, например, на удаление или редактирование.

<условие>

Условие описывает критерии отработки того или иного правила.

<действие>

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

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

Ключи iptables и примеры их использования

Для работы с таблицами (iptables -t)

Напоминаю, все правила в netfilter распределены по таблицам. Чтобы работать с конкретной таблицей, необходимо использовать ключ -t.

Ключ Описание
-t filter Таблица по умолчанию. С ней работаем, если упускаем ключ -t. Встроены три цепочки — INPUT (входящие), OUTPUT (исходящие) и FORWARD (проходящие пакеты)
-t nat Для пакетов, устанавливающий новое соединение. По умолчанию, встроены три цепочки — PREROUTING (изменение входящих), OUTPUT (изменение локальных пакетов перед отправкой) и POSTROUTING (изменение всех исходящих).
-t mangle Для изменения пакетов. Цепочки — INPUT, OUTPUT, FORWARD, PREROUTING, POSTROUTING.
-t raw Для создания исключений в слежении за соединениями. Цепочки: PREROUTING, OUTPUT.

Команды

Нижеперечисленные ключи определяют действия, которые выполняет утилита iptables.

Ключ Описание и примеры
-A Добавление правила в конец списка:
iptables -A INPUT -s 192.168.0.15 -j DROP
запретить входящие с 192.168.0.15.
-D Удаление правила:
iptables -D INPUT 10
удалить правило в цепочке INPUT с номером 10.
-I Вставка правила в определенную часть списка:
iptables -I INPUT 5 -s 192.168.0.15 -j DROP
вставить правило 5-м по списку.
-R Замена правила.
iptables -R OUTPUT 5 -s 192.168.0.15 -j ACCEPT
заменить наше 5-е правило с запрещающего на разрешающее.
-F Сброс правил в цепочке.
iptables -F INPUT
-Z Обнуление статистики.
iptables -Z INPUT
-N Создание цепочки.
iptables -N CHAINNEW
-X Удаление цепочки.
iptables -X CHAINNEW
-P Определение правила по умолчанию.
iptables -P INPUT DROP
-E Переименовывание цепочки.
iptables -E CHAINNEW CHAINOLD

Условия

Данные ключи определяют условия правила.

Ключ Описание и примеры
-p Сетевой протокол. Допустимые варианты — TCP, UDP, ICMP или ALL.
iptables -A INPUT -p tcp -j ACCEPT
разрешить все входящие tcp-соединения.
-s Адрес источника — имя хоста, IP-адрес или подсеть в нотации CIDR.
iptables -A INPUT -s 192.168.0.50 -j DROP
запретить входящие с узла 192.168.0.50
-d Адрес назначения. Принцип использования аналогичен предыдущему ключу -s.
iptables -A OUTPUT -d 192.168.0.50 -j DROP
запретить исходящие на узел 192.168.0.50
-i Сетевой адаптер, через который приходят пакеты (INPUT).
iptables -A INPUT -i eth2 -j DROP
запретить входящие для Ethernet-интерфейса eth2.
-o Сетевой адаптер, с которого уходят пакеты (OUTPUT).
iptables -A OUTPUT -o eth3 -j ACCEPT
разрешить исходящие с Ethernet-интерфейса eth3.
--dport Порт назначения.
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
разрешить входящие на порт 80.
--sport Порт источника.
iptables -A INPUT -p tcp --sport 1023 -j DROP
запретить входящие с порта 1023.

Перечисленные ключи также поддерживают конструкцию с использованием знака !. Он инвертирует условие, например,
iptables -A INPUT -s ! 192.168.0.50 -j DROP
запретит соединение всем хостам, кроме 192.168.0.50.

Действия

Действия, которые будут выполняться над пакетом, подходящим под критерии условия. Для каждой таблицы есть свой набор допустимых действий. Указываются с использованием ключа -j.

date

13.12.2019

directory

CentOS, Linux

comments

Комментариев пока нет

В этой статье мы покажем, как управлять файерволом Linux с помощью классическгого iptables вместо firewalld в CentOS / RHEL 7 для фильтрации входящего и исходящего трафика. В этой статье рассмотрена настройка iptables на CentOS 7 для фильтрации входящего трафика, на примере развернутого с нуля облачного виртуального сервера myserver01, доступного из Интернета.

Отключение firewalld в CentOS 7

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

firewalld не замена, а обертка вокруг iptables, пользоваться из этого можно тем, что больше нравится, или больше подходит в конкретных условиях. iptables более универсален, это базовый инструмент, но он немного сложнее в освоении. firewalld предоставляет более простой интерфейс, но, например, в CentOS 6 воспользоваться им не получится, да и для других дистрибутивов необходимо наличие нужных установочных пакетов. К тому же, если вы используете приложения, которые производят свои настройки в файрволе, они должны быть совместимы с firewalld (пример таких приложений docker, fail2ban).

Проверим статус firewalld и отключим его.

systemctl status firewalld

systemctl status firewalld в centos 7

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

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

systemctl stop firewalld
systemctl disable firewalld

Повторно проверяем статус:

firewalld отключить в centos

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

Синтаксис и правила iptables в CentOS/Red Hat

Iptables – это утилита, с помощью которой настраиваются правила для файрвола в Linux.

Iptables группирует правила файрвола в таблицах, основные это:

  • Таблица filter – используется для фильтрации трафика, то есть разрешения и запрещения соединений
  • Таблица nat – используется для преобразования адресов (NAT)
  • Таблица mangle – прочие модификации заголовков ip пакетов.

Для начала проверим, что iptables установлен в системе(должен быть умолчанию):

rpm -q iptables - версия iptables в centos

Вывод команды показывает, что текущая установленная версия iptables – 1.4.21.

Работа с iptables в командной строке требует root привилегий, поэтому далее будем работать под пользователем root.

Чтобы вывести текущие правила, выполним команду:

iptables [-t таблица] -L [цепочка] [параметры]

Примечание: если не указать название таблицы при вызове команды, по умолчанию используется таблица filter.

Например, результат команды iptables -L, когда в таблицах еще не создано правил:

iptables -L - таблицы правил файервола в centos redhat

Рассмотрим вывод команды подробнее.

Таблица filter содержит три типа правил, так называемые chain(цепочки):

  • INPUT – в этой цепочке обрабатываются входящие ip пакеты, предназначенные для самого хоста;
  • OUTPUT – в этой цепочке обрабатываются исходящие ip пакеты от самого хоста;
  • FORWARD – эта цепочка нужна для перенаправления ip пакетов. Используется, если вы хотите использовать сервер, как маршрутизатор.

Напротив каждой цепочки указана политика по умолчанию (policy), которая определяет, что нужно делать, в случае, если соединение не попало ни в одно из правил. Политика по умолчанию может принимать два значения и определяет сам подход к организации файрвола:

  • ACCEPT – по умолчанию все соединения разрешены, правилами блокируются нежелательные соединения;
  • DROP – по умолчанию все соединения запрещены, правилами разрешаются нужные соединения.

Создание правил фильтрации трафика в iptables

Фильтр iptables по интерфейсу

Начнем создавать правила. Синтаксис команды для добавления нового правила в конец указанной цепочки выглядит так:

iptables [-t таблица] -A <цепочка> <критерии> -j <действие>

Для начала, разрешим трафик через локальный loopback интерфейс(127.0.0.1), что необходимо для работы некоторых приложений:

iptables -A INPUT -i lo -j ACCEPT

Разберем по порядку:

Фильтр iptables по порту, протоколу или IP адресу

Теперь добавим разрешающее правило для подключения к нашему Linux серверу по SSH на порт 22.

iptables -A INPUT -p tcp --dport 22 -j ACCEPT

Допустимо указывать диапазон портов через двоеточие, например

iptables -A INPUT -p tcp -s 94.41.174.122 --dport 22 -j ACCEPT

доступ на 22 порт будет разрешен только с ip адреса 94.41.174.122.

Частично разрешим icmp запросы, 3-х типов:

iptables -A INPUT -p icmp --icmp-type echo-request -j ACCEPT
iptables -A INPUT -p icmp --icmp-type destination-unreachable -j ACCEPT
iptables -A INPUT -p icmp --icmp-type time-exceeded -j ACCEPT

Эти правила разрешают работу утилит ping, traceroute и позволяют работать механизму для определения MTU между двумя хостами.

Фильтр iptables по состоянию соединения

Для корректной работы потребуется создать правило, разрешающее уже установленные соединения:

iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

Здесь в критерии используется ключ -m, для загрузки модуля state, который дает возможность определить текущее состояние ip пакета из возможных:

Задание политики iptables по умолчанию

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

iptables -P INPUT DROP

Внимание: прежде чем использовать эту команду, необходимо убедиться, что ваши текущие правила разрешают вам подключиться к серверу, иначе вы просто заблокируете себе доступ!
Посмотрим на результатурующую таблицу правил iptables, добавим ключ -v, чтобы показать более подробный вывод:
iptables -L -v

iptables -L -v

Включить логи iptables

Iptables позволяет записывать информацию о проходящих ip пакетах в системный журнал. Реализуется это с помощью специфичного действия LOG над соединением, после которого, ip пакет продолжает движение по цепочке нетронутым. Для примера, создадим правило, которое будет записывать в системный журнал все события соединений на порт 445 (tcp):

iptables -A INPUT -p tcp --dport 445 -j LOG --log-prefix "IN SMB DROP: "

логи iptables

Разберем вывод:

Сохранение и восстановление правил фильтрации iptables

В заключении, настроим автозагрузку правил, после перезагрузки сервера. Для этого должен быть установлен пакет iptables-services и активирован сервис. Установим пакет через yum:

yum install iptables-services
systemctl enable iptables

Проверим статус службы iptables:

systemctl status iptables

systemctl enable iptables

Параметр автозагрузки установлен в enabled (включена), параметр active указывает, что служба запущена.

При загрузке сервис будет читать содержимое файла /etc/sysconfig/iptables, и восстанавливать сохраненные правила. Чтобы сохранить в него наши правила, воспользуемся командой:

Можно восстановить правила из файла командой:

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

В следующей статье мы покажем, как использовать iptables для создания NAT правил перенаправления трафика для шлюза-доступа на базе CentOS из / во внутренюю сеть организации.

В одной из прошлых статей мы разбирались как установить CentOS 8 на компьютер. Любая только что установленная операционная система нуждается в настройке и персонализации под ваши нужды. CentOS не исключение.

В этой статье мы разберем как выполняется настройка CentOS 8 после установки, как настроить сеть, ssh, брандмауэр, а также как убрать лишние службы. Все будет пошагово, главное — внимательно читайте и тогда у вас все получится, как по инструкции.

Настройка CentOS 8 после установки

Шаг 1. Обновление системы

Пожалуй, самая стандартная процедура при установке любой операционной системы. Для начала нам надо зайти в текстовую консоль или открыть терминал если работаете в графическом интерфейсе. Открыть консоль можно сочетанием клавиш Ctrl+Alt+F1 (или F 2, F 3, F 4 и так до F12). А терминал можно найти в главном меню. Мы рассмотрим вариант с текстовой консолью.


А вот и она, авторизуйтесь от имени пользователя root. Затем используйте команды:

dnf check - update


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


Шаг 2. Установки системных утилит

Настройка centos 8 не обходится без установки сервисных утилит. Это те самые утилиты, которые можно использовать изо дня в день, поэтому давайте установим их заранее. Скорее всего, вам будет нужны след. утилиты: vim , wget , curl , net - tools , lsof и bash - completion . « И что же это такое?» — спросите вы. А вот что это:

  • wget и curl вам будут нужны для загрузки файлов по сети;
  • net - tools содержит набор программ для поддержки сетей;
  • lsof шикарная утилита, она позволяет выводить информацию о том, какие файлы задействованы теми или иными процессами;
  • nano и vim являются редакторами. Первый, кстати, больше для новичков подходит, а второй уже для опытных. Во многом из-за того, что в vim editor инструментарий шире.
  • bash - completion - без автозаполнений далеко не уедешь.

Итак, пишем команду длиною в жизнь:

dnf install nano vim wget curl net-tools lsof bash-completion


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

Шаг 3. Настройка имени компьютера

CentOS примечателен тем, что имеет широчайший диапазон инструментов для работы и настройки сетей. Для новичка лучше начать с команды nmtui . Установим имя хоста . Для этого пишем:

Сразу же появится вот такое окно:


Здесь мы устанавливаем любое нужное имя. Буквально любое, но все же стоит не перегибать с шуточками там, где это не надо.

Шаг 4. Настройка статического IP

Теперь зададим статический IP . Используем все ту же команду nmtui:

Далее вас приветствует вот такое интерфейс:

Нажимаем на Edit и попадаем в след. меню:


Теперь я устанавливаю значения для статики. Напротив IPv 4 Configuration выставите значение Manual .


Затем пропишите нужный ip адрес в поле Addresses, адрес шлюза (роутера) в поле Gateway и DNS серверы, которые хотите использовать, например, 8.8.8.8 от Google. Как только все сделали надо перезапустить сеть. Делается это командой:


Нажимаем на Deactivate/Activate. Сделали? Теперь новые настройки вступили в силу. Идем дальше. Давайте вообще проверим правильно ли мы указали данные. Пишем команды:

ifconfig enp 0 s 3




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


Шаг 5. Создаем нового пользователя

Вообще лучше всего всегда иметь пользователя с правами на администрирование, поэтому мы с вами сделаем такого. Для создания пользователя выполните:

Создаем пароль для пользователя:

Добавляем пользователя в группу sudo:

usermod - aG wheel nomanoma

Достаточно просто, да?

Шаг 6. Настройка SSH

Если вы собираетесь подключаться к вашему серверу по ssh, то более удобно будет использовать ssh ключи вместо логина и пароля. Мы будем использовать и публичный, и приватный ключи. Ещё их называют открытый и закрытый ( public и private key ). Сначала вам надо вернуться в вашу рабочую систему и создать эту пару ключей. Для этого выполните:

ssh-keygen -t RSA

Обратите внимание на строку Enter passphrase (empty for no passphrase). Чтобы не вводить пароль при входе на сервер по SSH оставьте её пустой, одного тогда вы должны учитывать, что если этот файл попадет в чужие руки, то тот человек получит полный доступ к серверу.

Дальше система укажет, где сохранился SSH -ключ. Раз уж мы его сгенерировали, то стоит его использовать. Пишем команду ssh - copy - id , а также имя пользователя и IP -адрес нашего сервера, который мы сегодня настраиваем:

Теперь на удаленный сервер можно попасть без пароля.

Шаг 7. Настройка безопасности ssh

Безопасности много не бывает, поэтому мы отключим возможность удаленного доступа к root -аккаунту непосредственно в конфигурационном файле. Пишем команду


systemctl restart sshd

Шаг 8. Настройка брандмауэра

Базовая настройка centos не обойдется без брандмауэра, по умолчанию здесь используется firewalld. Чтобы запустить его на сервере надо использовать команды:

systemctl enable firewalld

systemctl start firewalld

А чтобы посмотреть статус используйте:

systemctl status firewalld

Но прежде всего надо добавить службу SSH, поскольку если её нет в правилах, то как вы будете взаимодействовать с системой по этому протоколу? Если вы подключены к серверу удаленно, то можете всё сломать. Для её добавления используйте:

firewall-cmd -–add-service=ssh
firewall-cmd -–add-service=ssh --permanent


Ну а если вам необходимо использовать SMTP или веб-сервер , то очевидно, что следует добавить разрешающие правила для этих служб:

С помощью команды ниже я могу увидеть все правила на сервере.

firewall-cmd --permanent –list-all


Шаг 9. Удаление ненужных служб

Вы думали, что только в Windows придется заниматься подобным? Уже нет. У каждой службы есть свое назначение. Поэтому я покажу как увидеть весь список служб, а вы уже для себя решите какие нужны, а какие нет. Чтобы увидеть весь список используйте:

Вот так это выглядит:


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

systemctl stop имя_службы

systemctl disable имя_службы

Шаг 10. Управление службами

Есть такая чудесная команда, которая позволит увидеть все активные и не только, службы:


Список действительно большой. В общем и целом, так можно отслеживать службы в вашей системе. Наша статья о том, как выполняется настройка centos после установки завершена, но настраивать там можно ещё очень много чего. Надеюсь, статья была полезной, и вы узнали что-то новое для вас. А что вы настраиваете после установки? Напишите в комментариях!

Нет похожих записей


Статья распространяется под лицензией Creative Commons ShareAlike 4.0 при копировании материала ссылка на источник обязательна.

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