Торренты, iptables, запреты и разрешения на шлюзеПодписка на Комментарии к "Торренты, iptables, запреты и разрешения на шлюзе"

Аватар zenon

Начну с того, что для deluge недавно не смог открыть порты, эта торрентокачалка не довольствовалась простым открытием UDP портов 6881:6889, ей с какого-то перепугу вдруг понадобилось разрешение на самовольное открытие портов в цепочке OUTPUT, ну естественно не очень мне этого хотелось.
Итак, политики по-умолчанию:

# iptables -P INPUT DROP
# iptables -P OUTPUT DROP
# iptables -P FORWARD DROP
# iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
# iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
# iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
# iptables -I FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu

Далее идут правила открытия нужных портов, их я опущу.
Нормально, для торрентов достаточно открыть пару udp портов, и обмен пирами пойдёт, обычно сложнее их наоборот заткнуть, вот стандартные правила для торрентов, которые можно найти в интернетах:
# iptables -A INPUT  -i eth0 -p udp --destination-port 6881:6891 -j ACCEPT
# iptables -A OUTPUT -o eth0 -p udp --source-port 6881:6891 -j ACCEPT

... они даже избыточны, я уже начал грешить на свою ауру, с этими правилами deluge отказывался качать, ....! но как только я делал вот так:
# iptables -A OUTPUT -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT

Закачка сразу начиналась.
Дальнейший поиск привел меня к вот этому посту.
О как! Не я один такой, но благо взглянув на версию libtorrent, понял, что могу обновиться, и это решило данную проблему.
Сейчас стоят вот эти библиотеки, и сними все ok:
[ebuild   R   ~] net-libs/rb_libtorrent-0.16.13 [0.16.13] USE="python ssl -debug -doc -examples -static-libs" 2,943 kB
[ebuild   R   ~] net-libs/libtorrent-0.13.3  USE="ipv6 ssl -debug" 0 kB

Что с открытием портов и ограничениями:
Во первых - запускать торрентокачалку только от пользователя.
Второе - правила открытия портов с проверкой uid пользователя.
Скажите - паранойя? Ну может быть, но хотя бы так намного нагляднее.
Пользователь, от которого работает deluge - у меня torrent.
Рабочие правила:
# iptables -A OUTPUT -o ppp0 -m owner --uid-owner torrent -p tcp --source-port 6881:6891 -j ACCEPT
# iptables -A OUTPUT -o ppp0 -m owner --uid-owner torrent -p udp --source-port 6881:6891 -j ACCEPT

Если заметили, то цепочку INPUT я даже и не трогал, все и так пошло.
Сразу после добавления торрента в очередь можем убедиться, что обмен пирами пошёл:
# iptables -L -v -n | grep 6881
 280 16800 ACCEPT     tcp  --  *   ppp0    0.0.0.0/0       0.0.0.0/0      owner UID match 1005 tcp spts:6881:6891
1391  171K ACCEPT     udp  --  *   ppp0    0.0.0.0/0       0.0.0.0/0      owner UID match 1005 udp spts:6881:6891

На этом почти все, один главный штрих, а как же локальная сеть и как закрыть доступ другим торрент клиентам, ответ простой - не открывайте его!
Например - простой маскарад, которым везде советуют раздавать интернет в локалку, а именно:
# iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

открывает доступ клиентам его получающим везде.
Открывать над по одному порту, и с указанием вашего IP адреса, вот так например:
# iptables -t nat -A POSTROUTING -p tcp -s 192.168.0.200 --dport 80  -o ppp0 -j SNAT --to $IP
# iptables -t nat -A POSTROUTING -p tcp -s 192.168.0.200 --dport 443 -o ppp0 -j SNAT --to $IP

в данном примере мы раздали 80 и 443 порты на машину с IP адресом 192.168.0.200. $IP - это адрес выданный нам провайдером (внешний IP).
Для подести целиком так:
# iptables -t nat -A POSTROUTING -p tcp -s 192.168.0.0/24 --dport 80  -o ppp0 -j SNAT --to $IP
# iptables -t nat -A POSTROUTING -p tcp -s 192.168.0.0/24 --dport 443 -o ppp0 -j SNAT --to $IP

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