LinuxForum.Fans
Тема

Запрет на загрузку файлов.

Автор: maxim_k 5 сообщений 1327 просмотров
#326194

Добрый день. Подскажите, возможно ли сделать запрет на загрузку файлов в iptables. Например фильтровать формат файлов при загрузки, *.swf, *.mp3, *.wma, *.avi... так далее. Если можно, киньте примерчик.

#326197
"maxim.k⇓" написал:
Если можно, киньте примерчик.
text

man iptables-extensions
...
string
       This modules matches a given string by using some pattern matching strategy. It requires a linux kernel >= 2.6.14.

--algo {bm|kmp} Select the pattern matching strategy. (bm = Boyer-Moore, kmp = Knuth-Pratt-Morris)

--from offset Set the offset from which it starts looking for any matching. If not passed, default is 0.

--to offset Set the offset up to which should be scanned. That is, byte offset-1 (counting from 0) is the last one that is scanned. If not passed, default is the packet size.

[!] --string pattern Matches the given pattern.

[!] --hex-string pattern Matches the given pattern in hex notation. ...

#326199
"http://www.opennet.ru/base/net/iptables_treasures.txt.html"

Расширение string
-----------------

Расширение string -- на мой взгляд одно из самых
востребованных, среди прочих дополнений из POM. Оно позволяет
выполнять фильтрацию пакетов, основываясь на анализе содержимого
области данных пакета. Этот модуль имеет очень широкую область
применений, но тут главное не перестараться.

Как один из вариантов применения, можно привести возможность
блокировки скачивания исполняемых файлов в формате ELF через WEB.
Известно, что исполняемые файлы в формате ELF начинаются символом с
кодом 7Fh, за которым следуют буквы ELF. Таким образом можно
проанализировать все пакеты, поступающие из Интернет с исходящего
порта 80, на предмет наличия в области данных пакета требуемой
комбинации символов. Шестнадцатеричные коды символов должны
заключаться между символами "|", например так: |7F|ELF. Если
предположить, что в Интернет "смотрит" интерфейс eth0, то фильтрующее
правило может выглядеть следующим образом:

iptables -A FORWARD -i eth0 -p tcp --sport 80 \
-m string --string '|7F|ELF' -j DROP

Синтаксис записи шестнадцатеричных кодов символов, в данном виде,
поддерживается iptables, начиная с версии 1.2.8. Если вы используете
более раннюю версию, то вам придется прибегнуть к "обману", например:

--string "`dd if=/bin/ls bs=4 count=1 2>/dev/null`"

здесь в критерий попадут первые четыре символа из файла /bin/ls,
который является исполняемым файлом формата ELF и который содержит
требуемую нам комбинацию символов.

А теперь несколько расширим этот пример. Допустим, что мы абсолютно
доверяем содержимому, поступающему с адреса 192.168.0.5 и потому не
хотим фильтровать трафик, поступающий с этого адреса. Делается это
простым добавлением инвертированного критерия проверки исходящего
IP-адреса, например так:

iptables -A FORWARD -i eth0 -p tcp \
! -s 192.168.0.5 --sport 80 -m string \
--string '|7F|ELF' -j DROP

Однако данные правила не свободны от ошибок. Первое -- приведенный
здесь критерий будет срабатывать для любого пакета, в области данных
которого содержится указанная комбинация символов, а не только в
начале передаваемого исполняемого файла. Это может вызвать ложные
срабатывания критерия и привести к блокировке вполне легитимных
пакетов. Второе -- если искомая последовательность символов окажется
разнесенной по двум, или более, смежным пакетам (начало искомой строки
в конце одного пакета, а конец строки в начале другого), то критерий
не сработает. Искомая строка должна полностью входить в состав одного
пакета.

Таким образом, критерий string может сослужить неплохую службу, но вам
не следует забывать об упомянутых выше особенностях. Кроме того, он
чувствителен к регистру символов и не сможет среагировать на строку,
разнесенную по смежным пакетам.
#326238

не совсем то что нужно. я хотел запретить скачивание mp3 файлов. так же файлов с расширением *.torrent. В принципе, согласен, можно через strirg запретить это. Но как быть с flashPlayer'om ?

#326333
maxim.k написал:
не совсем то что нужно. я хотел запретить скачивание mp3 файлов. так же файлов с расширением *.torrent. В принципе, согласен, можно через strirg запретить это. Но как быть с flashPlayer'om ?

Поставьте squid и запрещайте.

Войдите или зарегистрируйтесь, чтобы ответить.