paint-brush
Gizli Web Scraping'i Desteklemek için Kali Linux Docker Konteynerlerini Kullanınile@csfx
3,426 okumalar
3,426 okumalar

Gizli Web Scraping'i Desteklemek için Kali Linux Docker Konteynerlerini Kullanın

ile Colin Barrett-Fox13m2023/07/23
Read on Terminal Reader
Read this story w/o Javascript

Çok uzun; Okumak

Konteynere bir GUI ekleyerek Docker ağlarında Kali Linux'un gücünün kilidini açın. Python, Selenium ve Tor Tarayıcı tarafından desteklenen anonimleştirilmiş web kazıma ile bilgi toplama düzeyini artırın. Bu serinin 2. Bölümünde kaplardaki her şey teste tabi tutulacak.
featured image - Gizli Web Scraping'i Desteklemek için Kali Linux Docker Konteynerlerini Kullanın
Colin Barrett-Fox HackerNoon profile picture
0-item
1-item

Konteynere bir GUI ekleyerek Docker ağlarında Kali Linux'un gücünün kilidini açın ve Python, Selenium ve Tor Tarayıcı tarafından desteklenen anonimleştirilmiş web kazıma ile bilgi toplama düzeyini artırın.


Bir DevOps Mühendisi olarak yüz binlerce konteyneri hem sevk ettim hem de diğer Mühendislerin sevk etmesini sağladım. Sürekli Teslimat ve çeşitli düzenleme yöntemlerini kullanıyorum: Kubernetes, AWS'deki Lambda Konteynerleri, hem Elastic Compute Cloud (EC2) hem de Fargate tarafından desteklenen Elastic Container Service (ECS). Konteynerler, özel yapım sistemler, otomatik dağıtımlar, güvenlik açığı taraması, araştırma amaçları, veri analitiği, makine öğrenimi, eski yazılım arşivleme, yerel geliştirme ve web kazıma için kullanışlıdır.


Bu kılavuzda, Xvfb ve bir VNC sunucusu kullanarak DockerHub'dan resmi Kali Linux konteynerine GUI eklemek için izlediğim adımları gözden geçireceğim. Burada tartıştığım kod kalilinux-xvfb açık kaynak deposunda yayınlanıyor ve genel kullanım için sürekli olarak Docker Hub'a gönderiliyor. Son olarak bu serinin 2. Bölümünde kaplardaki her şey teste tabi tutulacak. Tor Tarayıcı örneğini otomatikleştirmek ve web'den veri toplamak için özel bir Python betiği, Pytest ve Selenium kullanacağım.


Konteyner Ağları

Konteyner Ağı ve Bağlantısına Genel Bakış



Kali Linux'u bir konteynerde bulundurmanın ardındaki motivasyonun bir kısmı, ana makine tarafından konteynerler için oluşturulan özel ağ alanına görünürlük kazandırmaktır. Docker Desktop'ın varsayılan kurulumu bir NAT ağı kullanmaktır. Bağlantı noktaları ana makineye bağlı olmadığı sürece, docker run -p ile bu hizmete ana bilgisayardan erişilemez.


Yazılım

Aşağıdaki yazılım paketlerinin her biri için bağlantıların yer aldığı özet bölümleri eklenmiştir:


  • Kali Linux

  • Docker Masaüstü

  • Tor tarayıcısı

  • Tor Tarayıcı Başlatıcısı

  • Xvfb

  • Selenyum


Kullandığım yazılımlar için ek bağlantılar:


Kali Linux


Kali Linux, gelişmiş Sızma Testi ve Güvenlik Denetimini amaçlayan Debian tabanlı bir Linux dağıtımıdır. 1


Mevcut güvenlik odaklı araçların çokluğu nedeniyle Kali Linux'u seçtim. Kali Linux ekibi düzenli olarak güncellenen bir Docker görüntüsü sağlar. Gerekli yazılımın çoğu Kali Linux Docker görüntüsünde mevcuttur ve bunları yüklemek için paket yöneticisini kullanacağım.


Docker Masaüstü

Docker Desktop, konteynerleri yerel olarak çalıştırmaya yönelik bir çerçevedir. Kapsayıcılar, işletim sistemini ve uygulama durumunu yeniden kullanılabilir bir işletim sistemi görüntüsünde paketlemenin bir yoludur. Ek kaynaklar Docker web sitesinde mevcuttur.


Konteynerler ve sanal makineler benzer kaynak izolasyonu ve tahsisi avantajlarına sahiptir ancak konteynerler donanım yerine işletim sistemini sanallaştırdığı için farklı çalışır. 2


Docker konteynerleri sanal makinelerden daha hafif olduğundan, geliştirme çalışmalarımda ağırlıklı olarak onları tercih ediyorum. Uzun vadede bu durum küçük bir metin dosyası olarak saklanabilir ve git ve benzeri araçlarla zaman içindeki değişiklikleri takip etmek çok daha kolaydır. Bir metin dosyasından yeniden bir görüntü türetme yeteneği güçlüdür. Bununla birlikte, bir Dockerfile'ın zamanla bakıma muhtaç hale gelmesi ve daha sonraki bir tarihte oluşturulmaması tamamen mümkündür. Diğer tüm İşletim Sistemlerinde ve Kod Olarak Altyapıda olduğu gibi, her şeyin güncel tutulması önemlidir.


Docker'a bir alternatif, Sanal Makine veya çıplak donanım kurulumu kullanmak olabilir. Bununla birlikte, sağlanması ve temizlenmesi kolay olduğundan, konteynerlerin geçici web tarayıcılarını çalıştırmak için mükemmel bir test ortamı olduğuna inanıyorum. Tek bir makinede çok sayıda konteyneri paralel olarak çalıştırabiliyorum ve bunlar neredeyse anında başlatılıp durdurulabiliyor. Daha sonra, ne zaman ek izolasyona ihtiyaç duysam, tüm bu kurulum sanal bir makinenin içinden de çalıştırılabilir.


Tor tarayıcısı

Onion Router (Tor), trafiği bir dizi şifreli atlama noktası üzerinden yönlendiren küresel bir bilgisayar ağıdır. Bu, kullanıcının internette anonim olarak gezinmesine ve ayrıca yalnızca Tor Ağı'nda bulunan web sitelerine erişmesine olanak tanır.


  • Tor Tarayıcı, gizlilik ve güvenliğe odaklanan, Firefox'un yoğun biçimde yapılandırılmış bir sürümüdür. Tor Ağını kutudan çıktığı gibi kullanabilir.

  • torbrowser-launcher birçok Linux işletim sisteminde bulunur ve Tor Ağında bir web tarayıcısının başlatılmasını son derece kolay hale getirir.


Selenyum

Selenium, web tarayıcılarını otomatikleştirmek için bir araçtır. Bu örnekte Python'u kullandım ancak pek çok dil ve araç mevcut.


Tor Ağında bu Tor Tarayıcıyı otomatikleştirmek için Selenium'u kullanacağım. Bilgi paylaşımını hedeflerle sınırlamak için güvenlik bilincine sahip tarayıcının mevcut yapılandırmasından yararlanmaya çalışıyorum. Konteynerlerin çalışma zamanı durumlarını durdurarak temizleyebileceğim. Ortaya çıkan WebDriver oturumu, Tor aracılığıyla sağlanan rastgele bir IP adresine sahip olacak ve bu da onu web kazıma için çok güçlü bir araç haline getirecek.


Xvfb

XOrg bileşeni Xvfb, bir ekranı X pencere sistemine benzetmek için kullanılabilir. Daha sonra bu ekranı kapta bir X sunucusu başlatmak için kullanacağım. Bu emülasyon tekniği özellikle hızlı değildir ve grafik ağırlıklı uygulamalar GPU'dan faydalanacaktır.

Dosyalara Genel Bakış

Dockerfiles, Docker'ı çalıştırabilen herhangi bir Linux, macOS veya Windows dağıtımı üzerine kurulmalıdır. Bunu bir Intel işlemci kullanarak Docker Masaüstünde test ettim. Resmi Kalilinux ana konteyneri için bir ARM çeşidi mevcuttur. Bunu ARM'de çalıştırmayı deneyen herkesin geri bildirimini memnuniyetle karşılarım.


  1. Docker dosyası
  2. TorBrowser.Docker dosyası
  3. TorBrowser-root.Dockerfile
  4. startx-once.sh
  5. start-vnc-server-once.sh
  6. ssh-keys.sh
  7. Torrc
  8. .github/workflows/main.yml


Docker dosyası

Bu, temel görüntüyü oluşturmak için kullandığım Docker dosyasıdır. Her satırın ne yaptığını açıklamak için birkaç yorum ekledim.


 # From the official Kali Linux Docker image rolling release FROM kalilinux/kali-rolling # Leaving this here for now, but it's not needed ARG DISPLAY_NUMBER=1 ENV DISPLAY=:$DISPLAY_NUMBER # Install the packages we need # Got lucky with this one, there was a ticket about this: # https://github.com/dnschneid/crouton/issues/4461 `xfce4 dbus-launch not found` in this version of the image so installing dbus-x11 RUN apt-get update -y -q \ && apt-get install -y -q xvfb xfce4 xfce4-goodies tightvncserver net-tools curl openssh-server dbus-x11 # This line copies the shell scripts from the local directory to the container, and makes them executable. COPY *.sh /opt/ RUN chmod 755 /opt/*.sh # This line runs the shell scripts that start the X server, and generate the SSH keys. RUN /opt/startx-once.sh RUN /opt/ssh-keys.sh # This line sets the entrypoint to bash, so that we can run commands in the container. ENTRYPOINT /bin/bash



startx-once.sh

X sunucusunun başlatılmasına yardımcı olur. X sunucusunu başlatmak için Xvfb komutunu kullanıyorum. Bir PID mevcutsa ve X sunucusunda bir sorun olduğunda süreci sonlandırıp yeniden başlatabilirim. X oturumlarını ağdan engellemeyi denedim, gereksiz olsa da yine de ekliyorum: -nolisten süper kullanıcı hakkında tcp tartışması

 #!/bin/bash FILE=/opt/.x.pid if [[ -f "$FILE" ]]; then echo "$FILE exist" echo "PID: " `cat $FILE` else Xvfb -nolisten tcp $DISPLAY & echo $? > $FILE fi


ssh-keys.sh

VNC İstemcileri metin kopyalamak ve yapıştırmak için pek ideal değildir. Bu durum, diğer ana bilgisayarların konteynere bağlanmasına yardımcı olmak için konteynere SSH anahtarları eklenerek giderilebilir. Bu, konteynere bağlanmak için SSH tünellerini kullanma olasılığını açar.


Bu Stack Exchange Makalesinde aşağıdaki ssh-keygen komutuna başvurulmuştur.

 #!/bin/bash # Generate SSH keys ssh-keygen -b 2048 -t rsa -f ~/.ssh/id_rsa -q -N "" cat ~/.ssh/id_rsa >> ~/.ssh/authorized_keys


Bu anahtarları kullanacaksam iş istasyonumda özel anahtara ihtiyacım var. Özel anahtarı docker'dan ana makineme kopyalamak için aşağıdaki komutları kullanıyorum, ancak bunu yapmanın birçok yolu var. Stack Overflow'ta bununla ilgili güzel bir tartışma vardı.


Kapsayıcı kimliğini ps komutuyla bulma:

 docker ps 


liman işçisi ps komut çıkışı


cp komutuyla kopyalamak için konteyner kimliğini kullanma:

 # For root docker cp <containerId>:/root/.ssh/id_rsa /target/path/on/host # Otherwise for the user configured in the Dockerfile docker cp <containerId>:/home/username/.ssh/id_rsa /target/path/on/host


Torrc

Bunun konteynere kopyalanması gerekiyor, ancak Tor Projesinin burada sağladığı standart konfigürasyonun yalnızca yorumlanmamış bölümleridir.

 # /etc/tor/torrc ## Tor opens a SOCKS proxy on port 9050 by default -- even if you don't ## configure one below. Set "SOCKSPort 0" if you plan to run Tor only ## as a relay, and not make any local application connections yourself. SOCKSPort 9050 # Default: Bind to localhost:9050 for local connections. #SOCKSPort 192.168.0.1:9100 # Bind to this address:port too. ## Uncomment this to start the process in the background... or use ## --runasdaemon 1 on the command line. This is ignored on Windows; ## see the FAQ entry if you want Tor to run as an NT service. RunAsDaemon 1 ## The port on which Tor will listen for local connections from Tor ## controller applications, as documented in control-spec.txt. ControlPort 9051 ## If you enable the controlport, be sure to enable one of these ## authentication methods, to prevent attackers from accessing it. #HashedControlPassword 16:872860B76453A77D60CA2BB8C1A7042072093276A3D701AD684053EC4C CookieAuthentication 1


TorBrowser.Docker dosyası

Bu Docker dosyası önceki Docker dosyası üzerine kuruludur ve karışıma Tor Tarayıcı ve Python'u ekler. Tor Tarayıcıyı yüklemek için torbrowser-launcher paketini kullanıyorum.


 # From the base Dockerfile: FROM excitingtheory/kalilinux-xvfb ARG DISPLAY_NUMBER=1 ENV DISPLAY=:$DISPLAY_NUMBER # More info about torbrowser-launcher: # https://github.com/micahflee/torbrowser-launcher RUN apt-get update -y -q \ && apt-get install -y -q torbrowser-launcher python3 python3-pip # Create a user and add them to the sudo group, sudo still TBD but leaving for now, will not be able to switch users in this container. RUN useradd -s /bin/bash -m username \ && usermod -aG sudo username # Install python packages RUN pip3 install selenium pytest COPY torrc /etc/tor/torrc # Set the user and home directory for the container USER username ENV USER=username ENV HOME=/home/username # Run the shell scripts that start the X server, and generate the SSH keys. RUN /opt/startx-once.sh RUN /opt/ssh-keys.sh # This line sets the entrypoint to bash, so that we can run commands in the container. ENTRYPOINT /bin/bash


TorBrowser-root.Dockerfile

Tıpkı daha önce olduğu gibi ancak daha az konfigürasyonla. Kök kullanıcıyı kullanacak.


 # From the base Dockerfile: FROM excitingtheory/kalilinux-xvfb ARG DISPLAY_NUMBER=1 ENV DISPLAY=:$DISPLAY_NUMBER # More info about torbrowser-launcher: # https://github.com/micahflee/torbrowser-launcher RUN apt-get update -y -q \ && apt-get install -y -q torbrowser-launcher python3 python3-pip # Install python packages RUN pip3 install selenium pytest # Copy the tor config file into the containera COPY torrc /etc/tor/torrc # Run the shell scripts that start the X server, and generate the SSH keys. RUN /opt/startx-once.sh RUN /opt/ssh-keys.sh # This line sets the entrypoint to bash, so that we can run commands in the container. ENTRYPOINT /bin/bash


.github/workflows/main.yml

Github Eylemleri iş akışı dosyası Docker görüntüsünü oluşturur ve Docker Hub'a aktarır. Bu, ek etiketlerin aktarıldığı Docker belgelerindeki stok iş akışıdır. Bu Eylemi günde bir kez tetiklemek için birprogram ekledim.


Container'ların Sürekli Teslimatı için GitHub Eylemlerini Kullanma



 name: docker build and push on: push: branches: - "main" schedule: - cron: '20 16 * * *' jobs: build: runs-on: ubuntu-latest steps: - name: Checkout uses: actions/checkout@v3 - name: Login to Docker Hub uses: docker/login-action@v2 with: username: ${{ secrets.DOCKERHUB_USERNAME }} password: ${{ secrets.DOCKERHUB_TOKEN }} - name: Set up Docker Buildx uses: docker/setup-buildx-action@v2 - name: Build and push base image uses: docker/build-push-action@v4 with: context: . file: ./Dockerfile push: true tags: excitingtheory/kalilinux-xvfb:latest - name: Build and push torbrowser root image uses: docker/build-push-action@v4 with: context: . file: ./TorBrowser-root.Dockerfile push: true tags: excitingtheory/kalilinux-xvfb:torbrowser-root - name: Build and push torbrowser image uses: docker/build-push-action@v4 with: context: . file: ./TorBrowser.Dockerfile push: true tags: excitingtheory/kalilinux-xvfb:torbrowser


Konteynerleri Kullanma

Artık kapları test edip çalışıp çalışmadıklarını görebilirim. Bu örnek için torbrowser etiketini kullanacağım.


Konteynerlerin Oluşturulması (İsteğe Bağlı)

docker build komutu hakkında daha fazla bilgi için Docker CLI Derleme Belgelerine bakın. Container'ları yerel olarak oluşturmak için aşağıdaki komutları kullanıyorum, aksi takdirde sonraki adımlarda isteğe bağlı olarak Docker Hub'dan alınabilirler.

 docker build -t excitingtheory/kalilinux-xvfb . docker build -t excitingtheory/kalilinux:torbrowser -f TorBrowser.Dockerfile . docker build -t excitingtheory/kalilinux:torbrowser-root -f TorBrowser-root.Dockerfile .


Konteynerleri Bir Hacimle Çalıştırma

Üzerinde çalıştığım dosyalara erişebilmem için konteynere bir birim bağlamam gerekiyor. Birim olarak ${HOME}/src dizinini kullanıyorum.


Kullandığımız bayraklarla ilgili bazı kısa notlar aşağıda yer almaktadır; aksi takdirde docker run komutu hakkında daha fazla bilgi için Docker CLI Çalıştırma Belgelerine bakın.


  • -it konteyneri etkileşimli modda çalıştırmak için kullanılır.

  • --rm çıkarken konteyner katmanlarını kaldırmak için kullanılır.

  • -p bağlantı noktasını konteynerden ana makineye eşlemek için kullanılır.

  • -v ana makineden konteynere bir birim bağlamak için kullanılır.


 # Run the base container docker run -it --rm -p 5901:5901 -v "${HOME}/src":/src excitingtheory/kalilinux-xvfb # Run the container with the default user docker run -it --rm -p 5901:5901 -v "${HOME}/src":/src excitingtheory/kalilinux-xvfb:torbrowser # Run the container with the root user docker run -it --rm -p 5901:5901 -v "${HOME}/src":/src excitingtheory/kalilinux-xvfb:torbrowser-root


Tor Tarayıcıyı Konteynerden Kullanmak

Daha sonra kullanıcı kapsayıcısını açmak, VNC aracılığıyla oturum açmak ve şu ana kadar her şeyin çalıştığını doğrulamak için Tor Tarayıcı Başlatıcıyı çalıştırmak istiyorum. Tor tarayıcı başlatıcısı kök kullanıcıyla çalışmaz.

Kapsayıcıyı varsayılan kullanıcıyla başlatın:


 docker run -it --rm -p 5901:5901 -v "${HOME}/src":/src excitingtheory/kalilinux-xvfb:torbrowser


VNC sunucusunu konteynerde başlattığınızda, sunucu ana şifreyi soracaktır, ek bir salt görüntüleme şifresi ayarlıyorum.

 /opt/start-vnc-server-once.sh


Aşağıda çıktının bir örneği verilmiştir.

VNC Sunucusunu başlatmanın çıktısı


MacOS'ta bağlanın

Sunucuya bağlan iletişim kutusuna bulucu menüsünden ulaşılabilir: Go -> Connect to Server .

macOS 'Sunucuya Bağlan' İletişim Kutusu örneği vnc://localhost:5901'e işaret ediyor


İletişim kutusu açıldığında vnc://localhost:5901 adresini girin ve Connect tıklayın. Kolay erişim için bu adresi favori olarak kaydettim.

Windows'a bağlanın

TightVNC gibi bir vnc istemcisi buna localhost:5901 üzerinden bağlanabilir.

Kali Linux Xfce4 Masaüstüne bağlanıldı

Bağlandıktan sonra xfce4 masaüstünü görebiliyorum.

Konteynerde barındırılan masaüstüne VNC İstemcisi aracılığıyla erişilir.


Artık Tor Tarayıcı Başlatıcısını VNC oturumundaki terminalden başlatabilirim.

 torbrowser-launcher 


Torbrowser-başlatıcıyı Docker'da VNC İstemcisi aracılığıyla çalıştırma


Tarayıcı açıldığında Tor Projesi Bağlantı Denetleyicisine giderek çalışıp çalışmadığını kontrol edebilirim.

Başarılı bir test örneği:

https://check.torproject.org/ üzerinde başarılı bağlantı testi




Karşılaştırmak için siteyi bağlı olmayan ana makinemde açtım:

https://check.torproject.org/ üzerinde başarısız bağlantı testi




Şu ana kadarki ilerleme

Bu, Selenium ve Python ile çalışmaya başlamadan önce bitirmek istediğim İşletim Sistemi kurulumu. Özetlemek gerekirse şunları yaptım:


  1. Selenium, Python ve basit bir xfce4 masaüstü ortamı için yüklü bağımlılıklar.
  2. GitHub Actions ile birbirine bağlı üç Docker görüntüsü oluşturuldu ve aktarıldı.
  3. Docker kapsayıcısında bir VNC Sunucusu başarıyla başlatıldı.
  4. Çalışan bir konteynerin masaüstü ortamına bir VNC istemcisi ile bağlanıldı.
  5. Tor Tarayıcı Başlatıcı'nın kapsayıcıdan çalıştırılması test edildi ve Tor ağına bağlandığı doğrulandı.


Artık çalışan bir konteyner ortamı var. Gizli Python web kazımayla ilgili bu serideki bir sonraki yazıya göz atın.