Коротко о файрволлах
ubuntu
ufw
1 053 | Ноя 28, 2012 | Alan Holt | 4 Comments | How-to, Безопасность
Файрволлы это тема для диссертации, а не для статьи в блоге, но кое-что все таки можно написать и помочь соискателям защитить свои сервера. И не важно будь то сервер дома или на работе. В статье я приведу самые популярные примеры использования стандартных (и не совсем) средств защиты для дома и малого бизнесса, а именно это пару примеров про IPtables, пару примеров про его fronted в Ubuntu — ufw (UncomplicatedFirewall) и совсем немного поговорим об отдельных свободных решениях, в частности Monowall. В статье будут примеры для Ubuntu Server 12.04, Debian Server и Fedora 17 Linux. Далее полезные примеры на все случаи жизни. Поехали
UFW
Начнем пожалуй с простого. Самым простым в теме, будет начать с Uncomplicated Firewall для Ubuntu Server 12.04.1 Реально все просто и понятно. Как мы уже знаем по умолчанию IPtables отключен в Ubuntu. Для тех кто еще не понял, или не внимательно читал повторюсь ufw это надстройка (fronted ) для IPtables.
Прежде чем начать закрывать или открывать что-либо нужно определится с политиками по умолчанию. Обычно политика защиты по умолчанию такая:
- Allow all outgoing connections (разрешить ВСЕ исходящие)
- Allow established connections (разрешить ВСЕ установленные)
- Deny all incoming connections (запретить ВСЕ входящие, т.е. все кроме того что мы откроем должно пресекаться на корню без суда и следствия)
Начать стоит с трех простых вышеописанных правил:
Первое правило запрещает ВСЕ входящие соединения. Второе правило разрешает ВСЕ исходящие соединения. Третье правило гласит — нужно вести логи =)
Если работаете по удаленке с сервером (через SSH) то можете не боятся вводить эти правила, пока вы не включите файрвол правила не активируются.
Теперь когда есть стандартные политики, можно начать открывать нужные нам порты, адреса, сети, протоколы и т.д.
Я работаю на домашнем сервере с внешним IP. На сервере крутится много сервисов:
-
- Web Server
-
- MySQLPHP
-
- SSH
-
- SAMBA
-
- NFS
-
- FTP
-
- Webmin
-
- Облачный сервис (OwnCloud)
-
- Система видео наблюдения motion со своим маленьким web-server’ом
Первое, что-бы иметь доступ к серверу нужно открыть SSH (порт 22):
Открыть миру доступ к 80 порту
Открыть доступ миру к порту 10000 (Webmin)
Я этого не делал, а открыл адрес только для IP с работы:
ПРИМЕР:
Для системы видео наблюдения motion также открыл доступ только с работы:
ПРИМЕР:
Теперь можно активировать ufw и заодно проверить его статус:
Более полный вывод инфы:
ВЫВОД:
root@server:/home/user# ufw status verbose
Status: active
Logging: on (low)
Default: deny (incoming), allow (outgoing)
New profiles: skip
To Action From
-- ------ ----22/tcp ALLOW IN Anywhere
80/tcp ALLOW IN Anywhere
10000 ALLOW IN 49.156.47.255
8081 ALLOW IN 49.156.47.255
22/tcp ALLOW IN Anywhere (v6)80/tcp ALLOW IN Anywhere (v6)
Как видно выше вывод информации полный, аккуратный и исчерпывающий.
ОДНАКО, из вывода видно что порты 22 и 80 открыты так же и для протокола 6-ый версии. Непорядок! Первое что нужно сделать, если конечно вы не пользуетесь IPv6, отключить его поддержку в системе:
Теперь впишите туда:
# IPv6 disable
net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1
net.ipv6.conf.lo.disable_ipv6 = 1
Загрузите новые настройки:
На всякий случай перезапустите систему:
Теперь когда поддержка ipv6 отключена в системе, нужно отрубить ее в настройках ufw что-бы зря глаза не мазолило, открываем файл /etc/default/ufw:
Там ищем опцию: IPV6=yes
и понятное дело меняем на: IPV6=no
Рестартуем файрвол:
И смотрим статус:
root@server:/home/user# ufw status verbose
Status: active
Logging: on (low)
Default: deny (incoming), allow (outgoing)
New profiles: skip
To Action From
-- ------ ----22/tcp ALLOW IN Anywhere
80/tcp ALLOW IN Anywhere
10000 ALLOW IN 49.156.47.255
8081 ALLOW IN 49.156.47.255
IPv6 пропал из виду.
ПРИМЕРЫ
Теперь давайте пробежимся по примерам, для общего развития:
Включить ufw:
Выключить ufw:
Проверить статус:
Открыть порт:
Открыть для протокола tcp:
Закрыть порт 53 для протокола UDP:
Закрыть порт полностью:
Посмотреть список сервисов:
Открыть определенный порт для определенного IP:
Включить ведение логов:
Сбросить все правила:
Удалить существующее правило:
Открыть все для специфичного IP:
Открыть доступ пакетов с целой подсети:
Отключить пинг:
Там найти строки:
# ok icmp codes-A ufw-before-input -p icmp --icmp-type destination-unreachable -j ACCEPT
-A ufw-before-input -p icmp --icmp-type source-quench -j ACCEPT
-A ufw-before-input -p icmp --icmp-type time-exceeded -j ACCEPT
-A ufw-before-input -p icmp --icmp-type parameter-problem -j ACCEPT
-A ufw-before-input -p icmp --icmp-type echo-request -j ACCEPT
В каждой строчке, слово ACCEPT заменить на DROP.
Разрешить доступ к MySQL с вашей локальной сети:
Открыть MySQL миру:
У вас на серврере есть торрент? Открываем так (Transmission):
Обезопасить SSH, а именно от брут форса (brute-force) ufw будет запрещать соединения если IP сделал 6ть или более попыток установить соединение в течении 30 секунд.
или с логами (в том случае если ведение логов в общем выключено):
Если на сервере больше чем один интерфейс, то полезно разрешать сервис или порт не для всех интерфейсов (так ufw делает по дефолту) а только для того интерфейса, который к примеру слушает ваш веб сервер:
Посмотреть номера правил:
Открыть FTP для мира (не делайте так):
Открыть FTP для спец IP (уже лучше):
Но помним про активный и пассивный режим FTP соединения. В данном случае речь идет об АКТИВНОМ соединении. Это значит, что если ваш клиент открывает соединение с своего порта 1024+ на порт 21 на сервере, инфушка вернется клиенту на 20 порт и проскочит без проблем.
В противном случае (ПАССИВНЫЙ режим) сервер у себя откроет 20 порт а к клиенту ломанется на 1024+ порт ну и понятно там его обламает ufw.
Думаю что-бы понять что к чему я привел достаточно примеров. В данной статье получилось слишком много текста и что-бы не отпугивать читателя и не утомлять, я решил сделать цикл статей. Эта будет первой, в следующей рассмотрим работу чистого IPtables в кратце и посмотрим пару занимательных примеров для Debian & Fedora. Удачи!
Многое подчерпнул тут: http://manpages.ubuntu.com/manpages/precise/en/man8/ufw.8.html