Transmission у Linux: абмежаваць зыходны трафік паводле ўладальніка працэсу
Пір-порт — гэта не ўся гісторыя. Прывяжыце правіла брандмаўэра да ўліковага запісу кліента, ахапіце абедзве сям’і адрасоў і праверце пры абарваным тунэлі.
Блакаванне ўваходнага порта Transmission — гэта не палітыка VPN. Торэнт-кліент адкрывае зыходныя злучэнні да піраў і трэкераў, развязвае імёны і можа трымаць слухач аддаленага кіравання, і кожны з гэтых патокаў можа выйсці праз інтэрфейс, якога вы не планавалі. Прайдзіце пяць праверак па парадку і лічыце мяжой правіла брандмаўэра, а не налады кліента. Апошнія дзве праверкі звычайна прапускаюць, і менавіта яны вызначаюць, ці захоўваецца гарантыя, калі тунэль падае.
Назавіце працэс, якому належыць перадача
Настольны дадатак і сістэмны дэман працуюць пад рознымі ўліковымі запісамі, а правіла паводле ўладальніка ідзе за ўліковым запісам, а не за назвай праграмы. Высветліце, які з іх запушчаны, перш чым пісаць правіла. Асобны службовы ўліковы запіс дае палітыцы дакладны суб’ект, тады як настольны карыстальнік дзеліць сваю асобу з браўзерамі, рэдактарамі і ўсім іншым у сеансе. Пацвердзіце UID, а не мяркуйце, што назва ўліковага запісу з пакета і ёсць выкарыстоўваная.
systemctl status transmission-daemon
ps -o user=,pid=,cmd= -C transmission-daemon
Калі ўліковага запісу яшчэ няма, стварыце яго для гэтай мэты і не давайце яму нічога іншага запускаць. Запішыце ўліковы запіс і UID у каментарый да правіла, бо правіла без суб’екта — гэта правіла, якое ніхто не зможа бяспечна змяніць.
Аддзяліце поля праслухоўвання ад маршруту
Transmission 4.x дакументуе адрасы праслухоўвання піраў асобна ад rpc-bind-address, і гэтая розніца важная. Налада RPC кіруе толькі слухачом аддаленага кіравання, таму яе змена не выбірае маршрут для піравага трафіку. Чытанне дзвюх налад як адной — самая частая прычына, чаму ахайная на выгляд канфігурацыя ўсё роўна цячэ. Тое ж дакументаванне апісвае запасны варыянт, калі адрас праслухоўвання піраў несапраўдны, гэта значыць недаступны адрас — гэта задакументаваны запасны выпадак, а не гарантаваная адмова.
grep -E '"(peer-port|rpc-bind-address|bind-address-ipv4)"' /var/lib/transmission-daemon/.config/transmission-daemon/settings.json
Выкарыстоўвайце сродкі кліента па іх прызначэнні, а гарантыю змяшчайце ў брандмаўэр. Налада праслухоўвання ўсё яшчэ можа быць карыснай, але яна не даказвае, што сувязь з трэкерамі, лакальнае выяўленне ці дэлегаваны запыт выходзяць праз тунэль. Калі гэтыя дзве рэчы разыходзяцца, вырашае брандмаўэр.
Запішыце супадзенне паводле ўладальніка ў патрэбны ланцуг
Кіраўніцтва Netfilter пра супадзенне паводле ўладальніка тлумачыць, як лакальна створаныя пакеты прыпісваюцца карыстальніку або групе, якія валодаюць файлам сокета. Гэтае прыпісванне не пашыраецца на перасылаемы трафік, а супастаўленне дадатковых груп патрабуе яўнай опцыі. Чытайце кіраўніцтва для таго пашырэння, якое сапраўды выкарыстоўваеце, а не першы трапны прыклад.
iptables -A OUTPUT -m owner --uid-owner transmission -o tun0 -j ACCEPT
iptables -A OUTPUT -m owner --uid-owner transmission -j REJECT
ip6tables -A OUTPUT -m owner --uid-owner transmission -o tun0 -j ACCEPT
ip6tables -A OUTPUT -m owner --uid-owner transmission -j REJECT
Парадак важны не менш за супадзенне. Шырокі дазвол вышэй у ланцугу зводзіць на нішто дакладную забарону ніжэй, таму перагледзьце ўвесь ланцуг, а не дадавайце правіла спадзеючыся. Уключыце абедзве сям’і адрасоў, калі хост працуе з IPv6, бо палітыка толькі для v4 пакідае адкрытым шлях, за якім ніхто не сочыць. Захоўвайце правілы падчас перазапускаў і кліента, і тунэля.
Вырашыце, што адбудзецца, калі tun0 знікне
Палітыка адмовы — сутнасць практыкавання. Калі тунэль знікне і той самы хук выдаліць правілы, кліент зможа карыстацца фізічным інтэрфейсам, пакуль нешта іншае яго не спыніць. Бяспечны дызайн захоўвае правілы і дазваляе ім адхіляць, і менавіта гэта робіць мяжу незалежнай ад стану тунэля. Хук дэмантажу, які заадно выдаляе правілы, — поўная супрацьлегласць палітыцы адмовы.
ip link show tun0
iptables -S OUTPUT
Праверце гэта наўмысна: спыніце тунэль, запусціце перадачу, якую не страшна перарваць, і паглядзіце, ці нешта выходзіць названы. Затым вярніце тунэль і пераканайцеся, што патрэбны шлях зноў працуе.
Ахапіце шляхі, якіх правіла не бачыць
Развязаннем імёнаў можа займацца асобны працэс-развязвальнік, а прастора імёнаў або выдзелены шлюз здатныя даць яшчэ адну мяжу, калі іх шляхі супольнага выкарыстання і загрузкі гэта прадугледжваюць. Вырашыце, які кампанент адказвае за DNS і ці прытрымліваецца ён таго ж правіла выхаду. Затым пагляньце на RPC: калі выкарыстоўваецца rpc-whitelist, то ўзгодненая сетка кіравання ўваходзіць у дамову, а шырокі дыяпазон RFC1918 — не.
ss -tunp | grep -i transmission
Лічыльнікі інтэрфейсу могуць пацвердзіць назіранне, але не могуць даказаць, які працэс спарадзіў байты. Правядзіце перадачу, якую дазволена перарваць: спачатку працоўным шляхам, потым без тунэля пры запуску, далей праз перарыванне, паўторнае падключэнне і толькі што створаны інтэрфейс. Праверце і новую спробу, і ўжо адкрытае злучэнне, бо правіла магло не прыкласціся да старога сокета. Запішыце дату, уліковы запіс і вынік разам з праверкай.
Устаўляць прыклад, які ачышчае ўвесь ланцуг, — гэта мяняць адну дзірку на некалькі, таму дадавайце правілы, а не выдаляйце іх. Калі ўсе пяць праверак пройдзены, гарантыя яўная: трафік кліента выходзіць праз тунэль або нікуды, і правіла, якое гэта забяспечвае, перажывае ўласны збой тунэля.