- Подписка на печатную версию:
- Подписка на электронную версию:
- Подшивки старых номеров журнала (печатные версии)
LXF139:DrBrown2
Материал из Linuxformat.
Несложный брандмауэр
- Вот как Ubuntu избавляет нас от бремени настройки правил брандмауэра.
Код сетевого фильтра в ядре Linux просеивает сетевые пакеты, приходящие к компьютеру, уходящие от компьютера и проходящие через компьютер, и предоставляет мощный механизм для создания брандмауэров. Однако у команды Iptables, используемой для построения правил, богатый синтаксис, и настройка брандмауэра на этом уровне требует глубоких знаний TCP/IP. Чтобы упростить ситуацию, в Ubuntu добавили утилиту ufw (uncomplicated firewall, несложный брандмауэр) для серверов. Она предназначена для создания брандмауэров, защищающих компьютер, где они запущены, а не для полноценных брандмауэров с множественными подключениями ко внешним сетям, демилитаризованными зонами и т. п. Синтаксис ufw прост – чтобы открыть порт (в данном случае SSH), скомандуйте
sudo ufw allow 22
Если порт указан в /etc/services, вместо номера порта можно указать имя сервиса:
sudo ufw allow ssh
Чуть более искусным образом можно получить более точный контроль. Следующей командой мы разрешаем SSH доступ с одного диапазона IP-адресов:
sudo ufw allow ssh allow proto tcp from 192.168.0.0/24 to any ssh
В последних версиях ufw можно ограничить частоту передачи пакетов – это сильно помешает хакерам, пытающимся получить информацию методом грубой атаки. Аналогичный вызов Iptables довольно громоздок, а с ufw все просто и ясно:
sudo ufw limit ssh/tcp
По умолчанию ufw применит правила ко всем доступным интерфейсам, но можно указать и конкретный интерфейс. Например, разрешит HTTP-соединения, прибывающие на eth0, команда
sudo ufw allow in on eth0 to any port 80 proto tcp
Это позволяет создавать брандмауэры, скажем, с одним соединением вовнутрь, к доверенной сети, и одним соединением вовне, в большой (недоверенный) мир. Весь набор правил можно активировать или деактивировать командами
sudo ufw enable sudo ufw disable
а его текущее состояние получить так:
$ sudo ufw status verbose Status: active Logging: on (low) Default: deny (incoming), allow (outgoing) New profiles: skip To Action From -- ------ ---- 22 ALLOW IN Anywhere
Наборы правил, задаваемых этими командами, являются постоянными, и пока ufw активна, правила будут автоматически устанавливаться во время загрузки.
Последняя возможность ufw называется интеграцией приложения. Пакеты, предоставляющие сетевые сервисы (а стало быть, им нужны открытые порты в брандмауэре) могут сообщить о себе ufw, положив профиль в каталог /etc/ufw/applications.d. Например, в файле /etc/ufw/applications.d/cups задан профиль для сервера печати CUPS, таким образом:
[CUPS] title=Common UNIX Printing System server description=CUPS is a printing system with support for IPP, samba, lpd, and other protocols. ports=631
С этим файлом мы можем открыть порты, необходимые CUPS:
sudo ufw allow CUPS
За кулисами
Опция --dry-run даст вам хорошее представление о том, что происходит «за кулисами» ufw. Она покажет цепочки, создаваемые командой ufw, без их фактического создания.
А в файлах /etc/ufw/*.rules вы найдете соответствующие правила Iptables, созданные ufw. Это позволит вам расширить команду, добавив в эти файлы свои правила. Например, можно включить преобразование сетевых адресов (NAT), немного поколдовав в /etc/ufw/before.rules. Вам понадобится нечто вроде
-A POSTROUTING -s 10.0.0.0/24 -o eth0 -j MASQUERADE
Здесь 10.0.0.0/24 – диапазон IP-адресов компьютеров, которые нужно маскировать, а eth0 – внешний интерфейс.
Запасной ключ
Если вы настраиваете брандмауэр на удаленной машине, к которой у вас есть доступ только через SSH, нетрудно заблокировать себя самого, создав набор правил, запрещающий ваш же SSH-трафик. Получить какие-то шансы на выход из положения поможет такая команда:
sudo at now + 5 min ufw disable