Блокировка сайтов с помощью ipfw на FreeBSD

После того, как bridge на FreeBSD готов, можно подумать и о блокировке сайтов средствами ipfw во FreeBSD.
Делается это опять такие просто. Будет таблица, в которую будут заноситься адреса провинившихся сайтов и будет список привелигированных пользователей, которым доступ к этим сайтам останется открыт. Фильтрация будет происходить по IP-адресам, так что избранные адреса лучше зарезервировать, если используется DHCP.
Итак в статье по созданию моста, были вписаны в /etc/rc.firewall правила ipfw разрещающие всё и всем. Меняем правила на:

/sbin/ipfw -f flush
/sbin/ipfw table 1 flush
/sbin/ipfw table 2 flush

cat /etc/BlockedSites | while read ip; do
ipfw table 1 add $ip 1
done
# запрещаем всем посещать сайты из таблицы 1 (файл /etc/BlockedSites)
/sbin/ipfw -q add 100 deny ip from "table(1)" to 192.168.1.0/24
# 192.168.1.0/24 -это адрес всей подсети

cat /etc/allowalluser | while read ip; do
ipfw table 2 add $ip 1
done
# разрешаем пользователям из таблицы 2 (файл /etc/allowalluser) посещать всё
# номер правила меньше, чем запрещающее выше правило
/sbin/ipfw -q add 099 allow ip from "table(1)" to "table(2)"

# разрешаем всё на портах 21, 22 и 80
/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 permit ip from any to any

Далее создаём эти самые /etc/BlockedSites и /etc/allowalluser.
/etc/allowalluser создаём вручную, написав туда ip-адреса пользователей, которым всё разрешено, например
192.168.1.4
192.168.1.73
192.168.1.45
и т.д.

а вот вписывать все ip-адреса провинившихся сайтов для файлика /etc/BlockedSites довольно долгое занятие. Адреса того же vk.com можно узнать так:
host vk.com | grep 'has address' | cut -d ' ' -f 4

Перенаправим вывод команды в файлик /etc/BlockedSites:
host vk.com | grep 'has address' | cut -d ' ' -f 4 > /etc/BlockedSites

Если надо внести ещё адреса, то вместо символа «>» ставим двойную «>>», чтобы не стирать а дописывать ниже, тоесть:
host odnoklassniki.ru | grep 'has address' | cut -d ' ' -f 4 >> /etc/BlockedSites
host fishki.net | grep 'has address' | cut -d ' ' -f 4 >> /etc/BlockedSites

и т.д.

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

Все занесённые в список ip-адреса сайтов будут недоступны всем пользователям сети, за исключением компьютеров с ip из списка /etc/allowalluser

Блокировка сайтов с помощью ipfw на FreeBSD: 6 комментариев

  1. SealTeam1

    После применения этого правила:
    /sbin/ipfw -q add 100 deny ip from «table(1)» to 192.168.1.0/24
    полностью падает SSH, и дальнейшее управление сервером возможно только локально, или пока не будет удалено данное правило

      1. Eraldcoil

        root@shlyz:/ # cat /etc/BlockedSites | while read ip; do
        while: Синтаксис выражения.
        do: Команда не найдена.
        root@shlyz:/ # ipfw table 1 add $ip 1
        ip: Неопределенная переменная.
        root@shlyz:/ # done

  2. Eraldcoil

    root@shlyz:/ # cat /etc/BlockedSites | while read ip; do
    while: Синтаксис выражения.
    do: Команда не найдена.
    root@shlyz:/ # ipfw table 1 add $ip 1
    ip: Неопределенная переменная.
    root@shlyz:/ # done
    помогите пожалуйста, вот такую надпись выдает

  3. Eraldcoil

    re0: flags=8802 metric 0 mtu 1500
    options=8209b
    ether 90:fb:a6:39:f2:bd
    nd6 options=29
    media: Ethernet autoselect (10baseT/UTP )
    status: no carrier
    re1: flags=8843 metric 0 mtu 1500
    options=8209b
    ether f0:7d:68:c1:fe:d1
    inet 10.15.2.254 netmask 0xffffff00 broadcast 10.15.2.255
    nd6 options=29
    media: Ethernet autoselect (100baseTX )
    status: active
    em0: flags=8843 metric 0 mtu 1500
    options=209b
    ether 00:07:e9:0f:39:b5
    inet 10.15.1.93 netmask 0xffffff00 broadcast 10.15.1.255
    nd6 options=29
    media: Ethernet autoselect (100baseTX )
    status: active
    lo0: flags=8049 metric 0 mtu 16384
    options=600003
    inet6 ::1 prefixlen 128
    inet6 fe80::1%lo0 prefixlen 64 scopeid 0x4
    inet 127.0.0.1 netmask 0xff000000
    nd6 options=21

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