अपडेट: वर्तमान उत्तर पूरी तरह से अपडेट है।
इस चर्चा के अनुसार मैंने 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.bash
sudo
sudoers
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
से बात करने के लिए कॉन्फ़िगर करेंगे ।iptables
www-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
आदि
ध्यान दें: सावधान रहें क्योंकि iptables
WSAS में प्रयुक्त नियम, आपके 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_security2
PhpMyAdmin के लिए अक्षम करें । /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
दोनों को पाइप करने के लिए।
परीक्षण करने के लिए उपरोक्त अनुभाग से युक्तियों का पालन करें।