Андрей Смирнов
Время чтения: ~20 мин.
Просмотров: 15

Настройка фаервола Линукс

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

Для управления возможностями брандмауэра используется одноимённая команда — ufw. Давайте сначала рассмотрим её опции и параметры, а потом перейдём к настройке. Синтаксис команды такой:

$ ufwопциидействиепараметры

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

Сначала разберём опции утилиты:

  • —version — вывести версию брандмауэра;
  • —dry-run — тестовый запуск, никакие реальные действия не выполняются.

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

  • enable — включить фаерволл и добавить его в автозагрузку;
  • disable — отключить фаерволл и удалить его из автозагрузки;
  • reload — перезагрузить файервол;
  • default — задать политику по умолчанию, доступно allow, deny и reject, а также три вида трафика — incoming, outgoing или routed;
  • logging — включить журналирование или изменить уровень подробности;
  • reset — сбросить все настройки до состояния по умолчанию;
  • status — посмотреть состояние фаервола;
  • show — посмотреть один из отчётов о работе;
  • allow — добавить разрешающее правило;
  • deny — добавить запрещающее правило;
  • reject — добавить отбрасывающее правило;
  • limit — добавить лимитирующее правило;
  • delete — удалить правило;
  • insert — вставить правило.

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

Сначала нужно отметить, что в серверной версии Ubuntu UFW по умолчанию включён, а в версии для рабочего стола он отключён. Поэтому сначала смотрим состояние фаервола:

Snimok-ekrana-ot-2019-01-09-09-21-03-1024x576.png

Если он не включён, то его необходимо включить:

Snimok-ekrana-ot-2019-01-09-09-21-18-1024x576.png

Затем вы можете снова посмотреть состояние:

Snimok-ekrana-ot-2019-01-09-09-56-59-1024x576.png

Обратите внимание, что если вы работаете по SSH, то перед тем, как включать брандмауэр, нужно добавить правило, разрешающее работу по SSH, иначе у вас не будет доступа к серверу. Подождите с включением до пункта 3.

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

Snimok-ekrana-ot-2019-01-09-10-40-09-1024x576.png

А все исходящие разрешим:

Чтобы создать разрешающее правило, используется команда allow. Вместо allow могут использоваться и запрещающие правила ufw — deny и reject. Они отличаются тем, что для deny компьютер отсылает отправителю пакет с уведомлением об ошибке, а для reject просто отбрасывает пакет и ничего не отсылает. Для добавления правил можно использовать простой синтаксис:

$ ufwallowимя_службы$ ufwallowпорт$ ufwallowпорт/протокол

Например, чтобы открыть порт ufw для SSH, можно добавить одно из этих правил:

Первое и второе правила разрешают входящие и исходящие подключения к порту 22 для любого протокола, третье правило разрешает входящие и исходящие подключения для порта 22 только по протоколу tcp.

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

Snimok-ekrana-ot-2019-01-09-10-09-15-1024x576.png

Можно также указать направление следования трафика с помощью слов out для исходящего и in для входящего.

$ ufwallowнаправлениепорт

Например, разрешим только исходящий трафик на порт 80, а входящий запретим:

Snimok-ekrana-ot-2019-01-09-10-11-04-1024x576.png

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

$ ufwallow protoпротоколfromip_источникаtoip_назначенияportпорт_назначения

В качестве ip_источника может использоваться также и адрес подсети. Например, разрешим доступ со всех IP-адресов для интерфейса eth0 по протоколу tcp к нашему IP-адресу и порту 3318:

Snimok-ekrana-ot-2019-01-09-11-00-52-1024x576.png

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

К сожалению, настроить время и количество запросов можно только через iptables.

Посмотреть состояние и действующие на данный момент правила можно командой status:

Snimok-ekrana-ot-2019-01-09-09-56-59-1024x576.png

Чтобы получить более подробную информацию, используйте параметр verbose:

Snimok-ekrana-ot-2019-01-09-09-57-16-1024x576.png

С помощью команды show можно посмотреть разные отчеты:

  • raw — все активные правила в формате iptables;
  • builtins — правила, добавленные по умолчанию;
  • before-rules — правила, которые выполняются перед принятием пакета;
  • user-rules — правила, добавленные пользователем;
  • after-rules — правила, которые выполняются после принятия пакета;
  • logging-rules — правила логгирования пакетов;
  • listening — отображает все прослушиваемые порты и правила для них;
  • added — недавно добавленные правила;

Например, посмотрим список всех правил iptables:

Snimok-ekrana-ot-2019-01-09-09-59-15-1024x576.png

Посмотрим все прослушиваемые порты:

Snimok-ekrana-ot-2019-01-09-10-02-59-1024x576.png

Или недавно добавленные правила:

Snimok-ekrana-ot-2019-01-09-11-04-08-1024x576.png

Чтобы удалить правило ufw, используется команда delete. Например, удалим ранее созданные правила для порта 80:

Snimok-ekrana-ot-2019-01-09-10-14-58-1024x576.png

Чтобы отлаживать работу ufw, могут понадобится журналы работы брандмауэра. Для включения журналирования используется команда logging:

Snimok-ekrana-ot-2019-01-09-10-20-33-1024x576.png

Также этой командой можно изменить уровень логгирования:

  • low — минимальный, только заблокированные пакеты;
  • medium — средний, заблокированные и разрешённые пакеты;
  • high — высокий.

Лог сохраняется в папке /var/log/ufw. Каждая строчка лога имеет такой синтаксис:

[UFW действие] IN=интерфейс OUT=итерфейс SRC=ip_источника DST=ip_назначения LEN=размер_пакета TOS=0x10 PREC=0x00 TTL=64 ID=728 DF PROTO=протокол SPT=порт_источника DPT=порт назначения LEN=размер_пакета

Snimok-ekrana-ot-2019-01-09-10-39-43-1024x576.png

В качестве действия приводится то, что UFW сделал с пакетом, например ALLOW, BLOCK или AUDIT. Благодаря анализу лога настройка UFW Ubuntu станет гораздо проще.

Если вы хотите полностью отключить UFW, для этого достаточно использовать команду disable:

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

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

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

Руководство по Ubuntu Server » Безопасность

<-назад | далее->

Firewall

Введение

Ядро линукс включает подсистему Netfilter (сетевой фильтр), который используется для манипулирования или решения судьбы сетевого трафика передаваемого в или через ваш сервер. Все современные решения линукс по сетевой защите используют эту систему пакетной фильтрации.

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

ufw — простой Firewall

Инструмент для настройки сетевой защиты Ubuntu по умолчанию — это ufw. Он разработан для легкой настройки iptables и предоставляет дружественный способ создания сетевой защиты для IPv4 и IPv6.

По умолчанию изначально ufw выключен. Со страницы man руководства ufw:

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

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

1. Для начала требуется разрешить ufw. Наберите в терминале:

sudo ufw enable

2. Открыть порт (в данном примере SSH):

sudo ufw allow 22

3. Правила могут быть добавлены с использованием нумерованного формата:

sudo ufw insert 1 allow 80

4. Подобным образом можно закрыть открытый порт:

sudo ufw deny 22

5. Для удаления правила используйте delete:

sudo ufw delete deny 22

6. Также можно разрешить доступ к порту с определенных компьютеров или сетей. Следующий пример разрешает на этом компьютере доступ по SSH с адреса 192.168.0.2 на любой IP адрес:

sudo ufw allow proto tcp from 192.168.0.2 to any port 22

Замените 192.168.0.2 на 192.168.0.0/24 чтобы разрешить доступ по SSH для всей подсети.

7. Добавление опции –dry-run команде ufw выведет список правил, но не применит их. Например, далее показано, что было бы применено, если открыть HTTP порт:

sudo ufw --dry-run allow http
*filter :ufw-user-input - [0:0] :ufw-user-output - [0:0] :ufw-user-forward - [0:0] :ufw-user-limit - [0:0] :ufw-user-limit-accept - [0:0] ### RULES ###  ### tuple ### allow tcp 80 0.0.0.0/0 any 0.0.0.0/0 -A ufw-user-input -p tcp --dport 80 -j ACCEPT  ### END RULES ### -A ufw-user-input -j RETURN -A ufw-user-output -j RETURN -A ufw-user-forward -j RETURN -A ufw-user-limit -m limit --limit 3/minute -j LOG --log-prefix "[UFW LIMIT]: " -A ufw-user-limit -j REJECT -A ufw-user-limit-accept -j ACCEPT COMMIT Rules updated

8. ufw можно выключить командой:

sudo ufw disable

9. Чтобы посмотреть статус сетевой защиты:

sudo ufw status

10. Для более полного отображения информации введите:

sudo ufw status verbose

11. Для отображения в виде формата numbered:

sudo ufw status numbered

Если порт, который вы хотите открыть или закрыть определен в файле /etc/services, вы можете использовать имя порта вместо его номера. В приведенных выше примерах можете заменить 22 на ssh.

Это лишь краткое описание использования ufw. Пожалуйста обратитесь к странице man ufw для более подробной информации.

Интеграция Приложений в ufw

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

1. Чтобы посмотреть для каких приложений установлен профиль введите следующую команду в терминале:

sudo ufw app list

2. Аналогично, разрешить трафик по порту, используя профиль приложения, можно следующей командой:

sudo ufw allow Samba

3. Также доступен расширенный синтаксис:

ufw allow from 192.168.0.0/24 to any app Samba

Замените Samba и 192.168.0.0/24 на используемый вами профиль приложения и IP диапазон вашей сети.

Нет необходимости в определении протокола, поскольку эта информация детализирована в профиле. Также обратите внимание, что имя app заменило номер port.

4. Для просмотра деталей какие порты, протоколы и пр. определены для приложения введите:

sudo ufw app info Samba

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

ubuntu-bug nameofpackage

Маскировка IP

Цель маскировки ip-адреса состоит в том, чтобы компьютеры с частными, немаршрутизируемыми ip-адресами в вашей сети могли иметь доступ к Интернету через компьютер выполняющий маскировку. Трафик из вашей частной сети попадающий в Интернет должен быть правильно выпущен для корректного ответа, отправленного именно тому компьютеру, который послал запрос. Чтобы сделать это, ядро модифицирует заголовок каждого пакета так, чтобы ответ приходил нужному компьютеру, а не частному ip-адресу, который послал запрос, что невозможно в рамках сети Интернет. Линукс использует Трассировку Соединений (conntrack) для трассировки каждого из соединений принадлежащих соответствующим компьютерам и перенаправляет каждый возвращенный пакет. Трафик, покидает вашу частную сеть «маскируясь» таким образом, будто исходит от вашего шлюза Ubuntu. Этот процесс обозначен в документации Microsoft как Internet Connection Sharing (Общий доступ к Интернет-Соединению).

Маскировка ufw

Маскировка ip-адреса может быть достигнута с использованием различных правил ufw. Это возможно благодаря дополнению к ufw, которым является iptables-restore с файлами правил, расположенных в /etc/ufw/*.rules. Эти файлы являются отличным способом для добавления правил в iptables без использования ufw, а также правил, которые более гибко взаимодействуют со шлюзом или соединением типа «мост».

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

1. Во-первых, в ufw должно быть активировано перенаправление. Для этого нужно изменить конфигурацию двух файлов, в /etc/default/ufw измените DEFAULT_FORWARD_POLICY на “ACCEPT”:

DEFAULT_FORWARD_POLICY="ACCEPT"

Затем отредактируйте /etc/ufw/sysctl.conf следующим образом:

net/ipv4/ip_forward=1

Аналогично для IPv6:

net/ipv6/conf/default/forwarding=1

2. Теперь добавим правила в файл /etc/ufw/before.rules. Правила по умолчанию описаны лишь в таблице filter, а для работы маскировки нам нужно отредактировать таблицу nat. Добавьте следующие строки в начало файла конфигурации сразу после заголовка с комментарием:

# nat Table rules *nat :POSTROUTING ACCEPT [0:0]  # Forward traffic from eth1 through eth0. -A POSTROUTING -s 192.168.0.0/24 -o eth0 -j MASQUERADE  # don't delete the 'COMMIT' line or these nat table rules won't be processed COMMIT

Комментарии не обязательны, но считается хорошим тоном документировать свою конфигурацию. Также при изменении каких-либо rules файлов в каталоге /etc/ufw, убедитесь, что данные строки являются последними для каждой измененной таблицы:

# don't delete the 'COMMIT' line or these rules won't be processed COMMIT

Для каждой таблицы обязательно присутствие соответствующего ей оператора COMMIT (применение изменений). В данных примерах показаны только таблицы nat и filter, но вы можете также добавлять правила для таблиц raw и mangle.

В примерах выше замените eth0, eth1 и 192.168.0.0/24 на соответствующие интерфейсы и IP диапазон вашей сети.

3. Наконец, выключите и повторно включите ufw для применения изменений:

sudo ufw disable && sudo ufw enable

IP маскировка теперь должна быть включена. Вы также можете добавить дополнительные правила FORWARD в /etc/ufw/before.rules. Рекомендуется чтобы эти дополнительные правила были добавлены в цепочку/секцию (chain) ufw-before-forward.

Маскировка iptables

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

1. Подобно ufw, первым делом нам необходимо включить форвардинг для IPv4 отредактировав следующий файл /etc/sysctl.conf и убрав комментарий со строки:

net.ipv4.ip_forward=1

Если вы хотите включить форвардинг для IPv6 также удалите комментарий:

net.ipv6.conf.default.forwarding=1

2. Далее выполните команду sysctl для применения новых настроек в файле конфигурации:

sudo sysctl -p

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

sudo iptables -t nat -A POSTROUTING -s 192.168.0.0/16 -o ppp0 -j MASQUERADE

После выполнения этой команды можно считать, что ваша частная сеть имеет адрес 192.168.0.0/16, а сетевая карта с выходом в Интернет — ppp0. Синтаксис определен следующим образом:

1. -t nat – правило применяется к таблице nat

2. -A POSTROUTING – правило добавлено (-A) в цепочку POSTROUTING

3. -s 192.168.0.0/16 – правило применено к трафику, исходящему из этого адресного пространства

4. -o ppp0 – правило применено к трафику, который необходимо перенаправить через этот интерфейс

5. -j MASQUERADE – трафик подпадающий под это правило выполняет «прыжок» («jump») (-j) в цепочку MASQUERADE для дальнейшей манипуляции с ним как описаны выше

4. Также каждая цепочка таблицы filter (цепочка, где происходит фильтрация большинства пакетов) по умолчанию имеет правило ACCEPT, но если вы настраиваете ваш firewall с целью создания шлюза, вы должны выбрать либо политику DROP либо REJECT, в этом случае ваш «замаскированный» трафик должен быть пропущен через цепочку FORWARD для срабатывания предыдущих правил:

sudo iptables -A FORWARD -s 192.168.0.0/16 -o ppp0 -j ACCEPT sudo iptables -A FORWARD -d 192.168.0.0/16 -m state  --state ESTABLISHED,RELATED -i ppp0 -j ACCEPT

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

Если вы хотите, чтобы маскировка работала после перезагрузки ПК, отредактируйте файл /etc/rc.local и добавьте туде вышеперечисленные команды. Например, добавьте первую команду без опций фильтрации:

iptables -t nat -A POSTROUTING -s 192.168.0.0/16 -o ppp0 -j MASQUERADE

Журналы

Журналы firewall крайне необходимы для обнаружения атак, возникающих проблем с правилами, а также обнаружения повышенной активности в вашей сети. В настройках firewall необходимо включить журналирование для правил, которое должно быть указано перед списком правил (правил, которые решают дальнейшую судьбу пакета, такие как ACCEPT, DROP или REJECT).

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

sudo ufw logging on

Чтобы выключить журналирование в ufw просто замените значение on на off.

Для iptables введите:

sudo iptables -A INPUT -m state --state NEW -p tcp --dport 80  -j LOG --log-prefix "NEW_HTTP_CONN: "

В этом случае в начале поступит запрос на порт 80 от компьютера в локальной сети, затем будет сгенерирован файл журнала в dmesg который выгдлядит примерно так (одна строка разделена на три для корректного отображения на экране):

[4304885.870000] NEW_HTTP_CONN: IN=lo OUT= MAC=00:00:00:00:00:00:00:00:00:00:00:00:08:00 SRC=127.0.0.1 DST=127.0.0.1 LEN=60 TOS=0x00 PREC=0x00 TTL=64 ID=58288 DF PROTO=TCP SPT=53981 DPT=80 WINDOW=32767 RES=0x00 SYN URGP=0

Этот текст журнала также появится в файле /var/log/messages, /var/log/syslog и /var/log/kern.log. Эти настройки можно изменить отредактировав файл /etc/syslog.conf аналогично или при установке и настройке ulogd, а также используя ULOG вместо LOG. Демон ulogd это пользовательский сервер который слушает инструкции ядра для дальнейшего журналирования, в частности для firewall, и может вести журналирование даже в PostgreSQL или MySQL базы данных. Для того, чтобы легко разобраться в файлах журнала можно использовать их анализаторы, такие как logwatch, fwanalog, fwlogwatch или lire.

Другие инструменты

Существует множество утилит для помощи в построении полноценного firewall без углубленных навыков в iptables.

Для работы с интерфейсом:

1. fwbuilder очень мощная утилита, которая настраивается подобно проприетарным продуктам вроде Checkpoint FireWall-1.

Если вы предпочитаете утилиты с поддержкой командной строки и списком файлов конфигураций:

2. Shorewall — мощное решение, которое поможет вам создать серьезный firewall для любого типа вашей сети.

Ссылки

1. Вики страница Ubuntu Firewall содержит необходимую информацию о работе над ufw.

2. Также посмотрите man страницу ufw, которая содержит много полезной информации: man ufw.

3. Для более подробной информации об использовании iptables смотрите packet-filtering-HOWTO.

4. Руководство nat-HOWTO содержит полное описание о маскировке соединений.

5. IPTables HowTo Ubuntu Вики также отличный источник.

<-назад | далее->

Межсетевой экран, он же firewall (файрвол, фаервол или файервол) служит для автоматической обработки и фильтрации сетевого трафика. Поскольку не все данные, передаваемые по сети, полезны и безопасны, возникла необходимость проверять и обрабатывать их «на лету».

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

В Linux для фильтрации трафика используется фаервол Netfilter, с 2000 года входящий в состав ядра. Управлять им позволяет известная многим утилита iptables. Она предоставляет очень гибкую систему настроек, но достаточно сложна в конфигурировании. Чтобы упростить пользователям жизнь, в Ubuntu была добавлена обертка для iptables — фаервол Uncomplicated Firewall (UFW) и графическая оболочка для него — GUI for Uncomplicated Firewall (GUFW). Чтобы лучше разобраться, мы начнем с консольной версии фаервола, а графическую рассмотрим в одной из следующих статей.

По умолчанию в Ubuntu 16.04 UFW отключен. Для проверки его текущего состояния используйте команду:

sudo ufw status

Включение фаервола и создание простейших правил

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

sudo ufw enable

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

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

  • Allow — пропустить (т. е., разрешить);
  • Deny — заблокировать (запретить);
  • Reject — отклонить и отправить обратно специальный код, сообщающий, что пакет был отклонен.

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

sudo ufw status verbose

Результат будет примерно таким:

Включение фаервола и создание простейших правил

На скриншоте выше мы видим, что по умолчанию разрешен весь исходящий трафик и запрещен весь входящий. Созданные правила отменяют запрет входящего трафика для портов 80, 22 и 1194/udp.

Если вы настраиваете сервер, к которому подключились по SSH, прежде всего необходимо разрешить подключение к порту 22:

sudo ufw allow 22

Включение фаервола и создание простейших правил

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

  • 80 для HTTP,
  • 443 для HTTPS,
  • 20 и 21 для FTP,
  • 25 для SMTP (отправка почты),
  • 465 для SMTPS (отправка почты с шифрованием),
  • 143 для IMAP (получение почты),
  • 993 для IMAPS (получение почты с шифрованием) и т. д.

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

sudo ufw allow ftp

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

sudo ufw allow ftp from ваш_ip

Имейте в виду.

Во-первых, IP должен быть внешним, во-вторых — статическим. Если вы допустите ошибку, то сами не сможете подключиться. У большинства провайдеров статический ip можно получить за небольшую отдельную плату.

Запрещающие правила создаются примерно таким же образом. Запретим доступ к порту 110:

sudo ufw deny 110

Запретим доступ к ftp c уведомлением о недоступности и комментарием:

sudo ufw reject ftp comment 'FTP temporarily closed. Please, come back tomorrow.'

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

sudo ufw delete allow 443

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

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

sudo ufw status numbered   sudo ufw delete 1

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

Если для передаваемых данных не находится соответствующего правила, используются правила, установленные по умолчанию. В Ubuntu 16.04 после включения фаервола весь входящий трафик блокируется (deny), а исходящий пропускается (accept) без каких-либо препятствий. Другими словами, исходящие данные фильтруются по принципу черного списка (разрешено все, что не запрещено отдельными правилами), а входящие — по принципу белого (запрещено все, что не было прямо разрешено).

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

sudo ufw status verbose

О настройках по умолчанию вам поведает строка, которая начинается с «Default: ». Если ваша система настроена иначе, следующие две команды установят стандартную конфигурацию:

sudo ufw default allow outgoing   sudo ufw default deny incoming

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

sudo ufw reset

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

На скриншотах — состояние фаервола до и после сброса.

Настройка правил с указанием направления, протокола, порта и IP.

UFW позволяет создавать правила с несколькими дополнительными условиями. В прошлой статье я уже демонстрировал, как создать правило для конкретного IP-адреса. Кроме этого вы можете указать протокол, порт и IP как отправителя, так и получателя.

В качестве первого примера возьмем типичную ситуацию: у вас есть компьютер с Ubuntu, на котором настроены нужные вам сервисы — FTP, Samba или что-нибудь еще. Вы хотите без проблем получать доступ ко всем этим сервисам из своей домашней сети (с ПК, смартфона и т. д. ), но оставить закрытым доступ извне.

В таком случае укажем IP-адреса нашей домашней сети в качестве разрешенных:

sudo ufw allow from 192.168.0.1/24

В список разрешенных при этом попадут IP-адреса с 192.168.0.1 по 192.168.0.254 включительно.

Усложним задачу и разрешим доступ из домашней сети только к порту, используемому для FTP:

sudo ufw allow from 192.168.0.1/24 to any port 21

Пусть вас не вводит в заблуждение словосочетание «to any port». Это две отдельные части команды, одна из которых означает IP-адрес, к которому выполняется обращение (в данном случае to any, то есть, к любому), а вторая определяет номер порта (port 21).

Сделаем наше правило еще более конкретным и укажем протокол:

sudo ufw allow from 192.168.0.0/24 to any port 21 proto tcp

В случае необходимости можно заблокировать доступ с нашего компьютера к конкретному IP или даже к конкретному порту неугодившего нам IP:

sudo ufw deny out to xxx.xxx.xx.x port 123
sudo ufw deny out to xxx.xxx.xx.x port 123:456 proto udp

Теперь udp-пакеты к портам 123 — 456 на указанном IP отправлены не будут.

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

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

sudo ufw insert 1 deny from 123.12.12.12 to any port 80

Ограничение доступа

Теперь все запросы сначала будут проверяться на соответствие запрещенному IP, и лишь после этого — проходить далее, согласно правилу №3.

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

Чтобы запретить более 6 попыток подключения к SSH за 30 секунд, выполните:

sudo ufw limit ssh

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

Вот и всё. Для большинства домашних компьютеров этого вполне достаточно и более тонкая настройка просто не нужна.

Используемые источники:

  • https://losst.ru/nastrojka-ufw-ubuntu
  • https://help.ubuntu.ru/wiki/руководство_по_ubuntu_server/безопасность/firewall
  • https://linuxrussia.com/firewall-ufw.html

Рейтинг автора
5
Подборку подготовил
Максим Уваров
Наш эксперт
Написано статей
171
Ссылка на основную публикацию
Похожие публикации