Настройка файрвола на Ubuntu

Настройка Linux-файрвола iptables: Руководство для начинающих

Iptables — это межсетевой экран для операционных систем Linux. Успешно применять этот инструмент могут не только продвинутые пользователи Linux, но и новички. В этом руководстве представлено описание базовых настроек конфигурации этого мощного файрвола.

Виртуальный сервер на базе Linux

  • Бесплатное тестирование
  • Безлимитный трафик
  • От 318 руб./мес.

Что такое iptables

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

Как правило, itpables предустанавливается на всех Linux-дистрибутивах. Чтобы обновить утилиту, или установить ее, если по каким-то причинам она отсутствует в базовой поставке, нужно воспользоваться следующей командой:

sudo apt-get install iptables

Существуют и графические инструменты-альтернативы iptables, например Firestarter, но и работа в командной строке не является очень уж сложной. Однако следует соблюдать особенную осторожность при настройке iptables через удаленное ssh-соединение, поскольку одна неверная команда может заблокировать возможность подключения к удаленному серверу — придется каким-то образом вносить изменения в настройки машины физически получив к ней доступ.

Типы правил

Существует три типа правил iptables — input, forward и output.

Input — Такие цепочки используются для контроля поведения входящих соединений. К примеру, если пользователь попробует подключиться к серверу по SSH, то iptables сравнит его IP-адрес со своим списком, чтобы разрешить или запретить доступ.

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

Output — Такие цепочки используются для исходящих соединений. К прмиеру, если пользователь пытается отправинг запрос ping к сайту 1cloud.ru, iptables изучит цепочку правил, чтобы понять, что нужно делать в случае ping и этого сайт, и только потом разрешит или запретит соединение.

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

Поведение по умолчанию

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

Увидеть текущие настройки iptables по умолчанию можно с помощью команды iptables –L:

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

iptables —policy INPUT ACCEPT
iptables —policy OUTPUT ACCEPT
iptables —policy FORWARD ACCEPT

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

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

iptables —policy INPUT DROP
iptables —policy OUTPUT DROP
iptables —policy FORWARD DROP

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

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

  • Accept — разрешить соединение;
  • Drop — игнорировать соединение, вести себя так, будто его никогда не было. Действие подходит для случаев, когда нужно сделать так, чтобы источник запроса не узнал о его блокировке.
  • Reject — заблокировать соединение и отправить в ответ сообщение об ошибке. Действие подходит для тех случаев, когда владелец сервера хочет дать понять, что соединение заблокировано файрволом.

Вот так выглядит ответ на пинг в каждом из трех случаев

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

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

Мы будем использовать комманду iptables –A, чтобы добавлять правила к существующим цепочкам. Iptables будет начинать с начала списка и проходить по всем правилам, пока не найдет совпадение. Если нужно поместить какое-то правило перед уже имеющимся, то можно использовать команду iptables -I [цепочка] [номер], чтобы указать номер позиции в списке, которую должно занять новое правило.

Соединения с одного IP-адреса

Правило ниже позволяет заблокировать все соединения с IP-адреса 10.10.10.10:

iptables -A INPUT -s 10.10.10.10 -j DROP

Соединения с диапазона адресов

Правило ниже позволяет заблокировать соединения из диапазона IP-адресов 10.10.10.0/24. Для указания диапазона адресов можно использовать стандартную запись маски подсети через слэш или описывать ее в полном варианте:

iptables -A INPUT -s 10.10.10.0/24 -j DROP

iptables -A INPUT -s 10.10.10.0/255.255.255.0 -j DROP

Соединения на конкретный порт

Ниже показано, как заблокировать SSH-соединения с хоста 10.10.10.10:

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

Вместо SSH можно указать любой протокол или номер порта. Часть кода –p tcp говорит iptables о типе соединения, которое использует протокол. Если вы блокировали протокол, который использует UDP вместо TCP, то тогда нужно было бы написать –p udp.

Вот так можно заблокировать SSH-соединения с любого IP-адреса.

iptables -A INPUT -p tcp —dport ssh -j DROP

Состояния соединений

Как сказано выше, многие протоколы требуют двусторонних коммуникаций. Например, если нужно разрешить соединения по SSH, то добавить правила надо будет и в цепочку input и в цепочку output. Но что, если нужно только разрешить доступ только входящим соединениям? Разрешит ли добавление правила в цепочку output и исходящие SSH-соединения?

Для таких случаев используются состояния соединений. Они позволяют описывать двусторонние коммуникации, в которых разрешается установка только соединений определенной направленности. В примере ниже разрешены SSH-соединения, поступающие от хоста 10.10.10.10, но SSH-соединения к этому хосту запрещены. Однако, системе разрешается отправка информации по SSH в случае уже установленной сессии, что делает возможной SSH-коммуникацию между хостами:

iptables -A INPUT -p tcp —dport ssh -s 10.10.10.10 -m state —state NEW,ESTABLISHED -j ACCEPT iptables -A OUTPUT -p tcp —sport 22 -d 10.10.10.10 -m state —state ESTABLISHED -j ACCEPT

Сохранение изменений

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

Red Hat / CentOS:

=/sbin/service iptables save

Другие команды

Вывод уже сконфигурированных правил iptables:

Добавление ключа –v позволит просматривать информацию по пакетам и байтам, добавление –n выведет информацию в цифровом формате — имена хостов, протоколы и сети будут описаны цифрами.

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

Предложение от 8host.com

Настройка брандмауэра UFW на сервере Ubuntu 16.04

UFW (Uncomplicated Firewall) – это интерфейс iptables, предназначенный для упрощения процесса настройки брандмауэра. Инструмент iptables надёжный и гибкий, но новичку будет непросто настроить его самостоятельно.

Данное руководство поможет настроить брандмауэр с помощью UFW в Ubuntu 16.04

Требования

  • Сервер Ubuntu 16.04 (инструкции по настройке – здесь).
  • Пользователь с доступом к sudo.

В Ubuntu инструмент UFW установлен по умолчанию. Если в вашей системе он по какой-либо причине не установлен, запустите команду:

sudo apt-get install ufw

1: Использование IPv6 (опционально)

Данное руководство предназначено для IPv4, но оно подойдёт и для IPv6.

Если на вашем сервере Ubuntu включен протокол IPv6, убедитесь, что UFW поддерживает IPv6. Откройте конфигурации UFW:

sudo nano /etc/default/ufw

Убедитесь, что в настройках есть строка:

Сохраните и закройте файл (Ctrl-X, Y, Enter).

После включения UFW будет поддерживать правила для IPv4 и IPv6.

Прежде чем приступить к работе с брандмауэром, нужно убедиться, что он поддерживает соединения SSH. Ознакомьтесь с политикой UFW по умолчанию.

2: Политика по умолчанию

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

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

sudo ufw default deny incoming
sudo ufw default allow outgoing

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

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

3: Настройка соединений SSH

Если включить UFW сейчас, он заблокирует все входящие соединения. Потому нужно создать правила, которые разрешат входящий трафик заведомо безопасных сервисов (например, SSH и HTTP). Обязательно нужно разрешить трафик SSH на облачном сервере, так как этот протокол позволяет вам подключаться к серверу.

Чтобы разблокировать соединения SSH, введите:

sudo ufw allow ssh

Это правило разрешит входящие соединения порта 22 (порт SSH по умолчанию). UFW знает имена некоторых сервисов (в том числе и SSH). Все эти сервисы перечислены в файле /etc/services.

Вместо названия сервиса в правиле можно указать порт. Например:

sudo ufw allow 22

Если вы используете нестандартный порт SSH, укажите его в команде. К примеру, если SSH прослушивает порт 2222, нужно ввести:

sudo ufw allow 2222

4: Включение UFW

Чтобы включить UFW, введите:

sudo ufw enable

Вы получите предупреждение:

command may disrupt existing ssh connections

Это значит, что команда может сбросить все текущие ssh-соединения. Поскольку только что вы разблокировали трафик ssh, этого не произойдёт. Можно нажать y и продолжить.

Теперь брандмауэр включен. Чтобы просмотреть текущий набор правил, введите:

sudo ufw status verbose

5: Разрешение соединений

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

Ниже мы приведём несколько примеров правил наиболее востребованных сервисов.

Незашифрованные соединения HTTP можно разблокировать с помощью команд:

sudo ufw allow http
sudo ufw allow 80

Зашифрованные соединения HTTPS можно разрешить при помощи команд:

sudo ufw allow https
sudo ufw allow 443

Соединения FTP используются для незашифрованного обмена файлами; этот метод передачи данных небезопасен, потому рекомендуется использовать зашифрованные соединения. Чтобы разблокировать FTP, введите:

sudo ufw allow ftp
sudo ufw allow 21/tcp

Настройка диапазонов портов

UFW позволяет разблокировать диапазон портов. Некоторые приложения используют несколько портов.

К примеру, чтобы разрешить трафик X11, нужно разблокировать порты 6000-6007:

sudo ufw allow 6000:6007/tcp
sudo ufw allow 6000:6007/udp

Указывая диапазон портов, вы должны задать протокол (tcp или udp). Если вы не укажете протокол, UFW будет использовать оба протокола.

Настройка IP-адресов

Также UFW может разрешить трафик определённых IP-адресов. К примеру, чтобы разрешить доступ IP-адресу 15.15.15.51, нужно ввести:

sudo ufw allow from 15.15.15.51

Вы можете ограничить доступ для IP конкретным портом. Например, чтобы разрешить IP-адресу SSH-доступ, используйте:

sudo ufw allow from 15.15.15.51 to any port 22

Настройка подсетей

Чтобы разблокировать подсеть IP-адресов, используйте CIDR-нотации для определения маски подсети. К примеру, чтобы разрешить трафик от диапазона IP-адресов 15.15.15.1-15.15.15.254, нужно ввести:

sudo ufw allow from 15.15.15.0/24

Аналогичным образом можно указать порт, доступ к которому есть у подсети. Например, чтобы открыть доступ к порту 22, нужно ввести:

sudo ufw allow from 15.15.15.0/24 to any port 22

Настройка сетевых интерфейсов

Правила брандмауэра могут быть предназначены для конкретного интерфейса. Для этого нужно ввести allow in on, а затем указать имя интерфейса.

Прежде чем продолжить, просмотрите свои сетевые интерфейсы.

ip addr
.
2: eth0 :
mtu 1500 qdisc pfifo_fast state
.
3: eth1 :
mtu 1500 qdisc noop state DOWN group default
.

Имена интерфейсов выделены красным (обычно они называются eth0, eth1).

Чтобы разблокировать трафик HTTP для eth0, введите:

sudo ufw allow in on eth0 to any port 80

Чтобы сервер баз данных MySQL (порт 3306) мог прослушивать соединения интерфейса частной сети eth1, нужно ввести:

sudo ufw allow in on eth1 to any port 3306

6: Блокирование соединений

По умолчанию UFW блокирует все входящие соединения. В целом это очень безопасная политика.

Если вы хотите изменить политику брандмауэра по умолчанию на allow, вам нужно уметь блокировать трафик определённого вредоносного IP-адреса или подсети.

Правила, блокирующие трафик, пишутся точно так же, но вместо allow используется deny.

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

sudo ufw deny http

Чтобы заблокировать все соединения адреса 15.15.15.51, введите команду:

sudo ufw deny from 15.15.15.51

7: Удаление правил брандмауэра

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

Удаление правила по его номеру

Для начала просмотрите список существующих правил. Для этого запросите состояние брандмауэра с опцией numbered.

sudo ufw status numbered
Status: active
To Action From
— —— —-
[ 1] 22 ALLOW IN 15.15.15.0/24
[ 2] 80 ALLOW IN Anywhere

К примеру, чтобы удалить правило 2 (открывающее трафик HTTP), нужно запустить команду:

sudo ufw delete 2

Программа запросит подтверждения.

Примечание: Если сервер поддерживает IPv6, нужно удалить соответствующее правило и для этого протокола.

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

Также можно указать в команде само правило, которое нужно удалить. К примеру, чтобы удалить allow http, нужно запустить:

sudo ufw delete allow http

sudo ufw delete allow 80

Этот метод работает и для IPv4, и для IPv6.

8: Проверка состояния и правил UFW

Чтобы проверить состояние UFW, введите:

sudo ufw status verbose

По умолчанию UFW отключен:

Если брандмауэр включен, на экране появится его состояние и список правил. К примеру, если брандмауэр поддерживает соединения SSH (порт 22), ввод будет выглядеть так:

Status: active
Logging: on (low)
Default: deny (incoming), allow (outgoing), disabled (routed)
New profiles: skip
To Action From
— —— —-
22/tcp ALLOW IN Anywhere

9: Отключение или сброс правил UFW (опционально)

Если вы хотите отключить брандмауэр UFW, введите:

sudo ufw disable

Все правила будут дезактивированы.

Если вы хотите сбросить текущий набор правил UFW, запустите:

Эта команда сбросит все текущие правила брандмауэра. Имейте в виду: при этом политика по умолчанию не будет восстановлена.

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

Настройка файрвола на Ubuntu

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

Настройка файрвола на Ubuntu

Чтобы всё было нам понятно, разберёмся сначала, что такое Ubuntu и, собственно, сам файрвол, каким он бывает.

Что такое файрвол и Ubuntu

Первое, что необходимо знать, если вы новичок — Ubuntu это операционная система из семейства Linux, то есть перед нами Linux со всеми вытекающими. Интерфейс, файловая система и всё остальное — родное, с некоторыми изменениями, из-за них Ubuntu и выделяют в отдельную операционную систему, которая входит в четвёрку по популярности среди пользователей семейства.

Файрвол (firewall) — огненная стена, грубо говоря, экран, который контролирует все входящие и исходящие трафики и позволяет контролировать их: разрешать или запрещать. Линукс во многих аспектах намного безопаснее той же Windows, и вирусов нет, и файловая система круче (не фрагментируется), но это не значит, что можно пренебрегать безопасностью и игнорировать прекрасную возможность обезопасить свои данные файрволом.

В разных версиях Linux с файрволом дела обстоят по-разному, в нашем случае предусмотрен стандартный простой ufw, настройка которого в Ubuntu происходит с помощью командной строки. Это долго, сложно и неудобно, тем более при копировании команд некоторые символы могут замениться на альтернативные, и придётся доводить команды вручную или, вообще, набирать их целиком. Обычному пользователю разобраться в этих дебрях не просто, да и не сильно хочется, поэтому мы будем использовать графическую оболочку Gufw, которая позволит нам управлять возможностями файрвола без лишних мучений, просто работая с интерфейсом программы.

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

Установка Gufw

Изначально в системе не установлен Gufw, поэтому нам необходимо его установить, прописав в командной строке:

Запускаем программу, вводим пароль, тот самый, который вы вводите при входе в систему.

Файрвол нужно добавить в автозагрузку, чтобы все его конфигурации оставались в неизменном виде, вводим в командной строке:

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

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

Можно запретить например входящий и исходящий трафик

Перейдя в «Правка», «Параметры» можно изменить общие настройки приложения и создать свои профили, для которых впоследствии создать отдельные правила.

Можно запретить например входящий трафик и разрешить исходящий

Настройка Gufw

Приступаем к настройке Ubuntu firewall. На главном окне программы переходим во вкладку «Правила», там, собственно, мы их и будем удалять. Снизу у нас есть три кнопки + — и ≡, означают они соответственно «Добавить правило», «Удалить правило» и «Изменить правило». Давайте попробуем запретить и входящие и исходящие подключения, затем создать исключающее правило для DNS. Проверяем трафик с помощью команды в командной строке:

Убеждаемся, что доступа нет и действуем дальше.

Жмём «Добавить правило», нам нужно выбрать политику, наш вариант «Разрешить». Можно также выбрать одну сторону или обе, для которых будет выполняться правило. Указываем приложение — DNS, поиск можно разбивать на категории, чтобы найти было легче. Жмём кнопку «Добавить» и правило создано. Проверяем изменения в командной строке с помощью той же фразы.

Добавление правила сетевого экрана

Мы получили АйПи, но ICMP всё ещё запрещён, какой вывод? Такой способ контроля приложений не универсален и не затрагивает все порты. Специально для нас в окне добавления правил существуют дополнительные вкладки «Обычные» и «Расширенные».

На вкладке «Обычные» мы не можем выбрать программу, но зато можем указать порт и протокол. А в «Расширенных» есть возможность контролировать исходящий и исходящий IP.

В самом общем случае нам необходимо разрешить работу наших браузеров, а для этого необходимо открыть специальные порты. Но мы не будем заморачиваться и воспользуемся встроенными возможностями и перейдём на вкладку «Предустановленные», где создадим разрешающее правило для HTTP и HTTPS. После таких манипуляций все браузеры в системы смогут работать.

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

Дополнительные функции

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

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

«Журнал» позволяет нам отслеживать любые изменения в настройках программы. Создали правило — в журнале прописалась строчка, удалили правило — то же самое.

Отслеживание работы программы

Заключение

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

Если у вас появились вопросы — задайте их в комментариях.

Базовая настройка брандмауэра Ubuntu Server 14.04 LTS с помощью iptables

Как было справедливо замечено в комментариях к одной из прошлых заметок о конфигурации Ubuntu Server, говоря о вопросах безопасности, стоит обратить отдельное внимание на вопрос настройки брандмауэра на нашем Linux-сервере граничащем с сетью Интернет. В этой заметке мы кратко рассмотрим пример настройки встроенного в ядро Linux брандмауэра Netfilter с помощью интерфейса управления iptables на Ubuntu Server 14.04 LTS. Мы настроим ряд базовых правил брандмауэра, включим на нашем Linux-сервере функцию пересылки трафика (ip forwarding) превратив тем самым его в роутер, а также рассмотрим пару простых примеров настройки пересылки трафика.

Как уже сказано, iptables — это по сути пользовательский интерфейс управления встроенного в ядро Linux брандмауэра Netfilter. iptables оперирует всеми поступающими пакетами на основе правил (Rules), которые группируются в цепочки (Chains). Правила и цепочки хранятся в таблица (Tables).

Посмотрим список текущих правил (без явного указания имени таблицы, используется таблица filter ):

Как видим, в исходной конфигурации наш сервер содержит в таблице filter три цепочки правил — это INPUT, OUTPUT и FORWARD. В каждой из этих цепочек установлена политика по умолчанию — ACCEPT, то есть принимаются любые пакеты. При этом ни в одной цепочке нет каких-либо правил.

Примерно также картина обстоит и для второй основной таблицы nat .

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

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

Создадим пару правил, которые желательно иметь в цепочке INPUT практически для любой серверной конфигурации:

1. Правило разрешающее любой входящий трафик на служебный внутренний loopback device. Это может потребоваться для корректной работы разного рода служб и приложений.

2. Правило для поддержки уже разрешённых ранее и установленных соединений

Создадим ряд однотипных правил для запущенных на на нашем сервере служб. Например правила разрешающее входящие TCP-пакеты для подключения к службам SSH-сервера OpenSSH, веб-сервера Apache, прокси-сервера Squ >eth0 ):

Дополнительно создадим правило разрешающее ответы на echo-запросы по протоколу ICPM поступающие на интерфейс внутренней локальной сети нашего Linux-сервера:

Меняем политику для всего входящего трафика не попавшего ни под одно правило в цепочке INPUT на запрещающую:

То же самое можно сделать и для протокола IPv6. Здесь в качестве интерфейса управления по аналогии с iptables будет выступать ip6tables

Проверим что получилось в результате для протокола IPv4:

А также для протокола IPv6:

Тестируем созданные правила и если наблюдаем какие-то проблемы в их работе, — можно выполнить перезагрузку системы для их сброса с первоначальное состояние. Хотя можно восстановить доступ к серверу и без перезагрузки (если остался доступ к консоли), выполнив сброс всех правил цепочки INPUT и вернув её политику по умолчанию на разрешающую:

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

Во время установки пакета нам будет задан вопрос, хотим ли мы сразу сохранить имеющиеся правила IPv4 в конфигурационный файл /etc/iptables/rules.v4

Аналогичный вопрос будет задан и по правилам для IPv6, которые будут сохранены в файл /etc/iptables/rules.v6

В дальнейшем, после редактирования правил, для записи изменений в указанные конфигурационные файлы можем передёрнуть службу iptables-persistent:

Теперь обговорим реализацию немного другой задачи с помощью брандмауэра Ubuntu Server. Предположим в локальной сети маршрутизация настроена таким образом, что все обращения клиентов сети, выходящие за рамки сегментов маршрутизируемой локальной сети, направляются на сервер подключенный к ресурсам Интернет. В нашем случае это Linux-сервер, который мы используем в частности в качестве прокси-сервера на базе Squ >sysctl.conf

Найдём и раскомментируем две строки (ipv6 только при необходимости):

Сохраним файл и применим его изменения в системе:

По аналогии с цепочкой INPUT, поменяем политику правил брандмауэра по умолчанию в цепочках FORWARD для IPv4 и IPv6 на запрещающую:

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

Рассмотрим пример, когда нужно явно разрешить пересылку определённого типа трафика. Например есть необходимость пересылки DNS-запросов от двух внутренних DNS-серверов в локальной сети на внешние DNS-сервера в Интернет (например Root-сервера). Допустим IP-адреса внутренних DNS-серверов 10.160.0.253 и 10.160.0.254 . Для того, чтобы создать правила разрешающие пересылку DNS-запросов с этих серверов на внешние DNS-сервера в Интернет, выполним 3 блока команд:

1. Разрешаем проброс трафика (для новых и уже установленных соединений) исходящего с IP-адресов внутренних DNS-серверов на порт 53 TCP/UDP (запросы к внешним DNS-серверам):

2. Разрешаем проброс трафика (только для уже установленных соединений) идущий с порта 53 TCP/UDP (с внешних DNS-серверов) на IP-адреса внутренних DNS-серверов (ответы на запросы от внешних DNS-серверов):

3. С помощью NAT выполняем маскировку любых пакетов идущих из локальной сети в Интернет (на WAN-интерфейс eth1 ) меняя в пакетах адрес источника на конкретный IP-адрес WAN-интерфейса:

В п.3 мы используем более широкое правило, которое разрешает NAT для любого трафика идущего из локальной сети в Интернет, так как подразумевается, что на этапе обработки данного правила (цепочка POSTROUTING из таблицы nat ) предварительная проверка на пересылку трафика по более узким правилам уже выполнена ранее в цепочке FORWARD таблицы filter .
Порядок обработки пакетов в таблицах iptables изложен в следующей схеме:

Теперь нужно проверить результат. Запускаем на каждом из внутренних DNS-серверов командную строку и пытаемся разрешить имя (например ya.ru ) на внешнем DNS-сервере (например 8.8.8.8 )

Если созданные нами правила форвардинга трафика DNS работают корректно, то получим от удалённого DNS-сервера ответ:

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

По завершению правок всех правил не забываем сохранять их с помощью службы iptables-persistent:

Для того, чтобы оценить все созданные в ходе этой заметки настройки iptables в комплексе, выполним:

Будет выведен отчет по всем правилам для всех таблиц iptables:

Если для операций редактирования правил нужно узнать порядковый номер какого-то конкретного правила, то можно воспользоваться несколько иным форматом вывода правил, в котором явно видны номера правил, например для таблицы filter :

Вдогонку ссылки на пару простых сжатых статей помогающих в начальном освоении iptables:

Изучаем firewalld: простой и мощный файрвол для Linux на замену iptables

Содержание статьи

Iptables и другие

Проект iptables, разработанный Расти Расселом (Rusty Russell) в 1999 году для управления netfilter и заменивший в ядре 2.4 ipchains и ряд других инструментов вроде ipnatctl, предлагает более расширяемый способ фильтрации пакетов, обеспечивающий сисадмину больший контроль при упрощении самих правил. Так, в ipchains нужно было создавать правило в каждой цепочке, прослеживая весь маршрут пакета, теперь достаточно одного. Появление модулей позволяло очень просто расширять возможности. В процессе развития проекта iptables был портирован для IPv6 (в 2011 году, ip6tables), добавлялись дополнительные модули (ULOG, nf_conntrack), он научился производить разные манипуляции с пакетами, классифицировать трафик (до седьмого уровня OSI), балансировать нагрузку и многое другое. С ростом количества функций усложнились и настройки. При этом, даже несмотря на некоторую унификацию, каждое расширение имеет свой синтаксис, одни поддерживают диапазоны, отрицание, префиксы, другие — нет. Поначалу каждое изменение правил требовало полного перезапуска брандмауэра, включая выгрузку модулей, что приводило к разрыву установленных соединений. Сейчас такой проблемы нет.

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

Неудивительно, что для решения этих проблем были придуманы разные надстройки. Так, в Ubuntu для простой настройки правил используется ufw (Uncomplicated Firewall — несложный файрвол). Например, чтобы открыть доступ к SSH-порту, достаточно ввести

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

Еще один известный проект, позволяющий легко поддерживать сложные правила, — FERM (for Easy Rule Making). В FERM все правила хранятся в одном файле, который легко читается, редактируется и загружается одной командой. Такой файл просто переносить между компьютерами. Сами правила группируются в блоки, содержат переменные, списки, что позволяет задать те же настройки в более коротком и понятном виде. Итоговый размер правил FERM раза в три меньше аналогичных для iptables. Например, запрещаем все соединения, кроме HTTP, SSH и FTP.

Под капотом FERM находится обычный Perl-скрипт, который конвертирует конфигурационные файлы в правила iptables.

В Fedora 18 был анонсирован демон firewalld, ставший официальным приложением для управления настройками netfilter в RHEL 7 / CentOS 7. Последние становятся все популярнее на VDS, а значит, придется столкнуться с их особенностями.

Возможности firewalld

Firewalld запускается как демон, новые правила добавляются без перезапуска и без сброса установленного файрвола. Изменения в конфигурации могут быть сделаны в любое время и применяются мгновенно: сохранять или применять изменения не требуется. Поддерживается IPv4, IPv6, автоматическая загрузка модулей ядра и сетевые зоны, определяющие уровень доверия соединений. Предоставляется простой интерфейс добавления правил для служб и приложений, белый список приложений, имеющих право менять правила. В настоящее время такую возможность поддерживает libvirt, Docker, fail2ban, Puppet, скрипт установки Virtuozzo и многие другие проекты. В репозитории YUM уже есть пакеты fail2ban-firewalld и puppet-firewalld, поэтому подключить их можно одной командой.

Firewalld предоставляет информацию о текущих настройках брандмауэра через D-Bus API, а также принимает изменения через D-Bus с использованием методов аутентификации PolicyKit. В качестве бэкенда используются iptables, ip6tables, ebtables, ipset и планируется nftables. Но сами правила, созданные непосредственно этими утилитами, firewalld не может разобрать, поэтому оба метода использовать нельзя.

Управление производится при помощи утилит командной строки firewall-cmd или графической firewall-config, позволяющей настроить все правила в удобной среде. Для помощи в миграции текущих правил iptables на firewalld используется утилита firewall-offline-cmd, по умолчанию считывающая /etc/sysconfig/system-config-firewall . В последних релизах появилась утилита firewallctl, имеющая простой синтаксис и позволяющая получать информацию о состоянии службы, конфигурации брандмауэра и изменять правила.

Графическая firewall-config поддерживает firewalld

Параметры firewall-cmd

Разрешить соединение на определенный порт очень просто:

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

Для удаления порта из правил используется параметр —remove-port :

Вообще, многие команды —add-* имеют значения для проверки статуса —query-* , —list-* — список, изменения —change-* или удаления —remove соответствующего значения. Для краткости на этом не будем дальше заострять внимание. После релоада правил проверяем:

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

Для проверки, в каком режиме находится файрвол, есть специальный ключ:

Отключается panic mode:

В firewalld необязательно знать, какой порт привязан к сервису, достаточно указать название сервиса. Все остальное утилита возьмет на себя.

После установки firewalld знает настройки более 50 сервисов, получаем их список.

Разрешим подключение к HTTP:

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

Firewalld хранит все настройки в XML-файлах в каталогах в /usr/lib/firewalld. В частности, сервисы лежат в services. Внутри файла описание: название, протокол и порт.

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

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

Продолжение доступно только участникам

Вариант 1. Присоединись к сообществу «Xakep.ru», чтобы читать все материалы на сайте

Членство в сообществе в течение указанного срока откроет тебе доступ ко ВСЕМ материалам «Хакера», увеличит личную накопительную скидку и позволит накапливать профессиональный рейтинг Xakep Score! Подробнее

Soft Gufw – графический интерфейс для настройки файервола (сетевого экрана) в Linux

Well-known member

Установка Gufw в Debian и производные (Kali, Mint, Ubuntu и др)
Gufw можно установить в Synaptic или из терминала:

Самые интересные следующие две строчки:

Т.е. на целевой машине имеется 998 закрытых порта. Закрытые — значит нет приложений, которые бы их прослушивали, использовали. Два порта открытые. И впечатляет время сканирование — полсекунды.

Ну и ещё парочка портов открыта:

Для начала разблокируем окно. Чтобы включить брандмауэр, просто нажмите кнопку Состояние и правила по умолчанию будут установлены. Deny (Запретить) для входящего трафика и Allow (Разрешить) для исходящего трафика.

Давайте ещё раз просканируем нашу систему:

Во-первых, сканирование длилось значительно дольше. А во-вторых, у нас опять две интересные строчки:

Было опять просканировано 1000 портов и все они теперь фильтруются. Само сканирование заняло почти 22 секунды.

Вывод: файервол уже работает!

Добавление правил в файервол
Чтобы настроить брандмауэр, добавим правила. Просто щелкните кнопку Add (+), и появится новое окно. Для получения подробной информации посетите домашнюю страницу UFW. Правила могут формироваться для TCP и UDP портов. UFW имеет несколько предустановленных правил для конкретных программ/услуг, они убыстряют типичную настройку сетевого экрана.

Доступные варианты для правил Allow (Разрешить), Deny (Запретить), Reject (Отклонить), и Limit (Ограничение):

  1. Разрешить: система позволит вход трафика для порта.
  2. Запретить: система запретит вход трафика для порта.
  3. Отклонить: система запретит вход трафика для порта и будет информировать систему связи, что он было отклонено.
  4. Ограничение: система запретит соединения, если IP-адрес пытался инициировать 6 или более соединений за последние 30 секунд.

Предустановленные

Использование предустановленных правил дает несколько вариантов для управления параметрами брандмауэра для распространённых программ и услуг.

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

Возьмём в качестве примера службу SSH – давайте просто представим на минуту, что отсутствует предустановленное правило для неё. Откроем для неё порт: вкладка Простые, выберем “Allow”, “In” “TCP”, “22” и нажмём кнопку Добавить.

Да, всё работает:

Чтобы настроить доступ на основе определенного IP, используем вкладку Расширенные.

Есть несколько настроек, доступных для установки в Gufw. Можно настроить в Изменить->Preferences

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

ANDREY
31.07.2015 в 13:57
Довольно познавательно, но зачем файервол в Linux?

WEBWARE TEAM
31.07.2015 в 14:30
Почему-то ваш комментарий попал в спам…

Правильная настройка файервола:

  • Позволяет сводить на нет некоторые виды флуда (установкой надлежащих правил файервола) и другие виды DoS-атак (с помощью дополнительных программ и скриптов, которые сами добавляют правила в файервол) (актуально для защиты серверов)
  • Уведомляет о подозрительной деятельности, попытках зондирования
  • Можно контролировать доступ к различным службам: например, закрыть доступ к веб-серверу, SSH и прочему без остановки самих служб. Т.е. сервером на локалхосте можно пользоваться, а другие к нему подключиться не могут.
  • Фильтрация доступа к заведомо незащищенным службам.

Файервол лучше иметь, чем не иметь. Конечно, файервол при неправильной настройке никак не поможет (это справедливо и для Linux и для Windows).

ИВАН
19.02.2016 в 14:00
А как настроить белый список: запретить все входящие и исходящие подключения и разрешить выход в интернет только для Firefox, Центра приложений Ubuntu и как разрешить доступ для Samba в диапазоне IP-адресов с 192.168.0.1 по 192.168.0.254?

ИВАН
23.02.2016 в 19:27
И как разрешить входящие и исходящие подключения для qbittorrent только для определенного порта?
Неужели для Linux не существует хороших графических программ для настройки файервола?

XYZ
01.11.2016 в 12:26
Приветствую.
Настроил GUFW – все замечательно. Только при рестарте системы ufw – inactive. При запуске GUFW галочка выключена. Посоветуйте что делать? Спасибо!

Как настроить брандмауэр UFW на Ubuntu 18.04

Главное меню » Операционная система Ubuntu » Как настроить брандмауэр UFW на Ubuntu 18.04

При использовании любой операции, брандмауэр является одним из наиболее важных функций, которые необходимо учитывать, что касается безопасности вашей системы. Брандмауэр – это щит или барьер, который существует между вашим компьютером и интернетом и блокирует несанкционированный трафик, такой как удаленный доступ к вашей системе, и помогает защитить от вредоносного кода, который постоянно проходит через интернет. Брандмауэр может быть аппаратным или программным. Аппаратный брандмауэр – это автономная система брандмауэра, размещенная в сети для добавления защитного слоя путем управления потоком трафика в сеть и из нее, а также блокирования доступа пользователей к нежелательным сайтам. Программный брандмауэр встроен в операционные системы, такие как Linux и Windows, и помогает защитить вашу систему от внешних атак.

Установка UFW

По умолчанию Ubuntu 18.04 поставляется с установленной UFW. Однако, для более ранних систем, вы должны выполнить команду ниже

Для того, чтобы проверить, является ли UFW запущенным:

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

Чтобы проверить, является ли он активным или неактивным

Если он неактивен, вы получите вывод ниже

Чтобы включить UFW с набором правил по умолчанию, запустите

Чтобы отключить запуск брандмауэра

Настройка правил по умолчанию UFW

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

Вывод

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

Вывод

Вышеуказанные команды позволят всем исходящим соединениям запретить или блокировать все входящие соединения.

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

Чтобы разрешить SSH, запустите

Исходящий

Доступ к SSH также может быть разрешено имя службы

Если вы хотите удалить правило, запустите

Запретить услугу по имени сервиса

Чтобы увидеть все услуги, которые могут быть разрешены или запрещены в системе проверьте файл /etc/services .

Пример вывода

Запуск UFW брандмауэра

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

Вам может быть предложено со следующим предупреждением

Если вы выберете Да, вы получите вывод ниже

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

Вывод теперь будет отображать состояние брандмауэра плюс разрешенные услуги/порты

Вывод

Разрешение соединения в UFW

Вы можете легко разрешить входящие соединения на порт/диапазон, название приложения, IP-адреса/подсети в UFW.
Проверьте приведенные ниже примеры.

а) Предоставление приложений по имени или номеру порта/диапазон

б) Разрешение IP-адреса/подсети

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

Чтобы указать IP-адрес, который разрешен для подключения к определенному порту запуска

Выше позволяет IP-адрес 10.200.20.45 только для подключения через SSH

Чтобы разрешить определенную подсеть IP-адресов для подключения к системе с помощью CIDR обозначения для указания сетевой маски

Выше позволяет IP – адрес от 192.168.1 до 192.168.1.254 для подключения к системе
Вы можете также указать порт назначения подсети

Это означает, что IP-адрес от 192.168.1 до 192.168.1.254 может подключаться к системе через порт 22, который является SSH.

в) Разрешить именем интерфейса

Если нам нужно разрешить соединения через имя интерфейса его можно указать так:

Как запретить соединения в UFW

По умолчанию UFW настроен запрещать все входящие соединения.

а) IP-адрес/подсеть

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

Это будет блокировать все входящие соединения от хоста с IP-адресом 192.168.1.15

Далее заблокируем всю подсеть:

Это будет блокировать все соединения, поступающие из этой подсети.

б) Запретить порты и приложения

Запретить порт или услугу

Удаление и получение номеров правил

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

Вывод

Допустим, мы хотим удалить правила номер 2. Мы делаем это следующей командой:

Заметка :

После удаления второго правила в брандмауэре, правило 3 будет теперь новое правило 2. Таким образом, если вы хотите удалить текущее правило 3, вы будете удалять, используя номер 2.

Сброс правил

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

Вход и перезагрузка

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

Если вы хотите отключить ведение журнала по какой-то причине (не рекомендуется), вы можете использовать следующую команду:

Журналы по умолчанию находятся в файле /var/log/ufw.log . Чтобы увидеть их в режиме реального времени, используйте -f, как это:

Если вы хотите увидеть правила, которые были недавно добавлены

Файлы конфигурации UFW

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

Эти два файла содержат правила, которые вычисляются перед всеми правилами, которые вы добавили в UFW. Так что если вы хотите, чтобы некоторые правила выполнялись первыми. Первый файл для ipv4 и второй один для v6

Они оцениваются после правил команды ufw. Они хороши для использования, если вы хотите переопределить какое-то правило и применить его независимо. Опять же, два файла, для двух версий протокола IP, которые в настоящее время используются.

Здесь у нас есть модули ядра, использующиеся в ufw, а также другие параметры. Вы можете изменить конфигурационные файлы только как root, и вы можете использовать любой текстовый редактор. который Вам нравится.

Избегайте добавления повторяющихся правил

Далее рассмотрим механизм против повторяющихся правил. Сначала мы откроем порт 101

Обратите внимание, что команда без протокола, как и выше открывает оба UDP и TCP-порт. Так давайте выполним ту же команду еще раз, чтобы увидеть, что происходит

Вывод

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

Указав TCP и UDP порт 101, мы все еще можем добавить открытый порт 101 для всех протоколов и это дубликат правила, как порт 101 открыт дважды, один раз для каждого протокола и один раз для всех из них.

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

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

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

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

Ubuntu Documentation

Introduction

The Linux kernel includes the Netfilter subsystem, which is used to manipulate or decide the fate of network traffic headed into or through your server. All modern Linux firewall solutions use this system for packet filtering.

The kernel’s packet filtering system would be of little use to administrators without a userspace interface to manage it. This is the purpose of iptables: When a packet reaches your server, it will be handed off to the Netfilter subsystem for acceptance, manipulation, or rejection based on the rules supplied to it from userspace via iptables. Thus, iptables is all you need to manage your firewall, if you’re familiar with it, but many frontends are available to simplify the task.

ufw — Uncomplicated Firewall

The default firewall configuration tool for Ubuntu is ufw . Developed to ease iptables firewall configuration, ufw provides a user-friendly way to create an IPv4 or IPv6 host-based firewall.

ufw by default is initially disabled. From the ufw man page:

“ ufw is not intended to provide complete firewall functionality via its command interface, but instead provides an easy way to add or remove simple rules. It is currently mainly used for host-based firewalls. ”

The following are some examples of how to use ufw :

First, ufw needs to be enabled. From a terminal prompt enter:

To open a port (SSH in this example):

Rules can also be added using a numbered format:

Similarly, to close an opened port:

To remove a rule, use delete followed by the rule:

It is also possible to allow access from specific hosts or networks to a port. The following example allows SSH access from host 192.168.0.2 to any IP address on this host:

Replace 192.168.0.2 with 192.168.0.0/24 to allow SSH access from the entire subnet.

Adding the —dry-run option to a ufw command will output the resulting rules, but not apply them. For example, the following is what would be applied if opening the HTTP port:

ufw can be disabled by:

To see the firewall status, enter:

And for more verbose status information use:

To view the numbered format:

If the port you want to open or close is defined in /etc/services , you can use the port name instead of the number. In the above examples, replace 22 with ssh .

This is a quick introduction to using ufw . Please refer to the ufw man page for more information.

ufw Application Integration

Applications that open ports can include an ufw profile, which details the ports needed for the application to function properly. The profiles are kept in /etc/ufw/applications.d , and can be edited if the default ports have been changed.

To view which applications have installed a profile, enter the following in a terminal:

Similar to allowing traffic to a port, using an application profile is accomplished by entering:

An extended syntax is available as well:

Replace Samba and 192.168.0.0/24 with the application profile you are using and the IP range for your network.

There is no need to specify the protocol for the application, because that information is detailed in the profile. Also, note that the app name replaces the port number.

To view details about which ports, protocols, etc., are defined for an application, enter:

Not all applications that require opening a network port come with ufw profiles, but if you have profiled an application and want the file to be included with the package, please file a bug against the package in Launchpad.

IP Masquerading

The purpose of IP Masquerading is to allow machines with private, non-routable IP addresses on your network to access the Internet through the machine doing the masquerading. Traffic from your private network destined for the Internet must be manipulated for replies to be routable back to the machine that made the request. To do this, the kernel must modify the source IP address of each packet so that replies will be routed back to it, rather than to the private IP address that made the request, which is impossible over the Internet. Linux uses Connection Tracking (conntrack) to keep track of which connections belong to which machines and reroute each return packet accordingly. Traffic leaving your private network is thus «masqueraded» as having originated from your Ubuntu gateway machine. This process is referred to in Microsoft documentation as Internet Connection Sharing.

ufw Masquerading

IP Masquerading can be achieved using custom ufw rules. This is possible because the current back-end for ufw is iptables-restore with the rules files located in /etc/ufw/*.rules . These files are a great place to add legacy iptables rules used without ufw , and rules that are more network gateway or bridge related.

The rules are split into two different files, rules that should be executed before ufw command line rules, and rules that are executed after ufw command line rules.

First, packet forwarding needs to be enabled in ufw . Two configuration files will need to be adjusted, in /etc/default/ufw change the DEFAULT_FORWARD_POLICY to “ACCEPT” :

Then edit /etc/ufw/sysctl.conf and uncomment:

Similarly, for IPv6 forwarding uncomment:

Now add rules to the /etc/ufw/before.rules file. The default rules only configure the filter table, and to enable masquerading the nat table will need to be configured. Add the following to the top of the file just after the header comments:

The comments are not strictly necessary, but it is cons >rules files in /etc/ufw , make sure these lines are the last line for each table modified:

For each Table a corresponding COMMIT statement is required. In these examples only the nat and filter tables are shown, but you can also add rules for the raw and mangle tables.

In the above example replace eth0 , eth1 , and 192.168.0.0/24 with the appropriate interfaces and IP range for your network.

Finally, disable and re-enable ufw to apply the changes:

IP Masquerading should now be enabled. You can also add any additional FORWARD rules to the /etc/ufw/before.rules . It is recommended that these additional rules be added to the ufw-before-forward chain.

iptables Masquerading

iptables can also be used to enable Masquerading.

Similar to ufw , the first step is to enable IPv4 packet forwarding by editing /etc/sysctl.conf and uncomment the following line:

If you wish to enable IPv6 forwarding also uncomment:

Next, execute the sysctl command to enable the new settings in the configuration file:

IP Masquerading can now be accomplished with a single iptables rule, which may differ slightly based on your network configuration:

The above command assumes that your private address space is 192.168.0.0/16 and that your Internet-facing device is ppp0. The syntax is broken down as follows:

-t nat — the rule is to go into the nat table

-A POSTROUTING — the rule is to be appended (-A) to the POSTROUTING chain

-s 192.168.0.0/16 — the rule applies to traffic originating from the specified address space

-o ppp0 — the rule applies to traffic scheduled to be routed through the specified network device

-j MASQUERADE — traffic matching this rule is to «jump» (-j) to the MASQUERADE target to be manipulated as described above

Also, each chain in the filter table (the default table, and where most or all packet filtering occurs) has a default policy of ACCEPT, but if you are creating a firewall in addition to a gateway device, you may have set the policies to DROP or REJECT, in which case your masqueraded traffic needs to be allowed through the FORWARD chain for the above rule to work:

The above commands will allow all connections from your local network to the Internet and all traffic related to those connections to return to the machine that initiated them.

Настройка брандмауэра в Ubuntu 18.04

Традиционно в качестве брандмауэра (фильтра пакетов) в Ubuntu используется iptables, но поскольку Ubuntu позиционируется как простой дистрибутив, то и оболочка для iptables была разработана соответствующая — UTF (Uncomplicated Firewall) — несложный файрвол.

Проверяем состояние брандмауэра

Первым делом нужно убедиться, что пакет ufw вообще установлен или установить его, если это не так:

# apt install ufw

На VDS от Xelent вы сразу получаете полномочия root, поэтому нет необходимости вводить команду sudo.
Как показано на следующей иллюстрации, уже установлена последняя версия пакета ufw.

Теперь посмотрим состояние брандмауэра:

# ufw status verbose

По умолчанию фильтр пакетов выключен, поэтому вы получите сообщение

Не нужно спешить включать файрвол: сначала его нужно настроить. Ведь если порт 22 окажется по умолчанию недоступен, то вы потеряете доступ к своему VDS. Конечно, в службе поддержки вам помогут, но все это — потеря времени.

Базовая настройка

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

ufw default deny incoming
ufw default allow outgoing

Данные два правила как раз и задают политику по умолчанию — запрещаются все входящие соединения и разрешаются все исходящие.

Итак, все входящие соединения запрещены. Чтобы к серверу можно было «достучаться» по определенному порту, его нужно сначала открыть. UFW хорош тем, что вам даже не нужно помнить номер порта — нужно знать только название сервиса. Например, вот как можно разрешить подключение по SSH:

При этом UFW сам создаст правило для порта 22 — именно этот порт используется для SSH. Брандмауэр знает порты и имена всех распространенных служб (http, ssh, ftp, sftp ).
Однако если вы перенастроили ssh на нестандартный порт из соображений той же безопасности, нужно явно указать номер порта:

После разрешения ssh (это главное, чтобы сейчас файрвол нам не разорвал соединение) можно включить ufw командой:

Необходимо подтвердить запуск, ответив y:

Command may disrupt existing ssh connections. Proceed with operation (y|n)?

Посмотрите на следующий скриншот.

Базовая настройка выполнена

Посмотрим, что произошло. Сначала мы разрешили ssh, на что получили ответ, что правила обновлены:

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

На этом базовая настройка выполнена — ssh успешно работает и мы можем приступить к дальнейшей настройке фильтра пакетов.

Настройка фаервола в Ubuntu с помощью утилиты UFW


Введение

UFW (Uncomplicated Firewall — несложный фаервол) — удобный интерфейс для управления политиками безопасности межсетевого экрана. Наши серверы постоянно подвергаются различным атакам или сканируются в поиске уязвимостей. Как только эти уязвимости находятся, мы рискуем стать частью ботнета, раскрыть конфиденциальные данные или потерять деньги из-за сбоев в работе веб-приложений. Одной из первых мер по снижению рисков безопасности является грамотная настройка правил межсетевого экрана. В нашем руководстве мы рассмотрим основные команды и правила работы с утилитой UFW.

Предварительные требования

Для начала работы с UFW вам потребуется суперпользователь(возможность исполнения команд под sudo).

Утилита UFW предустановлена в системе. Если по какой-то причине она была отсутствует, вы можете установить ее с помощью команды:

Проверка правил и текущего состояния UFW

В любое время вы можете проверить состояние UFW с помощью команды:

По умолчанию UFW отключен, так что вы должны увидеть что-то вроде этого:

Если UFW включен, то в консоли будут перечисляться заданные правила. Например, если firewall настроен таким образом — SSH (порт 22) соединение из любой точки мира, консоль может выглядеть следующим образом:

Так вы всегда можете узнать как настроен фаервол.

Внимание! Проведите начальную настройку перед включением UFW. В частности, должен быть доступен SSH(22 порт). В ином случае вы рискуете потерять доступ к серверу.

Начальная настройка

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

Cоответствующие правила фаервола прописываются так:

Добавление правила для SSH-соединений

Чтобы разрешить входящие SSH-соединения, выполните команду:

SSH демон прослушивает 22 порт. UFW знает об именах распространенных служб (ssh, sftp, http, https), поэтому вы можете использовать их вместо номера порта.

Если ваш SSH-демон использует другой порт, вам необходимо указать его в явном виде, например:

Теперь, когда ваш межсетевой экран настроен, можете включать его.

Запуск UFW

Чтобы включить UFW, используйте следующую команду:

Вы получите похожее предупреждение:

Это означает, что запуск этого сервиса может разорвать текущее ssh соединение.
Но, так как мы его уже добавили ssh в правила, этого не произойдет. Поэтому просто нажмите (y).

Добавление правил для других подключений

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

HTTP (80 порт)

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

HTTPS (443 порт)

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

FTP (21 порт)

Данный порт используется для незашифрованной передачи файлов:

Добавление диапазонов портов

Также вы можете указывать конкретный протокол:

sudo ufw allow 3000:3100/tcp
sudo ufw allow 3000:3100/udp

Добавление IP-адресов

Вs можете указать IP-адрес, которому будет разрешен доступ.

В приведённом примере указанному адресу разрешается доступ ко всем портам сервера.

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

Аналогичным образом вы можете работать с диапазонами ip-адресов:

Ограничение подключений

Чтобы запретить HTTP-соединения, вы можете использовать следующую команду:

Если вы хотите запретить все соединения с 123.45.67.89, воспользуйтесь следующей командой:

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

Существует два способа удаления правил. Первый — по номеру правила. Выполните команду:

После этого выполните команду ufw delete и укажите номер правила, которое следует удалить:

Второй способ заключается в том, что после команды ufw delete используется фактическое правило, например

Отключение UFW

Отключить UFW можно при помощи команды:

В результате её выполнения всё созданные ранее правила утратят силу.

Сброс правил

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

В результате её выполнения все правила будут отключены и удалены.

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

Ufw поддерживает нескоько уровней логгирования:

  • off — отключен.
  • low — регистрирует все заблокированные пакеты, не соответствующие заданной политике (с ограничением скорости), а также пакеты, соответствующие зарегистрированным правилам.
  • medium — все то, что при значении low. Плюс все разрешенные пакеты, не соответствующие заданной политике, все недопустимые пакеты, и все новые соединения. Все записи ведутся с ограничением скорости.
  • high — работает также как и medium. Плюс все пакеты с ограничением скорости.
  • full — также как и high, но без ограниения скорости.

Что бы задать уровень, укажите его как параметр:

По-умолчанию используется уровень low.

Для просмотра файлов относящихся с логам ufw, используйте команду:

Заключение

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

Ссылка на основную публикацию