Добрый день. Подскажите, возможно ли сделать запрет на загрузку файлов в iptables. Например фильтровать формат файлов при загрузки, *.swf, *.mp3, *.wma, *.avi... так далее. Если можно, киньте примерчик.
Запрет на загрузку файлов.
Если можно, киньте примерчик.
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.
...
"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 может сослужить неплохую службу, но вам
не следует забывать об упомянутых выше особенностях. Кроме того, он
чувствителен к регистру символов и не сможет среагировать на строку,
разнесенную по смежным пакетам.
не совсем то что нужно. я хотел запретить скачивание mp3 файлов. так же файлов с расширением *.torrent. В принципе, согласен, можно через strirg запретить это. Но как быть с flashPlayer'om ?
не совсем то что нужно. я хотел запретить скачивание mp3 файлов. так же файлов с расширением *.torrent. В принципе, согласен, можно через strirg запретить это. Но как быть с flashPlayer'om ?
Поставьте squid и запрещайте.