Ipfw как посмотреть бан лист
Перейти к содержимому

Ipfw как посмотреть бан лист

FreeBSD: ipfw + таблицы

/sbin/ipfw -q add 201 allow all from any to any 22
/sbin/ipfw -q add 202 allow all from any 22 to any
/sbin/ipfw -q add 203 allow all from any to any 21
/sbin/ipfw -q add 204 allow all from any 21 to any
/sbin/ipfw -q add 307 allow all from any to any 80
/sbin/ipfw -q add 308 allow all from any 80 to any
/sbin/ipfw -q add 60000 deny ip from any to any

Файл разрешенных AllowUserIps :
192.168.1.3
192.168.1.4
192.168.1.5

Теперь добавим данные в файлик запрета:
host vk.com | grep 'has address' | cut -d ' ' -f 4 > /etc/BlockIps
host odnoklassniki.ru | grep 'has address' | cut -d ' ' -f 4 >> /etc/BlockIps

Перезапускаем ipfw на FreeBSD:
/etc/rc.d/ipfw restart

Просмотр таблицы:
ipfw table 1 list

Добавление и удаление хоста\сети из таблицы:

ipfw table 1 add 1.1.1.1/32
ipfw table 1 delete 1.1.1.1/32
ipfw table 1 add 1.1.1.1
ipfw tabe 1 delete 1.1.1.1

Файрвол IPFW в ОС FreeBSD

Привет всем, кому интересна ОС FreeBSD! После летне-отпускного отсутствия начинаю новый цикл статей. Надеюсь, будет занимательно и полезно.

Для тех, кто тут впервые, поясню, что являюсь разработчиком российского Интернет-шлюза Интернет Контроль Сервер, реализованного на базе FreeBSD. А потому, изнанка этой операционки, ее фишки и тонкости администрирования — то, с чем я сталкиваюсь ежедневно и делюсь с вами.

В предыдущей серии статей мы рассмотрели файрвол PF. Оценили возможности и настроили его для разных ролей. В новом цикле сделаем то же для файрвола IPFW. Как и с PF, начнем с краткого обзора и создания простой конфигурации для защиты веб сервера. В следующий статьях будем погружаться и усложнять конфигурацию постепенно, вводя новые типы правил и добавляя «мяса».

Ipfirewall — open source модуль, портированный на многие ОС. В этом списке FreeBSD, NetBSD, OpenBSD, SunOS, HP/UX и Solaris, Mac OS и даже Windows. Кроме того, часто используется для различных встраиваемых систем. Впервые появился в FreeBSD версии 2.0.

обработчик правил на уровне ядра, включающий систему учета пакетов

ipstealth (механизм редактирования TTL полей, защита от traceroute)

основанные на ALTQ средства управления QoS

механизмы управления пропускной способностью

основанная на таблице маршрутов система анти-спуффинга

встроенный NAT, PAT и LSNAT

поддержка IPv6 (с некоторыми ограничениями)

ipfw — пользовательская утилита для управления ipfirewall. С помощью этой утилиты происходит взаимодействие с модулем ядра. В дальнейшем я буду использовать ipfw и как имя утилиты, и как сокращение названия ipfirewall, для краткости и простоты, ну и просто потому, что так принято на просторах Интернета.

В ipfw конфигурация состоит из пронумерованных правил. Пакет проходит по правилам, начиная с меньшего номера к большему, до первого действия (к примеру allow или deny), после чего обработка прекращается. Чем-то похоже на iptables в Linux.

Управление и полезные настройки

Для включения ipfw в rc.conf необходимо добавить следующие строки:

ipfw с пустой конфигурацией по умолчанию блокирует все соединения. Чтобы не потерять доступ к серверу дополнительно нужно добавить в rc.conf

Эта строка укажет ipfw добавить в конфигурацию строку

ipfw list # вывод всех правил

ipfw -d list # вывести все правила, включая динамические

ipfw -de list # вывести все правила, включая динамические, в том числе истёкшие

ipfw -t list # вывести все правила, второй колонкой — время последнего совпадения

ipfw -a list # вывести все правила, второй и третьей колонкой будут счетчики входящих и исходящих совпадений

Добавление правил происходит командой

Добавить простое правило, под номером 100, разрешающее весь трафик на всех интерфейсах

Структура правил, основные параметры

Общая структура правила не отличается особой сложностью:

Номер — порядковый номер правила, предпочтительно в конфигурации использовать номера не подряд, это позволит без проблем добавлять правила во время работы файрвола. Возможно добавление нескольких правил под одним номером. В этом случае они будут срабатывать в порядке добавления и ipfw delete удалит их все.

Действие назначенное совпавшему пакету. В этой статье мы рассмотрим

Эти действия равнозначны. Пропустить пакет, обработка завершается. Я буду использовать allow, для единообразия.

Так же равнозначны. Отбросить пакет. Буду использовать deny

Проверяет пакет по таблице динамических правил (соединений), никаких дополнительных опций не предполагает.

Протокол — tcp, udp, icmp, или любой другой протокол, описанный в /etc/protocols

Источник и Назначение — ip адреса, без комментариев. Кючевое слово all означает любой адрес. Ключевое слово me означает локальный адрес хоста.

Порт — номер порта для tcp и udp. Можно использовать имена сервисов, описанные в /etc/services

in|out — означают совпадение с входящими или исходящими пакетами.

via IF — совпадение с трафиком только одного интерфейса IF.

keep-state — ключевое слово, указывающее о необходимости создания динамического правила, которое разрешит обмен пакетами между источником и назначением.

limit — разрешать только N соединений, соответствующих правилу. Создаёт динамические правила подобно keep-state. Нельзя в одном правиле использовать limit и keep-state.

Простейшая конфигурация

Возьмем простейший веб-сервер в вакууме. Нам нужно открыть порты 22, 80, 443 для доступа извне. Исходящие соединения разрешим все.

Для сохранения конфигурации и загрузки правил мы будем использовать shell скрипт, указанный в rc.conf опцией firewall_script.

Фактически, этот shell скрипт содержит набор команд ipfw. Что позволяет использовать в написании конфигурации все преимущества shell. Особенно пригодятся переменные. К примеру:

При запуске файрвола будет выполнен этот скрипт, и соответствующие правила будут загружены.

Заключение

Мы разобрались с тем, что такое ipfw и запустили его. Рассмотрели простейшие правила фильтрации и научились с ними работать. А так же создали простую, но вполне рабочую конфигурацию файрвола, способную защитить наш сервер от угроз извне.

В следующей статье мы рассмотрим дополнительные опции фильтрации, усовершенствуем конфигурацию для защиты нашего веб-сервера. А пока у вас есть отличная возможность потестировать Интернет Контроль Сервер, тем более что полнофункциональная демо-версия доступна в течение 35 дней, а версия до 9 пользователей вообще бесплатная.

Записки программиста

Когда-то давно мы настраивали фаервол в Linux с помощью iptables. При этом отмечалось, что утилиту iptables я нахожу исключительно неудобной по сравнению с FreeBSD’шным ipfw. Сегодня мы наконец-то познакомимся с этим ipfw и постараемся ответить на вопрос, действительно ли он удобнее. Отмечу, что на момент написания этих строк FreeBSD предлагает аж три фаервола на выбор — ipfw, pf и ipf. Однако по моим представлениям из них ipfw используется чаще всего.

Описанные в этом посте действия были проверены мной на FreeBSD 10.3, но по идее не должны ничем отличаться в других версиях FreeBSD.

Итак, первое, что требуется выполнить при настройке ipfw — это команду:

По умолчанию ipfw запрещает передачу вообще всех пакетов. Если вы сидите на сервере по ssh, что весьма вероятно, и просто включите ipfw, то на сервер вы больше не зайдете до следующего ребута. Приведенная команда временно меняет поведение ipfw на «разрешить всем и все», тем самым решая описанную проблему.

Теперь включаем ipfw:

При этом в /var/log/messages мы должны увидеть что-то вроде:

Как видите, ipfw представляет собой обычный модуль ядра.

Давайте посмотрим на текущий список правил:

Приведенный синтаксис довольно очевидный — номер правила, резрешить / запретить, название протокола, от кого, к кому. Тут мы видим правило с номером 65535, разрешающее передачу входящих и исходящих IP пакетов от кого угодно кому угодно на всех интерфейсах.

Также можно посмотреть время, когда правило последний раз срабатывало:

Давайте попробуем добавить парочку правил. Например, запретим пинги:

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

Попытаемся пингануть eax.me и убедимся, что пинги больше не ходят. Теперь, когда мы осознали свою ошибку, удаляем правило:

Заметьте, что ipfw позволяет создавать множество правил с одинаковыми номерами. В этом случае их можно удалить одной командой. Также можно удалить вообще все правила, оставив только правило по умолчанию:

Перед тем, как реально добавлять правило, не лишним бывает собрать статистику о том, как много пакетов ему соответствует:

Как видите, тут демонстрируется не только новое действие (count), но и расширенный синтаксис с частью in/out и указанием конкретного сетевого интерфейса. Кстати, при срабатывании count-правила следующие за ним правила продолжают применяться.

Теперь посмотрим количество пакетов с их суммарным размером в байтах, соответствующих правилу:

Счетчики можно при желании обнулить так:

# для конкретного правила
sudo ipfw zero 00200

# для всех правил
sudo ipfw zero

В правилах можно использовать не только слова me и any , но и указывать конкретные хосты или подсети:

Также можно указывать порты или диапазоны портов:

Помимо сбора статистики о срабатывании правил, их также можно логировать:

Пример добавления логируемых правил:

sudo ipfw -q add 00200 deny log \
tcp from any to 212.193.240.1 / 24 80

sudo ipfw -q add 00200 deny log logamount 3 \
tcp from any to 212.193.240.1 / 24 80

Если теперь несколько раз попытаться прителнетиться к хосту из используемой выше сети и заглянуть в /var/log/security, то увидим что-то вроде:

Логирование можно глобально включать и выключать таким образом:

Если в правиле не указывается logamount, используется следующее значение:

Значение по умолчанию равно нулю, что означает отсутствие ограничений.

Сбросить счетчики логирования можно так:

Для сохранения правил при перезагрузке системы создадим файл /etc/ipfw.rules следующего содержания:

fwcmd = "ipfw -q add"

$fwcmd 00100 deny log tcp from any to 1.2.3.0 / 24
$fwcmd 00200 deny log tcp from any to 4.5.6.0 / 24
$fwcmd 65000 allow ip from any to any

Важно! Если хотите подключиться к машине после перезагрузки, обязательно добавьте последнее правило. Сейчас оно добавляется автоматически, благодаря описанному выше хаку с net.inet.ip.fw.default_to_accept . Однако после ребута вернется поведение фаервола по умолчанию, при котором запрещается вообще все.

Заметьте, что только что мы написали обыкновенный шелл скрипт. Следовательно, в нем можно использовать сокращения имен команд, как продемонстрировано выше, а также условные операторы, процедуры и вот это все. Проверяем скрипт:

Если все ОК, в /etc/rc.conf дописываем:

Если решили включить логирование, убедитесь, что вы не забыли дописать в /etc/sysctl.conf что-то вроде:

Если все было сделано правильно, долждны увидеть наши правила. Кроме того, они должны сохраняться и после перезагрузки.

Это все, о чем я хотел рассказать. Подробности вы найдете в man 8 ipfw . Маны во FreeBSD, как всегда, классные. В частности, из мана вы узнаете про такие элементы синтаксиса правил ipfw, оставшиеся за рамками поста, как skipto, tag / untag и другие.

Неправда ли, синтаксис в ipfw куда более читаемый, чем вот эти все -A , -p , -j , —sport и -m multiport в iptables?

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *