2018-07-09 Networking-Blog

Networking-Blog

Итак пока я сыграв в русскую рулетку с каким то долбаебом на шоссере вывихнул себе правое плече благодаря чему появилось время продолжить написание данной писанинки продолжим😊

вязка squid + c-icap с моими любимыми шлюхами и блэкджеками (ака контент фильтрация) для себя любимого у меня стояла уже лет 10 как в качестве банерорезки и кеша, После начала позора роскомнадзора со своими блокировками я добавил в эту схему tor для обхода блокировок, и i2pd до кучи - хз зачем но пускай будет. Но я все время искал чем бы заменить сквид с его sslbump ибо для одного юзверя это даже не из пушки по воробьям а чето ближе к ядерной боеголовке. И не особо то находил, а без sslbump все это не имеет смысла, большая часть траффика идет по https, и его необходимо расковыривать для фильтрации баннеров и кеширования тоже. Плюс сквид это тот еще монстр и часто заточить его на чтото что вызывает standart violation без рашпиля (ковыряния в исходниках) бывает невозможно. Не для персонального использования он создан, он может не чхая переварить полгига траффика и тысячи юзверей - я правда проверял - может😊 но при этом иногда заставить его к примеру закешировать чтото что по стандарту кешироваца не должно весьма проблематично.

И тут, недавно, не помню уже с чего вдруг гдето выплыл выплыл у меня в поиске [[Glossary_wwwoffle?|wwwoffle]], который заточен какрас для персонального использования в противовес сквиду, и почемуто я решил на него глянуть, не помню уже почему - мошт просто делать нехер было. И полной неожиданностью оказалось что оно умеет mitm ака sslbump в сквиде типа из коропки, причем уже много лет, и кешировать https тоже умеет, ну и еще кучу всяких standart violation для которых squid нада затачивать что не всегда тривиально, а тут типа все есть. ну и сразу же я решил сие дело посмотреть и опробовать.

Вообще так как все это нужно для 1-2-3 добашних клиентов, требования ко всему этому очень просты:

Обход наших любимых роском/позо/надзо/ровских блокировок в linux и в gentoo в частности

Итак смотрим wwwoffle

Оно умеет далеко не все что нужно и списка выше. пойдем с конца:

Остальное все умеет, и кое чего сверху по мелочи. И да - оно маленькое и простое, и кривое😊

В gentoo оказалась довольно древняя версия, поэтому засунул на ее основе последнюю с сайта в свой локальный оверлей и благополучно собрал, и вроде бы все зашибись, кроме одного но - вылез какой то raice condition при генерации фейковых сертификатов, каким то образом получалось что одновременно 2 процесса генерируют пару ключ-сертификат для даного сайта, и один заканьчивает раньше другого, в итоге ключь к самому сертификату не подходит и естественно ничего не работает - бида пичаль.

Врубил логгинг на все - по его строкам нашол процедуру которая генерит сертификаты - в src/certificates.c

static gnutls_certificate_credentials_t GetCredentials(const char *hostname,int server)

посмотрел наискосок - вникать не стал - криво оно конечно реализовано ну да ладна - до того я еще успел нагуглить чтото типа форка wwwoffle-par, чувак долго и много чего там дорабатывал, влоб поставил на проверку - raice отсуствует - тупо скопипастил тело процедуры к себе, сделал патчь, пересобрал с оригинальной версией - raice исчез - алилуя - можно пробовать юзать дальше😊

а дальше, наткнулся на SVN, посмотрел что там, и решил подняца до него - хуже не будет, так родился второй патч😊 Попутно портировал фичу session cookies only из ветки -par, так родился третий патч, ну а четвертый мелкий фикс ворнинга - до кучи😊 Нну и пошло-поехало😊

Собсно сами патчи:

На генте все эти патчи можно сложить в

/etc/portage/patches/net-proxy/wwwoffle

и они применяца автоматом при сборке, ЕСЛИ! в ебилде вызов epatch_user в src_prepare(), а есть он блять не везде.. поэтому гдето это работает а гдето нет. Но есть способ сделать чтоп работало всегда и везде.

Вобщем наигравшись с исходниками и добившись какой-никакой но приемлемой работы я принялся играца с конфигурацией😊 Итак:

Настройка wwwoffle

Собственно конфигурация wwwoffle находица в

/etc/wwwoffle/wwwoffle.conf

Я уже точно не помню что по дефолту а что я менял так что опишу что посчитаю нужным посекционно так как конциоурация у wwwoffle секционная, есть же документация в конце концов😊 итак:

StartUp
{
 bind-ipv4         = 127.0.0.1
 bind-ipv6         = none

 http-port         = 3128
 https-port        = 3129
 wwwoffle-port     = 8081

 spool-dir         = /var/spool/wwwoffle

 run-uid           = wwwoffle
 run-gid           = wwwoffle

 use-syslog        = yes

 password          = none

 max-servers       = 16
 max-fetch-servers = 1
}

Тут ничего особенного - слушаем все порты на локалхосте так как оно лиш для меня любимого, для меня любимого не на локалхосте там сбоку приставлен socks5 через который я и работаю когда не на локалхосте😊

Собственно сам http прокси живет на 3128 порту, там же и https через метод коннект, тоесть в бравзере прописывается localhost:3128 и фтыкаеца галка юзать его для всех протоколов и на этом все.

Options
{
 log-level             = info
 
 socket-timeout        = 120
 dns-timeout           = 60
 connect-timeout       = 30

 connect-retry         = no

 dir-perm              = 0755
 file-perm             = 0644

 lock-files            = yes

 reply-compressed-data = no
 reply-chunked-data    = yes

#exec-cgi = /local/cgi-bin/*
#exec-cgi = /local/*.cgi
}
OnlineOptions
{
 <*://*/*.js?*> request-changed = 10m
 <*://*/*.css?*> request-changed = 10m
 <*://*/*.json> request-changed = 10m
 
 <*://*/*.css> request-changed = 6w
 <*://*/*.css> pragma-no-cache = no
 <*://*/*.css> cache-control-no-cache = no
 <*://*/*.css> cache-control-max-age-0 = no
 <*://*/*.css> request-no-cache = no

  <*://*/*.js> request-changed = 6w
  <*://*/*.js> pragma-no-cache = no
  <*://*/*.js> cache-control-no-cache = no
  <*://*/*.js> cache-control-max-age-0 = no
  <*://*/*.js> request-no-cache = no
 
 <*://*/*.png> request-changed = 6w
 <*://*/*.png> pragma-no-cache = no
 <*://*/*.png> cache-control-no-cache = no
 <*://*/*.png> cache-control-max-age-0 = no
 <*://*/*.png> request-no-cache = no
 
 <*://*/*.jpg> request-changed = 6w
 <*://*/*.jpg> pragma-no-cache = no
 <*://*/*.jpg> cache-control-no-cache = no
 <*://*/*.jpg> cache-control-max-age-0 = no
 <*://*/*.jpg> request-no-cache = no


 <*://*/*.jpeg> request-changed = 6w
 <*://*/*.jpeg> pragma-no-cache = no
 <*://*/*.jpeg> cache-control-no-cache = no
 <*://*/*.jpeg> cache-control-max-age-0 = no
 <*://*/*.jpeg> request-no-cache = no

 <*://*/*.gif> request-changed = 6w
 <*://*/*.gif> pragma-no-cache = no
 <*://*/*.gif> cache-control-no-cache = no
 <*://*/*.gif> cache-control-max-age-0 = no
 <*://*/*.gif> request-no-cache = no

 <*://*/*.ico> request-changed = 6w
 <*://*/*.ico> pragma-no-cache = no
 <*://*/*.ico> cache-control-no-cache = no
 <*://*/*.ico> cache-control-max-age-0 = no
 <*://*/*.ico> request-no-cache = no

 <*://*/*.swf> request-changed = 6w
 <*://*/*.swf> pragma-no-cache = no
 <*://*/*.swf> cache-control-no-cache = no
 <*://*/*.swf> cache-control-max-age-0 = no
 <*://*/*.swf> request-no-cache = no

 <*://*/*.pdf> request-changed = 6w

 pragma-no-cache         = yes
 cache-control-no-cache  = yes
 cache-control-max-age-0 = yes

 request-changed       = 10m

 request-changed-once  = yes

 request-expired       = yes

 request-no-cache      = no

 request-redirection   = no

 request-conditional   = yes

 validate-with-etag    = no

 try-without-password  = yes

 intr-download-keep    = no
 intr-download-size    = 1
 intr-download-percent = 80

 timeout-download-keep = no

 keep-cache-if-not-found = yes

 request-compressed-data = yes
 request-chunked-data    = yes
}
OfflineOptions
{
 pragma-no-cache         = yes
 cache-control-no-cache  = yes
 cache-control-max-age-0 = yes
 
 confirm-requests = no
 
# Dont request any URLs at all when offline.
 <*://*/*> dont-request = yes
}

Тут только расскоментировал <*:*/*> dont-request = yes - зачем чтото запрашивать в оффлайне?

SSLOptions
{
    enable-caching = yes
    quick-key-gen = yes
    disallow-cache = *.googlevideo.com:443
    allow-tunnel = *.googlevideo.com:443
    allow-cache = *:443
}

Вотанон - святой грааль - https mitm ака sslbump в сквиде😊

FetchOptions
{
 stylesheets = yes
 images      = yes
 frames      = yes
 iframes     = yes
 scripts     = no
 objects     = no
 webbug-images = no
 icon-images   = no
 only-same-host-images = no
}

Тут не помню - помоему ниче не трогал, но эта секция какрас отвечает за скачивание запроенных страниц в оффлайне или вручную.

IndexOptions
{
 create-history-indexes = yes

 cycle-indexes-daily    = yes

#### Example ####
# Do index files from /good/ in the barfoo.com domain.
# <*://*.barfoo.com/good/*> list-any = yes
# Don't index any hosts in the barfoo.com domain.
# <*://*.barfoo.com> list-any = no
# Don't index any gif or jpg files in the lasttime index.
# <*://*/*.gif> list-latest = no
# <*://*/*.jpg> list-latest = no
}

Так и не понял что это и зачем вообще, ниче не трогал😊

ModifyHTML
{
 enable-modify-html        = yes

 #site specific fixes
    <*://srv.lan> disable-meta-set-cookie = no

    <*://*.lostfilm.tv/*> disable-meta-refresh = no
    <*://*.lostfilm.tv/*> disable-meta-set-cookie = no

    <*://*.google.*/recaptcha/*> disable-meta-set-cookie = no
    <*://*.gstatic.com/recaptcha/*> disable-meta-set-cookie = no

    <*://*.phoronix.com> disable-meta-set-cookie = no
    <*://forum.mtbtula.ru> disable-meta-set-cookie = no
    <*://forum.nag.ru> disable-meta-set-cookie = no
    <*://*.chipdip.ru> disable-meta-set-cookie = no
    <*://*.ripe.net> disable-meta-set-cookie = no
 #end site specific fixes

 add-cache-info            = no

#anchor-cached-begin       = <font color="#00B000">
#anchor-cached-end         = </font>
#anchor-requested-begin    = <font color="#B0B000">
#anchor-requested-end      = </font>
#anchor-not-cached-begin   = <font color="#B00000">
#anchor-not-cached-end     = </font>

 disable-script            = no
 disable-applet            = no

 disable-style             = no

 disable-blink             = no
 disable-marquee           = no

 disable-flash             = no

 disable-meta-refresh      = yes
 disable-meta-refresh-self = yes
 disable-meta-set-cookie   = yes

 disable-dontget-links     = yes
 replace-dontget-images    = yes
 replacement-dontget-image = /local/dontget/replacement.gif
 replace-webbug-images     = yes
 replacement-webbug-image  = /local/dontget/replacement.gif

 disable-dontget-iframes   = yes

 demoronise-ms-chars       = no
 fix-mixed-cyrillic        = no

 disable-animated-gif      = no
}

Эта секция позволяет делать некоторые манипуляции непосредственно с контентом страницы.

LocalHost
{
 localhost
}

Собсно хост на котором крутица wwwoffle😊

LocalNet
{
srv.lan
megaprovider.ru
icf.org.ru
icf.bofh.ru
*.icf.org.ru
*.icf.bofh.ru
}

Локальные сервера, можно с масками как видим. Они не кешируются вообще и считаются всегда доступными, тоесть даже в оффлайн режиме.

AllowedConnectHosts
{
}

Суда можно вписать имена хостов или ip в [] скобках с которых будет доступ к wwwoffle если он нужен не только на локалхосте, мне такого не нужно так что пусто.

AllowedConnectUsers
{
}

Суда можно вписать юзеров с паролями имеющих доступ к wwwoffle, так как я один мне это тоже нах не нада и потому пусто.

DontCache
[
dontcache.list
]

А суда можно вписать урлы которые ненада кешировать, или заинклудить файл с ними сменив скобки с {} на [], в таком случае wwwoffle ищет этот файл в той же директории где и конфигурационный, никакие другие пути не поддерживаются.

Содержимое dontcache.list:

# Don't cache any dynamic pages
*://*/*/*?*

# Don't cache any archive files.
*://*/*.gz
*://*/*.tar
*://*/*.bz
*://*/*.bz2
*://*/*.Z
*://*/*.zip
*://*/*.rar
*://*/*.tgz
*://*/*.xz
*://*/*.rpm
*://*/*.deb

# Don't cache any video files.                                                                      
*://*/*.webm                                                                                        
*://*/*.mp4                                                                                         
*://*/*.avi                                                                                         
*://*/*.ts                                                                                          
*://*/*.m3u8                                                                                        
*://*/*/video/*                                                                                     
*://*/*/videoplayback
*://*.googlevideo.com/*

# Don't cache any audio files.
*://*/*.mp3
*://*/*.ogg
*://*/*.m4s

#other misc files
*://*/*.torrent

# other misc sites
*://*.adblockplus.org
*://easylist.to
*://raw.githubusercontent.com/zpacman/Blockzilla/master/*
*://addons.palemoon.org

Собсно тут мы запрещаем кешировать динамику, ато до этого у меня набролось куча закешированных урлов вида http://www.google.ru/url?q=http://wiki.icf.org.ru/2018-07-09_Networking-Blog&sa=U&ved=0ahUKEwiG5ffFnbHcAhVGliwKHZTbCIgQFggnMAM&usg=AOvVaw3UIUcZ1F3FUgGUcx2qYU23 благодаря ебучему гуголу которому сцуко нада следить за мною и куда я жму тоже, и по этому он отдает ссылки с поиска тока редиректом, ну и не тока ебучий гугол ебучий гугол, есть еще много других ебучих сайтов делающих примерно так же, в итоге у меня за неделю с небольшим с полгига такого дерьма закешировалось - пришлось запретить😊 Так же запрещаем кешировать всякие архивы, видео, музыку и прочую такую дрочь. Ну и несколько сайтов с которых нада получать свежак всегда, addblock листы в частности и аддоны бравзера.

DontGet
[
adblock-list-justdomains.txt
adguarddns-justdomains.txt
advblock-justdomains.txt
adwarefilters-justdomains.txt
antiadblockfilters-justdomains.txt
bitblockext-justdomains.txt
Blockzilla-justdomains.txt
cjx-annoyance-justdomains.txt
cntblock-justdomains.txt
easylistchina-justdomains.txt
easyprivacy-justdomains.txt
fanboy-annoyance-justdomains.txt
malwaredomains_full-justdomains.txt
nocoin-justdomains.txt
ruadlist+easylist-justdomains.txt

dontget.list
]

А вот и секция DontGet со списками что не нужно запрашивать совсем, иначе говоря зарезать. Списки подгружаюца так же из отдельных файликов. Единственный редактируемый вручную файл тут это dontget.list, остальные генеряца автоматически по различным блэклистам.

собсно содержимое dontget.list:

#favicons
    *://*/favicon.ico
    <*://*/favicon.ico> replacement = /local/dontget/favicon.ico
    *://*/favicon.png
    <*://*/favicon.png> replacement = /local/dontget/replacement.png
    *://*/*favicon*.png
    <*://*/*favicon*.png> replacement = /local/dontget/replacement.png

#annoing sheet
    *://*/*/twitter.png
    *://node.chathelp.ru/*
    *://*.apphb.com/signalr/*
    *://*.hypercomments.com/*

    *://*.google-analytics.com/*
    *://accounts.google.com/*
    *://*.google.*/complete/search*
    *://*.google.*/logos/doodles/*
    <*://*.google.*/logos/doodles/*> replacement = /local/dontget/replacement.gif
    *://*.googletagservices.com/*
    *://*.googletagmanager.com/*
    *://*.google.com/ads/measurement*
    *://*.google.*/*/generate_204
    *://*google.*/*/client_204?*
    *://*.google.*/coop/cse/*

    #http://yandex.st/share/share.js

    *://api.github.com/_private/browser/*
    *://api.rnet.plus/*
    *://softdatasystemru.webim.ru/*
    *://*.digitaltarget.ru/*
    *://*.scorecardresearch.com/*
    *://service.maxymiser.net/*
    *://*.facebook.com/plugins/*
    *://*.smartadcheck.de

    *://*.reddit.com/*?!POST:*
    *://*.redditmedia.com/gtm*
    *://*.redditstatic.com/desktop2x/*.js

    *://*.mamydirect.com
    *://ssp.rambler.ru/acp/*
    *://zdstatic.speedtest.net/*/zdconsent.js
    *://*.cdnst.net/javascript/prebid.*.min.js

    *://*/ajax/setcookie.php?*
    *://*/*/cookie_policy.css
    *://*/*/cookieconsent.min.css

    *://*/*/*.gif?*
    *://*/*/*.svg?*
    *://*/*/*.png?*

#annoing js
    *://*/*/raven.min.js*
    *://*/*/raven.js*

    *://*/*/adriver.js*
    *://*/*/adriver.core.2.js*

    *://*/*/ads.js*
    *://*/*/gtm.js*

    *://*/*/twemoji.min.js*

#AD
    *://ad.3dnews.ru/*
    *://ad.mail.ru/*
    *://ad.trialsport.ru/*
    *://ad.velomania.ru/*
    *://ads.adfox.ru/*
    *://ads.exoclick.com/*
    *://ads.servebom.com/*
    *://*.ads.claw.ru/*
    *://adservice.google.*/*
    *://pagead2.googlesyndication.com/*
    *://adx.com.ru/*
    *://*.doubleclick.net/*

    *://cdn.sstatic.net/clc/clc.ie.min.js
    *://cdn.sstatic.net/Js/stub.en.js

    *://*.opennet.ru/cgi-bin/opennet/hints.cgi*
    *://www.opennet.ru/img/*
    *://www.opennet.ru/img/ihor_but.png

    *://*.linux.org.ru/adv/*
    *://*.linux.org.ru/linuxpiter/*

    *://dr.habracdn.net/*/advertise.js*
    *://dr.habracdn.net/*/highlight.pack.js*
    *://special.habrahabr.ru/api/toplink/*

    *://cdnjs.cloudflare.com/*/MathJax.js*

    *://cdn.onthe.io/io.js*
    *://static.criteo.net/js/*

    *://*.amazon-adsystem.com/*

    *://*.trafficfactory.biz/*
    *://*.advertur.ru/*
    *://*.acint.net/*
    *://seal.alphassl.com/*
    *://*.betsonsport.ru/banners/*
    *://robinbob.in
    *://static.t-ru.org/templates/*/*lib.min.js
    *://*.actionteaser.ru/*
    *://*.directadvert.ru/*

#COUNTERS
    *://*counter*/*
    *://x.cnt.my/*
    *://cnt.vvv.ru/*
    *://server.comagic.ru/comagic/*
    *://tracker.comagic.ru/*
    *://collector.githubapp.com/*
    *://my-hit.org/scripts/js/metrika/metrika.js*
    *://rules.quantcount.com/*.js*
    *://*/*counter*?*

    <*://*/*/*.js> replacement = /local/dontget/replacement.js
    <*://*/*/*.png> replacement = /local/dontget/replacement.png
    <*://*/*/*.gif> replacement = /local/dontget/replacement.gif
    <*://*/*/*.jpg> replacement = /local/dontget/replacement.gif
    <*://*/*/*.svg> replacement = /local/dontget/replacement.gif

location-error = no

Это собственно то что я вручную прирезал ибо нехуй😊 Ну вот не понимаю и не принимаю я изьебов с favicon, с generate_204, с автоподсказками в поиске итд.

Остальное генерица вот этой вот штукой - https://github.com/justdomains/ci немного модифицированной, у нее на выхлопе просто списки доменов, нам же нужны маски понимаемые wwwoffle, ну Patch_justdomains.patch патч тривиальный😊

Патченный convertlists.py и lists.json находяца в /etc/wwwoffle/scripts, запускаеца это дело по крону вот так:

BLOCK_LOGFILE="/tmp/adblock.log"
@daily cd /etc/wwwoffle/scripts && /etc/wwwoffle/scripts/convertlists.py -v /etc/wwwoffle/scripts/lists.json /etc/wwwoffle &>>${BLOCK_LOGFILE} && /usr/bin/wwwoffle -config &>>${BLOCK_LOGFILE}

Содержимое lists.json:

[
	{
		"name": "RUADlist+EasyList",
		"url": "https://easylist-downloads.adblockplus.org/ruadlist+easylist.txt",
		"format": "adbp",
		"moreinformation": "https://easylist.to/",
		"description": "EasyList is the primary filter list that removes most adverts from international webpages, including unwanted frames, images and objects. It is the most popular list used by many ad blockers and forms the basis of over a dozen combination and supplementary filter lists.",
		"license-identifier": "GPL3 / CC BY-SA 3.0"
	},
	{
		"name": "EasyPrivacy",
		"url": "https://easylist.to/easylist/easyprivacy.txt",
		"format": "adbp",
		"moreinformation": "https://easylist.to/",
		"description": "EasyPrivacy is an optional supplementary filter list that completely removes all forms of tracking from the internet, including web bugs, tracking scripts and information collectors, thereby protecting your personal data.",
		"license-identifier": "GPL3 / CC BY-SA 3.0"
	},
        {
		"name": "AntiADblock",
		"url": "https://easylist-downloads.adblockplus.org/antiadblockfilters.txt",
		"format": "adbp",
		"moreinformation": "https://easylist.to/",
		"description": "EasyPrivacy is an optional supplementary filter list that completely removes all forms of tracking from the internet, including web bugs, tracking scripts and information collectors, thereby protecting your personal data.",
		"license-identifier": "GPL3 / CC BY-SA 3.0"
	},
        {
		"name": "ADVblock",
		"url": "https://easylist-downloads.adblockplus.org/advblock.txt",
		"format": "adbp",
		"moreinformation": "https://easylist.to/",
		"description": "EasyPrivacy is an optional supplementary filter list that completely removes all forms of tracking from the internet, including web bugs, tracking scripts and information collectors, thereby protecting your personal data.",
		"license-identifier": "GPL3 / CC BY-SA 3.0"
	},
        {
		"name": "CNTblock",
		"url": "https://easylist-downloads.adblockplus.org/cntblock.txt",
		"format": "adbp",
		"moreinformation": "https://easylist.to/",
		"description": "EasyPrivacy is an optional supplementary filter list that completely removes all forms of tracking from the internet, including web bugs, tracking scripts and information collectors, thereby protecting your personal data.",
		"license-identifier": "GPL3 / CC BY-SA 3.0"
	},
        {
		"name": "BITblockext",
		"url": "https://easylist-downloads.adblockplus.org/bitblockext.txt",
		"format": "adbp",
		"moreinformation": "https://easylist.to/",
		"description": "EasyPrivacy is an optional supplementary filter list that completely removes all forms of tracking from the internet, including web bugs, tracking scripts and information collectors, thereby protecting your personal data.",
		"license-identifier": "GPL3 / CC BY-SA 3.0"
	},
	{
		"name": "FanBoy-Annoyance",
		"url": "https://easylist.to/easylist/fanboy-annoyance.txt",
		"format": "adbp",
		"moreinformation": "https://easylist.to/",
		"description": "EasyPrivacy is an optional supplementary filter list that completely removes all forms of tracking from the internet, including web bugs, tracking scripts and information collectors, thereby protecting your personal data.",
		"license-identifier": "GPL3 / CC BY-SA 3.0"
	},
	{
		"name": "easylist-china",
		"url": "https://easylist-downloads.adblockplus.org/easylistchina.txt",
		"format": "adbp",
		"moreinformation": "https://adblockplus.org/ru/subscriptions",
		"description": "EasyPrivacy is an optional supplementary filter list that completely removes all forms of tracking from the internet, including web bugs, tracking scripts and information collectors, thereby protecting your personal data.",
		"license-identifier": "GPL3 / CC BY-SA 3.0"
	},
	{
		"name": "cjx-annoyance",
		"url": "https://raw.githubusercontent.com/cjx82630/cjxlist/master/cjx-annoyance.txt",
		"format": "adbp",
		"moreinformation": "https://adblockplus.org/ru/subscriptions",
		"description": "Specialization: removes self-promotion and privacy protection, ÄÏÐÏÌÎÅÎÉÅ Ë EasyList China",
		"license-identifier": "GPL3 / CC BY-SA 3.0"
	},
	{
		"name": "Blockzilla",
		"url": "https://raw.githubusercontent.com/zpacman/Blockzilla/master/Blockzilla.txt",
		"format": "adbp",
		"moreinformation": "https://adblockplus.org/ru/subscriptions",
		"description": "Specialization: ads and tracking protection, English",
		"license-identifier": "GPL3 / CC BY-SA 3.0"
	},
	{
		"name": "adware-filters",
		"url": "https://easylist-downloads.adblockplus.org/adwarefilters.txt",
		"format": "adbp",
		"moreinformation": "https://adblockplus.org/ru/subscriptions",
		"description": "Specialization: blocks ads injected by adware",
		"license-identifier": "GPL3 / CC BY-SA 3.0"
	},
	{
		"name": "Malware_Domains",
		"url": "https://easylist-downloads.adblockplus.org/malwaredomains_full.txt",
		"format": "adbp",
		"moreinformation": "https://adblockplus.org/ru/subscriptions",
		"description": "Specialization: malware protection",
		"license-identifier": "GPL3 / CC BY-SA 3.0"
	},
		{
		"name": "spam404",
		"url": "https://raw.githubusercontent.com/Dawsey21/Lists/master/adblock-list.txt",
		"format": "adbp",
		"moreinformation": "https://adblockplus.org/ru/subscriptions",
		"description": "Specialization: blocks scam sites",
		"license-identifier": "GPL3 / CC BY-SA 3.0"
	},
	{
		"name": "AdGuard Simplified Domain Names Filter",
		"url": "https://filters.adtidy.org/extension/chromium/filters/15.txt",
		"format": "adbp",
		"outputfile": "adguarddns.txt",
		"moreinformation": "https://kb.adguard.com/en/general/adguard-ad-filters",		
                "description": "A filter composed from several other filters (English filter, Social media filter, Spyware filter, Mobile ads filter, EasyList and EasyPrivacy) and simplified specifically to be better compatible with DNS-level ad blocking. This filter is used by AdGuard DNS servers to block ads.",
		"license-identifier": "GPL3"
	},
	{
		"name": "NoCoin Filter List",
		"url": "https://raw.githubusercontent.com/hoshsadiq/adblock-nocoin-list/master/hosts.txt",
		"format": "hosts",
		"outputfile": "nocoin.txt",
		"moreinformation": "https://github.com/hoshsadiq/adblock-nocoin-list/",
		"description": "Blocking Web Browser Bitcoin Mining",
		"license-identifier": "MIT",
		"license": "https://github.com/hoshsadiq/adblock-nocoin-list/blob/master/LICENSE"
	}
]

тоесть по сути подписки управляюца через ists.json, ну и в DontGet не забыть вписать результирующие файлики.

DontCompress
{
 mime-type = image/gif
 mime-type = image/jpeg
 mime-type = image/png
 mime-type = image/tiff

 mime-type = video/x-msvideo
 mime-type = video/quicktime
 mime-type = video/mpeg

 mime-type = audio/basic
 mime-type = audio/x-wav

 mime-type = application/x-dvi
 mime-type = application/pdf
 mime-type = application/zip

 mime-type = application/x-ns-proxy-autoconfig

 file-ext = .gz
 file-ext = .bz
 file-ext = .bz2
 file-ext = .Z

 file-ext = .zip
 file-ext = .tgz

 file-ext = .rpm
 file-ext = .deb

 file-ext = .gif
 file-ext = .GIF
 file-ext = .jpg
 file-ext = .JPG
 file-ext = .jpeg
 file-ext = .JPEG
 file-ext = .png
 file-ext = .PNG
}

Что ненада сжимать по майм типам или по расширению файла - картинки, архивы, и все такое, помоему вообще тут ничего не правил.

CensorHeader
[
censorheader.list
]

Список заголовков которые нада вырезать, или подменить, и еще несколько фич - читайте мануал кароче😊 тут опять инклудица файл censorheader.list.

Содержимое censorheader.list:

referer-self       = yes
referer-self-dir   = no
referer-from       = no

force-user-agent   = no

pass-url-unchanged = no

User-Agent = Mozilla/5.0 (X11; Linux x86_64; rv:3.4) Gecko/20100101 Goanna/20180717 PaleMoon/27.9.4

# allow cookies for specific sites
    <*://srv.lan> Set-Cookie = no
    <*://srv.lan> Cookie = no
    <*://srv.lan> session-cookies-only = no

    <*://*.lostfilm.tv> Set-Cookie = no
    <*://*.lostfilm.tv> Cookie = no
    <*://*.lostfilm.tv> session-cookies-only = no

    <*://forum.mtbtula.ru> Set-Cookie = no
    <*://forum.mtbtula.ru> Cookie = no
    <*://forum.mtbtula.ru> session-cookies-only = no

    <*://forum.nag.ru> Set-Cookie = no
    <*://forum.nag.ru> Cookie = no
    <*://forum.nag.ru> session-cookies-only = no

    <*://*.chipdip.ru> Set-Cookie = no
    <*://*.chipdip.ru> Cookie = no
    <*://*.chipdip.ru> session-cookies-only = no

    <*://*.google.*/recaptcha/*> Set-Cookie = no
    <*://*.google.*/recaptcha/*> Cookie = no
    <*://*.google.*/recaptcha/*> session-cookies-only = yes

    <*://*.gstatic.com/recaptcha/*> Set-Cookie = no
    <*://*.gstatic.com/recaptcha/*> Cookie = no
    <*://*.gstatic.com/recaptcha/*> session-cookies-only = yes

    <*://*.phoronix.com> Set-Cookie = no
    <*://*.phoronix.com> Cookie = no
    <*://*.phoronix.com> session-cookies-only = yes


    <*://*.ripe.net> Set-Cookie = no
    <*://*.ripe.net> Cookie = no
    <*://*.ripe.net> session-cookies-only = yes

    <*://*.cvedetails.com> Set-Cookie = no
    <*://*.cvedetails.com> Cookie = no
    <*://*.cvedetails.com> session-cookies-only = yes

# block all cookies
#    Set-Cookie = yes
#    Cookie = yes

#allow session cookies only
    session-cookies-only = yes

# block other annoing headers
# dont block Access-Control-Allow-Origin - used some video hostings

    Via = yes

#    Strict-Transport-Security = yes
#    X-Frontend = yes
#    X-Powered-By = yes
#    X-Frame-Options = yes

    #github
#    X-Fastly-Request-ID = yes
#    X-Timer = yes
#    X-Cache-Hits = yes
#    X-Cache = yes
#    X-Served-By = yes
#    X-GitHub-Request-Id = yes
#    X-Geo-Block-List = yes
#    X-XSS-Protection = yes
#    X-Content-Type-Options = yes
#    Content-Security-Policy = yes
#    Access-Control-Expose-Headers = yes

тут мы разрешаем куки на нужные мне сайты.

Proxy
[
proxy_header
blocked_domains_rkn.list
blocked_urls_rkn.list
proxy_footer
]

А вот и секция парент прокси, именно тут разруливается что через какой вышестоящий прокси запрашивать, а что на прямую - сердце так сказать механизьма обхода блокировок позорного РКН. прокси указываются раздельно для http и https что не совсем удобно.

proxy_header:

# TOR internal resources
<http://*.onion> proxy = localhost:8888
<https://*.onion> ssl = localhost:8888

# I2P internal resources
<http://*.i2p> proxy = localhost:4444
<https://*.i2p> proxy = localhost:4444

Тут мы указываем parent прокси для внутренних ресурсов TOR и I2P сетей. TOR предоставляет только socks прокси в отличии от I2p, поэтому между ним и wwwoffle стоит промежуточный 3proxy, который умеет преобразовывать socks<=>http/s.

proxy_footer:

<*://*/*> proxy = none
<*://*/*> ssl = none

Здесь мы запрещаем все прокси для всех, тоесть если адрес не в I2P/TOR сети и не в списках РКН то идем директом, именно поэтому этот файл должен быть последним в секции.

Генерируется это все вот таким нехитрым скриптом лежащим в /etc/wwwoffle/scripts под названием rkn.sh:

#!/bin/bash

PROXY="localhost:8888"
OUT_ENCODING="koi8-r"
LOGFILE="/tmp/rkn.log"
ERDI_XML="/usr/bin/xmlstarlet"
EIPSET="/usr/sbin/ipset"
TMPFILE=`mktemp`
#TMPFILE="/tmp/dump.xml"

wget --retry-connrefused -O $TMPFILE http://api.antizapret.info/all.php?type=xml

create_ipset()
{
"${EIPSET}" flush $2 2>/dev/null || "${EIPSET}" create $2 $1 maxelem 262144
for f in "$3" "$4"
do
 [ -f "$f" ] && {
  echo Adding to ipset $2 \($1\) : $f
   sort -u "$f" | sed -nre "s/^.+$/add $2 &/p" | "${EIPSET}" -! restore
 }
done
return 0
}


ACL=/etc/wwwoffle/blocked_domains_rkn.list
echo "Список доменов нормализованный ($ACL)"
mv $ACL $ACL.bak
"${ERDI_XML}" select -E "$OUT_ENCODING" -T -t -v "/reg:register/content/domain" -n "$TMPFILE" \
|sort \
| uniq \
|idn --quiet --no-tld -- \
|awk -v PROXY=$PROXY '/[0-9]|[a-z]/ {print "<http://" $0 "> proxy = "PROXY;print "<https://" $0 "> ssl = "PROXY;}' \
> $ACL
wc -l <$ACL

ACL=/etc/wwwoffle/blocked_urls_rkn.list
echo "Список url адресов ($ACL)"
mv $ACL $ACL.bak
"${ERDI_XML}" select -E "$OUT_ENCODING" -T -t -v "/reg:register/content/url" -n "$TMPFILE" \
|tr -s "\," "\n" \
|grep -e "^http" \
|sort \
|uniq \
|grep -v "<" \
|grep -v ">" \
|awk -v PROXY=$PROXY '$0 ~ /^https:/ {print "<" $0 "> ssl = "PROXY}; $0 ~ /^http:/ {print "<" $0 "> proxy = "PROXY}' \
> $ACL
wc -l <$ACL

ACL=`mktemp`
echo "Список IP адресов ($ACL)"
"${ERDI_XML}" select -E "$OUT_ENCODING" -T -t -v "/reg:register/content/ip" -n "$TMPFILE" \
|tr "\," "\n" \
|sort -V -u \
> $ACL
wc -l <$ACL

create_ipset hash:net blocked_ip_rkn $ACL

rm $ACL
rm $TMPFILE

Слить чтоп не копипастить дохрена:)

Для работы нужен xmlstarlet и ipset, ну wget,awk,grep,sort и остальное как правило есть везде. Список блокировок выкачивается с https://antizapret.info/ через ихний api, но впрочем их куча еще и на гитхабе и где их ща тока нет😊 ipset нужен не для самой wwwofle а для PBR, который нужен потому что по ip и подсетям wwwoffle выбирать выщестоящие прокси не умеет а РКН не вкурсе такой хуйни, и блочит и по ip и подсетями тоже, причем нехилыми такими типа /15, а потом фсе плачут и пиздец, но хуйвам - прорвемся😊 и поэтому чтоп как то обратабывать эти блоки подсетей и ипишников используется ipset + PBR.

Переменную PROXY нада выставить в адрс и порт того самого промежуточного 3proxy.

запускаеца по крону вот так:

RKN_LOGFILE="/tmp/rkn.log"
@reboot /usr/bin/sleep 30 && /etc/wwwoffle/scripts/rkn.sh &>${RKN_LOGFILE} && /usr/bin/wwwoffle -config &>>${RKN_LOGFILE}
@daily /etc/wwwoffle/scripts/rkn.sh &>${RKN_LOGFILE} && /usr/bin/wwwoffle -config &>>${RKN_LOGFILE}
0 10 * * * /etc/wwwoffle/scripts/rkn.sh &>${RKN_LOGFILE} && /usr/bin/wwwoffle -config &>>${RKN_LOGFILE}
0 18 * * * /etc/wwwoffle/scripts/rkn.sh &>${RKN_LOGFILE} && /usr/bin/wwwoffle -config &>>${RKN_LOGFILE}

@reboot - запуск после перезагрузки, нужен чтоп заполнить ipset, который в ядре и перезагрузку соттветственно не перживает и оказывается пустым.

Purge
{

 <*://*/*.css> age = 7w
 <*://*/*.js> age = 7w
 <*://*/*.json> age = 7w

 <*://*/*.png> age = 7w
 <*://*/*.jpg> age = 7w
 <*://*/*.jpeg> age = 7w
 <*://*/*.gif> age = 7w
 <*://*/*.ico> age = 7w

 <*://*/*.pdf> age = 7w
 <*://*/*.swf> age = 7w

 use-mtime     = no

 max-size      = -1
 min-free      = -1

 use-url       = yes

 del-dontget   = yes
 del-dontcache = yes

 age           = 4w

 compress-age  = -1
}

Секция Purge управляет очисткой кеша, здесь определяеца че скока хранить и когда удалять. Тут мы храним всякие картинки пдфки css/js и всю такую хорошо кешируемую дроч 7 недель😊

Ох вроде все по конфигу wwwoffle😊 Вот такая вота партянка по маленькому персональному проксику😊 Вот еще мой полный crontab обслуживающий wwwoffle:

RKN_LOGFILE="/tmp/rkn.log"
BLOCK_LOGFILE="/tmp/adblock.log"

@reboot /usr/bin/sleep 30 && /etc/wwwoffle/scripts/rkn.sh &>${RKN_LOGFILE} && /usr/bin/wwwoffle -config &>>${RKN_LOGFILE}
@daily /etc/wwwoffle/scripts/rkn.sh &>${RKN_LOGFILE} && /usr/bin/wwwoffle -config &>>${RKN_LOGFILE}
0 10 * * * /etc/wwwoffle/scripts/rkn.sh &>${RKN_LOGFILE} && /usr/bin/wwwoffle -config &>>${RKN_LOGFILE}
0 18 * * * /etc/wwwoffle/scripts/rkn.sh &>${RKN_LOGFILE} && /usr/bin/wwwoffle -config &>>${RKN_LOGFILE}

@daily cd /etc/wwwoffle/scripts && /etc/wwwoffle/scripts/convertlists.py -v /etc/wwwoffle/scripts/lists.json /etc/wwwoffle &>${BLOCK_LOGFILE} && /usr/bin/wwwoffle -config &>>${BLOCK_LOGFILE}

@daily /usr/bin/wwwoffle -purge|grep -i del &>/var/log/wwwoffle-purge.log

тоесть тут еще и чистка кеша приплюсовалась.

Основные часто используемые команды 2:

больше мне вроде особо ниче не нужно было, но там есть еще😊

По работе впринципе особых нареканий нет, не смотря на весьма обьемныей списки, к примеру только ркновские домены+урлы 198218 записей, блоклисты 91182 записей, итого под 300 тысяч в сумме переваривает кабудта их нет - запуск, перечитывание конфига, да и просто работа - никаких тормозов не ощющаю как и загрузки cpu, единственное очистка кеша тормозит при этом знатно, точно знаю что из за них - без списков тоже летала. Видимо это из за del-dontget и del-dontcache, но на работу самого прокси это всеравно не влияет никак. Вот тебе и домашний проксик😊 А вот сквид на тех же условиях правда плюсом еще список ip а это еще уже почти 100К записей на данный момент при запуске на парсинге всего этого тупил уже ближе к минуте наверное, тоесть перезапускать или переконфигурить его это был ад и израиль😊 Хотя когда запустица - работал и не чхал😊

Еще оно иногда сегфолтица, хз где и почему но не в управляющем процессе видимо а в порождаемых потоках для обработки соединений, нада будет полазить с дебагером и поправить, но на работе это тоже я не вижу чтоп сказывалось, может падает гдето на закрытии соединения или типа того когда уже все сделано.

Впринципе вот эта вот система масок у него тоже очень понравилась. На фоне сквидовских регэкспов, да, они универсальней конечно, но сука с ними головняка в 10 рас больше - то экранируй это экранируй тут чето не срослось там нето тут какой то дебил по русски в листе написал или по китайски или спецсимволов наткал и фсе - оно споткнулось и сразмаху наебнулось, сквид не стартанул, бида пичаль фсе плачут и пиздец😊 А в wwwoffle никаких проблем - все просто как для дебилов и эффективно, и покрывает наверное 90 процентов того что можно накрутить регэкспами в сквиде.

А вот система логгирования это у wwwoffle ад израиль и пиздец😊 и я плачу😊 оно там конечно пишет - что из кеша, что в кеш, и pid процесса, но если много запросов то оно пишет в разнобой и бывает сходу хрен поймеш че к чему, request hit rate/byte hit rate оценить по логам в свете этого тоже та еще задача потому что на 1 запрос куча строк получается, встроенной статистики тоже нет никакой, впринципе не критично, но обидно😊 и с листами тоже нада доработать - оно пишет что попало к примеру в DontGet, но не пишет куда именно в нем, а если он большой то задолбаешся искать, может уровень логгинга поднять и начнет писать, я не пробовал, но я его итак уже приподнял чтоп хотябы видеть что закешировалось что нет что заблочилось. Впрочем сквид тоже не пишет в какой именно регэксп запрос попал - догадайся сам😊

Логгинг я отправил в сислог, у меня syslog-ng, им удобно разруливать такие вещи, примерно вот та:

## WWWOFFLE
destination d_wwwoffled { file("/var/log/wwwoffled.log"); };
filter f_wwwoffled { program("wwwoffled") or program ("wwwoffles"); };
log { source(src); filter(f_wwwoffled); destination(d_wwwoffled); flags(final); };

при этом ротейтить его можно логротейтом без дерганья самого wwwoffle, примерно вот так:

/var/log/wwwoffled.log {
        missingok
        notifempty
        copytruncate
}

По части кеширования можно хоть чтото прикрнуть вот так: ncdu

это наверное гдето за полмесяца, тоесть директория https в которой все что по https уже 2.4 гига, a http всего 213 мегабайт, что лиш подтверждает что на данный момент прокси без mitm в https потеряли актуальность чуть менее чем совсем.

Блять, неужели я наконец то дописал это😊 ладна теперь пойдем дальше:

Настройка TOR

Который нам нужен как средство обойти блокировки так как выходные ноды у него разбросаны по всему миру. Собсно конфиг:

/etc/tor/torrc:

#
# Minimal torrc so tor will work out of the box
#
User tor
PIDFile /var/run/tor/tor.pid
Log notice syslog
SafeLogging 0
DataDirectory /var/lib/tor/data
AvoidDiskWrites 1
#HardwareAccel 1
#AccelName cryptodev
SOCKSPort 127.0.0.1:9050 NoIPv6Traffic NoIsolateClientAddr NoIsolateSOCKSAuth
SocksTimeout 60
TestSocks 1
DNSPort 127.0.0.2:53 NoIsolateClientAddr
TransPort 127.0.0.1:9049 NoIsolateClientAddr NoPreferIPv6Automap
ControlPort 9051
MaxMemInQueues 256 MB
HashedControlPassword 16:5A0131CDE07B048560AD57E0306553CEDB23743F7DB20C74243C5EE58E
ShutdownWaitLength 1

#OutboundBindAddress 10.32.75.177

#dns resolver automap
AutomapHostsSuffixes .onion
VirtualAddrNetworkIPv4 169.254.0.0/16
AutomapHostsOnResolve 1

#DownloadExtraInfo 0
#EnforceDistinctSubnets 0
#OptimisticData auto

#FetchDirInfoEarly 0
#FetchDirInfoExtraEarly 0

#UseEntryGuards 1
#NumEntryGuards 32

TrackHostExits .
TrackHostExitsExpire 600

#LearnCircuitBuildTimeout 1
#NewCircuitPeriod 10
#CircuitBuildTimeout 30
#CircuitStreamTimeout 10
#CircuitIdleTimeout 3600
#MaxCircuitDirtiness 14400
#MaxClientCircuitsPending 512
#KeepalivePeriod 60

KeepBindCapabilities 0
GeoIPExcludeUnknown 0
ExcludeExitNodes {ru},{??}

#ExcludeExitNodes {ru},{ua},{se},{io},{ro}, \
#                   46.105.0.0/16, \
#                   46.183.216.0/21, \
#                   192.42.116.0/22, \
#                   77.247.176.0/21, \
#                   185.38.12.0/22, \
#                   163.172.0.0/16, \
#                   46.166.144.0/21, \
#                   216.218.128.0/17, \
#                   193.90.0.0/16, \
#                   104.233.64.0/18, \
#                   62.210.0.0/16, \
#                   176.10.96.0/19, \
#                   85.248.0.0/16, \
#                   137.74.167.224, \
#                   94.142.240.0/21, \
#                   185.11.180.0/22, \
#                   89.31.56.0/21, \
#                   151.80.0.0/16, \
#                   198.50.200.128/27, \
#                   199.249.223.0/24, \
#                   94.242.192.0/18, \
#                   149.56.229.17, \
#                   173.208.128.0/17, \
#                   66.180.193.192/27, \
#                   199.127.224.0/22, \
#                   41.206.160.0/19, \
#                   93.174.88.0/21, \
#                   69.162.128.0/18, \
#                   193.70.0.0/17, \
#                   207.244.64.0/18, \
#                   37.187.0.0/16, \
#                   195.228.0.0/16

ClientOnly 1

Стоит он у меня уже давно, поэтому я всех ньюансов уже не помню, только основные:

Следующие 3 строчки делают еще 1 полезную весчь называемую dns resolver automap, суть в том что при запросе внутреннего ресурса в зоне .onion, вот тот внутренний днс сервер выдает ему левый ип из определенного диапазона, и сопоставляет с той белибердой называемой внутренними адресами в сети тор, благодаря чему, любой софт может обратица к данному ресурсу и не обламаца при днс резольвинге пока живо это сопоставление.

У меня этот автомэппинг работает в связке с tun2socks, это по сути обычный tun интерфейс в системе в который отроучена 169.254.0.0/16, другим концом он цепляеца на socks сервер тора, правда умеет он тока TCP но udp через тор не особо то и нада с его то лагами. ну и плюс форвардинг с локального днс сервера. Таким образом в onion может лазить вообще любой софт, ему не нужен никакой прокси, он просто запрашивает у локального днс сервера адрес, тот лезет на днс сервер тора с той же целью, сервер тора отвечат и сразу делает мэппинг, после чего приложение работает как обычно - все адреса из мэппинга то отроучены в tun, не нужно уметь никакой socks прокси вообще. Таким же образом работает и ipset с заблокированными подсетями, только тут уже даже и мэппинг не нужен - главное отправить траффик на этот адрес через tun интерфейс.

Вот вроде бы и все что я смог вспомнить с тором то.

Вобщем дальше настало время связующего звена между тором и wwwoffle в виде 3proxy в позе http/s=>socks прокси. В случае сквида оно было не нужно, там я через ацл мог сразу отправить запрос через тот самый tun2socks интерфейс и не парица - оно просто работало, wwwoffle так не может, и нужно промежуточное звено, тоже долго искал... чучуть поработал с tinyproxy который пришлось пропатчить на предмет поддержки socks, но потом всетаки остановился на [Glossary_3proxy|3proxy]], он маленький, дохера чего может, можно сделать кучу разных проксей для разных задач и все в рамках одной софтины, потому остановился на нем.

Настройка 3proxy

Тут так просто сходу 2 кнопками нихера не выйдет - придеца вдумчиво читать документацию😊 порядок команд имеет значение, порядок ACL тоже, и еще куча ньюансов, но тем не менее все работает😊 Неожиданностью оказалось что он тоже умеет mitm aka sslbump для https, правда не понятно нахуя😊 может для фильтрации тока, кешировать к сожалению он не умеет впринципе, зато умеет проксировать http/https,socks4/5/ftp/pop/smtp и даже просто tcp, естественно умеет http/s=>socks и наоборот тоже, иначе бы я его не поставил😊 Расширяеца плагинами, и судя по сайту довольно активно пилица. Эдакий маленький кобайн который может дохрена всего, размером всего в полмегабайта. Умел бы он кешировать думаю надобность в wwwoffle бы отпала, а он бы точно стал паравозиком который смог😊 но, неумеет.

Тут не только то что нам нада для решения задачи, но и кое что еще сбоку - socks->http прокси, я через него же подключаюсь с работы, хоть я и работаю в ISP, и могу обойти эти блокировки по другому так как все железо подконтрольно мне в том числе и то что эти блокировки реализует, да и можно тупо подключица выше этих блокираторов, но это ломает стройность операторского ядра сети и поэтому я не хочу так делать, а юзаю домашний прокси с работы через socks, заодно и банерорезку получаю.

ebuild в gentoo кривоватый, не в плане что не собираеца, а в плане что тупо ставит бинарники и документацию и все - никаких init скриптов и дефолтных конфигов нет, никакого отдельного пользователя для процесса тоже нет, пришлось создавать вручную, все директории тоже вручную, в самом архиве есть init скрипт но пришлось подправить пути и еще там по мелочи. но это все мелочи😊

итак конфиг:

config /etc/3proxy/3proxy.cfg
setgid 990
setuid 999
daemon
internal 10.32.75.177
external 127.0.0.1
nserver 127.0.0.1
#nscache 1024
fakeresolve
timeouts 1 5 30 60 180 1800 15 60
log /var/log/3proxy/3proxy.log D
logformat "L%d-%m-%Y %H:%M:%S.%.  %N.%p %E %U %C:%c %R:%r %O %I %h %T"
archiver gz /bin/gzip %F
rotate 30

users $/etc/3proxy/.proxyauth

############### Private HTTP -> SOCKS, used to link wwwoffle to socks servers in tor
maxconn 64
auth iponly
allow * 127.0.0.0/8 * * *
parent 1000 socks5+ 127.0.0.1 9050
allow * 127.0.0.0/8 * * HTTP,HTTPS
proxy -a -n -p8888 -i127.0.0.1 -e127.0.0.1
flush

############### Public SOCKS -> HTTP service - personal use on my work to obey rkn blocks for example
maxconn 64
#auth iponly strong
auth iponly
allow * 91.193.236.34 * 80,8080
parent 1000 http 127.0.0.1 3128
allow * 91.193.236.34 * 443
parent 1000 connect+ 127.0.0.1 3128
socks
flush

############### Test auth
#auth strong
#maxconn 64
#allow root
#socks -u2
#flush


pidfile /run/3proxy.pid

ну тут впринципе все понятно😊

дальше собственно кусок который какрас реализует http->socks между wwwoffle и тором:

Вот впринципе и все, запускаеца он путем 3proxy /path/to/config😊 по сигналу USR1 он толи перезапускаеца толи конфиг перечитывает толи и то и другое - хз. Так же там еще в конфиге откомментированная секция c SOCKS->HTTP прокси который я юзаю с работы, принцип вобщем то тот же только там 2 парента, один для http другой для https и соотвествующие ACL'и к ним выбирающие их по dst port, сделано так потому что для http и https различный тип парентов что впринципе логично, так как использование https несколько отличается от http, если вам данный функционал не нужен то просто удалите эту секцию.

Поправленный init скрипт - положить в /etc/init.d/3proxy:

#!/bin/sh
#
# chkconfig: 2345 20 80
# description: 3proxy tiny proxy server
#
#
#
#

PID="/run/3proxy.pid"
if [ ! -f $PID ]; then
    touch $PID && chown proxy3.proxy3 $PID
fi

case "$1" in
   start)
       echo Starting 3Proxy

       /usr/bin/3proxy /etc/3proxy/3proxy.cfg

       RETVAL=$?
       echo
       [ $RETVAL ]
       ;;

   stop)
       echo Stopping 3Proxy
       if [ $PID ]; then
               /bin/kill `cat $PID`
       else
               /usr/bin/killall 3proxy
       fi

       RETVAL=$?
       echo
       [ $RETVAL ]
       ;;

   restart|reload)
       echo Reloading 3Proxy
       if [ $PID ]; then
               /bin/kill -s USR1 `cat $PID`
       else
               /usr/bin/killall -s USR1 3proxy
       fi
       ;;


   *)
       echo Usage: $0 "{start|stop|restart}"
       exit 1
esac
exit 0

ну и в gentoo сделать rc-update add 3proxy default. По работе могу сказать покашто тока одно - его не видно и не слышно - настроил(поебался) и забыл😊 никаких глюков, падений и проблем небыло.

На данный момент должна работать wwwofle <=> внешний мир, и связка wwwoffle <=http/s=> 3proxy <=socks5=> tor <=> внешний мир для всего что есть в proxy_header и в ркновских блоклистах😊 если нет то проверяем покомпонентно тем же браузером начиная с tor и движемся в сторону wwwofle.

Если вам это не удаеца и вы не можете идентифицировать неработающий компонент, если вы не знаете как использовать tcpdump, как телнетом запросить страничку по http, или не понимаете разницу между socks http и https протоколами хотя бы отдаленно, если не знаете как применить патч и не можете узнать, или не дай бог не отличаете клиента от сервера или не можете читать по английски недайбоже то тушим свет и расходимся, вам на хабр настраивать прокси для телеграмов а не такие связки лепить. Это даже еще не половина😊 Ко мне с вопросами пачемунипашет приставать даже не пытайтесь.

to bee continued

Устал всякух хрень писать😊