Je laisse tout le trafic sur les ports sauf sur 80 pour mon serveur Web.
J'ai des règles comme celle-ci sur iptables:
iptables -A INPUT -p tcp -m tcp --dport 80 -m string --string "cgi" --algo bm --to 1000 -j DROP
Quelqu'un qui en a plus peut partager? Je sais que les mauvais pirates continuent de se mettre à jour, mais certains d'entre eux commencent toujours par le même code. Je dois abandonner la connexion en fonction de certains critères. Voici quelques journaux Apache (je supprime les ips mais chaque atack provient du même):
Attaque 1: Je ne sais pas ce que j'essaie de faire, mais fais 50 fois de la même adresse IP
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
Attaque 2: cette tentative d'obtenir des informations sur le serveur uniquement.
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
Attaque 3: ils essaient d'avoir accès à une vulnérabilité de page de connexion
GET /userlogin/login.aspx HTTP/1.1 302 186 - -
Attaque 4: cette tentative d'accéder à un cgi à la première demande, (voir ma première règle iptables pour supprimer ceci)
GET /hndUnblock.cgi HTTP/1.0 302 186 - Wget(linux)
GET /tmUnblock.cgi HTTP/1.0 302 186 - Wget(linux)
Je suis très nouveau avec le serveur ces 4 attaques sont de seulement 12 dernières heures ... ont des milliers par semaine.
Update: La réponse actuelle est complètement mise à jour.
Selon cette discussion , j'ai créé un référentiel GitHub nommé WWW Security Assistant . Il existe une branche, appelée
ask_ubuntu
, dédiée à cette réponse. Toutes les références, précédemment disponibles ici , sont supprimées en raison de la limite de caractères - elles sont disponibles sur GitHub.
Voici un aperçu de plusieurs manières, impliquées dans un mécanisme complet, comment augmenter la sécurité Apache2dans Ubuntu 16.04.
Table des matières:
En outre, disons qu'il est toujours bon d'utiliser HTTPS:
Ici est présenté le script www-security-assistant.bash
. Cela pourrait vous aider à gérer les adresses IP malveillantes. Le script a deux modes.
Lorsqu'un programme externe, tel que mod_security
d'Apache, fournit une adresse $IP
illicite. Dans ce cas, la syntaxe qui appelle le script doit être la suivante:
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
Dans ce mode, le script fournit deux étapes/et pour chaque action, il envoie un courrier électroniqueà l'administrateur.
Première étape: pour les premiers 'transgressions'le code source $IP
sera interdit pendant une périodeégale à la valeur de $BAN_TIME
. Ce mode utilise la commande at
.
Deuxième étape: lorsque le nombre de transgressions de certains $IP
devient égal à la valeur de $LIMIT
, cette adresse $IP
sera bannie de manière permanentevia Iptables et sera ajoutée au $BAN_LIST
.
Ce mode accepte les options suivantes:
www-security-assistant.bash <ip-address>
--DROP "log notes"
Crée une entrée dans le fichier /var/www-security-assistant/iptables-DROP.list
et génère une règle comme suit:
iptables -A GUARDIAN -s $IP -j DROP
www-security-assistant.bash <ip-address>
--DROP-CLEAR "log notes"
Crée une entrée dans le fichier /var/www-security-assistant/iptables-DROP-CLEAR.list
, supprime certaines règles Iptables, supprime le $IP
de l'historique et du $BAN_LIST
:
iptables -D GUARDIAN -s $IP -j DROP
www-security-assistant.bash <ip-address>
--ACCEPT "log notes"
Crée uniquement une entrée dans le fichier /var/www-security-assistant/iptables-ACCEPT.list
.
www-security-assistant.bash <ip-address>
--ACCEPT-CHAIN "log notes"
Crée une entrée dans le fichier /var/www-security-assistant/iptables-ACCEPT.list
et génère une règle comme suit:
iptables -A GUARDIAN -s $IP -j ACCEPT
Le script utilise iptables-save.sh
et la chaîne iptables
GUARDIAN
, comme expliqué dans la section suivante. Il créera et maintiendra quelques fichiers dans le $WORK_DIR
:
www-security-assistant.history
- contient les données pour les transgressions de l'IP précédente.www-security-assistant.mail
- le contenu du dernier email envoyé par le script.iptables-ACCEPT.list
; iptables-DROP.list
et iptables-DROP-CLEAR.list
.Le script nécessite une configuration minimale pour envoyer des emails:
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 protected]
S'il existe un service HTTPS configuré, son certificat TLS peut être utilisé dans le service Postfix.
De plus, le script utilise at
: Sudo apt install at
.
Créez un répertoire de travail, appelons-le /var/www-security-assistant
. Téléchargez www-security-assistant.bash
et rendez-le exécutable:
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
Rendre www-security-assistant.bash
disponible en tant que commande personnalisée:
Sudo ln -s /var/www-security-assistant/www-security-assistant.bash /usr/local/bin/
Accordez à www-data
l'autorisation d'exécuter www-security-assistant.bash
sans mot de passe via Sudo
. Utilisez la commande suivante pour créer et éditer en toute sécurité un nouveau fichier avec une règle 'sudoers
' supplémentaire:
Sudo visudo -f /etc/sudoers.d/www-security-assistant
Ajoutez la ligne suivante dans le fichier - enregistrez le fichier et quittez:
www-data ALL=(ALL) NOPASSWD: /var/www-security-assistant/www-security-assistant.bash
Tweak www-security-assistant.bash
. Modifiez au moins la valeur de la variable $EMAIL_TO
.
Représentez-vous comme $AGENT
et vérifiez si le MODE automatique fonctionne correctement:
www-security-assistant.bash 192.168.1.177 Guardian
Ensuite, vérifiez votre courrier électronique, tapez iptables -L GUARDIAN -n
, examinez les fichiers www-security-assistant.history
et www-security-assistant.mail
. Exécutez la commande ci-dessus 5 fois et passez en revue les fichiers iptables-DROP.list
et iptables-CURRENT.conf
.
Vérifiez si le mode manuel fonctionne correctement - ajoutez votre hôte local à la liste blanche:
www-security-assistant.bash 127.0.0.1 --ACCEPT "Server's localhost IP"
Ensuite, vérifiez le fichier iptables-ACCEPT.list
.
Le reste de ce didacticiel explique comment intégrer
www-security-assistant
à votre système.
Veuillez lire ce manuel avant d'ajouter les règles suivantes.
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
Avant d'effectuer les actions suivantes, ouvrez une nouvelle connexion SSH et essayez de vous connecter à votre système pour vérifier si tout fonctionne bien!
Cela pourrait être réalisé via des scripts personnalisés, qui enregistreront et restaureront le iptables
coning pendant le processus d'arrêt-démarrage (ou de redémarrage) du système. (Si nous utilisons UFW pour configurer les règles Iptables, cette étape n'est pas nécessaire.)
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
Créez une nouvelle chaîne, appelée GUARDIAN
et insérez-la sous le numéro 3 dans la chaîne INPUT
:
Sudo iptables -N GUARDIAN
Sudo iptables -I INPUT 3 -j GUARDIAN
Redémarrez le système et vérifiez la configuration. Veuillez utiliser Sudo systemctl reboot
(n'utilisez pas l'option de force reboot -f
). Lorsque le système est de nouveau en ligne, nous pouvons vérifier si la chaîne nouvellement créée existe en:
Sudo iptables -L GUARDIAN -n
ModEvasive est un module de manoeuvres d'évitement destiné à Apache afin de permettre une action d'évitement en cas d'attaque HTTP DoS ou DDoS ou d'attaque en force. En lire plus ...
Installez et activez le module:
Sudo apt install libapache2-mod-evasive
Sudo a2enmod evasive
Créez un répertoire de journaux et rendez-le accessible pour www-data
:
Sudo mkdir -p /var/log/Apache2_mod_evasive
Sudo chown www-data /var/log/Apache2_mod_evasive
Ajustez la configuration de base - supprimez le commentaire et modifiez certaines directives dans le fichier de configuration:
/etc/Apache2/mods-enabled/evasive.conf
Redémarrez Apache: Sudo systemctl restart Apache2.service
.
F5
) - vous devez obtenir le message 403 Interdit error. Dans le répertoire des journaux, un nouveau fichier de verrouillage sera généré. Ce fichier doit être supprimé pour la détection ultérieure des transgressions à partir de cette adresse IP.Ici, nous allons configurer mod_evasive
pour parler à iptables
par le biais de www-security-assistant.bash
, créé dans la section ci-dessus.
Éditez /etc/Apache2/mods-available/evasive.conf
de cette manière:
<IfModule mod_evasive20.c>
DOSHashTableSize 3097
DOSPageCount 9
DOSSiteCount 70
DOSPageInterval 2
DOSSiteInterval 2
DOSBlockingPeriod 10
#DOSEmailNotify [email protected]
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>
Créer un fichier journal et redémarrer Apache:
Sudo touch /var/www-security-assistant/www-security-assistant.execlog && Sudo chown www-data /var/www-security-assistant/www-security-assistant.execlog
Pour tester cette configuration, nous pouvons simuler une attaque DDOS via la méthode F5
susmentionnée ou utiliser des commandes telles que ab
, hping3
, etc.
Attention:Faites attention car la règle iptables
, utilisée dans WSAS, supprimera toutes les nouvellesconnexions de la source $IP
, y compris vos connexions SSH. Il est bon de disposer d’un moyen de sauvegarde pour se connecter au serveur pendant les tests. Vous pouvez modifier cette règle pour ne travailler qu'avec les ports HTTP/HTTPS.
ModSecurity est un moteur de pare-feu pour applications Web offrant très peu de protection. Pour devenir utile, ModSecurity doit être configuré avec des règles. Afin de permettre aux utilisateurs de tirer pleinement parti de ModSecurity, Spider Labs de Trustwave fournit un ensemble de règles certifiées gratuites ... En lire plus ... =
Installez et activez le module:
Sudo apt install libapache2-mod-security2
Sudo a2enmod security2
Créer un fichier de configuration:
Sudo cp /etc/modsecurity/modsecurity.conf-recommended /etc/modsecurity/modsecurity.conf
Lisez et éditez le /etc/modsecurity/modsecurity.conf
avec soin! Ajoutez ou modifiez au moins les directives suivantes:
# -- 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
Le fichier /etc/Apache2/mods-enabled/security2.conf
implique /etc/modsecurity/modsecurity.conf
dans la configuration d'Apache. À ce stade, security2.conf
doit ressembler à ceci:
<IfModule security2_module>
SecDataDir /var/cache/modsecurity
IncludeOptional /etc/modsecurity/*.conf
</IfModule>
Créer un répertoire de journaux:
Sudo mkdir -p /var/log/Apache2_mod_security
Rotation du journal d'installation. Créez d'abord le fichier de configuration:
Sudo cp /etc/logrotate.d/Apache2 /etc/logrotate.d/Apache2-modsec
Puis éditez le nouveau fichier de cette manière:
/var/log/Apache2_mod_security/*.log { … }
Redémarrez Apache.
Créez un fichier de configuration supplémentaire dans /etc/modsecurity
, appelez-le par exemple z-customrules.conf
et ajoutez la règle suivante comme contenu:
# Directory traversal attacks
SecRule REQUEST_URI "../" "t:urlDecodeUni, deny, log, id:109"
Redémarrez le serveur: Sudo systemctl restart Apache2.service
. Ouvrez votre navigateur et tapez https://example.com/?abc=../
. Le résultat sera: 403 Interdit . Consultez les fichiers journaux dans /var/log/Apache2_mod_security
pour plus de détails.
Pour rendre les choses plus amusantes , placez le script issues.php
dans un emplacement approprié dans votre DocumentRoot
(ici, je suppose que cet endroit est /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
Puis modifiez la règle ci-dessus de la manière suivante:
# 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'"
Redémarrez Apache, puis ouvrez votre navigateur et tapez https://example.com/?abc=../
;-) L'idée est empruntée au script du SE BotLovin.cs
.
Éditez /etc/modsecurity/z-customrules.conf
une fois de plus et commentez (désactivez) la règle - il ne s'agit que d'un exemple de test et elle est couverte par OWASP CRS, décrite dans la section suivante.
Voici un autre exemple où nous allons rediriger toutes les requêtes de page wp-admin
, à l'exception de celles provenant de certaines adresses IP (notez le 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"
Nous avons ici deux actions perturbatrices: (1) deny, status:403
et (2) redirect:'/issues.php'
. En réalité, nous n’avons pas besoin de l’action deny
car elle sera annulée par l’action redirect
.
Dans Ubuntu 16.04, vous pouvez installer CSR 2.x: apt install modsecurity-crs
. Ici, nous allons installer CSR 3.x , des instructions détaillées sont fournies dans le Manuel d'installation (git
est requis).
Cloner le CSR dans le dossier /usr/share/modsecurity-crs.3
:
Sudo git clone https://github.com/SpiderLabs/owasp-modsecurity-crs /usr/share/modsecurity-crs.3
Mettre à niveau et renouveler automatiquement la base de données GeoIP. (La base de données GeoIP n'est plus incluse dans le CRS. Il est conseillé de la télécharger régulièrement.) Le script util/upgrade.py
apporte cette fonctionnalité. Vous pouvez l'utiliser comme suit dans cron - 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
Créer des fichiers de configuration:
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,}
Lisez et éditez ces fichiers attentivement! Décommentez au moins la directive SecGeoLookupDB
:
SecGeoLookupDB util/geo-location/GeoIP.dat
Appliquez la configuration d'Apache. Éditez /etc/Apache2/mods-available/security2.conf
de cette manière:
<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>
Enregistrez le fichier puis redémarrez Apache.
La liste blanche des règles ModSecurity peut être créée via les directives ModSec suivantes, qui peuvent être utilisées à l’échelle du système ou dans la configuration de l’hôte virtuel, de manière globale également, pour des répertoires spécifiques ou des correspondances d’emplacement:
SecRuleRemoveById
SecRuleRemoveByMsg
SecRuleRemoveByTag
SecRuleUpdateTargetById
SecRuleUpdateTargetByMsg
SecRuleUpdateTargetByTag
SecRuleUpdateActionById
Désactiver mod_security2
pour PhpMyAdmin. Changez /etc/phpmyadmin/Apache.conf
de cette manière:
<Directory /usr/share/phpmyadmin>
<IfModule security2_module>
SecRuleEngine Off
</IfModule>
</Directory>
Désactiver des règles spécifiques pour certains répertoires:
<Directory /var/www/html>
<IfModule security2_module>
SecRuleRemoveById 973301
</IfModule>
</Directory>
Désactiver les règles globalement. Pour cela, nous devons ajouter nos directives quelque part dans les fichiers de configuration d'Apache: /etc/modsecurity/z-customrules.conf
est un bon endroit.
Désactivez les règles dans l'ensemble de la configuration d'Apache:
SecRuleRemoveById 973301 950907
Liste blanche d'une adresse IP afin qu'elle puisse passer par ModSecurity:
SecRule REMOTE_ADDR "@ipMatch 192.168.110.1" "phase:1,nolog,allow,ctl:ruleEngine=Off,ctl:auditEngine=Off"
Désactiver les règles dans la correspondance d'annuaire:
<Directory /var/www/mediawiki/core>
SecRuleRemoveById 973301 950907
</Directory>
Mise à jour de l'action de la règle en fonction de son IDdans l'emplacement correspondant:
<LocationMatch "/index.php.*">
SecRuleUpdateActionById 973301 "pass"
SecRuleUpdateActionById 950907 "pass"
</LocationMatch>
Dans les exemples ci-dessus, nous supposons que 973301
et 950907
sont des ID de règle qui gênent le travail normal de nos applications Web. On peut trouver de telles règles en analysant modsec_audit.log
.
Voici quelques exemples supplémentaires sur la façon de créer des SecRules personnalisées, ainsi que sur la manière dont nous pouvons appeler WSAS (WWW Security Assistant Script).
Nous avons besoin d'un script de démarrage supplémentaire - modsecurity-assistant.sh
. La raison en est que l'action exec
de ModSecurity a une syntaxe trop simple et limitée.
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
Si vous regardez à l'intérieur du script, vous verrez quelques variables exportées par ModSecurity. Ce sont: $REQUEST_URI
, $ARGS
, $SERVER_NAME
, $REMOTE_ADDR
, $REMOTE_Host
et $UNIQUE_ID
. Les autres variables sont expliquées dans le script.
Commençons par créer une règle qui exécutera modsecurity-assistant.sh
(et appelera www-security-assistant.bash
) lorsque l'URI de la demande contient un mot inclus dans notre liste noire. Ouvrez /etc/modsecurity/z-customrules.conf
et ajoutez les lignes suivantes en bas:
# 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
- cette variable contient l'URI complet de la demande en cours. La règle pourrait être plus large: SecRule REQUEST_URI|ARGS|REQUEST_BODY ...
@pmFromFile
va lire le fichier modsecurity-uri-black.list
qui contient une liste de phrases, chaque phrase ou mot spécifique étant placé dans une nouvelle ligne. Vous pouvez collecter des mots et des phrases intéressantes à partir des fichiers journaux. S'il y a une correspondance particulière entre REQUEST_URI
et notre liste de modèles, la règle sera appliquée. Le fichier peut être vide, mais vous devez le créer (touch
).
L'action log
créera des entrées de journal dans les fichiers journaux de cette règle avec id:150
.
Les actions drop
, deny
(avec status
) et redirect
appartiennent au groupe perturbateur , elles doivent figurer au début de la règle chain
(s'il existe une chaîne). La deuxième action remplacera la première et la troisième remplacera la deuxième. Vous devez donc choisir laquelle vous voulez exécuter et supprimer les autres.
L'action chain
appellera la prochaine règle de la chaîne. Notez que la deuxième règle n'a pas id
.
REMOTE_ADDR
contient l'adresse IP de la demande.
@ipMatchFromFile
sera le fichier modsecurity-ip-white.list
qui contient une liste blanche d'adresses IP, séparées à de nouvelles lignes. Les entrées CIDR sont également acceptables. Étant donné que l'action perturbatrice est toujours située dans la règle principale de la chaîne, elle sera appliquée, mais lorsque certaines adresses IP se trouvent dans cette liste blanche, l'action exec
ne sera pas appliquée. Le fichier peut être vide, mais vous devez le créer (touch
).
L'action exec
appellera notre script externe. Cette action ne perturbe pas et sera exécutée lorsque la règle actuelle renverra la valeur true. Lorsque cette action est appliquée, l'adresse IP distante sera traitée à travers nos scripts.
setenv
cette action exportera certains variables internes=%{...}
en tant qu'envars, les noms exportés peuvent être différents des internes. Certaines variables doivent être exportées manuellement, d’autres automatiquement: il s’agit probablement d’un petit bogue (l’exportation manuelle portant les mêmes noms, par exemple setenv:REQUEST_URI=%{REQUEST_URI}
, provoquera une valeur vide de la variable exportée).
Supposons que Joomla ne soit pas sur votre serveur, éditez le fichier modsecurity-uri-black.list
et ajoutez une ligne avec le contenu /joomla
. Puis tapez dans votre navigateur https://exemple.com/joomla
. Vous devriez être redirigé et bloqué via Iptables. Effacez les enregistrements Sudo www-security-assistant.bash <your-ip> --DROP-CLEAR 'some note'
, ajoutez votre adresse IP dans modsecurity-ip-white.list
et recommencez l’exercice. Maintenant, vous devriez être redirigé, mais pas bloqué.
Pour ce faire, nous mettrons à jour l'action par défaut des règles de mode d'anomalie(949110 et 959100). A cette fin, éditez le fichier /usr/share/modsecurity-crs.3/rules/RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf
et ajoutez les lignes suivantes en bas:
# -- 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"
N'oubliez pas de redémarrer (ou de recharger) Apache pour appliquer les modifications de configuration. N'oubliez pas d'effacer les enregistrements périodiquement pendant les tests, sinon vous pouvez être bloqué de manière permanente :-)
Simuler une attaque de traversée de répertoire:
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
Simuler une attaque par injection 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
Le serveur Web Apache peut être configuré pour donner à l'administrateur du serveur des informations importantes sur son fonctionnement ... L'affichage de fichiers journaux constitue le principal moyen de fournir des informations à l'administrateur. En lire plus ...
ModSecuritypossède un mécanisme de journalisation puissant. Par la directive SecGuardianLog
, il fournit un journal de bord spécialement conçu pour fonctionner avec des scripts externes.
Actuellement, le seul outil connu pour travailler avec la consignation du gardien est
httpd-guardian
, qui fait partie du projet Apache httpd tools . L'outilhttpd-guardian
est conçu pour se défendre contre les attaques par déni de service. Il utilise leblacklist tool
pour interagir avec un pare-feu ... basé sur iptables, en créant une liste noire dynamique des adresses IP incriminées. En lire plus ...
Il est possible de configurer Fail2Ban pour l'analyse des données des fichiers journaux d'Apache. modsec_audit.log
est probablement le meilleur choix, mais voir aussi les sections où nous parlons de SecGuardianLog
.
Faites attention que SecAuditLogRelevantStatus
dans /etc/modsecurity/modsecurity.conf
est commenté. Sinon, chaque personne recevant une page d'erreur 404 serait bloquée par fail2ban.
SecAuditEngine RelevantOnly
#SecAuditLogRelevantStatus "^(?:5|4(?!04))"
Actuellement, Fail2Ban n'est implémenté d'aucune manière dans ce projet.
httpd-guardian
- Détectez les attaques par déni de service en surveillant les requêtes. Apache Security, Copyright © 2005 Ivan Ristic - est conçu pour surveiller toutes les requêtes du serveur Web par le biais du mécanisme de journalisation canalisé. Il garde la trace du nombre de requêtes envoyées depuis chaque adresse IP ... httpd-guardian peut soit émettre un avertissement, soit exécuter un script pour bloquer l'adresse IP ...Ce script peut être utilisé avec mécanisme de journalisation Apache2 , ou avec ModSecurity (meilleur).
Téléchargez httpd-guardian
et rendez-le exécutable:
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
Lisez les lignes 98-119
pour voir comment le script est connecté à notre script WSAS.
Appliquez la modification suivante dans la configuration d'Apache (/etc/modsecurity/modsecurity.conf
), puis redémarrez-la:
#SecGuardianLog /var/log/Apache2_mod_security/modsec_guardian.log
SecGuardianLog "|/var/www-security-assistant/httpd-guardian.pl"
Pour tester le script, désactivez ModEvasive (Sudo a2dismod evasive
n'oubliez pas de l'activer ultérieurement) et redémarrez Apache. Puis tail
le journal exec:
tail -F /var/www-security-assistant/www-security-assistant.execlog
Et à partir d’une autre instance, effectuez une attaque DoS, par exemple, utilisez ab
de cette manière:
for i in {1..20}; do (ab -n 200 -c 10 https://example.com/ &); done
Voici un script simple, appelé httpd-custom-analyze.bash
, ce n'est pas quelque chose de spécial, mais pourrait être un bel exemple. Ses caractéristiques sont décrites dans le corps du script.
Téléchargez httpd-custom-analyze.bash
et rendez-le exécutable:
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
Appliquez la modification suivante dans la configuration d'Apache (/etc/modsecurity/modsecurity.conf
) et redémarrez-la:
#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"
Le script appelle WSAS lorsque le seuil est atteint - lisez la ligne 86
et 35
.
Pour que les deux scripts httpd-
fonctionnent simultanément, éditez modsecurity.conf
et dirigez SecGuardianLog
vers les deux.
Pour effectuer un test, suivez les conseils de la section ci-dessus.
Je me rends compte que pa4080 a donné une réponse détaillée et probablement très utile pour s’occuper de tout cela seul. Bien que vous puissiez vous sentir à l'aise en réglant vos problèmes vous-même, cela peut également prendre beaucoup de temps .