Как настроить firewall iptables для ос линукс

Лучшие бесплатные firewalls linux

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

Существует несколько графических утилит, которые могут помочь вам управлять им, но его защита ограничена вашей установкой Linux. А как насчет других устройств в вашей сети?

Независимо от того, являетесь ли вы домашним пользователем или руководите малым предприятием, скорее всего, у вас есть несколько устройств, подключенных к Интернету. Помимо компьютеров, довольно часто в учреждениях любого размера имеется множество IoT-устройств, которые также необходимо защитить от злоумышленников в Интернете.

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

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

Что такое Iptables?

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

Виды пакетов

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

Соответственно в фильтре iptables все пакеты делятся на три аналогичные цепочки:

  • Input — обрабатывает входящие пакеты и подключения. Например, если какой-либо внешний пользователь пытается подключиться к вашему компьютеру по ssh или любой веб-сайт отправит вам свой контент по запросу браузера. Все эти пакеты попадут в эту цепочку;
  • forward — эта цепочка применяется для проходящих соединений. Сюда попадают пакеты, которые отправлены на ваш компьютер, но не предназначены ему, они просто пересылаются по сети к своей цели. Как я уже говорил, такое наблюдается на маршрутизаторах или, например, если ваш компьютер раздает wifi;
  • output — эта цепочка используется для исходящих пакетов и соединений. Сюда попадают пакеты, которые были созданы при попытке выполнить ping losst.ru или когда вы запускаете браузер и пытаетесь открыть любой сайт.

Но если вы думаете что можно просто полностью закрыть цепочку Input для увеличения безопасности, то вы очень сильно ошибаетесь. При работе сети используются обе цепочки input и output. Например, вы пытаетесь выполнить ping, данные отправляются через output, но ответ приходит через input. То же самое происходит при просмотре сайтов и других действиях. А вот цепочка forward может вообще не использоваться если ваш компьютер не является маршрутизатором. Так что настройка iptables должна выполняться очень аккуратно.

Правила и действия

Перед тем как перейти к созданию списка правил iptables нужно рассмотреть как они работают и какие бывают. Для каждого типа пакетов можно установить набор правил, которые по очереди будут проверяться на соответствие с пакетом и если пакет соответствует, то применять к нему указанное в правиле действие. Правила образуют цепочку, поэтому input, output и forward называют цепочками, цепочками правил. Действий может быть несколько:

  • ACCEPT — разрешить прохождение пакета дальше по цепочке правил;
  • DROP — удалить пакет;
  • REJECT — отклонить пакет, отправителю будет отправлено сообщение, что пакет был отклонен;
  • LOG — сделать запись о пакете в лог файл;
  • QUEUE — отправить пакет пользовательскому приложению.

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

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

  • prerouting — в эту цепочку пакет попадает перед обработкой iptables, система еще не знает куда он будет отправлен, в input, output или forward;
  • postrouting — сюда попадают все проходящие пакеты, которые уже прошли цепочку forward.

Но это еще не все. У нас еще есть таблицы iptables, с которыми тоже желательно разобраться.

Настройка и обновление времени в Debian

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

Узнать дату, время, часовой пояс можно командой date:

# date

Mon 12 Aug 2019 02:29:03 PM MSK

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

# apt install tzdata

Теперь выберем правильный часовой пояс с помощью команды:

# dpkg-reconfigure tzdata

Выбирая соответствующие пункты визарда, указываете свой часовой пояс.

Дальше синхронизируем время с сервером времени в интернете. Для разовой или ручной синхронизации понадобится отдельная утилита. Установим ntpdate на сервер:

# apt install ntpdate

И синхронизируем время:

# ntpdate-debian

12 Aug 14:30:21 ntpdate: adjust time server 89.109.251.21 offset 0.004529 sec

Если получаете ошибку:

12 Aug 14:30:21 ntpdate: the NTP socket is in use, exiting

Значит у вас уже работает служба ntp. Ее нужно остановить и обновить время вручную. Хотя если она работает, то у вас и так должно быть все в порядке.

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

# apt install ntp

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

# netstat -tulnp | grep ntp

udp        0      0 10.20.1.16:123          0.0.0.0:*                           8855/ntpd           
udp        0      0 127.0.0.1:123           0.0.0.0:*                           8855/ntpd           
udp        0      0 0.0.0.0:123             0.0.0.0:*                           8855/ntpd           
udp6       0      0 fe80::cce1:23ff:fe4:123 :::*                                8855/ntpd           
udp6       0      0 ::1:123                 :::*                                8855/ntpd           
udp6       0      0 :::123                  :::*                                8855/ntpd

Настройка доступа в Samba

С помощью самой же Samba так же можно ограничить доступ. Но это скорее как вспомогательная опция к брэндмауэру.

interfaces -это глобальная опция в файле конфигурации smb.conf, которая может ограничить возможность установления соединений с Samba на одном или нескольких сетевых интерфейсах. В системах с одним сетевым интерфейсом эта опция может быть полезна только для того, чтобы Samba могла работать с интерфейсом loopback или создаваться программным обеспечением вроде VMware. Вот типичный пример использования этой опции:

Теперь порты слушаются только на loopback интерфейсе и интерфейсе с адресом 192.168.100.1

И еще два параметра hosts deny и hosts allow. С их помощью запрещаем или разрешаем доступ от источника:

Вот так.

Примеры настройки Iptables

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

Список правил

Просмотр правил Iptables осуществляется командой:

$ iptables –L

Также есть возможность указать нужную цепочку, например:

$ iptables -L INPUT

Очистка правил

При любых ошибках в работе Iptables, чтобы исключить нарушение функционирования ядра перед другими действиями, требуется очистить правила, «обнулить» вводные данные. Выполняется эта процедура командой:

$ sudo iptables –F

Если речь идет об определенной цепочке, то она будет выглядеть иначе:

$ sudo iptables -F Input

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

Правила «по умолчанию»

Задаются правила «по умолчанию» вручную. Пример команд:

$ sudo iptables -p INPUT ACCEPT

$ sudo iptables -p OUTPUT ACCEPT

$ sudo iptables -p FORWARD DROP

Здесь мы разрешаем все цепочки INPUT и OUTPUT, запрещаем FORWARD.

Блокировка пакетов

Заблокировать пакеты можно действием DROP. Оно позволяет включать фильтрацию по разным признакам вроде IP-адреса, маске сети, порту и пр.

Пример:

$ sudo iptables -A INPUT -s 20.20.20.20 -j DROP

Блокируются входящие пакеты на IP 20.20.20.20.

$ sudo iptables -A OUTPUT -s 20.20.20.20 -j DROP

Теперь мы заблокировали пакеты, исходящие на IP 20.20.20.20.

Есть возможность указать маску сети, например, 20.20.20.0/255. Тогда правила будут применяться ко всем IP, входящим в указанный диапазон. Если же требуется заблокировать подключение строго по определенному протоколу, вводится команда:

$ sudo iptables -A INPUT -p tcp --dport ssh -s 10.10.10.10 -j DROP

Она блокирует все входящие соединения по SSH.

Удаление правил

При удалении правил в Iptables вводится команда с опцией -D. Но перед этим может понадобиться просмотреть перечень правил:

$ sudo iptables -L

Пример удаления правила:

$ sudo iptables -A OUTPUT -s 10.10.10.10 -j DROP

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

$ sudo iptables –F

Сохранение правила Iptables

Теперь остается опробовать режим сохранения правил

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

В Ubuntu процесс требует ввода команды:

$ sudo /sbin/iptables-save

Для операционных систем на ядре Red Hat и CentOS она выглядит иначе:

$ sudo /sbin/service iptables save

Ничего сложного в настройке и управлении Iptables нет. Основные функции понятны даже новичкам, поэтому утилита и остается стандартом де-факто для всех систем на базе Linux.

Действия с соединениями

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

В идеале все три цепочки должны разрешать приём трафика. Это можно задать вручную так:

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

При перезапуске iptables все внесённые изменения пропадут. Сохраните изменения в цепочках правил, выполнив команду для Ubuntu или для Red Hat/CentOS.

Что делать с соединением

Настроив поведение утилиты, которое будет происходить автоматически, следует приступать к правилам, обрабатывающим входящий/исходящий трафик. Основные способы взаимодействия с трафиком:

Accept – разрешение определенного соединения;

Drop – игнорирование запросов (межсетевой экран продолжает свое функционирование, будто никакого запроса не происходило, а запрашивающие ресурсы не узнают об игнорировании);

Reject – блокировка входящего трафика и отправка ответных сообщений с обозначением ошибки (в таком случае запрашивающие ресурсы будут уведомлены о блокировке их трафика).

Пример того, как будет выглядеть ping для

Разрешенного соединения (Accept):


Скриншот №2. Ping для разрешенного соединения

Проигнорированного трафика (Drop):


Скриншот №3. Ping для проигнорированного трафика

Отклоненного подключения (Reject):


Скриншот №4. Ping для отклоненного подключения

IPFire


IPFire

Простой в использовании брандмауэр с некоторыми суперпродвинутыми функциями.

IPFire — это дистрибутив управляемого брандмауэра на базе Linux, построенный на основе Netfilter. Он начинался как форк проекта IPCop, но затем был переписан на основе Linux From Scratch. IPFire может быть развернут на широком спектре оборудования, включая устройства ARM, такие как Raspberry Pi.

Благодаря своей минималистской сущности, IPFire является более доступным по сравнению с некоторыми аналогами. Процесс установки позволяет настроить сеть на различные сегменты безопасности, причем каждый сегмент имеет цветовое кодирование. Зеленый сегмент — это безопасная область, представляющая всех обычных клиентов, подключенных к локальной проводной сети. Красный сегмент представляет интернет. Никакой трафик не может проходить из красного сегмента в любой другой сегмент, если только вы специально не настроили его таким образом в брандмауэре.

Помимо функций межсетевого экрана, IPFire также обладает возможностями обнаружения и предотвращения вторжений, а также может быть использован для предоставления возможностей VPN. Дистрибутив также может быть расширен с помощью удобного набора дополнений для придания ему дополнительных функций.

OpenWRT

Брандмауэр для маршрутизаторов


OpenWRT

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

OpenWRT — существует уже более 15 лет, но и до сих пор активно развивается и поддерживается, в то время как другие некогда популярные разработки брандмауэров для дистрибутивов отошли на второй план.

Он также имеет удивительно приличный графический интерфейс и предлагает ряд дополнительных пакетов в своем репозитории, позволяющих настроить OpenWRT различными способами для всех видов использования. Несмотря на всю свою гибкость, OpenWRT по-прежнему является одним из наименее требовательных дистрибутивов и работает быстро.

Таблицы ipatables

Над цепочками правил в iptables есть еще один уровень абстракции, и это таблицы. В системе есть несколько таблиц, и все они имеют стандартный набор цепочек input, forward и output. Таблицы предназначены для выполнения разных действий над пакетами, например для модификации или фильтрации

Сейчас это для вас не так важно и будет достаточно знать что фильтрация пакетов iptables осуществляется в таблице filter. Но мы рассмотрим их все:

  • raw — предназначена для работы с сырыми пакетами, пока они еще не прошли обработку;
  • mangle — предназначена для модификации пакетов;
  • nat — обеспечивает работу nat, если вы хотите использовать компьютер в качестве маршрутизатора;
  • filter — основная таблица для фильтрации пакетов, используется по умолчанию.

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

Разрешение доступа клиентам

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

pfSense

Многофункциональный брандмауэр и маршрутизатор на базе FreeBSD


pfSense

pfSense позиционирует себя как самый надежный брандмауэр с открытым исходным кодом. Оригинальный дистрибутив брандмауэра на базе FreeBSD, pfSense имеет много общих черт с OPNsense. Например, помимо того, что он является мощной, гибкой платформой для межсетевого экранирования и маршрутизации, он включает длинный список сопутствующих функций. Для начала, как и в OPNsense, вы можете использовать pfSense для развертывания системы предотвращения вторжений, а также для включения VPN-доступа.

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

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

Показать статус.

Примерный вывод команды для неактивного файрвола:

Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination
Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination
Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination

Для активного файрвола:

Chain INPUT (policy DROP 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination
    0     0 DROP       all  --  *      *       0.0.0.0/0            0.0.0.0/0           state INVALID
  394 43586 ACCEPT     all  --  *      *       0.0.0.0/0            0.0.0.0/0           state RELATED,ESTABLISHED
   93 17292 ACCEPT     all  --  br0    *       0.0.0.0/0            0.0.0.0/0
    1   142 ACCEPT     all  --  lo     *       0.0.0.0/0            0.0.0.0/0
Chain FORWARD (policy DROP 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination
    0     0 ACCEPT     all  --  br0    br0     0.0.0.0/0            0.0.0.0/0
    0     0 DROP       all  --  *      *       0.0.0.0/0            0.0.0.0/0           state INVALID
    0     0 TCPMSS     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           tcp flags:0x06/0x02 TCPMSS clamp to PMTU
    0     0 ACCEPT     all  --  *      *       0.0.0.0/0            0.0.0.0/0           state RELATED,ESTABLISHED
    0     0 wanin      all  --  vlan2  *       0.0.0.0/0            0.0.0.0/0
    0     0 wanout     all  --  *      vlan2   0.0.0.0/0            0.0.0.0/0
    0     0 ACCEPT     all  --  br0    *       0.0.0.0/0            0.0.0.0/0
Chain OUTPUT (policy ACCEPT 425 packets, 113K bytes)
 pkts bytes target     prot opt in     out     source               destination
Chain wanin (1 references)
 pkts bytes target     prot opt in     out     source               destination
Chain wanout (1 references)
 pkts bytes target     prot opt in     out     source               destination

Где:
-L : Показать список правил.
-v : Отображать дополнительную информацию. Эта опция показывает имя интерфейса, опции, TOS маски. Также отображает суффиксы ‘K’, ‘M’ or ‘G’.
-n : Отображать IP адрес и порт числами (не используя DNS сервера для определения имен. Это ускорит отображение).

Ubuntu и CentOS

В современных операционных системах Ubuntu и CentOS по умолчанию нет iptables. Необходимо его установить или пользоваться более новыми утилитами.

В CentOS

В качестве штатной программы управления брандмауэром используется firewall-cmd. Подробнее читайте инструкцию Как настроить firewalld в CentOS.

Если необходимо пользоваться iptables, устанавливаем пакет с утилитой:

yum install iptables-services

Отключаем firewalld:

systemctl stop firewalld

systemctl disable firewalld 

Разрешаем и запускаем iptables:

systemctl enable iptables

systemctl start iptables

В Ubuntu

Для управления брандмауэром теперь используется ufw.

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

apt-get install iptables-persistent

Отключаем ufw:

ufw disable

Подготовка шлюза

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

Сеть на будущем программном роутере настроили, доступ в интернет на сервере есть. Обновим его:

# apt-get update
# apt-get upgrade

Установим MC, мне в нем удобнее всего работать, в том числе в редакторе mcedit:

# apt-get -y install mc

Настроим часовой пояс, если раньше не сделали это:

# dpkg-reconfigure tzdata

Устанавливаем сервис ntp для автоматического обновления времени:

# apt-get -y install ntp

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

Рейтинг
( Пока оценок нет )
Понравилась статья? Поделиться с друзьями:
Мой редактор ОС
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: