Настройка фаервола в Ubuntu с помощью утилиты UFW
Рассмотрим основные команды и правила работы с утилитой UFW.
Введение
UFW (Uncomplicated Firewall) — удобный интерфейс для управления политиками безопасности межсетевого экрана. Наши серверы постоянно подвергаются различным атакам или сканируются в поиске уязвимостей. Как только эти уязвимости находятся, мы рискуем стать частью ботнета, раскрыть конфиденциальные данные или потерять деньги из-за сбоев в работе веб-приложений. Одной из первых мер по снижению рисков безопасности является грамотная настройка правил межсетевого экрана. В нашем руководстве мы рассмотрим основные команды и правила работы с утилитой UFW.
Предварительные требования
- Для начала работы с UFW вам потребуется суперпользователь( возможность исполнения команд под sudo).
- Утилита UFW предустановлена в системе. Если по какой-то причине она была отсутствует, вы можете установить ее с помощью команды:
sudo apt-get install ufw
Проверка правил и текущего состояния UFW
В любое время вы можете проверить состояние UFW с помощью команды:
sudo ufw status verbose
По умолчанию UFW отключен, так что вы должны увидеть что-то вроде этого:
Status: inactive
Если UFW включен, то в консоли будут перечисляться заданные правила. Например, если firewall настроен таким образом — SSH (порт 22) соединение из любой точки мира, консоль может выглядеть следующим образом:
Status: active Logging: on (low) Default: deny (incoming), allow (outgoing), disabled (routed) New profiles: skip To Action From -- ------ ---- 22 ALLOW IN Anywhere 22 (v6) ALLOW IN Anywhere (v6)
Так вы всегда можете узнать как настроен фаервол.
Внимание! Проведите начальную настройку перед включением UFW. В частности, должен быть доступен SSH(22 порт). В ином случае вы рискуете потерять доступ к серверу.
Начальная настройка
По умолчанию UFW настройки запрещают все входящие соединения и разрешают все исходящие. Это значит, что если кто-то попытается достичь ваш сервер, он не сможет подключиться, в то время как любое приложение на сервере имеет доступ к внешним соединениям.
Cоответствующие правила фаервола прописываются так:
sudo ufw default deny incoming sudo ufw default allow outgoing
Добавление правила для SSH-соединений
Чтобы разрешить входящие SSH-соединения, выполните команду:
sudo ufw allow ssh
SSH демон прослушивает 22 порт. UFW знает об именах распространенных служб (ssh, sftp, http, https), поэтому вы можете использовать их вместо номера порта.
Если ваш SSH-демон использует другой порт, вам необходимо указать его в явном виде, например:
sudo ufw allow 2222
Теперь, когда ваш межсетевой экран настроен, можете включать его.
Запуск UFW
Чтобы включить UFW, используйте следующую команду:
sudo ufw enable
Вы получите похожее предупреждение:
Command may disrupt existing ssh connections. Proceed with operation (y|n)?
Это означает, что запуск этого сервиса может разорвать текущее ssh соединение.
Но, так как мы его уже добавили ssh в правила, этого не произойдет. Поэтому просто нажмите (y).
Добавление правил для других подключений
Чтобы ваши приложения работали корректно, вам необходимо добавить другие правила. Ниже будут показаны настроить для наиболее распространённых служб.
HTTP (80 порт)
Для работы не зашифрованных веб-серверов используйте следующую команду:
sudo ufw allow http
sudo ufw allow 80
HTTPS (443 порт)
То же самое, что и в предыдущем примере, но для зашифрованных соединений:
sudo ufw allow https
sudo ufw allow 443
FTP (21 порт)
Данный порт используется для незашифрованной передачи файлов:
sudo ufw allow ftp
sudo ufw allow 21/tcp
Добавление диапазонов портов
sudo ufw allow 3000:3100
Также вы можете указывать конкретный протокол:
sudo ufw allow 3000:3100/tcp sudo ufw allow 3000:3100/udp
Добавление IP-адресов
Вs можете указать IP-адрес, которому будет разрешен доступ.
sudo ufw allow from 123.45.67.89
В приведенном примере указанному адресу разрешается доступ ко всем портам сервера.
Если же вы хотите указать доступ к конкретному порту, воспользуйтесь командой вида:
sudo ufw allow from 123.45.67.89 to any port 22
Аналогичным образом вы можете работать с диапазонами IP-адресов:
sudo ufw allow from 123.45.67.89/24 sudo ufw allow from 123.45.67.89/24 to any port 22
Ограничение подключений
Чтобы запретить HTTP-соединения, вы можете использовать следующую команду:
sudo ufw deny http
Если вы хотите запретить все соединения с 123.45.67.89, воспользуйтесь следующей командой:
sudo ufw deny from 123.45.67.89
Удаление правил
Существует два способа удаления правил. Первый — по номеру правила. Выполните команду:
sudo ufw status numbered
Status: active To Action From -- ------ ---- [ 1] 22 ALLOW IN Anywhere [ 2] 80 ALLOW IN Anywhere [ 3] 22 (v6) ALLOW IN Anywhere (v6) [ 4] 80 (v6) ALLOW IN Anywhere (v6)
После этого выполните команду ufw delete и укажите номер правила, которое следует удалить:
sudo ufw delete 2
Второй способ заключается в том, что после команды ufw delete используется фактическое правило, например:
sudo ufw delete allow http
sudo ufw delete allow 80
Отключение UFW
Отключить UFW можно при помощи команды:
sudo ufw disable
В результате ее выполнения все созданные ранее правила утратят силу.
Сброс правил
Если вам требуется сбросить текущие настройки, воспользуйтесь командой:
sudo ufw reset
В результате ее выполнения все правила будут отключены и удалены.
Логи
В Ufw есть опция сохранения логов — журнал событий. Для запуска, используйте команду:
sudo ufw logging on
Ufw поддерживает нескоько уровней логгирования:
- off — отключен.
- low — регистрирует все заблокированные пакеты, не соответствующие заданной политике (с ограничением скорости), а также пакеты, соответствующие зарегистрированным правилам.
- medium — все то, что при значении low. Плюс все разрешенные пакеты, не соответствующие заданной политике, все недопустимые пакеты, и все новые соединения. Все записи ведутся с ограничением скорости.
- high — работает также как и medium. Плюс все пакеты с ограничением скорости.
- full — также как и high, но без ограниения скорости.
Чтобы задать уровень, укажите его как параметр:
sudo ufw logging high
По умолчанию используется уровень low.
Для просмотра файлов относящихся с логам ufw используйте команду:
ls /var/log/ufw*
Заключение
Теперь ваш фаервол имеет минимально необходимые настройки для дальнейшей работы. Далее удостоверьтесь, что все подключения используемые вашим веб-приложением также разрешены и заблокируйте те, в которых нет необходимости. Это снизит риски проникновения на ваш сервер и совершения хакерами вредоносных действий.
Зарегистрируйтесь в панели управления
И уже через пару минут сможете арендовать сервер, развернуть базы данных или обеспечить быструю доставку контента.
Проверка конфигурации Firewall
После того, как вы разработали соответствующую конфигурацию firewall, важно убедиться, что она делает именно то, что нужно. Один способ сделать это состоит в том, чтобы использовать тестовый компьютер вне вашей сети для попытки проникнуть через firewall. Но это может быть медленно и ограничено только теми адресами, которые Вы можете использовать.
Более быстрый и простой метод доступен в реализации Linux firewall. Он позволяет Вам вручную генерировать тесты и выполнять их через firewall точно так, как если бы Вы проверяли их с фактическими пакетами. Все варианты поддержки firewall ядром Linux (ipfwadm, ipchains и iptables) обеспечивают поддержку для этого стиля тестирования. Реализация включает использование соответствующей команды check.
Общая процедура теста следующая:
- Выберите тип firewall для использования: ipfwadm, ipchains или iptables.
- Разработайте ряд тестов, которые определят, работает ли ваш firewall так, как нужно. Для этих тестов Вы можете использовать любой источник или адрес отправителя, так что выберите комбинации адресов, которые должны быть приняты и другие, которые должны быть отвергнуты. Если Вы принимаете или отвергаете только некоторые диапазоны адресов, хорошей идеей будет проверить адреса с обеих сторон границы диапазона: по одному внутри границы и снаружи. Это будет гарантировать, что Вы имеете правильные границы, потому что иногда просто определить неправильную маску подсети в конфигурации. Если Вы фильтруете в соответствии с протоколом и номером порта, тесты должны также проверить все важные комбинации этих параметров. Например, если Вы предполагаете принимать только TCP-пакеты, проверьте, что UDP-пакеты отклоняются.
- Разработайте правила для ipfwadm, ipchains или iptables, чтобы выполнить каждый тест. Вероятно, стоит записать все правила в скрипт, так что Вы можете проверять и перепроверять все без проблем по мере исправления ошибок или изменений проекта. Тесты используют почти тот же самый синтаксис, поскольку определяют правила, но в качестве параметров берут немного другие значения. Например, исходный параметр адреса в спецификации правила определяет исходный адрес, с которого должен придти пакет, который будет соответствовать этому правилу. Исходный параметр адреса в синтаксисе теста, напротив определяет исходный адрес тестового пакета, который будет сгенерирован. Для ipfwadm Вы должны использовать опцию -c , чтобы определить, что эта команда является тестом, в то время как для ipchains и iptables Вы должны использовать опцию -C . Во всех случаях Вы должны всегда определять исходный адрес, адрес получателя, протокол и интерфейс, которые нужно использовать для теста. Другие параметры, типа номера порта или битов TOS, являются факультативными.
- Выполните каждую команду теста и обратите внимание на вывод. Вывод каждого теста будет одним словом, указывающим конечного адресата пакета после его прохождения через firewall. Для ipchains и iptables определенные пользователем цепочки будут проверены в дополнение к встроенным.
- Сравните вывод каждого теста с желательным результатом. Если имеются расхождения, Вы будете должны анализировать набор правил чтобы определить, где вы сделали ошибку. Если Вы записали команды теста в файл скрипта, Вы сможете легко повторно выполнить тест после исправления ошибок в конфигурации firewall. Это гарантирует, что активная конфигурация, которую Вы проверяете фактически, отражает набор команд в скрипте конфигурации.
А теперь практика! Напишем тест правил для ipchains. Наша локальная сеть в примере имеет адрес 172.16.1.0 с маской сети 255.255.255.0. Мы разрешаем внешние TCP-соединения с нашими web-серверами. Ничего больше не должно работать напрямую. Начнем с передачи, которая точно должна работать (из нашей локальной сети):
# ipchains -C forward -p tcp -s 172.16.1.0 1025 -d 44.136.8.2 80 -i eth0 accepted
Заметьте, что в параметрах нужно передать и путь для описания пакета. Вывод команды указывает на то, что пакет был принят для пересылки, которая является именно тем, на что мы надеялись.
Теперь попробуйте другой тест, на сей раз с исходным адресом, который не принадлежит нашей сети. Этот должен быть отклонен:
# ipchains -C forward -p tcp -s 172.16.2.0 1025 -d 44.136.8.2 80 -i eth0 denied
Попробуйте несколько больше тестов, на сей раз с теми же самыми деталями, что и в первом тесте, но с различными протоколами. Они должны быть отклонены:
# ipchains -C forward -p udp -s 172.16.1.0 1025 -d 44.136.8.2 80 -i eth0 denied # ipchains -C forward -p icmp -s 172.16.1.0 1025 -d 44.136.8.2 80 -i eth0 denied
Попробуйте другой порт адресата, снова ожидая, что этот пакет должен быть отклонен:
# ipchains -C forward -p tcp -s 172.16.1.0 1025 -d 44.136.8.2 23 -i eth0 denied
Конечно, полная проверка дело трудное и долгое, порой столь же трудное, как и разработка правильной конфигурации firewall, но зато защита будет действительно надежной!
| Назад | Глобальное оглавление | Вперед |
| Управление битами TOS | Локальное оглавление | Пример конфигурации firewall |
Настройка Firewall Iptables для ОС Linux
Для новичков и продвинутых пользователей операционный системы Linux был разработан специальный межсетевой экран (так называемый «файрволл») для защиты от угроз извне, который носит имя Iptables. Ниже в инструкции мы объясним, как его установить и настроить на любых машинах под ОС Linux.
Что представляет собой Iptables
Данная утилита – это надежный межсетевой экран, минимизирующий риск вирусных и хакерских атак. Процесс настройки файрволла происходит через командную строку при помощи установленных команд, которые позволяют юзеру самостоятельно контролировать поступление и отправление трафика. При попытке установки соединений с ПК, утилита обращается к своим правилам и проверяет, пропустить или ограничить соединение. В случае, когда никакого конкретного правила не выставлено, действия проходят по умолчанию.
Файрволл предусмотрен стандартно во всех операционных системах семейства Линукс. Для установки, если его внезапно не оказалось в сборке, или обновления следует применить такую команду:
sudo apt-get install iptables
Альтернативой данной утилите может послужить Firestarter – он имеет графический интерфейс и разработан специально для пользователей, которые испытывают трудности с работой через командную строку.
В случае настроек Iptables по удаленному SSH-соединению, пользователю следует проявлять аккуратность: одно ошибочное правило способно прервать подключение и запретить юзеру доступ к удаленной машине.
Какие бывают правила
Для легкой работы с файрволлом разработана тройка основных правил (команд):
1.Input.
Правило применяется, когда необходимо контролировать входящий трафик. Например, когда юзер подключается к удаленному серверу по протоколу Secure Shell, файрволл начнет сравнивать его IP с другими IP из своего списка. В зависимости от результата, то есть от наличия в списке запретов, доступ пользователю будет открыт или закрыт.
2.Forward.
Правило применяется в случаях, когда необходимо проверить входящее сообщение, проходящее через данный компьютер. Например, маршрутизатор постоянно пересылает сообщения к адресату от сетевых пользователей или приложений. Зачастую данное правило не используется, если только юзер целенаправленно не настраивает маршрутизацию на своем устройстве.
3.Output.
Правило применяется к исходящим соединениям. Например, юзер хочет проверить пинг к одному из заданных сайтов – утилита вновь сверится со своими правилами из списка и определит, как поступить при пинге веб-сайта: разрешить или запретить.
Делая ping к внешнему хосту, машина не только отправляет пакет, но и дожидается обратного ответа. Поэтому, настраивая Iptables, не нужно забывать о наличии двухсторонних коммуникаций и запрещать подключение к серверам через протокол SSH.
Как определиться с назначением файрволла
Перед тем, как заниматься настройкой утилиты, потребуется разобраться с ее предназначением, а именно – действующими цепочками правил, то есть то, что она будет делать по умолчанию. Как отреагировать, когда запрашиваемые соединения не подходят ни к одному правилу?
Для начала потребуется понять, какие из настроек межсетевого экрана уже установлены. Для этого применяется команда –L:

Для четкого и понятного вывода информации можно воспользоваться дополнительной командой «grep». В итоге мы получаем тройку цепочек, у каждой из которых стоит разрешение приема трафика. Подобные правила предпочитают устанавливать при стандартной настройке.
Если в процессе эксплуатации Iptables конфигурация была кем-то изменена, значения могут стоять другие. Проверить это можно за пару секунд, достаточно ввести команды:
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
Что делать с соединением
Настроив поведение утилиты, которое будет происходить автоматически, следует приступать к правилам, обрабатывающим входящий/исходящий трафик. Основные способы взаимодействия с трафиком:
Accept – разрешение определенного соединения;
Drop – игнорирование запросов (межсетевой экран продолжает свое функционирование, будто никакого запроса не происходило, а запрашивающие ресурсы не узнают об игнорировании);
Reject – блокировка входящего трафика и отправка ответных сообщений с обозначением ошибки (в таком случае запрашивающие ресурсы будут уведомлены о блокировке их трафика).
Пример того, как будет выглядеть ping для
Разрешенного соединения (Accept):

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

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

Разрешение и блокировка указанных соединений Iptables
Как только политика отношения к трафику настроена, пора приступать к определению правил для конкретных соединений. Мы рассмотрим вариант с отклонением указанного подключения. Способы для разрешения и игнорирования будут устанавливаться похожим методом.
Воспользуемся командой –А. Она позволит добавить новое правило к уже имеющейся цепочке. Межсетевой экран начинает проверку с самого верха, проходя по каждому из правил до тех пор, пока не обнаружит совпадения или не закончит список.
В случае, когда необходимо разместить правила в определенное место (перед каким-то определенным), следует воспользоваться командой:
iptables -I [цепочка] [номер позиции по списку для нового правила]
Что делать с соединениями от одного IP
Для блокировки трафика, поступающего из одного и того же источника (например, IP 120.120.120.120) подойдет команда:
iptables -A INPUT -s 120.120.120.120 -j DROP
Для блокировки трафика, поступающего с нескольких IP в определенном диапазоне, следует воспользоваться стандартной записью масок посредством слэша:
iptables -A INPUT -s 120.120.120.0/24 -j DROP
Либо записью необходимого диапазона:
iptables -A INPUT -s 120.120.120.0/255.255.255.0 -j DROP
Подключения к определенному порту
Следующая команда сделает блокировку соединений типа Secure Shell с хостом 120.120.120.120:
iptables -A INPUT -p tcp —dport ssh -s 120.120.120.120 -j DROP
На месте Secure Shell допустимо применение любого протокола. После команды –р указывается тип подключений, в данном случае – TCP. В случае, когда используется другой тип, следует указывать его.
Любому IP будет запрещено подключаться к машине по Secure Shell соединению, если выполнить:
iptables -A INPUT -p tcp —dport ssh -j DROP
О состояниях соединения
Существует множество протоколов, которым требуется двусторонняя коммуникация. К примеру, пользователю понадобилось поработать с SSH-соединением, ему придется внести правило сразу и в Output, и в Input.
Что делать, если юзер хочет предоставить разрешение исключительно входящему соединению? В этом случае поможет состояние соединения. Оно даст возможность пользователю описать любую двустороннюю коммуникацию, в которой разрешено подключение заданного направления.
Разрешим соединение типа SSH, приходящее через хост 120.120.120.120. Система будет отправлять данные по этому протоколу только, если сессия установлена.
iptables -A INPUT -p tcp —dport ssh -s 120.120.120.120 -m state —state NEW,ESTABLISHED -j ACCEPT iptables -A OUTPUT -p tcp —sport 22 -d 120.120.120.120 -m state —state ESTABLISHED -j ACCEPT
Как сохранить изменения в конфигурации файрволла
После всех изменений, которые мы внесли в цепочку межсетевого экрана, понадобится их сохранение. Иначе перезапуск утилиты удалит проделанные нами настройки. Команда сохранения будет различаться от дистрибутива к дистрибутиву Linux.
Для Ubuntu команда выглядит так:
Как узнать какой фаервол установлен?
Студия Design Coda (http://www.designcoda.ru/). Личные контакты: +7(903)1367564, skype:andrey.oshemkov, telegram:@oshemkov. WMID: 492025973671 (https://passport.webmoney.ru/asp/certview4.asp?wmid=492025973671), делаем и рекламируем сайты, мобильные приложения, ботов для Telegram.
На сайте с 03.07.2006
5 марта 2007, 18:02
iptables — команда не найдена. Значит не он?
На сайте с 19.11.2006
5 марта 2007, 18:53
значит не стоит
На сайте с 01.12.2005
5 марта 2007, 19:24
rengen:
iptables — команда не найдена. Значит не он?
из-под root’а пробуете?
На сайте с 19.06.2006
5 марта 2007, 23:37
Либо пишите полный путь к команде:
# /sbin/iptables
либо для получения прав суперюзера пользуйтесь:
Именно с минусом!
На сайте с 03.10.2006
6 марта 2007, 10:59
Ugnich Anton:
Либо пишите полный путь к команде:
# /sbin/iptables
либо для получения прав суперюзера пользуйтесь:
Именно с минусом!
Не обязательно так, для перехода в режим рута достаточно выполнить утилиту su А так вообще можно попробовать #ps -ef | grep iptables #ps -ef | grep ipchains то что не находит iptables еще не говорит о том процесс не запущен на сервере
Социальный сервис нового поколения Dropp (http://dropp.ru)
На сайте с 03.07.2006
6 марта 2007, 12:15
всё решилось банально — отпала необходимость открывать порт 🙂 всем спасибо!
На сайте с 19.06.2006
6 марта 2007, 19:18
scazy:
Не обязательно так, для перехода в режим рута достаточно выполнить утилиту su
Попробуйте с минусом и без. После того, как зайдете, наберите просто «iptables». В чем разница — понятно?!
scazy:
А так вообще можно попробовать
#ps -ef | grep iptables
#ps -ef | grep ipchains
то что не находит iptables еще не говорит о том процесс не запущен на сервере
И что должно вывести? И какой процесс должен быть запущен?! С каких пор фаервол появляется в списке процессов?!