मुझे कुछ दुर्भावनापूर्ण अपाचे कनेक्शन को छोड़ने के लिए नियमों की आवश्यकता है


10

मैं अपने वेब सर्वर के लिए 80 को छोड़कर सभी ट्रैफ़िक को बंदरगाहों पर छोड़ देता हूँ।

इस तरह के iptables पर मेरे कुछ नियम हैं:

iptables -A INPUT -p tcp -m tcp --dport 80 -m string --string "cgi" --algo bm --to 1000 -j DROP

कोई है जो अधिक साझा कर सकते हैं? मुझे पता है कि हमेशा खराब हैकर अभी भी अपडेट कर रहे हैं, लेकिन उनमें से कुछ हमेशा एक ही कोड से शुरू होते हैं। मुझे कुछ मानदंडों के आधार पर कनेक्शन को छोड़ने की आवश्यकता है। यहाँ कुछ अपाचे लॉग हैं (मैं ips हटाता हूं लेकिन प्रत्येक एटैक उसी से आता है):

हमला 1: यह मुझे नहीं पता कि क्या करने की कोशिश कर रहे हैं, लेकिन इसे एक ही आईपी से 50 गुना करें

GET / HTTP/1.1  301 224 -   Mozilla/5.0 (X11; Linux i686) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.152 Safari/537.22
GET / HTTP/1.1  302 3387    -   Mozilla/5.0 (X11; Linux i686) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.152 Safari/537.22

हमला 2: यह केवल सर्वर के बारे में जानकारी प्राप्त करने का प्रयास करता है।

GET / HTTP/1.1  301 224 http://myip:80/ Go-http-client/1.1
GET / HTTP/1.1  302 3228    http mywebsite  Go-http-client/1.1
GET /es/ HTTP/1.1   200 40947   https mywebsite Go-http-client/1.1

हमला 3: वे प्रवेश पृष्ठ भेद्यता तक पहुँचने का प्रयास करते हैं

GET /userlogin/login.aspx HTTP/1.1  302 186 -   -

हमला 4: यह पहले अनुरोध पर एक cgi तक पहुंचने का प्रयास करता है, (इसे छोड़ने के लिए मेरा पहला iptables नियम देखें)

GET /hndUnblock.cgi HTTP/1.0    302 186 -   Wget(linux)
GET /tmUnblock.cgi HTTP/1.0 302 186 -   Wget(linux)

मैं सर्वर के साथ बहुत नया हूँ यह 4 हमले केवल पिछले 12 घंटों से हैं ... प्रति सप्ताह हजारों हैं।


मैं इन HTTP अनुरोधों में कोई विशेष पैटर्न नहीं देखता हूं। आप कैसे जानते हैं कि वे दुर्भावनापूर्ण हैं? मुझे समझ नहीं आ रहा है कि आप यहाँ क्या हासिल करने की कोशिश कर रहे हैं। क्या आप कृपया अपना प्रश्न स्पष्ट करने के लिए संपादित कर सकते हैं ? धन्यवाद।
डेविड फ़ॉस्टर

हैलो डेविड, कुछ समय पहले जब मैं FTP की तरह पोर्ट खोलता हूं, तो मुझे ब्रूट फोर्स से लॉग प्राप्त होता है, जब मैं देखता हूं कि 24 घंटे में विफल 2 आईबेट के लिए iptables पर 100 से अधिक ips drop हैं। मैं 80 को छोड़कर सभी बंदरगाहों को बंद कर देता हूं। अब मैं असफल 2लन जैसे नियम बनाने की कोशिश करता हूं, लेकिन अपाचे के लिए।
जेवियर पाल्मेरो

2
क्या आप Apache के लिए mod_security और mod_evasive के बारे में जानते हैं ?
--० --०

हाँ, क्या आपके पास साझा करने के नियम हैं? या कहाँ खोजने के लिए? मैं blocklist.de से ब्लॉक ips हूँ
जेवियर पामेरो

मैंने अपाचे 2 सुरक्षा के बारे में लगभग सभी चीजें लिखी हैं।
2240 में 44080

जवाबों:


18

अपडेट: वर्तमान उत्तर पूरी तरह से अपडेट है।

इस चर्चा के अनुसार मैंने WWW सिक्योरिटी असिस्टेंट नामक एक GitHub रिपॉजिटरी बनाई । एक शाखा है, जिसे कहा जाता है ask_ubuntu, इस उत्तर के लिए समर्पित है। सभी संदर्भ, पहले से ही यहां उपलब्ध हैं , वर्ण सीमा के कारण हटा दिए गए हैं - वे गीथहब पर उपलब्ध हैं।

यहाँ कुछ तरीके देखे गए हैं, एक पूर्ण तंत्र में शामिल, कैसे Ubuntu 16.04 के भीतर Apache2 सुरक्षा को बढ़ाना है

विषयसूची:

  • WWW सुरक्षा सहायक स्क्रिप्ट (WSAS)। Iptables
  • Iptables - मूल कॉन्फ़िगरेशन - सहेजें और पुनर्स्थापित करें
  • Apache2 के लिए मोडेवेसिव
  • ModEvasive ive WSAS vas Iptables
  • Apache2 के लिए ModSecurity 2.9
  • ModSecurity OWASP कोर नियम सेट 3.x
  • ModSecurity नियम श्वेत सूची
  • ModSecurity नियम AS WSAS। Iptables
  • ModSecurity और Apache लॉग फ़ाइलें
  • ModSecurity लॉग फ़ाइलें 2 Fail2Ban। Iptables
  • ModSecurity GuardianLog D HTTPD अभिभावक ► WSAS। Iptables
  • ModSecurity GuardianLog D HTTPD कस्टम विश्लेषण ► WSAS urity Iptables

इसके अलावा मान लें कि HTTPS का उपयोग करना हमेशा अच्छा होता है:


WWW सुरक्षा सहायक स्क्रिप्ट pt Iptables

यहां स्क्रिप्ट पेश की गई है www-security-assistant.bash। यह दुर्भावनापूर्ण IP पतों की हैंडलिंग में आपकी मदद कर सकता है। स्क्रिप्ट के दो तरीके हैं।

स्वचालित मोड

जब अपाचे के रूप में एक बाहरी कार्यक्रम, mod_securityएक दुर्भावनापूर्ण $IPपता प्रदान करता है । इस मामले में, स्क्रिप्ट को आरेखित करने वाला सिंटैक्स होना चाहिए:

www-security-assistant.bash <ip-address> Guardian
www-security-assistant.bash <ip-address> ModSecurity
www-security-assistant.bash <ip-address> ModEvasive
www-security-assistant.bash <ip-address> a2Analyst

इस मोड में स्क्रिप्ट दो एक्शन स्टेज प्रदान करती है और हर एक्शन के लिए यह एडमिनिस्ट्रेटर को ईमेल भेजती है

  • पहला चरण: पहले कुछ 'बदलावों' के लिए स्रोत $IPको समय के मूल्य के बराबर अवधि के लिए प्रतिबंधित किया जाएगा $BAN_TIME। यह मोड कमांड का उपयोग करता है at

  • दूसरा चरण: जब कुछ से पारगमन की संख्या $IPमूल्य के बराबर हो जाती है $LIMIT, तो इस $IPपते को इप्टेबल्स के माध्यम से स्थायी रूप से प्रतिबंधित कर दिया जाएगा और इसमें जोड़ दिया जाएगा $BAN_LIST

मैन्युअल तरीके से

यह मोड निम्नलिखित विकल्पों को स्वीकार करता है:

  • www-security-assistant.bash <ip-address> --DROP "log notes"

    फ़ाइल में एक प्रविष्टि बनाता है /var/www-security-assistant/iptables-DROP.listऔर एक नियम बनाता है :

    iptables -A GUARDIAN -s $IP -j DROP
    
  • www-security-assistant.bash <ip-address> --DROP-CLEAR "log notes"

    फ़ाइल में एक प्रविष्टि बनाता है /var/www-security-assistant/iptables-DROP-CLEAR.list, कुछ Iptables नियम को हटाता $IPहै, इतिहास से और से हटाता है $BAN_LIST:

    iptables -D GUARDIAN -s $IP -j DROP
    
  • www-security-assistant.bash <ip-address> --ACCEPT "log notes"

    फ़ाइल में केवल एक प्रविष्टि बनाता है /var/www-security-assistant/iptables-ACCEPT.list

  • www-security-assistant.bash <ip-address> --ACCEPT-CHAIN "log notes"

    फ़ाइल में एक प्रविष्टि बनाता है /var/www-security-assistant/iptables-ACCEPT.listऔर एक नियम बनाता है :

    iptables -A GUARDIAN -s $IP -j ACCEPT
    

निर्भरता

स्क्रिप्ट का उपयोग करता है iptables-save.shऔर iptablesश्रृंखला GUARDIAN, अगले भाग में समझाया गया है। यह कुछ फ़ाइलों को बनाएगा और बनाए रखेगा $WORK_DIR:

  • www-security-assistant.history - पिछले आईपी के संक्रमण के लिए डेटा शामिल है।
  • www-security-assistant.mail - स्क्रिप्ट द्वारा भेजे गए अंतिम ईमेल की सामग्री।
  • iptables-ACCEPT.list; iptables-DROP.listऔर iptables-DROP-CLEAR.list

ईमेल भेजने के लिए स्क्रिप्ट को न्यूनतम कॉन्फ़िगरेशन की आवश्यकता होती है:

sudo apt install s-nail mutt mailutils postfix
sudo dpkg-reconfigure postfix  # For General type: Internet Site
echo 'Test passed.' | mail -s Test-Email email@example.com

यदि कोई कॉन्फ़िगर की गई HTTPS सेवा है, तो उसके TLS प्रमाणपत्र का उपयोग पोस्टफ़िक्स सेवा के भीतर किया जा सकता है।

इसके अलावा स्क्रिप्ट का उपयोग करता है at: sudo apt install at

स्थापना

  • कार्य निर्देशिका बनाएं, इसे कॉल करें /var/www-security-assistant। डाउनलोड करें www-security-assistant.bashऔर इसे निष्पादन योग्य बनाएं:

    sudo mkdir /var/www-security-assistant
    sudo wget https://raw.githubusercontent.com/pa4080/www-security-assistant/ask_ubuntu/www-security-assistant.bash -O /var/www-security-assistant/www-security-assistant.bash
    sudo chmod +x /var/www-security-assistant/www-security-assistant.bash
  • बनाओ www-security-assistant.bashकस्टम आदेश के रूप में उपलब्ध:

    sudo ln -s /var/www-security-assistant/www-security-assistant.bash /usr/local/bin/
  • बिना पासवर्ड के www-dataचलने की अनुमति दें । अतिरिक्त ' ' नियम के साथ एक नई फ़ाइल को सुरक्षित रूप से बनाने और संपादित करने के लिए निम्न कमांड का उपयोग करें :www-security-assistant.bashsudosudoers

    sudo visudo -f /etc/sudoers.d/www-security-assistant

    फ़ाइल के अंदर निम्न पंक्ति जोड़ें - फ़ाइल सहेजें और बाहर निकलें:

    www-data ALL=(ALL) NOPASSWD: /var/www-security-assistant/www-security-assistant.bash
  • झूमना www-security-assistant.bash। परिवर्तनशील का मान कम से कम बदलें $EMAIL_TO

जांच

  • अपने आप को प्रतिनिधि के रूप में देखें $AGENTऔर जांचें कि स्वचालित मोड ठीक से काम करता है:

    www-security-assistant.bash 192.168.1.177 Guardian

    फिर अपने ई-मेल की जांच करें, टाइप करें iptables -L GUARDIAN -n, फाइलों की समीक्षा करें www-security-assistant.historyऔर www-security-assistant.mail। उपरोक्त कमांड को 5 बार चलाएं और फाइलों की समीक्षा करें iptables-DROP.listऔर iptables-CURRENT.conf

  • जांचें कि क्या मैन्युअल MODE ठीक से काम करता है - अपनी लोकलहोस्ट को व्हाइट लिस्ट में जोड़ें:

    www-security-assistant.bash 127.0.0.1 --ACCEPT "Server's localhost IP"

    फिर फ़ाइल की जाँच करें iptables-ACCEPT.list


इस ट्यूटोरियल का बाकी हिस्सा www-security-assistantआपके सिस्टम के साथ एकीकृत करने का तरीका है।


Iptables - मूल कॉन्फ़िगरेशन - सहेजें और पुनर्स्थापित करें

मूल विन्यास

निम्नलिखित नियम जोड़ने से पहले कृपया इस मैनुअल को पढ़ें ।

sudo iptables -F

sudo iptables -I INPUT 1 -i lo -j ACCEPT
sudo iptables -I INPUT 2 -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT

sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 443 -j ACCEPT

# This rule may lock you out of the system!
sudo iptables -P INPUT DROP
sudo iptables -P OUTPUT ACCEPT

इससे पहले कि आप अगली क्रियाएं करें एक नया SSH कनेक्शन खोलें और यह जांचने के लिए अपने सिस्टम में लॉगिन करने का प्रयास करें कि क्या सब कुछ ठीक है!

सहेजें और पुनर्स्थापित करें

यह कस्टम स्क्रिप्ट के माध्यम से प्राप्त किया जा सकता है, जो iptablesसिस्टम की स्टॉप-स्टार्ट (या रिबूट) प्रक्रिया के दौरान कोन को बचाएगा और पुनर्स्थापित करेगा । (यदि हम यूएफडब्ल्यू का उपयोग Iptables नियमों को सेटअप करने के लिए करते हैं तो इस कदम की आवश्यकता नहीं है।)

printf '#!/bin/sh\n/sbin/iptables-save > /var/www-security-assistant/iptables-CURRENT.conf\nexit 0\n' | sudo tee /var/www-security-assistant/iptables-save.sh
printf '#!/bin/sh\n/sbin/iptables-restore < /var/www-security-assistant/iptables-CURRENT.conf\nexit 0\n' | sudo tee /var/www-security-assistant/iptables-restore.sh
sudo chmod +x /var/www-security-assistant/iptables-restore.sh /var/www-security-assistant/iptables-save.sh
sudo ln -s /var/www-security-assistant/iptables-save.sh /etc/network/if-post-down.d/iptables-save
sudo ln -s /var/www-security-assistant/iptables-restore.sh /etc/network/if-pre-up.d/iptables-restore

नई श्रृंखला बनाएँ

नई श्रृंखला बनाएँ, कहा जाता है GUARDIANऔर इसे INPUTश्रृंखला में संख्या 3 के रूप में डालें :

sudo iptables -N GUARDIAN
sudo iptables -I INPUT 3 -j GUARDIAN

जांच

सिस्टम को रिबूट करें और कॉन्फ़िगरेशन की जांच करें। कृपया उपयोग करें sudo systemctl reboot(बल विकल्प का उपयोग न करें reboot -f)। जब सिस्टम ऑनलाइन वापस आ जाता है तो हम जांच कर सकते हैं कि क्या नई बनाई गई चेन मौजूद है:

sudo iptables -L GUARDIAN -n


Apache2 के लिए मोडेवेसिव

मोडेवेसिव अपाचे के लिए एक HTTP DoS या DDoS हमले या जानवर बल के हमले की स्थिति में निवारक कार्रवाई प्रदान करने के लिए एक प्रेरक युद्धाभ्यास मॉड्यूल है। अधिक पढ़ें...

स्थापना

  • मॉड्यूल को स्थापित और सक्षम करें:

    sudo apt install libapache2-mod-evasive
    sudo a2enmod evasive
  • लॉग डायरेक्टरी बनाएं और इसके लिए इसे सुलभ बनाएं www-data:

    sudo mkdir -p /var/log/apache2_mod_evasive
    sudo chown www-data /var/log/apache2_mod_evasive
  • मूल कॉन्फ़िगरेशन को समायोजित करें - कॉन्फ़िगरेशन फ़ाइल में कुछ निर्देशों को अनइंस्टॉल करें और संपादित करें:

    /etc/apache2/mods-enabled/evasive.conf
  • पुन: प्रारंभ अपाचे sudo systemctl restart apache2.service:।

जांच

  • अपने सर्वर से एक वेब पेज खोलें और ब्राउज़र विंडो को कुछ समय के लिए (प्रेस F5) ताज़ा करें - आपको 403 निषिद्ध त्रुटि संदेश प्राप्त करना होगा । लॉग डायरेक्टरी में, एक नया लॉक फ़ाइल जनरेट किया जाएगा। इस आईपी पते से आगे के संक्रमण का पता लगाने के लिए इस फ़ाइल को हटा दिया जाना चाहिए।


ModEvasive ive WSAS vas Iptables

यहां हम उपरोक्त अनुभाग में निर्मित, के माध्यम mod_evasiveसे बात करने के लिए कॉन्फ़िगर करेंगे ।iptableswww-security-assistant.bash

  • /etc/apache2/mods-available/evasive.confइस तरह से संपादित करें :

    <IfModule mod_evasive20.c>
        DOSHashTableSize    3097
        DOSPageCount        9
        DOSSiteCount        70
        DOSPageInterval     2
        DOSSiteInterval     2
        DOSBlockingPeriod   10
    
        #DOSEmailNotify     your@email.foo
        DOSLogDir           "/var/log/apache2_mod_evasive"
        DOSSystemCommand    "sudo /var/www-security-assistant/www-security-assistant.bash %s 'ModEvasive' 'AutoMode' >> /var/www-security-assistant/www-security-assistant.execlog 2>&1"
    </IfModule>
  • लॉग फ़ाइल बनाएँ और Apache पुनरारंभ करें:

    sudo touch /var/www-security-assistant/www-security-assistant.execlog && sudo chown www-data /var/www-security-assistant/www-security-assistant.execlog

इस विन्यास हम के माध्यम से DDOS हमला अनुकरण कर सकते हैं परीक्षण करने के लिए F5विधि, जैसा कि ऊपर उल्लेख है, या हम के रूप में एक आदेश का उपयोग कर सकते हैं ab, hping3आदि

ध्यान दें: सावधान रहें क्योंकि iptablesWSAS में प्रयुक्त नियम, आपके SSH कनेक्शन सहित स्रोत से सभी नए कनेक्शनों को DROP करेगा $IP। परीक्षणों के दौरान सर्वर से कनेक्ट करने के लिए बैकअप तरीका होना अच्छा है। आप केवल HTTP / HTTPS पोर्ट के साथ काम करने के लिए इस नियम को बदल सकते हैं।


Apache2 के लिए ModSecurity 2.9

ModSecurity एक वेब एप्लिकेशन फ़ायरवॉल इंजन है जो अपने आप बहुत कम सुरक्षा प्रदान करता है। उपयोगी बनने के लिए, ModSecurity को नियमों के साथ कॉन्फ़िगर किया जाना चाहिए। उपयोगकर्ताओं को बॉक्स से बाहर ModSecurity का पूरा लाभ उठाने में सक्षम बनाने के लिए, Trustwave की स्पाइडर लैब्स एक नि: शुल्क प्रमाणित नियम सेट प्रदान कर रही है ... और पढ़ें ...

स्थापना

  • मॉड्यूल को स्थापित और सक्षम करें:

    sudo apt install libapache2-mod-security2
    sudo a2enmod security2
  • कॉन्फ़िगरेशन फ़ाइल बनाएँ:

    sudo cp /etc/modsecurity/modsecurity.conf-recommended /etc/modsecurity/modsecurity.conf

    /etc/modsecurity/modsecurity.confध्यान से पढ़ें और संपादित करें ! कम से कम निम्नलिखित निर्देशों को जोड़ें या बदलें:

    # -- Rule engine initialization ----------------------------------------------
    SecRuleEngine On
    
    # -- Debug log configuration -------------------------------------------------
    SecDebugLogLevel 2
    SecDebugLog "/var/log/apache2_mod_security/modsec_debug.log"
    
    # -- Audit log configuration -------------------------------------------------
    SecAuditLog "/var/log/apache2_mod_security/modsec_audit.log"
    
    # -- Guardian log configuration -------------------------------------------------
    SecGuardianLog /var/log/apache2_mod_security/modsec_guardian.log
  • फ़ाइल में अपाचे के विन्यास में /etc/apache2/mods-enabled/security2.confशामिल /etc/modsecurity/modsecurity.confहै। इस स्तर पर इस तरह security2.confदिखेगा:

    <IfModule security2_module>
        SecDataDir /var/cache/modsecurity
        IncludeOptional /etc/modsecurity/*.conf
    </IfModule>
  • लॉग निर्देशिका बनाएँ:

    sudo mkdir -p /var/log/apache2_mod_security
  • लॉग लॉग सेट करें। पहले विन्यास फाइल बनाएँ:

    sudo cp /etc/logrotate.d/apache2 /etc/logrotate.d/apache2-modsec

    फिर नई फ़ाइल को इस तरह से संपादित करें:

    /var/log/apache2_mod_security/*.log {  }
  • अपाचे को फिर से शुरू करें।

जांच

  • एक अतिरिक्त कॉन्फ़िगरेशन फ़ाइल बनाएं /etc/modsecurity, उदाहरण के लिए इसे कॉल करें z-customrules.conf, और इसकी सामग्री के रूप में निम्न नियम जोड़ें:

    # Directory traversal attacks
    SecRule REQUEST_URI "../" "t:urlDecodeUni, deny, log, id:109"

    सर्वर को पुनरारंभ करें sudo systemctl restart apache2.service:। अपना ब्राउज़र खोलें और टाइप करें https://example.com/?abc=../। परिणाम होगा: 403 निषिद्ध/var/log/apache2_mod_securityअधिक जानकारी के लिए लॉग फ़ाइलों की जाँच करें ।

  • चीजों को और अधिक मज़ेदार बनाने के लिए स्क्रिप्ट issues.phpको आपके भीतर एक उपयुक्त स्थान पर रखें DocumentRoot(यहाँ मैं इस स्थान को मान रहा हूँ /var/www/html):

    sudo wget https://raw.githubusercontent.com/pa4080/www-security-assistant/ask_ubuntu/appendix/var/www/html/issues.php -O /var/www/html/issues.php

    फिर उपरोक्त नियम को निम्नलिखित तरीके से संशोधित करें:

    # Directory traversal attacks with redirection (or use URL instead of URI: redirect:'https://example.com/issues.php')
    SecRule REQUEST_URI "../" "t:urlDecodeUni, deny, log, id:109, redirect:'/issues.php'"

    अपाचे को पुनरारंभ करें, फिर अपना ब्राउज़र खोलें और टाइप करें https://example.com/?abc=../;-) विचार एसई की स्क्रिप्ट से उधार लिया गया है BotLovin.cs

  • /etc/modsecurity/z-customrules.confएक बार फिर से संपादित करें और नियम को अक्षम करें (इसे अक्षम करें) - यह केवल परीक्षण उदाहरण था और इसे अगले अनुभाग में वर्णित OWASP CRS द्वारा कवर किया गया है।

  • यहां एक और उदाहरण है जहां हम सभी wp-adminपृष्ठ अनुरोधों को रीडायरेक्ट करेंगे , लेकिन कुछ आईपी पते से इन को छोड़कर (नोट करें chain):

    # Block wp-admin access
    SecRule REQUEST_URI "^/wp-admin" "id:108, log, deny, status:403, t:lowercase, chain, redirect:'/issues.php'"
        SecRule REMOTE_ADDR "!@ipMatch 192.168.1.11,99.77.66.12"

    यहां हमारे पास दो विघटनकारी क्रियाएं हैं: (1) deny, status:403और (2) redirect:'/issues.php'। वास्तव में हमें denyकार्रवाई की आवश्यकता नहीं है क्योंकि यह कार्रवाई से ओवरराइड हो जाएगा redirect


ModSecurity OWASP कोर नियम सेट 3.x

Ubuntu 16.04 में आप CSR 2.x स्थापित कर सकते हैं apt install modsecurity-crs:। यहां हम CSR 3.x स्थापित करेंगे , इंस्टॉलेशन मैनुअल ( gitआवश्यक है) के भीतर विस्तृत निर्देश दिए गए हैं ।

स्थापना

  • फ़ोल्डर में क्लोन सीएसआर /usr/share/modsecurity-crs.3:

    sudo git clone https://github.com/SpiderLabs/owasp-modsecurity-crs /usr/share/modsecurity-crs.3
  • अपग्रेड और ऑटो जियोआईपी डेटाबेस को नवीनीकृत करते हैं। (जियोआईपी डीबी अब सीआरएस के साथ शामिल नहीं है। इसके बजाय आपको इसे नियमित रूप से डाउनलोड करने की सलाह दी जाती है।) स्क्रिप्ट util/upgrade.pyइस कार्यक्षमता को लाता है। क्रॉन में इस प्रकार आप इसे उपयोग कर सकते हैं - sudo crontab -e:

    0 2 * * * /usr/share/modsecurity-crs.3/util/upgrade.py --geoip --crs --cron >> /var/log/apache2_mod_security/owasp-crs-upgrade.log 2>&1
  • कॉन्फ़िगरेशन फ़ाइलें बनाएँ:

    sudo cp /usr/share/modsecurity-crs.3/crs-setup.conf{.example,}
    sudo cp /usr/share/modsecurity-crs.3/rules/REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf{.example,}
    sudo cp /usr/share/modsecurity-crs.3/rules/RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf{.example,}

    इन फाइलों को ध्यान से पढ़ें और संपादित करें! कम से कम SecGeoLookupDBनिर्देश:

    SecGeoLookupDB util/geo-location/GeoIP.dat
  • अपाचे के कॉन्फ़िगरेशन को लागू करें। /etc/apache2/mods-available/security2.confइस तरह से संपादित करें :

    <IfModule security2_module>
        SecDataDir /var/cache/modsecurity
        IncludeOptional /etc/modsecurity/*.conf
        IncludeOptional /usr/share/modsecurity-crs.3/crs-setup.conf
        IncludeOptional /usr/share/modsecurity-crs.3/rules/*.conf
    </IfModule>

    फ़ाइल सहेजें और फिर Apache पुनरारंभ करें।


ModSecurity नियम श्वेत सूची

ModSecurity नियमों का श्वेत-सूचीकरण निम्न ModSec निर्देशों के माध्यम से किया जा सकता है, जिसका उपयोग सिस्टम वाइड या वर्चुअल होस्ट के कॉन्फ़िगरेशन में, वैश्विक स्तर पर, विशिष्ट निर्देशिकाओं या स्थान मिलानों के लिए भी किया जा सकता है:

SecRuleRemoveById
SecRuleRemoveByMsg
SecRuleRemoveByTag
SecRuleUpdateTargetById
SecRuleUpdateTargetByMsg
SecRuleUpdateTargetByTag
SecRuleUpdateActionById

mod_security2PhpMyAdmin के लिए अक्षम करें । /etc/phpmyadmin/apache.confइस तरह बदलें :

<Directory /usr/share/phpmyadmin>
    <IfModule security2_module>
        SecRuleEngine Off
    </IfModule>
</Directory>

कुछ निर्देशिका के लिए विशिष्ट नियम अक्षम करें:

<Directory /var/www/html>
    <IfModule security2_module>
        SecRuleRemoveById 973301
    </IfModule>
</Directory>

विश्व स्तर पर नियमों को अक्षम करें। इस प्रयोजन के लिए हमें अपाचे की कॉन्फ़िगरेशन फ़ाइलों में कहीं न कहीं अपने निर्देशों को जोड़ना चाहिए: /etc/modsecurity/z-customrules.confएक अच्छी जगह है।

  • संपूर्ण अपाचे के कॉन्फ़िगरेशन में नियम अक्षम करें:

    SecRuleRemoveById 973301 950907
  • श्वेतसूची में एक आईपी पता है ताकि वह मोडसिटी से गुजर सके:

    SecRule REMOTE_ADDR "@ipMatch 192.168.110.1" "phase:1,nolog,allow,ctl:ruleEngine=Off,ctl:auditEngine=Off"
  • निर्देशिका मैच के भीतर नियम अक्षम करें:

    <Directory /var/www/mediawiki/core>
        SecRuleRemoveById 973301 950907
    </Directory>
  • स्थान मिलान के भीतर अपनी ID द्वारा नियम की क्रिया अपडेट करें :

    <LocationMatch "/index.php.*">
        SecRuleUpdateActionById 973301 "pass"
        SecRuleUpdateActionById 950907 "pass"
    </LocationMatch>

उपरोक्त उदाहरणों में हम यह मानते हैं कि 973301और 950907नियम आईडी हैं जो हमारे वेब ऐप्स के सामान्य काम में बाधा डालती हैं। हम इनका विश्लेषण करके नियम खोज सकते हैं modsec_audit.log


ModSecurity नियम AS WSAS। Iptables

यहाँ कुछ और उदाहरण दिए गए हैं कि कैसे कस्टम सेक्रूल्स का निर्माण किया जाए, साथ ही हम उनके माध्यम से डब्ल्यूडब्ल्यूडब्ल्यू सुरक्षा सहायक स्क्रिप्ट (डब्ल्यूएसएएस) को कैसे कॉल कर सकते हैं।

प्रारंभिक व्यवस्था

हम एक अतिरिक्त स्टार्टअप स्क्रिप का जरूरत है - modsecurity-assistant.sh। इसका कारण यह है कि, ModSecurity की execकार्रवाई में बहुत ही सरल और सीमित सिंटैक्स है।

sudo wget https://raw.githubusercontent.com/pa4080/www-security-assistant/ask_ubuntu/modsecurity-assistant.sh -O /var/www-security-assistant/modsecurity-assistant.sh
sudo chmod +x /var/www-security-assistant/modsecurity-assistant.sh

यदि आप स्क्रिप्ट के अंदर देखते हैं तो आपको कुछ चर दिखाई देंगे जो कि ModSecurity द्वारा निर्यात किए जाते हैं। ये हैं: $REQUEST_URI, $ARGS, $SERVER_NAME, $REMOTE_ADDR, $REMOTE_HOSTऔर$UNIQUE_ID । अन्य चर को स्क्रिप्ट के अंदर समझाया गया है।

कस्टम नियम बनाएं और इसके माध्यम से हमारी स्क्रिप्ट को कॉल करें

पहले आइए एक नियम बनाएं जो यूआरआई शब्द को हमारे ब्लैकलिस्ट में शामिल करने वाले अनुरोध को निष्पादित modsecurity-assistant.sh(और कॉल www-security-assistant.bash) करेगा । /etc/modsecurity/z-customrules.confनीचे दी गई पंक्तियों को खोलें और जोड़ें:

# REQUEST_URI words blacklist
#
SecRule REQUEST_URI "@pmFromFile /var/www-security-assistant/modsecurity-uri-black.list" \
    "id:150, log, t:lowercase, chain, \
    drop, deny, status:403, redirect:'/issues.php'"
    SecRule REMOTE_ADDR "!@ipMatchFromFile /var/www-security-assistant/modsecurity-ip-white.list" \
        "setenv:REMOTE_HOST=%{REMOTE_HOST}, \
         setenv:ARGS=%{ARGS}, \
         exec:/var/www-security-assistant/modsecurity-assistant.sh"
  • REQUEST_URI- इस चर में वर्तमान अनुरोध से पूरा यूआरआई शामिल है। नियम अधिक विस्तृत हो:SecRule REQUEST_URI|ARGS|REQUEST_BODY ...

  • @pmFromFileउस फ़ाइल को पढ़ेंगे modsecurity-uri-black.listजिसमें वाक्यांशों की सूची है, जहाँ प्रत्येक विशिष्ट वाक्यांश या शब्द को एक नई पंक्ति में रखा गया है। आप लॉग फ़ाइलों से दिलचस्प शब्द और वाक्यांश एकत्र कर सकते हैं। यदि हमारे बीच एक विशेष मिलान है REQUEST_URIऔर नियम की हमारी सूची लागू की जाएगी। फ़ाइल खाली हो सकती है, लेकिन आपको इसे बनाना ( touch) चाहिए।

  • logकार्रवाई के साथ इस नियम के लिए लॉग फ़ाइलों में लॉग प्रविष्टियों पैदा करेगा id:150

  • drop, deny(के साथ status) और redirectक्रियाएं कार्यों के विघटनकारी समूह से संबंधित हैं , उन्हें नियम की शुरुआत में होना चाहिए chain(यदि कोई श्रृंखला है)। दूसरी क्रिया पहले वाले को ओवरराइड करेगी और तीसरी को ओवरराइड करेगी, इसलिए आपको चुनाव करना होगा जो आप करना चाहते हैं और दूसरों को हटा सकते हैं।

  • chainकार्रवाई श्रृंखला के अगले नियम को कॉल करेगी, ध्यान दें कि दूसरा नियम, नहीं है id

  • REMOTE_ADDR इसमें अनुरोध का IP पता शामिल है।

  • @ipMatchFromFileवह फ़ाइल modsecurity-ip-white.listजिसमें नई पंक्तियों में अलग किए गए IP पतों की श्वेत सूची होती है। CIDR प्रविष्टियाँ भी स्वीकार्य हैं। क्योंकि विघटनकारी कार्रवाई हमेशा श्रृंखला के प्रमुख नियम में स्थित होती है जिसे इसे लागू किया जाएगा, लेकिन जब कुछ निश्चित आईपी इस सफेद सूची में execहोगी तो कार्रवाई लागू नहीं होगी। फ़ाइल खाली हो सकती है, लेकिन आपको इसे बनाना ( touch) चाहिए।

  • execक्रिया हमारी बाहरी लिपि कहेगी। यह क्रिया विघटनकारी नहीं है और वर्तमान नियम के सही होने पर निष्पादित की जाएगी। जब यह क्रिया लागू होती है तो रिमोट आईपी हमारी स्क्रिप्ट के माध्यम से संसाधित किया जाएगा।

  • setenvयह क्रिया कुछ आंतरिक चरों =%{...} को envvars के रूप में निर्यात करेगी, निर्यात किए गए नाम इंटर्नल से अलग हो सकते हैं। कुछ चर मैन्युअल रूप से निर्यात किए जाने चाहिए, कुछ अन्य स्वचालित रूप से निर्यात किए जाते हैं - शायद यह एक छोटा बग है (कुछ मामलों में समान नामों के साथ मैन्युअल निर्यात, उदाहरण के लिए setenv:REQUEST_URI=%{REQUEST_URI}, निर्यात किए गए चर का एक खाली मूल्य पैदा करेगा)।

जांच

मान लेते हैं कि आपके सर्वर पर जूमला नहीं है, फ़ाइल को संपादित करें modsecurity-uri-black.listऔर सामग्री के साथ एक पंक्ति जोड़ें /joomla। फिर अपने ब्राउज़र में टाइप करें https://exemple.com/joomla। आपको Iptables के माध्यम से पुनर्निर्देशित और अवरुद्ध किया जाना चाहिए। रिकॉर्ड साफ़ करें sudo www-security-assistant.bash <your-ip> --DROP-CLEAR 'some note', अपना आईपी जोड़ें modsecurity-ip-white.listऔर फिर से व्यायाम करें। अब आपको पुनर्निर्देशित किया जाना चाहिए, लेकिन अवरुद्ध नहीं।

हमारी स्क्रिप्ट्स को OWASP Core Rule Set 3.x से कनेक्ट करें

ऐसा करने के लिए हम एनोमली मोड नियम (949110 और 959100) की डिफ़ॉल्ट कार्रवाई को अपडेट करेंगे । इस उद्देश्य के लिए फ़ाइल को संपादित करें /usr/share/modsecurity-crs.3/rules/RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.confऔर नीचे की अगली पंक्तियों को जोड़ें:

# -- Anomaly Mode - Update actions by ID -----
#

SecRuleUpdateActionById 949110 "t:none, drop, deny, status:403, redirect:'/issues.php', \
     setenv:REMOTE_HOST=%{REMOTE_HOST}, setenv:ARGS=%{ARGS}, \
     exec:/var/www-security-assistant/modsecurity-assistant.sh"

SecRuleUpdateActionById 959100 "t:none, drop, deny, status:403, redirect:'/issues.php', \
     setenv:REMOTE_HOST=%{REMOTE_HOST}, setenv:ARGS=%{ARGS}, \
     exec:/var/www-security-assistant/modsecurity-assistant.sh"

# -- Anomaly Mode - Whitelist some URI and IP addresses -----
#

SecRule REQUEST_URI "^/wp-admin/admin-ajax.php*|^/index\.php\?title=.*&action=(submit|raw&ctype=text/javascript|raw&ctype=text/css)$" \
    "id:'999010', t:none, phase:1, pass, \
     ctl:ruleRemoveById=949110, \
     ctl:ruleRemoveById=959100"

SecRule REMOTE_ADDR "@ipMatchFromFile /var/www-security-assistant/modsecurity-ip-white.list" \
    "id:'999020', t:none, phase:1, pass, \
     ctl:ruleRemoveById=949110, \
     ctl:ruleRemoveById=959100"

जांच

कॉन्फ़िगरेशन परिवर्तन लागू करने के लिए अपाचे को पुनः आरंभ (या पुनः लोड करना) न भूलें। परीक्षणों के दौरान समय-समय पर रिकॉर्ड साफ़ करना न भूलें, अन्यथा आप स्थायी रूप से अवरुद्ध हो सकते हैं :-)

डायरेक्टरी ट्रैवर्सल हमले का अनुकरण करें:

https://example.com/?abc=../../../                         # This should be redirected and blocked
https://example.com/wp-admin/admin-ajax.php?abc=../../../  # This should pass because of the whitelist rule

SQL इंजेक्शन हमले का अनुकरण करें:

https://example.com/?username=1'%20or%20'1'%20=%20'1&password=1'%20or%20'1'%20=%20'1
https://example.com/index.php?username=1'%20or%20'1'%20=%20'1'))/*&password=foo


ModSecurity और Apache लॉग फ़ाइलें

अपाचे वेब सर्वर को सर्वर प्रशासक को इस बारे में महत्वपूर्ण जानकारी देने के लिए कॉन्फ़िगर किया जा सकता है कि यह कैसे कार्य कर रहा है ... व्यवस्थापक को फीडबैक प्रदान करने के लिए मुख्य एवेन्यू लॉग फाइलों के उपयोग के माध्यम से है। अधिक पढ़ें...

ModSecurity में शक्तिशाली लॉगिंग तंत्र है। निर्देश द्वारा SecGuardianLogयह बाहरी स्क्रिप्ट के साथ काम करने के लिए विशेष रूप से डिज़ाइन किया गया एक लॉग फीड प्रदान करता है।

वर्तमान में संरक्षक लॉगिंग के साथ काम करने के लिए जाना जाने वाला एकमात्र उपकरण है httpd-guardian, जो अपाचे httpd उपकरण परियोजना का हिस्सा है । httpd-guardianउपकरण सेवा हमलों के इनकार के खिलाफ की रक्षा करने के लिए बनाया गया है। यह blacklist toolएक iptables- आधारित के साथ बातचीत करने के लिए उपयोग करता है ... फ़ायरवॉल, गतिशील रूप से आपत्तिजनक आईपी पते को ब्लैक लिस्ट करता है। अधिक पढ़ें...


ModSecurity लॉग फ़ाइलें 2 Fail2Ban। Iptables

अपाचे की लॉग फ़ाइलों के डेटा पार्सिंग के लिए Fail2Ban सेटअप करना संभव है। modsec_audit.logशायद सबसे अच्छा विकल्प है, लेकिन उन वर्गों को भी देखें जहां हम बात करते हैं SecGuardianLog

ध्यान रखना है कि SecAuditLogRelevantStatusमें /etc/modsecurity/modsecurity.confटिप्पणी की है। अन्यथा हर कोई जो 404 त्रुटि पेज प्राप्त करता है, वह विफल 2ban द्वारा अवरुद्ध किया जाएगा।

SecAuditEngine RelevantOnly
#SecAuditLogRelevantStatus "^(?:5|4(?!04))"

वर्तमान में Fail2Ban इस परियोजना में किसी भी तरह से लागू नहीं है।


ModSecGuardianLog ec HTTPD-Guardian ► WSAS ables Iptables

httpd-guardian- अपाचे सिक्योरिटी, कॉपीराइट (C) 2005 इवान रिस्ते के मॉनिटरिंग अनुरोधों के अनुसार DoS के हमलों का पता लगाएं - पाइप लॉगिंग तंत्र के माध्यम से सभी वेब सर्वर अनुरोधों की निगरानी करने के लिए डिज़ाइन किया गया है। यह प्रत्येक आईपी पते से भेजे गए अनुरोधों की संख्या पर नज़र रखता है ... httpd- अभिभावक या तो चेतावनी दे सकते हैं या IP पते को ब्लॉक करने के लिए स्क्रिप्ट निष्पादित कर सकते हैं ...

इस स्क्रिप्ट का उपयोग Apache2 लॉगिंग तंत्र के साथ, या ModSecurity (बेहतर) के साथ किया जा सकता है ।

वर्तमान परिस्थितियों में स्थापना और सेटअप

डाउनलोड करें httpd-guardianऔर इसे निष्पादन योग्य बनाएं:

sudo wget https://raw.githubusercontent.com/pa4080/www-security-assistant/ask_ubuntu/httpd-guardian.pl -O /var/www-security-assistant/httpd-guardian.pl
sudo chmod +x /var/www-security-assistant/httpd-guardian.pl

98-119हमारे WSAS स्क्रिप्ट के साथ स्क्रिप्ट कैसे जुड़ी है, यह देखने के लिए लाइनें पढ़ें ।

अपाचे के कॉन्फ़िगरेशन ( /etc/modsecurity/modsecurity.conf) के भीतर निम्नलिखित परिवर्तन लागू करें , फिर इसे पुनरारंभ करें:

#SecGuardianLog /var/log/apache2_mod_security/modsec_guardian.log
SecGuardianLog "|/var/www-security-assistant/httpd-guardian.pl"

जांच

स्क्रिप्ट को निष्क्रिय करने के लिए ModEvasive ( sudo a2dismod evasiveबाद में इसे सक्षम करना न भूलें) का परीक्षण करें और Apache को पुनरारंभ करें। फिर tailनिष्पादन लॉग:

tail -F /var/www-security-assistant/www-security-assistant.execlog

और दूसरे उदाहरण से DoS अटैक करते हैं, उदाहरण के लिए abइस तरह से उपयोग :

for i in {1..20}; do (ab -n 200 -c 10 https://example.com/ &); done


ModSecGuardianLog ec कस्टम विश्लेषण ► WSAS। Iptables

यहाँ एक सरल स्क्रिप्ट प्रस्तुत की गई है, जिसे कहा जाता है httpd-custom-analyze.bash, यह कुछ खास नहीं है लेकिन एक अच्छा उदाहरण हो सकता है। इसकी विशेषताएं स्क्रिप्ट के शरीर के भीतर वर्णित हैं।

स्थापना और सेटअप

डाउनलोड करें httpd-custom-analyze.bashऔर इसे निष्पादन योग्य बनाएं:

sudo wget https://raw.githubusercontent.com/pa4080/www-security-assistant/ask_ubuntu/httpd-custom-analyze.bash -O /var/www-security-assistant/httpd-custom-analyze.bash
sudo chmod +x /var/www-security-assistant/httpd-custom-analyze.bash

अपाचे के कॉन्फ़िगरेशन के भीतर निम्नलिखित परिवर्तन लागू करें ( /etc/modsecurity/modsecurity.conf) और इसे पुनरारंभ करें:

#SecGuardianLog /var/log/apache2_mod_security/modsec_guardian.log
#SecGuardianLog "|/var/www-security-assistant/httpd-guardian.pl"
SecGuardianLog "|/var/www-security-assistant/httpd-custom-analyze.bash"
  • दहलीज तक पहुंचने पर स्क्रिप्ट WSAS को कॉल करेगी - लाइन पढ़ें 86और 35

  • दोनों httpd-स्क्रिप्ट को एक साथ काम करने के लिए संपादित करने modsecurity.confऔर SecGuardianLogदोनों को पाइप करने के लिए।

  • परीक्षण करने के लिए उपरोक्त अनुभाग से युक्तियों का पालन करें।


कृपया अपने पोस्ट को अक्सर संपादित न करें। लगातार एक दिन में कई बार अपनी पोस्ट को संपादित करने से यह फ्रंट पेज पर टकराता रहता है, और हमारे लिए मॉडरेटर्स के लिए शोर भी पैदा करता है। इसके बजाय, किसी अन्य पेज या टेक्स्ट एडिटर में अपनी सामग्री को प्रारूपित करने पर विचार करें , फिर व्यक्तिगत रूप से संपादन विवरणों के बजाय इसे एन मास में संपादित करें। (यह पोस्ट अस्थायी रूप से यहां किए जा रहे संपादन को रेट-लिमिट करने के लिए एक घंटे के लिए बंद है)
थॉमस वार्ड

1
टिप्पणी के लिए धन्यवाद, @ThomasWard। मैं इसे ध्यान में रखूंगा! क्या प्रोफ़ाइल और सेटिंग संपादित करने के बगल में, उपयोगकर्ता पृष्ठ के भीतर सैंडबॉक्स के रूप में कुछ करना अच्छा नहीं है ?
पा ४० 14०

1
यह प्रस्तावित किया गया है और मेरा मानना ​​है कि अस्वीकार कर दिया गया। मेरा सुझाव है कि आप बिना सहेजे परिवर्तन कर सकते हैं , और अपने प्रश्न की एक प्रति स्टोर कर सकते हैं, जैसा कि आपके सिस्टम पर एक टेक्स्ट फ़ाइल में है, तो आप इसे संपादित कर सकते हैं, इसे कॉपी कर सकते हैं जब आप पोस्ट को संपादित करना चाहते हैं, और फिर मार्कडाउन और इस तरह के लिए तय। साथ ही, सभी स्ट्राइकथ्रू हैं ... चीजों को पढ़ना मुश्किल है। इसके बजाय उन वर्गों को हटाने पर विचार करें । (संशोधन इतिहास डेटा को बरकरार रखेगा)
थॉमस वार्ड

यह हास्यास्पद है कि
स्टाॅक एक्सचेंज

1

मुझे एहसास है कि pa4080 ने अपने आप ही इस सब का ध्यान रखने के लिए एक विस्तृत और शायद बहुत उपयोगी प्रतिक्रिया दी। अपने आप में समस्याओं का ख्याल रखना अच्छा लग सकता है, लेकिन इसमें बहुत समय लग सकता है ।

  1. Cloudflare से परिचित हों क्योंकि वे मुफ्त DDoS सुरक्षा प्रदान करते हैं।
  2. यदि आप वर्तमान में केवल अपाचे का उपयोग करते हैं, तो सीखने पर विचार करें कि NGINX आपके भार को संतुलित करने के लिए कैसे काम करता है। एनजीआईएनएक्स लोड अपाचे के लिए बहुत अच्छा है क्योंकि यहां और यहां दिखाया गया है
  3. अपने डॉक्स पर सुरक्षा के लिए अपाचे के सुझावों की समीक्षा करें ।
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.