कंटेनर में वापस जीयूआई जोड़कर डॉकर नेटवर्क पर काली लिनक्स की शक्ति को अनलॉक करें और पायथन, सेलेनियम और टोर ब्राउज़र द्वारा संचालित अज्ञात वेब स्क्रैपिंग के साथ जानकारी एकत्र करने का स्तर बढ़ाएं।
एक DevOps इंजीनियर के रूप में, मैंने सैकड़ों-हजारों कंटेनरों को शिप किया है और अन्य इंजीनियरों को शिप करने में सक्षम बनाया है। मैं सतत वितरण और विभिन्न प्रकार के ऑर्केस्ट्रेशन तरीकों का उपयोग करता हूं: कुबेरनेट्स, एडब्ल्यूएस पर लैम्ब्डा कंटेनर, इलास्टिक कंटेनर सर्विस (ईसीएस) जो इलास्टिक कंप्यूट क्लाउड (ईसी2) और फार्गेट दोनों द्वारा समर्थित है। कंटेनर कस्टम बिल्ड सिस्टम, स्वचालित तैनाती, भेद्यता स्कैनिंग, अनुसंधान उद्देश्यों, डेटा एनालिटिक्स, मशीन लर्निंग, विरासत सॉफ्टवेयर अभिलेख, स्थानीय विकास और वेब स्क्रैपिंग के लिए उपयोगी हैं।
इस गाइड में मैं Xvfb और VNC सर्वर का उपयोग करके DockerHub के आधिकारिक Kali Linux कंटेनर में GUI जोड़ने के लिए अपनाए गए चरणों के बारे में बताऊंगा। जिस कोड की मैं यहां चर्चा कर रहा हूं वह Kalilinux-xvfb ओपन सोर्स रिपॉजिटरी में प्रकाशित है, और सामान्य उपयोग के लिए लगातार डॉकर हब को वितरित किया जाता है। अंत में, इस श्रृंखला के भाग 2 में, कंटेनरों में मौजूद सभी चीज़ों का परीक्षण किया जाएगा। मैं टोर ब्राउज़र इंस्टेंस को स्वचालित करने और वेब से डेटा इकट्ठा करने के लिए एक कस्टम पायथन स्क्रिप्ट, पाइटेस्ट और सेलेनियम का उपयोग करूंगा।
एक कंटेनर में काली लिनक्स रखने के पीछे प्रेरणा का एक हिस्सा कंटेनरों के लिए होस्ट मशीन द्वारा बनाए गए निजी नेटवर्क स्थान में दृश्यता प्राप्त करना है। डॉकर डेस्कटॉप का डिफ़ॉल्ट सेटअप NAT नेटवर्क का उपयोग करना है। जब तक पोर्ट docker run -p के साथ होस्ट मशीन से बंधे नहीं होते, तब तक वह सेवा होस्ट से एक्सेस नहीं की जा सकेगी।
यहां निम्नलिखित सॉफ़्टवेयर पैकेजों में से प्रत्येक के लिंक के साथ सारांश अनुभाग जोड़े गए हैं:
काली लिनक्स
डॉकर डेस्कटॉप
टोर ब्राउज़र
टोर ब्राउज़र लॉन्चर
Xvfb
सेलेनियम
मेरे द्वारा उपयोग किए गए सॉफ़्टवेयर के लिए अतिरिक्त लिंक:
काली लिनक्स एक डेबियन-आधारित लिनक्स वितरण है जिसका उद्देश्य उन्नत पेनेट्रेशन परीक्षण और सुरक्षा ऑडिटिंग है। 1
बड़ी संख्या में उपलब्ध सुरक्षा केंद्रित उपकरणों के कारण मैंने Kali Linux को चुना। काली लिनक्स टीम एक डॉकर छवि प्रदान करती है जिसे नियमित रूप से अपडेट किया जाता है। काली लिनक्स डॉकर छवि के लिए अधिकांश आवश्यक सॉफ़्टवेयर उपलब्ध हैं और मैं उन्हें स्थापित करने के लिए पैकेज मैनेजर का उपयोग करूँगा।
डॉकर डेस्कटॉप स्थानीय स्तर पर कंटेनर चलाने के लिए एक रूपरेखा है। कंटेनर पुन: प्रयोज्य ऑपरेटिंग सिस्टम छवि में ऑपरेटिंग सिस्टम और एप्लिकेशन स्थिति को पैकेजिंग करने का एक तरीका है। अतिरिक्त संसाधन डॉकर वेबसाइट पर उपलब्ध हैं।
कंटेनर और वर्चुअल मशीनों में समान संसाधन अलगाव और आवंटन लाभ होते हैं, लेकिन अलग-अलग कार्य करते हैं क्योंकि कंटेनर हार्डवेयर के बजाय ऑपरेटिंग सिस्टम को वर्चुअलाइज करते हैं। 2
चूंकि डॉकर कंटेनर वर्चुअल मशीनों की तुलना में अधिक हल्के होते हैं, इसलिए मैं अपने विकास प्रयासों में उनका भारी समर्थन करता हूं। लंबे समय तक, इस स्थिति को एक छोटी टेक्स्ट फ़ाइल के रूप में संग्रहीत किया जा सकता है और गिट और इसी तरह के टूल के साथ समय के साथ परिवर्तनों को ट्रैक करना बहुत आसान है। किसी टेक्स्ट फ़ाइल से दोबारा छवि प्राप्त करने की क्षमता शक्तिशाली है। हालाँकि, डॉकरफ़ाइल का समय के साथ ख़राब होना पूरी तरह से संभव है और बाद की तारीख में निर्माण करने में विफल हो सकता है। किसी भी अन्य ऑपरेटिंग सिस्टम और कोड के रूप में इंफ्रास्ट्रक्चर की तरह, हर चीज़ को अद्यतित रखना महत्वपूर्ण है।
डॉकर का एक विकल्प वर्चुअल मशीन, या नंगे धातु इंस्टॉलेशन का उपयोग करना होगा। हालाँकि, मेरा मानना है कि अल्पकालिक वेब क्रॉलर चलाने के लिए कंटेनर एकदम सही परीक्षण स्थल हैं क्योंकि उनका प्रावधान और सफाई करना आसान है। मैं एक ही मशीन पर समानांतर रूप से कई कंटेनर चला सकता हूं, जिन्हें लगभग तुरंत शुरू और बंद किया जा सकता है। फिर जब भी मुझे अतिरिक्त अलगाव की आवश्यकता होगी तो यह पूरा सेटअप वर्चुअल मशीन के अंदर से भी चलाया जा सकता है।
ओनियन राउटर (टोर) कंप्यूटर का एक वैश्विक नेटवर्क है जो एन्क्रिप्टेड हॉप्स की एक श्रृंखला के माध्यम से ट्रैफ़िक को रूट करता है। यह उपयोगकर्ता को कुछ हद तक गुमनाम रूप से इंटरनेट ब्राउज़ करने की अनुमति देता है, और उपयोगकर्ता को उन वेबसाइटों तक पहुंचने की भी अनुमति देता है जो केवल टोर नेटवर्क पर उपलब्ध हैं।
टोर ब्राउज़र गोपनीयता और सुरक्षा पर ध्यान देने के साथ फ़ायरफ़ॉक्स का एक अत्यधिक कॉन्फ़िगर किया गया संस्करण है। यह बॉक्स से बाहर टोर नेटवर्क का उपयोग कर सकता है।
टोरब्रोसर-लॉन्चर कई लिनक्स ऑपरेटिंग सिस्टम में शामिल है और टोर नेटवर्क पर एक वेब ब्राउज़र शुरू करना बेहद आसान बनाता है।
सेलेनियम वेब ब्राउज़र को स्वचालित करने का एक उपकरण है। इस उदाहरण में मैं पायथन के साथ गया, लेकिन कई भाषाएँ और उपकरण उपलब्ध हैं।
मैं टोर नेटवर्क पर इस टोर ब्राउज़र को स्वचालित करने के लिए सेलेनियम का उपयोग करूंगा। मैं लक्ष्यों तक जानकारी साझा करने को सीमित करने के लिए सुरक्षा के प्रति जागरूक ब्राउज़र की मौजूदा कॉन्फ़िगरेशन का लाभ उठाने का प्रयास कर रहा हूं। मैं कंटेनरों की रनटाइम स्थिति को रोककर उन्हें साफ़ करने में सक्षम हो जाऊँगा। परिणामी वेबड्राइवर सत्र में टोर के माध्यम से एक यादृच्छिक आईपी पता भेजा जाएगा, जो इसे वेब स्क्रैपिंग के लिए एक बहुत शक्तिशाली उपकरण बना देगा।
XOrg घटक Xvfb का उपयोग X विंडो सिस्टम में स्क्रीन को अनुकरण करने के लिए किया जा सकता है। फिर मैं कंटेनर में एक्स सर्वर शुरू करने के लिए इस स्क्रीन का उपयोग करूंगा। यह अनुकरण तकनीक विशेष रूप से तेज़ नहीं है, और ग्राफिक्स भारी अनुप्रयोगों को जीपीयू से लाभ होगा।
Dockerfiles को किसी भी Linux, macOS, या Windows वितरण पर निर्मित होना चाहिए जो Docker चला सके। मैंने इंटेल प्रोसेसर का उपयोग करके डॉकर डेस्कटॉप पर इसका परीक्षण किया है। आधिकारिक Kalilinux बेस कंटेनर के लिए एक ARM वैरिएंट है। मैं एआरएम पर इसे चलाने का प्रयास करने वाले किसी भी व्यक्ति से प्रतिक्रिया की सराहना करूंगा।
यह डॉकरफ़ाइल है जिसका उपयोग मैंने आधार छवि बनाने के लिए किया था। मैंने यह समझाने के लिए कुछ टिप्पणियाँ जोड़ी हैं कि प्रत्येक पंक्ति क्या करती है।
# 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
एक्स सर्वर शुरू करने में मदद करता है। मैं X सर्वर प्रारंभ करने के लिए Xvfb कमांड का उपयोग कर रहा हूं। यदि कोई पीआईडी मौजूद है, और जब एक्स सर्वर में कुछ गड़बड़ है, तो मैं प्रक्रिया को बंद कर सकता हूं और इसे फिर से शुरू कर सकता हूं। मैंने नेटवर्क से एक्स सत्रों को अवरुद्ध करने का प्रयोग किया, हालांकि यह अनावश्यक हो सकता है, फिर भी मैं इसे वैसे भी जोड़ रहा हूं: -नोलिस्टेन टीसीपी चर्चा सुपर यूजर पर
#!/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 कुंजी जोड़कर इसका समाधान किया जा सकता है। इससे कंटेनर से जुड़ने के लिए एसएसएच सुरंगों का उपयोग करने की संभावना खुल जाती है।
निम्नलिखित ssh-keygen
कमांड को इस स्टैक एक्सचेंज आलेख से संदर्भित किया गया था
#!/bin/bash # Generate SSH keys ssh-keygen -b 2048 -t rsa -f ~/.ssh/id_rsa -q -N "" cat ~/.ssh/id_rsa >> ~/.ssh/authorized_keys
यदि मैं इन कुंजियों का उपयोग करने जा रहा हूं, तो मुझे अपने कार्य केंद्र पर निजी कुंजी की आवश्यकता होगी। मैं डॉकर से अपनी होस्ट मशीन की निजी कुंजी को कॉपी करने के लिए निम्नलिखित कमांड का उपयोग कर रहा हूं, लेकिन ऐसा करने के कई तरीके हैं। स्टैक ओवरफ़्लो पर इसके बारे में अच्छी चर्चा हुई।
पीएस कमांड के साथ कंटेनर आईडी ढूँढना:
docker ps
सीपी कमांड के साथ कॉपी करने के लिए कंटेनर आईडी का उपयोग करना:
# 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
इसे कंटेनर में कॉपी करने की आवश्यकता है, लेकिन टोर प्रोजेक्ट द्वारा यहां उपलब्ध कराए गए बॉयलरप्लेट कॉन्फ़िगरेशन से केवल अलिखित अनुभाग हैं।
# /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
यह Dockerfile पिछले Dockerfile पर निर्मित होता है, और मिश्रण में Tor ब्राउज़र और Python जोड़ता है। मैं Tor ब्राउज़र स्थापित करने के लिए torbrowser-launcher पैकेज का उपयोग कर रहा हूं।
# 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
बिल्कुल पहले की तरह लेकिन कम कॉन्फ़िगरेशन के साथ। रूट उपयोगकर्ता का उपयोग करेगा.
# 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
जीथब एक्शन वर्कफ़्लो फ़ाइल डॉकर छवि बनाती है और इसे डॉकर हब पर भेजती है। यह डॉकर के दस्तावेज़ीकरण से स्टॉक वर्कफ़्लो है, जिसमें अतिरिक्त टैग भेजे गए हैं। मैंने दिन में एक बार इस क्रिया को ट्रिगर करने के लिए एकशेड्यूल जोड़ा।
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
अब मैं कंटेनरों का परीक्षण कर सकता हूं और देख सकता हूं कि वे काम करते हैं या नहीं। मैं इस उदाहरण के लिए torbrowser
टैग का उपयोग करने जा रहा हूं।
docker build
कमांड के बारे में अधिक जानकारी के लिए डॉकर सीएलआई बिल्ड डॉक्यूमेंटेशन देखें। स्थानीय स्तर पर कंटेनर बनाने के लिए मैं निम्नलिखित कमांड का उपयोग करता हूं, अन्यथा उन्हें अगले चरणों के दौरान मांग पर डॉकर हब से खींचा जा सकता है।
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 .
मुझे कंटेनर में वॉल्यूम माउंट करने की आवश्यकता है ताकि मैं उन फ़ाइलों तक पहुंच सकूं जिन पर मैं काम कर रहा हूं। मैं वॉल्यूम के रूप में ${HOME}/src
निर्देशिका का उपयोग कर रहा हूं।
जिन झंडों का हम उपयोग कर रहे हैं उन पर कुछ संक्षिप्त नोट्स नीचे शामिल हैं, अन्यथा docker run
कमांड के बारे में अधिक जानकारी के लिए डॉकर सीएलआई रन दस्तावेज़ीकरण देखें।
-it
उपयोग कंटेनर को इंटरैक्टिव मोड में चलाने के लिए किया जाता है।
--rm
का उपयोग कंटेनर की परतों को बाहर निकलने पर हटाने के लिए किया जाता है।
-p
का उपयोग कंटेनर से होस्ट मशीन तक पोर्ट को मैप करने के लिए किया जाता है।
-v
का उपयोग होस्ट मशीन से कंटेनर तक वॉल्यूम माउंट करने के लिए किया जाता है।
# 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
आगे मैं उपयोगकर्ता कंटेनर खोलना चाहता हूं, वीएनसी के माध्यम से लॉगिन करना चाहता हूं, और यह सत्यापित करने के लिए टोर ब्राउज़र लॉन्चर चलाना चाहता हूं कि अब तक सब कुछ काम कर रहा है। टोर ब्राउज़र लॉन्चर रूट उपयोगकर्ता के साथ काम नहीं करेगा।
कंटेनर को डिफ़ॉल्ट उपयोगकर्ता के साथ प्रारंभ करें:
docker run -it --rm -p 5901:5901 -v "${HOME}/src":/src excitingtheory/kalilinux-xvfb:torbrowser
कंटेनर में वीएनसी सर्वर शुरू करने पर, सर्वर मुख्य पासवर्ड के लिए संकेत देगा, मैं एक अतिरिक्त केवल-दृश्य पासवर्ड सेट कर रहा हूं।
/opt/start-vnc-server-once.sh
नीचे आउटपुट का एक उदाहरण है.
सर्वर से कनेक्ट संवाद खोजक मेनू से पाया जा सकता है: Go
-> Connect to Server
।
एक बार संवाद खुलने पर, पता vnc://localhost:5901
दर्ज करें और Connect
पर क्लिक करें। मैंने आसान पहुंच के लिए इस पते को पसंदीदा के रूप में सहेजा है।
TightVNC जैसा एक vnc क्लाइंट localhost:5901
पर इससे जुड़ सकता है।
एक बार कनेक्ट होने पर, मैं xfce4 डेस्कटॉप देख सकता हूँ।
अब मैं वीएनसी सत्र में टर्मिनल से टोर ब्राउज़र लॉन्चर शुरू कर सकता हूं।
torbrowser-launcher
एक बार ब्राउज़र खुलने के बाद, मैं टोर प्रोजेक्ट कनेक्शन चेकर पर जाकर जांच कर सकता हूं कि यह काम कर रहा है या नहीं
यह वह ऑपरेटिंग सिस्टम सेटअप है जिसे मैं सेलेनियम और पायथन के साथ काम शुरू करने से पहले पूरा करना चाहता था। संक्षेप में, मैंने निम्नलिखित कार्य किया है:
अब चूँकि एक कार्यशील कंटेनर वातावरण है। गुप्त पायथन वेब स्क्रैपिंग पर इस श्रृंखला की अगली पोस्ट देखें।