Zapret İle Engelli Sitelere Giriş (Linux ve OpenWRT Router)

Daha önceki GoodbyeDPI İle Engelli Sitelere Giriş yazısında Windows için DPI engelini kaldırmanın yolunu anlatmıştım.
Bu yazımıda DPI nedir tekrardan bahsedeceğim ve Zapret ile Linux sunucularda/bilgisayarlar ve Linux tabanlı routerlar için aktif ve pasif DPI engelini kaldırmanın yolunu anlatacağım.

Not: Kurulum adımları 08.11.2020 tarihinde güncellenmiştir.



Pasif DPI Nedir?

Pasif DPI, istekte bulunduğunuz web adresi ile aranıza girerek siz sayfayı yükleyemeden 302 yönlendirme ile girmek istediğiniz web sayfası yerine sizi başka bir sayfaya yönlendiren sansür uygulamaktadır.



Aktif DPI Nedir?

Bu yöntem diğerine göre çok daha karışıktır. TCP düzeyinde istekleriniz filtrelenir. Girmek istediğiniz websitesinin IP adresi sansür listesinde bulunması durumunda, sadece sayfaya ulaşılamadı hatası alırsınız.

Türkiye’deki internet servis sağlayıcılar (ISP) bu iki sansür yöntemini de kullanmaktadır. Örneğin TurkTelekom Ev, VodafoneNet Ev ve Superonline Ev kullanıcılarında Pasif DPI kullanıluyor. Aktif DPI ise şimdilik sadece TurkTelekom Metro Ethernet hizmetinde karşılaştım.

Sizlere yapacağım anlatım TurkTelekom Metro Ethernet kullanan bir sunucuda aktif ve pasif DPI engelleme kaldırmaya yönelik olacaktır.



Zapret Kurulumu Öncesi DPI Kontrolü

Turk Telekom Metro Ethernet kullanan sunucumda engelli olduğunu bildiğim independentturkish.com referans alarak anlatımı yapacağım. Zapret öncesi independentturkish.com adresine HTTP ve HTTPS ile ayrı ayrı bağlanmayı deneyelim.

root@trweb:~# curl -I http://independentturkish.com
curl: (56) Recv failure: Connection reset by peer
root@trweb:~# curl -I https://independentturkish.com
curl: (35) OpenSSL SSL_connect: SSL_ERROR_SYSCALL in connection to independentturkish.com:443

Gördüğünüz gibi hem HTTP, hem de HTTPS isteği daha sunucuya erişmeye çalışmadan ISP tarafından sonlandırıldı ve Connection reset by peer ve SSL_ERROR_SYSCALL ile karşılaştık.



Zapret Kurulumu

Not: Kurulum adımları 08.11.2020 tarihinde güncellenmiştir.

Zapret de GoodByeDPI gibi Rus bir programcının Linux sistemler için geliştirdiği bir yazılım. GitHub üzerinden açık kaynak kodlu olarak dağıtılmaktadır. Kurulum için öncelikle sunucumuza SSH ile bağlanalım ve /opt klasörüne giriş yapalım.

root@trweb:~# cd /opt
root@trweb:/opt#

git clone –depth 1 https://github.com/bol-van/zapret komutu ile programı sunucuya çekelim.

root@trweb:/opt#  git clone --depth 1 https://github.com/bol-van/zapret
Cloning into 'zapret'...
remote: Enumerating objects: 168, done.
remote: Counting objects: 100% (168/168), done.
remote: Compressing objects: 100% (145/145), done.
remote: Total 168 (delta 17), reused 132 (delta 12), pack-reused 0
Receiving objects: 100% (168/168), 1.92 MiB | 3.65 MiB/s, done.
Resolving deltas: 100% (17/17), done.
root@trweb:/opt#

zapret klasörüne girelim ve config dosyasını nano ile düzenleyelim.

root@trweb:/opt# cd zapret/
root@trweb:/opt/zapret# nano config

NFQWS_OPT_DESYNC satırı hariç tüm satırları diez (#) işareti ile pasif duruma getirelim.

NFQWS_OPT_DESYNC satırı değerini aşağıdaki gibi değiştirelim.

NFQWS_OPT_DESYNC="--dpi-desync --dpi-desync-ttl=9 --dpi-desync-fooling=md5sig --dpi-desync-skip-nosni=0 --dpi-desync-fwmark=0x40000000 --dpi-desync-retrans=0"

config dosyasının son hali aşağıdaki gibi olmalıdır.

# this file is included from init scripts
# change values here

# can help in case /tmp has not enough space
#TMPDIR=/opt/zapret/tmp

# options for ipsets
# too low hashsize can cause memory allocation errors on low RAM systems , even if RAM is enough
# too large hashsize will waste lots of RAM
IPSET_OPT="hashsize 262144 maxelem 2097152"

# options for ip2net. "-4" or "-6" auto added by ipset create script
IP2NET_OPT4="--prefix-length=22-30 --v4-threshold=3/4"
IP2NET_OPT6="--prefix-length=56-64 --v6-threshold=5"

# CHOOSE OPERATION MODE
# MODE : nfqws,tpws,filter,custom
# nfqws : use nfqws
# tpws : use tpws
# filter : no daemon, just create ipset or download hostlist
# custom : custom mode. should modify custom init script and add your own code
MODE=nfqws
# apply fooling to http
MODE_HTTP=1
# for nfqws only. support http keep alives. enable only if DPI checks for http request in any outgoing packet
MODE_HTTP_KEEPALIVE=1
# apply fooling to https
MODE_HTTPS=1
# none,ipset,hostlist
MODE_FILTER=none

# CHOOSE NFQWS DAEMON OPTIONS for DPI desync mode. run "nfq/nfqws --help" for option list
DESYNC_MARK=0x40000000
#NFQWS_OPT_DESYNC="--dpi-desync=fake --dpi-desync-ttl=0 --dpi-desync-fooling=badsum --dpi-desync-fwmark=$DESYNC_MARK"
NFQWS_OPT_DESYNC="--dpi-desync --dpi-desync-ttl=9 --dpi-desync-fooling=md5sig --dpi-desync-skip-nosni=0 --dpi-desync-fwmark=0x40000000 --dpi-desync-retrans=0"


# CHOOSE TPWS DAEMON OPTIONS. run "tpws/tpws --help" for option list
TPWS_OPT="--hostspell=HOST --split-http-req=method --split-pos=3"

# openwrt only : donttouch,none,software,hardware
FLOWOFFLOAD=donttouch

# for routers based on desktop linux only. has not effect in openwrt.
# CHOOSE LAN and WAN NETWORK INTERFACES
# or leave them commented if its not router
#IFACE_LAN=eth0
#IFACE_WAN=eth1

# should init scripts apply firewall rules ?
# set to 0 if firewall control system is present
# openwrt uses fw3 firewall , init never touch fw
INIT_APPLY_FW=1

# do not work with ipv4
#DISABLE_IPV4=1
# do not work with ipv6
DISABLE_IPV6=1

# select which init script will be used to get ip or host list
# possible values : get_user.sh get_antizapret.sh get_combined.sh get_reestr.sh get_hostlist.sh
# comment if not required
#GETLIST=

Düzenlediğim ayarlar Turk Telekom ile Netflix izlenebilecek şekilde tarafımdam test edilmiş olup aktif olarak kullandığım ayarlardır.

install_easy.sh dosyasını çalıştırarak kuruluma başlayalım.

root@trweb:/opt/zapret# ./install_easy.sh

Kurulum dosyası gerekli bileşenleri yükleyecektir.

Kurulum sırasında IPv6 isteyip istemediğinizi soracaktır. N ile kuruluma devam edelim.

enable ipv6 support (default : Y) (Y/N) ? N

Kurulum yapılan cihazın router olup olmadığını soracaktır. Linux sunucu veya masaüstü kullanıyorsanız N ile kuruluma devam etmelisiniz. Zapret OpenWRT gibi bir routera da kurulabildiği için size bunu sormaktadır. Eğer OpenWRT gibi bir router üzerine kurulum yapıyorsanız Y ile devam etmelisiniz.

is this system a router (default : N) (Y/N) ? N

Zapret’i hangi mod ile çalıştıracağımız soracaktır. Kullanacağımız mod nfqws Karşılığı olarak 2 yazıp devam ediyoruz.

select MODE :
1 : tpws
2 : nfqws
3 : filter
4 : custom
your choice (default : nfqws) :

Programı HTTP siteler için aktif edeceğiz. Y ile devam ediyoruz.

enable http support (default : Y) (Y/N) ? Y

HTTP siteler için Keep Alive özelliğini aktif edeceğiz. Y ile devam ediyoruz.

enable keep alive support only if DPI checks every outgoing packet for http signature
dont enable otherwise because it consumes more cpu resources
enable http keep alive support (default : Y) (Y/N) ? Y

Programı HTTPS siteler için aktif edeceğiz. Y ile devam ediyoruz.

enable https support (default : Y) (Y/N) ? Y

Fitreleme seçeneğini soracaktır. None seçeneği olan 1 ile devam ediyoruz.

select filtering :
1 : none
2 : ipset
3 : hostlist
your choice (default : none) : 1

press enter to continue ibaresini gördükten sonra enter tuşu ile kurulumu bitiriyoruz.



Zapret Kurulumu Öncesi DPI Kontrolü

Zapret kurulumu öncesi referans aldığım independentturkish.com adresine HTTP ve HTTPS istek gönderecek tekrardan deneyelim.

root@trweb:/opt/zapret# curl -I https://independentturkish.com
HTTP/2 301
date: Tue, 05 May 2020 20:36:21 GMT
content-type: text/html; charset=iso-8859-1
set-cookie: __cfduid=d26de2100fd3fcc3feb370f2625c06fbc1588710981; expires=Thu, 04-Jun-20 20:36:21 GMT; path=/; domain=.independentturkish.com; HttpOnly; SameSite=Lax; Secure
x-content-type-options: nosniff
location: http://www.independentturkish.com/
cache-control: max-age=1209600
expires: Fri, 15 May 2020 11:24:34 GMT
x-request-id: v-55ca9606-8b9e-11ea-b190-a31b3bc641f2
age: 378706
via: varnish
x-cache: HIT
x-cache-hits: 318
cf-cache-status: DYNAMIC
expect-ct: max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"
server: cloudflare
cf-ray: 58ed40d2ef0cc2ea-FRA
cf-request-id: 028826d7d50000c2ead410d200000001
root@trweb:/opt/zapret# curl -I https://independentturkish.com
HTTP/2 301
date: Tue, 05 May 2020 20:38:07 GMT
content-type: text/html; charset=iso-8859-1
set-cookie: __cfduid=da4289f5d7d0fbcce329ec66634deb7541588711087; expires=Thu, 04-Jun-20 20:38:07 GMT; path=/; domain=.independentturkish.com; HttpOnly; SameSite=Lax; Secure
x-content-type-options: nosniff
location: http://www.independentturkish.com/
cache-control: max-age=1209600
expires: Fri, 15 May 2020 11:24:34 GMT
x-request-id: v-55ca9606-8b9e-11ea-b190-a31b3bc641f2
age: 378812
via: varnish
x-cache: HIT
x-cache-hits: 319
cf-cache-status: DYNAMIC
expect-ct: max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"
server: cloudflare
cf-ray: 58ed4369598505c4-FRA
cf-request-id: 02882875d9000005c421a2a200000001

Gördüğünüz gibi engelli olan siteye kolayca erişim sağlayabildik.



Zapret Programının Kaldırılması

/opt/zapret altında yer alan uninstall_easy.sh komutunu çalıştırarak kolayca programı kaldırabilirsiniz.

root@trweb:~# cd /opt/zapret/
root@trweb:/opt/zapret# ./uninstall_easy.sh
* checking system
system is based on systemd
* stopping zapret service
Removed /etc/systemd/system/zapret.service.
Removed /etc/systemd/system/multi-user.target.wants/zapret.service.
* removing zapret service
* removing zapret-list-update timer
Removed /etc/systemd/system/timers.target.wants/zapret-list-update.timer.
Removed /etc/systemd/system/zapret-list-update.timer.
* removing crontab entry

press enter to continue

İyi günlerde kullanmanız dileğiyle

“Zapret İle Engelli Sitelere Giriş (Linux ve OpenWRT Router)” üzerine 28 yorum

  1. merhabalar yazınız gayet açıklayıcı ve öğretici olmuş ellerinize sağlık rica etsem zapreti android cihazlar için kurulumunu anlatan biryazı paylaşabilir misiniz şimdiden teşekkür ederim

    Yanıtla
  2. Hocam Zapret in sürümü değişmiş galiba, içindeki kodlar farklı. sizin bahsettiğiniz gibi yapamadım. yeni sürüme göre tekrar yayınlar mısınız?

    Yanıtla
  3. Merhaba,

    Zapret’i Openwrt’ye kurmaya çalışırken ilgili dizinde “./install_easy.sh” komutunu çalıştırdığım zaman “-ash: ./install_easy.sh: Permission denied” hatasını alıyorum.

    Problemin çözümüyle alakalı herhangi bir fikriniz var mı?

    Teşekkürler.

    Yanıtla
    • Merhabalar,

      Komutu çalıştırmadan önce
      chmod +x install_easy.sh
      yapıp deneyebilir misiniz?

      Eğer yine aynı hata ile karşılaşırsanız bu sefer de
      chmod 777 install_easy.sh
      ile denemenizi öneririm.

      Yanıtla
      • Yanıtınız için çok teşekkürler. Verdiğiniz komutu çalıştırıp, sonrasında install komutunu çalıştırınca da aşağıdaki hatayı verdi;

        * checking system
        system is based on openwrt
        * checking executables
        ./install_easy.sh: line 172: /tmp/zapret/install_bin.sh: Permission denied
        build tools not found

        Yanıtla
        • Paylaştığınız komutun aynısını hatada yazdığı “install_bin.sh” dosyası için de çalıştırdığım zaman sonraki aşamaya geçebildim.

          Olacak gibi gözüküyor, bakalım.

          Tekrar hızlı dönüşünüz için teşekkür ederim.

          Yanıtla
          • Zaten yapılması gerekeni siz bulmuşsunuz.

            sh dosyaları hata verdiğinde, kurulum çalışmadığında chmod ile yetkilendirme yapmanız yeterli olacaktır.

            Kolay gelsin dilerim

            Yanıtla
  4. Hocam rica etsem Keenetic model modemler için bir rehber oluşturabilir misiniz? OpenWRT’e gerek duymadan opkg ile OpenWRT bileşenlerini kurabiliyor ancak bu easy install ile uyumlu değil. “system is not either systemd based or openwrt. check readme.txt for manual setup info.” hatası veriyor. Manual kurulum yapacak kadar da becerikli değilim :) Eğer bir şeyler yapabilirseniz çok iyi olur, şimdiden teşekkür ederim.

    Yanıtla
  5. Manual kurulum için anlatım yapabilir misin rica etsem? Zapret manuel kurulum yapmamı istiyor Keenetic modemde :)

    Yanıtla
    • Merhabalar,
      En kısa zamanda Linux sunucuda manuel kurulum deneyerek sizi bilgilendireceğim.
      Daha önce de bahsettiğim gibi elimde Keenetic cihaz olmadığından dolayı, o sisteme çok yabancıyım :)

      Yanıtla
    • Keenetic için ne yazık ki manuel kurulum durumu söz konusu değil.
      Açık kaynak Linux tabanlı router yazılımlarında, OpenWRT, pfSense, OPNSense kurulum yapılabilmekte.

      Yanıtla
  6. Merhabalar, pi-hole kullandığım raspberry zero’ya zapret kurmaya çalışırken şu hata ile karşılaşıyorum hocam.
    Çözümü hakkında bilgi bulamadım, yardımcı olabilir misiniz?

    pi@raspberrypi:/opt/zapret $ sudo ./install_easy.sh
    * checking system
    system is based on systemd
    * checking executables
    Illegal instruction
    trying to compile
    make: Entering directory ‘/opt/zapret’
    make[1]: Entering directory ‘/opt/zapret/nfq’
    rm -f nfqws dvtws *.o
    make[1]: Leaving directory ‘/opt/zapret/nfq’
    make[1]: Entering directory ‘/opt/zapret/tpws’
    rm -f tpws *.o
    make[1]: Leaving directory ‘/opt/zapret/tpws’
    make[1]: Entering directory ‘/opt/zapret/ip2net’
    rm -f ip2net *.o
    make[1]: Leaving directory ‘/opt/zapret/ip2net’
    make[1]: Entering directory ‘/opt/zapret/mdig’
    rm -f mdig *.o
    make[1]: Leaving directory ‘/opt/zapret/mdig’
    make[1]: Entering directory ‘/opt/zapret/nfq’
    cc -s -std=gnu99 -Wno-logical-op-parentheses -O3 -o nfqws *.c crypto/*.c -lnetfilter_queue -lnfnetlink -lz
    In file included from nfqws.c:4:
    sec.h:9:10: fatal error: sys/capability.h: No such file or directory
    #include
    ^~~~~~~~~~~~~~~~~~
    compilation terminated.
    In file included from sec.c:5:
    sec.h:9:10: fatal error: sys/capability.h: No such file or directory
    #include
    ^~~~~~~~~~~~~~~~~~
    compilation terminated.
    make[1]: *** [Makefile:12: nfqws] Error 1
    make[1]: Leaving directory ‘/opt/zapret/nfq’
    make: *** [Makefile:6: all] Error 2
    make: Leaving directory ‘/opt/zapret’
    could not compile
    make: Entering directory ‘/opt/zapret’
    make[1]: Entering directory ‘/opt/zapret/nfq’
    rm -f nfqws dvtws *.o
    make[1]: Leaving directory ‘/opt/zapret/nfq’
    make[1]: Entering directory ‘/opt/zapret/tpws’
    rm -f tpws *.o
    make[1]: Leaving directory ‘/opt/zapret/tpws’
    make[1]: Entering directory ‘/opt/zapret/ip2net’
    rm -f ip2net *.o
    make[1]: Leaving directory ‘/opt/zapret/ip2net’
    make[1]: Entering directory ‘/opt/zapret/mdig’
    rm -f mdig *.o
    make[1]: Leaving directory ‘/opt/zapret/mdig’
    make: Leaving directory ‘/opt/zapret’

    Yanıtla
    • Merhaba,
      Kaynaktan derleme için gerekli programlar eksik gibi görünüyor.
      Aşağıdaki komutla gerekli yazılımları yükleyerek, tekrardan kurulum denemenizi öneriyorum.

      sudo apt update
      sudo apt install build-essential clang flex g++ gawk gcc-multilib gettext \
      git libncurses5-dev libssl-dev python3-distutils rsync unzip zlib1g-dev \
      file wget

      Yanıtla
  7. Xiaomi 4A Giga’da OpenWRT kullanıyorum. Hangi ayarları kullanmalıyım? Varsayılan olarak gelen ayarlar:
    NFQWS_OPT_DESYNC=”–dpi-desync=fake –dpi-desync-ttl=0 –dpi-desync-ttl6=0 –dpi-desync-fooling=badsum”

    Yanıtla
  8. Merhabalar
    Keenetic cihazımda adımlarınızı takip ettim
    OPKG ile kurulum mümkün ancak çalışıp çalışmadığını halen daha çözemedim. İSS Turkcell SUperonline

    Yanıtla
    • Merhabalar,
      Yazı içerisinde örnek verdiğim şekilde curl komutu ile engelli bir siteye bağlantı yapmaya sağladığınızda, örnekteki gibi çıktıyı almanız gerekir.
      Engelli ve engel aşılmış şekilde örnek olarak farklı çıktılar gösterilmiştir.

      Yanıtla
  9. Raspberry Pi Zero 2 W aldım Pi-Hole ve Unbound kurdum. Zapret’i de kurdum çalışıyor ama ben tüm ağda çalışmasını istiyorum. Nasıl yapabilirim?

    Yanıtla
    • Tüm ağda çalışması için, router cihazınızda kurulum yapmanız gerekiyor.
      Tüm ağı yöneten cihazda kurulum yapılırsa eğer, ağdaki tüm cihazlarda kullanım yapabilirsiniz.

      Yanıtla

Yorum yapın