Je laisse tomber tout le trafic sur les ports sauf sur 80 pour mon serveur web.
J'ai quelques 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 connais toujours les mauvais pirates qui 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 vous essayez de faire, mais faites-le 50 fois à partir 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: ceci essaie 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 tentent d'accéder à une vulnérabilité de la page de connexion
GET /userlogin/login.aspx HTTP/1.1 302 186 - -
Attaque 4: ceci essaie d'accéder à un cgi à la première demande, (voir ma première règle iptables pour la supprimer)
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 ne datent que des 12 dernières heures ... Ayez des milliers par semaine.
Réponses:
Voici quelques façons, impliquées dans un mécanisme complet, comment augmenter la sécurité d'Apache2 dans Ubuntu 16.04.
Table des matières:
De plus, disons qu'il est toujours bon d'utiliser HTTPS:
Script de l'assistant de sécurité WWW ► Iptables
Voici le script présenté
www-security-assistant.bash
. Cela pourrait vous aider à gérer les adresses IP malveillantes. Le script a deux modes.Mode automatique
Lorsqu'un programme externe, comme Apache
mod_security
, fournit une$IP
adresse malveillante . Dans ce cas, la syntaxe qui appelle le script doit être:Dans ce mode, le script propose deux étapes d'action et pour chaque action, il enverra un e-mail aux administrateurs.
Première étape: pour les premières «transgressions», la source
$IP
sera interdite pendant une durée égale à la valeur de$BAN_TIME
. Ce mode utilise la commandeat
.Deuxième étape: lorsque le nombre de transgressions de certaines
$IP
devient égal à la valeur de$LIMIT
, cette$IP
adresse sera définitivement interdite via Iptables et sera ajoutée à la$BAN_LIST
.Mode manuel
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: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 la certaine règle Iptables, supprime le$IP
de l'historique et du$BAN_LIST
: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:Dépendances
Le script utilise
iptables-save.sh
et laiptables
chaîneGUARDIAN
, expliqués dans la section suivante. Il créera et maintiendra quelques fichiers dans$WORK_DIR
:www-security-assistant.history
- contient les données des 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
etiptables-DROP-CLEAR.list
.Le script a besoin d'une configuration minimale pour envoyer des e-mails:
S'il existe un service HTTPS configuré, son certificat TLS peut être utilisé dans le service Postfix.
En outre , le script utilise
at
:sudo apt install at
.Installation
Créez un répertoire de travail, appelons-le
/var/www-security-assistant
. Téléchargezwww-security-assistant.bash
et rendez-le exécutable:Rendre
www-security-assistant.bash
disponible en tant que commande personnalisée:Accordez l'autorisation d'
www-data
exécuterwww-security-assistant.bash
sans mot de passe viasudo
. Utilisez la commande suivante pour créer et modifier en toute sécurité un nouveau fichier avec unesudoers
règle ' ' supplémentaire :Ajoutez la ligne suivante à l'intérieur du fichier - enregistrez le fichier et quittez:
Tweak
www-security-assistant.bash
. Modifiez au moins la valeur de la variable$EMAIL_TO
.Vérification
Représentez-vous en tant que
$AGENT
et vérifiez si le MODE automatique fonctionne correctement:Ensuite, vérifiez votre e-mail, tapez
iptables -L GUARDIAN -n
, passez en revue les fichierswww-security-assistant.history
etwww-security-assistant.mail
. Exécutez la commande ci-dessus 5 fois et examinez les fichiersiptables-DROP.list
etiptables-CURRENT.conf
.Vérifiez si le MODE Manuel fonctionne correctement - ajoutez votre hôte local à la Liste Blanche:
Vérifiez ensuite le fichier
iptables-ACCEPT.list
.Iptables - Configuration de base - Enregistrer et restaurer
Configuration de base
Veuillez lire ce manuel avant d'ajouter les règles suivantes.
Avant de faire les actions suivantes, ouvrez une nouvelle connexion SSH et essayez de vous connecter à votre système pour vérifier si tout fonctionne bien!
Enregistrer et restaurer
Cela pourrait être réalisé via des scripts personnalisés, qui enregistreront et restaureront le
iptables
cône 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.)Créer une nouvelle chaîne
Créez une nouvelle chaîne, appelée
GUARDIAN
et insérez-la sous le numéro 3 dans laINPUT
chaîne:Vérification
Redémarrez le système et vérifiez la configuration. Veuillez utiliser
sudo systemctl reboot
(n'utilisez pas l'option de forcereboot -f
). Lorsque le système est de nouveau en ligne, nous pouvons vérifier si la chaîne nouvellement créée existe en:ModEvasive pour Apache2
Installation
Installez et activez le module:
Créez un répertoire de journaux et rendez-le accessible pour
www-data
:Ajustez la configuration de base - décommentez et éditez certaines directives dans le fichier de configuration:
Redémarrez Apache:
sudo systemctl restart apache2.service
.Vérification
F5
) - vous devez obtenir le message d'erreur 403 Forbidden . Dans le répertoire des journaux, sera généré un nouveau fichier de verrouillage. Ce fichier doit être supprimé pour une détection ultérieure des transgressions à partir de cette adresse IP.ModEvasive ► WSAS ► Iptables
Ici, nous allons configurer
mod_evasive
pour parler àiptables
travers lewww-security-assistant.bash
, créé dans la section ci-dessus.Modifiez
/etc/apache2/mods-available/evasive.conf
de cette manière:Créez un fichier journal et redémarrez Apache:
Pour tester cette configuration , nous pouvons simuler une attaque DDOS par la
F5
méthode, mentionné ci - dessus, ou on peut utiliser une commande commeab
,hping3
, etc.Attention: soyez prudent car la
iptables
règle, utilisée dans WSAS, supprimera toutes les nouvelles connexions de la source$IP
, y compris vos connexions SSH. Il est bon d'avoir un moyen de sauvegarde pour se connecter au serveur pendant les tests. Vous pouvez modifier cette règle pour qu'elle fonctionne uniquement avec les ports HTTP / HTTPS.ModSecurity 2.9 pour Apache2
Installation
Installez et activez le module:
Créer un fichier de configuration:
sudo cp /etc/modsecurity/modsecurity.conf-recommended /etc/modsecurity/modsecurity.conf
Lisez et modifiez
/etc/modsecurity/modsecurity.conf
attentivement! Ajoutez ou modifiez au moins les directives suivantes:Le fichier
/etc/apache2/mods-enabled/security2.conf
implique/etc/modsecurity/modsecurity.conf
dans la configuration d'Apache. À ce stadesecurity2.conf
doit ressembler à ceci:Créer un répertoire de journaux:
Configurer la rotation des journaux. Créez d'abord le fichier de configuration:
Modifiez ensuite le nouveau fichier de cette manière:
Redémarrez Apache.
Vérification
Créez un fichier de configuration supplémentaire dans
/etc/modsecurity
, appelez-le par exemplez-customrules.conf
et ajoutez la règle suivante comme contenu:Redémarrez le serveur:
sudo systemctl restart apache2.service
. Ouvrez votre navigateur et tapezhttps://example.com/?abc=../
. Le résultat sera de: 403 Interdit . Consultez les fichiers journaux/var/log/apache2_mod_security
pour plus de détails.Pour rendre les choses plus amusantes, placez le script
issues.php
dans un endroit approprié dans votreDocumentRoot
(ici, je suppose que cet endroit est/var/www/html
):Modifiez ensuite la règle ci-dessus de la manière suivante:
Redémarrez Apache, puis ouvrez votre navigateur et tapez
https://example.com/?abc=../
;-) L'idée est empruntée au script du SEBotLovin.cs
.Modifiez
/etc/modsecurity/z-customrules.conf
à nouveau et commentez (désactivez) la règle - ce n'était qu'un exemple de test et il est couvert par OWASP CRS, décrit dans la section suivante.Voici un autre exemple où nous redirigerons toutes les
wp-admin
demandes de page, mais à l'exception de celles provenant de certaines adresses IP (notez lechain
):Ici, nous avons deux actions perturbatrices: (1)
deny, status:403
et (2)redirect:'/issues.php'
. En fait, nous n'avons pas besoin de l'deny
action car elle sera remplacée par l'redirect
action.ModSecurity OWASP Core Rule Set 3.x
Dans Ubuntu 16.04 , vous pouvez installer 2.x CSR:
apt install modsecurity-crs
. Ici, nous allons installer CSR 3.x , des instructions détaillées sont fournies dans le manuel d'installation (git
requis).Installation
Clonez CSR dans le dossier
/usr/share/modsecurity-crs.3
:Mettez à niveau et renouvelez automatiquement la base de données GeoIP. (La base de données GeoIP n'est plus incluse avec le CRS. Au lieu de cela, 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
:Créez des fichiers de configuration:
Lisez et modifiez attentivement ces fichiers! Décommentez au moins la
SecGeoLookupDB
directive:Appliquez la configuration d'Apache. Modifiez
/etc/apache2/mods-available/security2.conf
de cette manière:Enregistrez le fichier, puis redémarrez Apache.
Liste blanche des règles ModSecurity
La liste blanche des règles ModSecurity peut être effectué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, également à l'échelle mondiale, pour des répertoires spécifiques ou des correspondances d'emplacement:
Désactivez
mod_security2
pour PhpMyAdmin. Changez/etc/phpmyadmin/apache.conf
de cette façon:Désactivez des règles spécifiques pour certains répertoires:
Désactivez 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
c'est un bon endroit.Désactivez les règles dans l'ensemble de la configuration d'Apache:
Mettez une adresse IP en liste blanche afin qu'elle puisse passer par ModSecurity:
Désactivez les règles dans la correspondance d'annuaire:
Mettre à jour l'action de la règle par son ID dans la correspondance d'emplacement:
Dans les exemples ci - dessus , nous supposons que
973301
et950907
les identifiants des règles qui entravent le travail normal de nos applications Web. Nous pouvons trouver des règles comme celles-ci par une analyse demodsec_audit.log
.Règles de ModSecurity ► WSAS ► Iptables
Voici quelques exemples supplémentaires sur la façon de créer des règles personnalisées, ainsi que sur la façon dont nous pouvons appeler le script d'assistant de sécurité WWW (WSAS) à travers eux.
La configuration initiale
Nous avons besoin d'un script de démarrage supplémentaire -
modsecurity-assistant.sh
. La raison en est que l'exec
action de ModSecurity a une syntaxe trop simple et limitée.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.Créez une règle personnalisée et appelez nos scripts à travers elle
Créons d'abord une règle qui s'exécutera
modsecurity-assistant.sh
(et appellerawww-security-assistant.bash
) lorsque l'URI de la demande contient un mot qui est inclus dans notre liste noire. Ouvrez/etc/modsecurity/z-customrules.conf
et ajoutez les lignes suivantes en bas: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
lira le fichiermodsecurity-uri-black.list
qui contient la liste des phrases, où chaque phrase ou mot spécifique est placé dans une nouvelle ligne. Vous pouvez collecter des mots et des phrases intéressants à partir des fichiers journaux. S'il y a une correspondance particulière entreREQUEST_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'
log
action créera des entrées de journal dans les fichiers journaux pour cette règle avecid:150
.drop
,deny
(avecstatus
) et lesredirect
actions appartiennent au groupe perturbateur d'actions, elles doivent être au début de la règlechain
(s'il y a une chaîne). La deuxième action remplacera la première et la troisième remplacera la seconde, vous devez donc choisir celle que vous souhaitez effectuer et pouvez supprimer les autres.chain
l'action appellera la prochaine règle de la chaîne, notez que la deuxième règle, n'a pasid
.REMOTE_ADDR
contient l'adresse IP de la demande.@ipMatchFromFile
sera le fichiermodsecurity-ip-white.list
qui contient la liste blanche des 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 de tête de la chaîne, elle sera appliquée, mais lorsque certaines IP figurent dans cette liste blanche, l'exec
action ne sera pas appliquée. Le fichier peut être vide, mais vous devez le créer (touch
).exec
l'action appellera notre script externe. Cette action n'est pas perturbatrice et sera exécutée lorsque la règle actuelle retournera true. Lorsque cette action est appliquée, l'adresse IP distante sera traitée via nos scripts.setenv
cette action exportera certaines variables internes en=%{...}
tant qu'envvars, les noms exportés peuvent être différents des internes. Certaines variables doivent être exportées manuellement, d'autres sont exportées automatiquement - il s'agit probablement d'un petit bogue (dans certains cas, l'exportation manuelle avec les mêmes noms, par exemplesetenv:REQUEST_URI=%{REQUEST_URI}
, provoquera une valeur vide de la variable exportée).Vérification
Supposons que vous ne disposez pas de Joomla sur votre serveur, modifiez le fichier
modsecurity-uri-black.list
et ajoutez une ligne avec du contenu/joomla
. Tapez ensuite dans votre navigateurhttps://exemple.com/joomla
. Vous devez être redirigé et bloqué via Iptables. Effacez les enregistrementssudo www-security-assistant.bash <your-ip> --DROP-CLEAR 'some note'
, ajoutez votre adresse IPmodsecurity-ip-white.list
et recommencez l'exercice. Vous devez maintenant être redirigé, mais pas bloqué.Connectez nos scripts avec OWASP Core Rule Set 3.x
Pour ce faire, nous mettrons à jour l'action par défaut des règles de mode d'anomalie (949110 et 959100). Pour cela, éditez le fichier
/usr/share/modsecurity-crs.3/rules/RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf
et ajoutez les lignes suivantes en bas:Vérification
N'oubliez pas de redémarrer (ou 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é définitivement :-)
Simuler une attaque de traversée de répertoire:
Simuler une attaque par injection SQL:
Fichiers journaux ModSecurity et Apache
ModSecurity possède un puissant mécanisme de journalisation. Par la directive,
SecGuardianLog
il fournit un flux de journaux spécialement conçu pour fonctionner avec des scripts externes.Fichiers journaux ModSecurity ► Fail2Ban ► Iptables
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 dont nous parlonsSecGuardianLog
.Faites attention que
SecAuditLogRelevantStatus
dans/etc/modsecurity/modsecurity.conf
est commenté. Sinon, tous ceux qui reçoivent une page d'erreur 404 seraient bloqués par fail2ban.Actuellement, Fail2Ban n'est implémenté en aucune façon dans ce projet.
ModSecGuardianLog ► HTTPD-Guardian ► WSAS ► Iptables
Installation et configuration dans les circonstances actuelles
Téléchargez
httpd-guardian
et rendez-le exécutable: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:Vérification
Pour tester le script, désactivez ModEvasive (
sudo a2dismod evasive
n'oubliez pas de l'activer plus tard) et redémarrez Apache. Ensuite,tail
le journal d'exécution:Et à partir d'une autre instance, effectuez une attaque DoS, par exemple, utilisez
ab
de cette manière:ModSecGuardianLog ► Analyse personnalisée ► WSAS ► Iptables
Voici un script simple, appelé
httpd-custom-analyze.bash
, qui n'a rien de spécial mais qui pourrait être un bel exemple. Ses fonctionnalités sont décrites dans le corps du script.Installation et configuration
Téléchargez
httpd-custom-analyze.bash
et rendez-le exécutable:Appliquez la modification suivante dans la configuration d'Apache (
/etc/modsecurity/modsecurity.conf
) et redémarrez-la:Le script appellera WSAS lorsque le seuil est atteint - ligne de lecture
86
et35
.Pour que les deux
httpd-
scripts fonctionnent simultanément, modifiez-lesmodsecurity.conf
et dirigez-lesSecGuardianLog
vers les deux.Pour effectuer un test, suivez les conseils de la section ci-dessus.
la source
Je me rends compte que pa4080 a donné une réponse détaillée et probablement très utile pour prendre soin de tout cela par vous-même. Bien que prendre soin de vos problèmes par vous-même puisse vous faire du bien, cela peut également prendre beaucoup de temps .
la source