February 3, 2010

Только UA-IX для rtorrent'а с помощью ipfw на конкретном ip-адресе в системе FreeBSD

Стало необходимо повесить rTorrent на конкретный IP-адрес в системе, причём так, чтобы он _не_ принимал входящие соединения от IP-адресов, не принадлежащих UA-IX. Такая ситуация возникла когда входящий траффик на сервер извне (кроме UA-IX) стоит дополнительных денег.

Предполагается что rTorrent установлен и настроен.

Итак, подключаем конфиг для ipfw. Окрываем /etc/rc.conf и вписываем:
firewall_script="ipfw.script"

Далее, создаём в этой же директории (/etc) собственно скрипт ipfw.script со следующим содержимым:
#!/bin/sh

ipfw -f flush
ipfw table 10 flush
directory="/tmp"
cd $directory

fetch -q -o - http://noc.ix.net.ua/ua-list.txt | sed 's/\.0$/.0\/24/g' > prefixes.txt || exit
/usr/bin/less prefixes.txt | grep -E "([0-9]{1,3}\.){3}[0-9]{1,3}" > ua-networks.txt

list=`less ua-networks.txt`
for i in ${list};
do
ipfw table 10 add ${i}
done

find $directory -name "prefixes.*" -delete
find $directory -name "ua-networks.*" -delete

ipfw add allow all from table\(10\) to {IP} in
ipfw add allow all from any to any out
ipfw add deny all from any to {IP} in
Здесь {IP} — конкретный IP-адрес, на который распространятся ограничения.

Затем делаем его исполнимым:
chmod +x /etc/ipfw.script

Скрипт запрашивает актуальный список UA-IX сетей, обрабатывает его и загоняет в таблицу правил файрволла table 10. Ознакомиться с её содержимым можно при помощи следующей команды:
ipfw table 10 list

Загнать вывод этой команды в текстовый файл можно следующим образом:
ipfw table 10 list > /tmp/table10.txt

No comments: