См. также мой перевод man UFW.
Ядро linux содержит подсистему (модуль) Netfilter, которая используется для управления пакетами приходящими на или проходящими через ваш сервер. Все современные брандмауэры используют эту систему для фильтрации tcp пакетов. Эта система без интерфейса управления ей мала полезна для администратора. Для управления используется iptables. При получении пакетом вашим сервером, он передается Netfilter для принятия им решения: принять, обработать, или отбросить его на основе правил заданных с помощью iptables. Таким образом, iptables это все, что нужно для управления брандмауэром, если вы знакомы с ним, но существует множество программ для упрощения управления iptables.
В Ubuntu для управления брандмауэром по умолчанию используется ufw. Он разработан для упрощения управления iptables, ufw предоставляет простой механизм для создания правил фильтрации пакетов IPv4 или Ipv6.
ufw после установки отключен. Выдержка из 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.
(UFW не намерен предоставить полную функциональность брандмауэра через интерфейс командной строки, но вместо этого предоставляет простой способ добавлять или удалять простые правила. В настоящее время он используется как основа управлением брандмауэра)»
Ниже приведены примеры использования ufw:
Вопервых, необходимо включить ufw. Наберите в командной строке: sudo
ufw enable
Открыть порт (для примера ssh ): sudo ufw allow 22
Аналогично, чтобы закрыть доступ к порту: sudo
ufw deny 22
Для удаления правила, используйте правило delete: sudo
ufw delete deny 22
Возможно разрешить доступ для определенных хостов или сетей.
Следующий пример показывает как разрешить доступ хосту с ip адресом
192.168.0.2 на хост с любым ip по протоколу ssh: sudo
ufw allow proto tcp from 192.168.0.2 to any port 22.
Если
заменить 192.168.0.2
на 192.168.0.0/24
то мы разрешим протокол ssh для любого хоста этой локальной сети.
При указании опции the --dry-run будет выводить результат
применения правила, но применяться они не будут. Например, при вводе
команды : sudo
ufw --dry-run allow http
будет показана цепочка применяемых
правил для открытия порта HTTP.
ufw можно отключить: sudo
ufw disable
Для просмотра состояния брандмауэра, наберите: sudo
ufw status
Для вывода дополнительной информации о состоянии используйте: sudo
ufw status verbose
Если порт который вы хотите открыть или закрыть определен в файле
/etc/services, вы можете указывать текстовое имя порта вместо его
номера. Например, в приведенных выше примерах, замените 22
на ssh
.
Здесь мы привели поверхностное описание использования ufw.
Обратитесь к man
ufw
чтобы
получить более подробную информацию.
Порты которые необходимо открыть для работы с некоторыми приложениями могут храниться в профилях ufw , в которых перечислены порты необходимые для функционирования программы.. Профили хранятся /etc/ufw/applications.d, их можно изменить если порты по умолчания были изменены.
Чтобы посмотреть профили для каких приложений установлены,
наберите в командной строке: sudo
ufw app list
Использование правил с профилями аналогично использованию правил
открытия портов: sudo
ufw allow Samba
Также доступен расширенный синтаксис: ufw
allow from 192.168.0.0/24 to any app Samba
Замените Samba
и 192.168.0.0/24
профилем нужного вам приложения и адресом вашей сети. Нет необходимости
указывать протокол для приложения, так как эта информация содержится в
профиле ufw, имя приложения(имя профиля) заменяет номер порта при вводе
правил.
Для просмотра детальной информации о портах, протоколах и т.п. -
которые описаны в профиле, наберите: sudo
ufw info Samba
Не все программы которые требуют для своей работы
открытия портов поставляются с профилями ufw, но если у вас есть
собственные профили для ваших программ и вы хотите включить их
официальные пакеты, то пожалуйста отпишитесь в соответствующий проект
на Launchpad.
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. Это возможно благодаря тому что iptables является back-end для ufw, конфигурационные правила которого расположены в файлах /etc/ufw/*.rules. Эти файлы содержат настройки для правил iptables, и могут содержать правила для настройки сетевых шлюзов и мостов.
Файлы разделяются на два вида, правила которые выполняются до и после выполнения команд ufw.
Во первых , необходимо включить
пересылку пакетов. Для этого убедитесь, что в файле /etc/default/ufw
параметру DEFAULT_FORWARD_POLICY
присвоено значение “ACCEPT”
:
DEFAULT_FORWARD_POLICY="ACCEPT"
В файле /etc/ufw/sysctl.conf уберите комментарий из строчки:
net.ipv4.ip_forward=1
net.ipv6.conf.default.forwarding=1
Далее необходимо в начало файла (после начальных коментариев) /etc/ufw/before.rules добавить правила:
#nat Table rules
*nat
:POSTROUTING ACCEPT [0:0]
#Forwardtraffic from eth1 through eth0.
-A POSTROUTING -s 192.168.1.0/24 -o eth0 -j MASQUERADE
#don't delete the 'COMMIT' line or these nat table rules won't be processed
COMMIT
Учтите, что после изменений правил в фалах /etc/ufw, вы должны добавлять команду commit
#
don't delete the 'COMMIT' line or these rules won't be processed
COMMIT
После изменений перезапустим ufw:
sudo
ufw disable && sudo ufw enable
Маскарадинг должен включиться. Вы также можете добавлять
любые дополнительные FORWARD правила в /etc/ufw/before.rules.
It is recommended that these additional rules be added to the
ufw-before-forward chain.
Стандартный для linux метод, включения masquerading через iptables
Как и для ufw, первый шаг включение пакетной пересылки. В файле /etc/sysctl.conf расскомментируйте строки:
net.ipv4.ip_forward=1
net.ipv6.conf.default.forwarding=1
затем , выполните команду sysctl для принятия изменений:
sudo
sysctl -p
sudo
iptables -t nat -A POSTROUTING -s 192.168.1.0/16 -o eht0 -j
MASQUERADE
sudo
iptables -A FORWARD -s 192.168.1.0/16 -o eth0 -j ACCEPT
sudo
iptables -A FORWARD -d 192.168.1.0/16 -m state --state
ESTABLISHED,RELATED -i eth0 -j ACCEPT
Чтобы все это работало после перезагрузки необходимо добавить эти команды в файл /etc/rc.local. Настройки хорошо описаны в различных источниках о linux, поэтому не буду их комментировать.
Журналы брандмауэра имеют важное значение для обнаружения признаков «взлома», ошибок в написании правил и обнаружении необычного поведения вашей сети.. Вам необходимо создать правила, чтобы эти события попадали в журнал, так же рекомендуется отслеживать в логах поведение создаваемых новых правил, а также рекомендуется протоколировать любые правила которые решают судьбу пакета (такие как ACCEPT, DROP, или REJECT).
Если вы используете ufw, вы должны включить протоколирование командой:
sudo
ufw logging on
Для выключения протоколирования, просто замените on
на off
в этой команде.
При использовании iptables:
sudo
iptables -A INPUT -m state
--state NEW -p tcp --dport 80 -j LOG --log-prefix "NEW_HTTP_CONN:
"
При получении пакета через порт 80 (HTTP) от локальной машины, будет создана запись в журнале событий, похожая на эту:
[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 является сервером пользовательского уровня, который «слушает» сообщения протоколирования событий получаемых от ядра, и может сохранять их в любой файл, или в базы данных PostgreSQL или MySQL . Для более легкого анализа содержимого журналов используйте инструмменты анализа, такие как fwanalog, fwlogwatch, или lire.
Есть множество инструментов помогающие вам в настройке брандмауэра без знания iptables. C GUI интерфейсом:
Довольно популярный и простой в использовании Firestarter
Очень мощный fwbuilder, будет напоминать системы администраторам работающих с другими комерческими системами , например как Checkpoint FireWall-1.
Если вы предпочитаете инструменты командной строки с текстовыми конфигурационными файлами:
Shorewall очень мощное решение, чтобы помочь вам настроить брандмауэр для любой сети.
ipkungfu работающий брандмауэр "из коробки", также позволяющий вам с легкостью создать сложные правила, отредактировав простой, хорошо документированные конфигурационные файлы.
Fireflier предназначен для desktop применения . Он состоит из сервера (fireflier-сервер), и выбранного вами клиента GUI (GTK или QT), и напоминает другие популярные брандмауэры для Windows
Ubuntu Firewall вики-страница содержит информацию о развитии UFW.
Кроме того, руководство UFW содержит очень полезную информация: man UFW.
См. пакетной фильтрации-HOWTO для более подробной информации об использовании iptables.
В NAT-HOWTO содержит более подробную информацию о маскарадинге.