The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

Настройка ufw в Ubuntu
Начиная с версии Ubuntu 8.04 в ее состав по умолчанию включена новая упрощенная
оболочка для работы с файрволом - ufw (Uncomplicated firewall -
"незамысловатый" брэндмауер). Как известно Linux по умолчанию имеет очень
мощный встроенный сетевой фильтр - netfilter.

Стандартной утилитой для управления настройками netfilter является утилита
iptables. Ufw создан для того чтобы сделать более простым настройку
netfilter-а. По сути ufw - это скрипт, который получает команды в одном формате
и преобразует их в формат iptables.

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

Функционал ufw

Основными функциями файрвола ufw является:

1. Работа в одном из двух режимов: разрешено все кроме того что описано
правилами, запрещено все, кроме описанного правилами.
2. Создание правил для фильтрации пакетов с действиями allow, deny, reject
3. Создание правил с учетом адреса и порта получателя и отправителя, используемого протокола
4. Логирование пакетов подпадающих под правило
5. Блокировка частых неправильных попыток авторизации по ssh
6. Настраиваемые профили для приложений

Запуск ufw

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

   # ufw enable

Межсетевой экран активен и будет запущен при запуске системы

   # ufw disable

Файрвол остановлен и деактивирован при загрузке

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

   # ufw status [numbered]
   Status: active

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

Изменение политики по умолчания:

   # ufw default allow [in|out]
   # ufw default deny [in|out]
   # ufw default reject [in|out]

Где allow подразумевает что все пакеты будут пропущены, кроме тех, для которых
есть запрещающее правило: deny - все пакеты будут заблокированы, кроме
тех, для которых есть разрешающие правила; reject - все пакеты будут
заблокированы с соответствующим уведомлением подключающуюся сторону.

Параметры in|out указывают для какого направления мы хотим применять политику,
для входящих или исходящих пакетов соответственно.

Управление правилами осуществляется с помощью команд allow, deny, reject, delete, insert.

allow - добавить разрешающее правило

deny - добавить запрещающее правило (файрвол не предпринимает действий при попадании в это правило)

reject - добавить запрещающее правило (файрвол даст знать подключающемуся что этот порт закрыт)

limit - добавляет ограничивающее правило для указанного порта. В случае если с
одного и того же адреса в течении 30 секунд будет произведено 6 и более
неуспешных попыток авторизации в службу удаленного доступа ssh, ufw заблокирует
удаленный адрес.

delete - удалить добавленное ранее правило

insert - вставить правило в определенную позицию в цепочке

Построение правил файрвола

Конструкция построения правил

   ufw allow|deny|reject|limit [in|out on INTERFACE] [log|log-all] [proto protocol] \
   [from ADDRESS [port PORT]] [to ADDRESS [port PORT]]

Подробнее о параметрах:

allow|deny|reject|limit - указываем что будет делать это правило (см. описание выше).

[in|out on INTERFACE] - указываем будет это правило относится к входящему
трафику (in) или исходящему (out) и хотим ли мы ограничить данное правило
отдельным сетевым интерфейсом (к примеру eth0).

[log|log-all] - при желании можно логировать события которые подпадают под
правило. По умолчанию лог пишется в /var/log/syslog. При использовании опции
log - в файл будут записаны лишь пакеты участвующие при установке соединения с
сервером. Используя опцию log-all в лог файл будут записаны все пакеты
подпадающие под правило.

[proto protocol] - в правиле можно указать для какого протокола оно действует: tcp или udp.

[from ADDRESS [port PORT]] - адрес и порт источника пакета

[to ADDRESS [port PORT]] - адрес и порт получателя пакета

Профили приложений

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

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

   root@server:/etc/ufw/applications.d# pwd
   /etc/ufw/applications.d
   root@server:/etc/ufw/applications.d# ls -l
   -rw-r--r-- 1 root root 406 2009-11-13 00:52 apache2.2-common
   -rw-r--r-- 1 root root 145 2009-10-22 22:50 openssh-server
   -rw-r--r-- 1 root root 241 2009-09-22 16:52 postfix
  
Рассмотрим пример профиля приложения apache2.2-common:

   [Apache]
   title=Web Server
   description=Apache v2 is the next generation of the omnipresent Apache web server.
   ports=80/tcp
   [Apache Secure]
   title=Web Server (HTTPS)
   description=Apache v2 is the next generation of the omnipresent   Apache web server.
   ports=443/tcp
   [Apache Full]
   title=Web Server (HTTP,HTTPS)
   description=Apache v2 is the next generation of the omnipresent Apache web server.
   ports=80,443/tcp

В одном файле может находится несколько профилей. В данном примере 3: Apache,
Apache Secure, Apache Full. Структура записей проста: сначала имя профиля в
квадратных скобка ([Apache Full]), далее развернутое наименования приложения,
далее описание приложения и список портов с указанием протокола которые
задействованы в профиле (80,443/tcp).

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

   # ufw app list

Доступные приложения:

   Apache
   Apache Full
   Apache Secure
   OpenSSH
   Postfix
   Postfix Submission

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

   # ufw app info OpenSSH
   |Профиль: OpenSSH
   |Название: Secure shell server, an rshd replacement
   |Описание: OpenSSH is a free implementation of the Secure Shell
protocol.
   |Порт: 22/tcp

После добавления или изменения профиля приложения (в файле) необходимо дать
знать файрволу о новом профиле:

   # ufw app update OpenSSH

Для того чтобы новый профиль сразу вступил в силу, необходимо добавить опцию --add-new:

   # ufw app update --add-new OpenSSH

По умолчанию добавленные с помощью --add-new профили не будут обрабатываться
файрволом. Рекомендуется вначале задать политику для новых профилей приложений:

  ufw app default allow|deny

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

Использовать профили приложений можно также при создании обычных правил, например:

  # ufw allow OpenSSH

Настройка профиля безопасности

1. Ограничение входящих подключений к FTP и Веб серверу
Пример настройки файрвола для ситуации, когда необходимо заблокировать доступ к
FTP и Веб серверу с адреса 192.168.100.100. В примере 192.168.1.11 - сервер на
котором настраивается файрвол:

   # ufw deny proto tcp from  192.168.100.100 to 192.168.1.11 port 21,80

Правило добавлено

   # ufw status
   |Статус: активно
   |До Действие От
   ---- --------------------
   192.168.1.11 21,80/tcp DENY 192.168.100.100

Теперь при попытках подключения с хоста 192.168.100.100 к 21 или 80 порту хоста
192.168.1.11 клиент будет висеть пока не отвалится по таймауту.

Удалим это правило и добавить аналогичное но с действием reject:

   # ufw delete deny proto tcp from 192.168.100.100 to 192.168.1.11 port 21,80
   # ufw reject proto tcp from 192.168.100.100 to 192.168.1.11 port 21,80

Теперь при попытке подключения к 21 порту сервера удаленный клиент получит
ответ Connection refused:

   $ telnet 192.168.1.11 21
   Trying 192.168.1.11...
   telnet: Unable to connect to remote host: Connection refused

Просканируем порты сервера:

   # nmap -sT 192.168.1.100
   Starting Nmap 5.00 ( http://nmap.org ) at 2009-12-28 22:56 EET
   Interesting ports on 192.168.1.100:
   Not shown: 992 closed ports
   PORT STATE SERVICE
   21/tcp filtered ftp
   22/tcp open ssh
   80/tcp filtered http
   139/tcp open netbios-ssn
   445/tcp open microsoft-ds
   2323/tcp open unknown
   3128/tcp open squid-http
   5900/tcp open vnc
   MAC Address: 00:18:F3:67:85:9E (Asustek Computer)
   Nmap done: 1 IP address (1 host up) scanned in 17.52 seconds

2. Ограничение исходящих подключений к указанному серверу

Цель - запретить исходящие подключения с сервера к адресу 195.214.195.105:

   # ufw deny proto tcp to 195.214.195.105

3. Ограничение попыток авторизации по ssh
   # ufw limit 22

Произведем несколько попыток подключения к 22 порту сервера с введением
заведомо неправильного пароля:

   $ ssh 192.168.1.100
   user@192.168.1.100's password:
   Permission denied, please try again.
   ...
   $ ssh 192.168.1.100
   ssh: connect to host 192.168.1.100 port 22: Connection refused

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

   Dec 28 22:59:13 fortress kernel: [273659.578463] [UFW LIMIT BLOCK] 
      IN=eth0 OUT= MAC=00:18:f3:67:85:9e:00:26:5e:46:40:86:08:00 
      SRC=192.168.1.156 DST=192.168.1.100 LEN=60 TOS=0x00 PREC=0x00 
      TTL=64 ID=3150 DF PROTO=TCP SPT=33783 DPT=22 WINDOW=5840 RES=0x00 SYN URGP=0

4. Логирование пакетов

   # ufw allow log 22

С помощью этого правила файрвол будет логировать пакеты установки соединиения
по указанному 22 порту. В логах появятся следующие записи:

   Dec 28 23:04:18 fortress kernel: [273964.364715] [UFW ALLOW] IN=eth0 
    OUT= MAC=00:18:f3:67:85:9e:00:26:5e:46:40:86:08:00 
    SRC=192.168.1.156 DST=192.168.1.100 LEN=60 TOS=0x00 PREC=0x00 
    TTL=64 ID=6564 DF PROTO=TCP SPT=58069 DPT=22 WINDOW=5840 RES=0x00 SYN URGP=0
 
15.02.2010 , Автор: Eugene Shelepov , Источник: http://chooselinux.org.ua/nastrojka...
Ключи: ufw, iptables, ubuntu
Раздел:    Корень / Администратору / Сетевая подсистема, маршрутизация / Пакетные фильтры и фаерволы / Пакетные фильтры в Linux: iptables, ipchains

Обсуждение [ RSS ]
  • 1.1, Salvator (?), 16:35, 17/02/2010 [ответить]  
  • +/
    отлично, синтаксис не такой наркоманский, как у iptables - на ipfw похож чем-то
     
     
  • 2.2, минона (?), 04:53, 18/02/2010 [^] [^^] [^^^] [ответить]  
  • +/
    удобно конечно.
    есть и гуй к нему.
    вот только и 10% не может от всех возможностей iptables. для десктопа конечно сойдёт.
     

  • 1.3, Manefesto (?), 09:46, 18/02/2010 [ответить]  
  • +/
    мне тоже показалось что смахивает на ipfw
     
  • 1.4, бугага (?), 02:09, 19/02/2010 [ответить]  
  • +/
    непонятно, зачем изобретать велосипед, когда есть весма несложный но более гибкий shorewall
     
     
  • 2.5, Dmitriy (??), 11:36, 20/02/2010 [^] [^^] [^^^] [ответить]  
  • +/
    Раз в жизни использовал ГУИ к IPTables в итоге получил геморой после каждого перезапуска... так что считаю, что для Гнома есть Firestarter отлично и, главное, просто работает для простых обывателей... что-то Каноникл в последнее время на велосипеды потянуло...
     

  • 1.6, Bart (?), 14:26, 21/02/2010 [ответить]  
  • +/
    gufw хороший GUI к ufw, для лаптопа или домашнего компьютера самое оно...
     
  • 1.7, Александр (??), 21:14, 08/04/2011 [ответить]  
  • +/
    не подскажете учебник для ламера к iptables?
     
  • 1.8, Анимешка (?), 22:00, 07/03/2017 [ответить]  
  • +/
    Вот с этого надо начинать. А потом iptables с усердным изучанием вечерами!
     

     Добавить комментарий
    Имя:
    E-Mail:
    Заголовок:
    Текст:




    Партнёры:
    PostgresPro
    Inferno Solutions
    Hosting by Hoster.ru
    Хостинг:

    Закладки на сайте
    Проследить за страницей
    Created 1996-2024 by Maxim Chirkov
    Добавить, Поддержать, Вебмастеру