yum install httpd
apt-get install apache2
telnet www.domaine.fr 80 GET /index.php HTTP/1.1 Host: www.domaine.fr
openssl s_client -connect www.domaine.fr:443 ---informations du cert--- GET /index.php HTTP/1.1 Host: www.domaine.fr
################################## # Configuration relative au serveur ################################## # Ecoute du serveur Listen 80 ServerName <nomduserveur>.domaine.fr ServerAdmin webmaster@domaine.fr # Directory par defaut DocumentRoot "/usr/local/WWW" ################################## # Configuration generale ################################## # Process ServerRoot "/etc/httpd" PidFile run/httpd.pid # Permet de garder un certain laps de temps les connexions ouverte KeepAlive On # Nombre de connexion ouverte à garder MaxKeepAliveRequests 200 # Temps avant qu'une connexion soit fermée faute de demande KeepAliveTimeout 15 # User d'execution du serveur User apache Group apache ################################## # Serveur/ Modules ################################## # Inclusion des modules Include conf.modules.d/*.conf # Multi-Processing Modules - Nombre de serveur/worker #// InfoDoc: Le MPM prefork utilise plusieurs processus enfants possédant chacun un seul thread. #// Chaque processus gère une seule connexion à la fois. Sur de nombreux systèmes, prefork est comparable en matière de vitesse à worker #// mais il utilise plus de mémoire #// Si probleme de perf, il faudra passer en mode "event" <IfModule prefork.c> # Nombre min de processus serveurs enfants inactifs MinSpareServers 8 # Nombre max de processus serveurs enfants inactifs MaxSpareServers 25 # Nombre max de processus serveurs enfants en parralèle ( Anciennement MaxClients ) - (Calcul : RAM Mo / 30 ) # ( Defaut MaxRequestWorkers 256) # Nombre de requetes avant de tuer le worker ( Anciennement MaxRequestsPerChild ) #// Calcul : total amount of daily requests / total number of daily processes MaxConnectionsPerChild 1000 #// Avec les MPMs prefork et event, n'utilisez cette directive que si vous devez définir MaxRequestWorkers à une valeur supérieure à 256 #// ( Default ServerLimit 200) #// Prechauffe du serveur au demarrage - Dans notre cas il ne sert pas de specifier #// ( Default StartServers 5) </IfModule> # Configuration ancienne désormais native en apache 2.4 #// AutoIndentification IP:Port #// (Default UseCanonicalName Off ) #// Desactiver reverse DNS #// (Default HostnameLookups off ) #// Desactiver l'envoi de fichier #// (Default EnableSendfile Off ) #// Nom des fichier htaccess #// (Default AccessFileName .htaccess ) #// Temps pour fermer une connection ouverte mais qui n'a pas été utilisée - Baisser en cas de DDOS #// (Default: Timeout 300) ################################## # Securité ################################## # Prod="Server: Apache" ServerTokens Prod # Aucune infos sur les pages d'erreurs ServerSignature Off # Interdire de parcourir l'ensemble du systeme de fichier <Directory "/"> AllowOverride none Require all denied </Directory> <Files ".ht*"> Require all denied </Files> <IfModule mod_userdir.c> UserDir disabled root </IfModule> ################################## # Configuration types de fichiers et langue ################################## <IfModule mime_module> TypesConfig /etc/mime.types AddType application/x-compress .Z AddType application/x-gzip .gz .tgz # Permettre les SSI (Inclusions Côté Serveur) AddType text/html .shtml AddOutputFilter INCLUDES .shtml AddEncoding x-compress Z AddEncoding x-gzip gz AddLanguage en .en AddLanguage fr .fr AddLanguage de .de AddLanguage da .da AddLanguage el .el AddLanguage it .it </IfModule> <IfModule mime_magic_module> MIMEMagicFile conf/magic </IfModule> <IfModule mod_negotiation> LanguagePriority fr en de ForceLanguagePriority Prefer Fallback </IfModule> <IfModule dir_module> DirectoryIndex index.html </IfModule> ################################## # Mise en forme des logs ################################## ErrorLog "logs/error_log" LogLevel warn <IfModule log_config_module> # # The following directives define some format nicknames for use with # a CustomLog directive (see below). # LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined LogFormat "%h %l %u %t \"%r\" %>s %b" common <IfModule logio_module> # You need to enable mod_logio.c to use %I and %O LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %I %O" combinedio </IfModule> CustomLog "logs/access_log" combined </IfModule> ################################## # Supplemental configuration ################################## IncludeOptional conf.d/*.conf ################################## # Configuration des vhost # // Lu par ordre alphabetique 0-z ################################## Include vhost.d/*.conf
#################################################### # HTTP - Redirection vers SSL #################################################### <VirtualHost nomduserveur.domaine.fr:80> ### # Parametres vhost ### ServerName nomduserveur.domaine.fr ServerAdmin webmaster@domaine.fr ErrorLog /var/log/httpd/www_error.log LogLevel debug CustomLog /var/log/httpd/www_access.log combined ### # Redirection vers SSL ### RewriteEngine on RewriteCond %{HTTPS} off RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} </VirtualHost> #################################################### # HTTPS #################################################### <VirtualHost nomduserveur.domaine.fr:443> ### # Parametres vhost ### DocumentRoot "/local/dataWeb/" ServerName nomduserveur.domaine.fr ServerAdmin webmaster@domaine.fr SSLEngine on ErrorLog /var/log/httpd/www_error.log LogLevel warn CustomLog /var/log/httpd/www_access.log combined <Location /server-status> SetHandler server-status AuthName "Administrateur du serveur" AuthType Basic AuthBasicProvider ldap Require group-admin </Location> <Location /server-info> SetHandler server-info AuthName "Administrateur du serveur" AuthType Basic AuthBasicProvider ldap Require group-admin </Location> <Directory "/local/dataWeb/"> # On interdit tout accès AllowOverride none Require all none </Directory> <Directory "/local/dataWeb/app1/"> # Eviter FollowSymlinks à la racine, cela reduit les performances apache Options Indexes FollowSymLinks # Si besoin d'un htaccess, mais il serait préférable d'indiqué ici les paramètres de l'application AllowOverride All # On autorise l'accès au répertoire Require all granted </Directory> </VirtualHost>
ProxyPreserveHost On # On interdit de se servir du serveur en tant que mandataire ProxyRequests Off AddDefaultCharset off Order deny,allow Allow from all #Controle le flux des requetes ProxyVia On
<VirtualHost *:443> ### # Parametres vhost ### ServerName www.domaine.fr ServerAdmin webmaster@domaine.fr ServerAlias domaine.fr ErrorLog /var/log/httpd/www_error.log LogLevel warn CustomLog /var/log/httpd/www_access.log combined ### # Parametres SSL ### SSLEngine on SSLProxyEngine On <Location "/app1"> ProxyPass https://nomduserver.domaine.fr/app1 ProxyPassReverse https://nomduserver.domaine.fr/app1 </Location> </VirtualHost>
systemctl restart httpd.service
yum install mod_security mod_security_crs
# Default recommended configuration
SecRuleEngine On
Les logs des actions de mod_security sont dans le fichier /var/log/httpd/modsec_audit.log Pour désactiver une règle pour une page spécifique :
<LocationMatch "/file.php"> SecRuleRemoveById 960015 #ID que l'on peut voir dans les logs [id "960015"]
<LocationMatch "/[0-9a-zA-Z/_.+-]+\.example)"> SecRuleEngine off
SecRule REQUEST_HEADERS:x-forwarded-for "@ipmatch xxx.yyy.zzz.0/16" "phase:2,t:none,pass,nolog"
( A completer )Requière mlogc, collecteur de log de ModSecurity
[jwall] name=CentOS-jwall - jwall.org packages for noarch baseurl=http://download.jwall.org/yum/jwall enabled=1 gpgcheck=1 protect=1
rpm --import http://download.jwall.org/chris.gpg
yum install auditconsole
# ModSecurity Console receiving URI. You can change the host # and the port parts but leave everything else as is. # ConsoleURI "http://127.0.0.1:8080/rpc/auditLogReceiver" CollectorRoot "/var/log/mlogc" ErrorLog "mlogc.log" # # Sensor credentials # SensorUsername "sensor" SensorPassword "test" # Base directory where the audit logs are stored. This can be specified # as a path relative to the CollectorRoot, or a full path. LogStorageDir "data" # Transaction log will contain the information on all log collector # activities that happen between checkpoints. The transaction log # is used to recover data in case of a crash (or if Apache kills # the process). TransactionLog "mlogc-transaction.log" # The file where the pending audit log entry data is kept. This file # is updated on every checkpoint. QueuePath "mlogc-queue.log" # The location of the error log. ErrorLog "mlogc-error.log" # The location of the lock file. #LockFile "mlogc.lck" # Keep audit log entries after sending? (0=false 1=true) # NOTE: This is required to be set in SecAuditLog mlogc config if you # are going to use a secondary console via SecAuditLog2. KeepEntries 0
systemctl restart auditconsole
....
SecAuditLog "|/usr/bin/mlogc /etc/mlogc.conf"
....
SecAuditLog "|/usr/bin/jwall mlogc /etc/mlogc.conf"
/usr/bin/jwall send 'http://sensor:test@127.0.0.1:8080/rpc/auditLogReceiver' '/var/log/httpd/modsec_audit.log
yum install mod_evasive
LoadModule evasive20_module modules/mod_evasive24.so #Taille de la table hash, plus grande est la valeur, plus de mémoire sera nécessaire pour parcourir la #table, plus la valeur sera petite, plus le parcours de la table sera rapide. DOSHashTableSize 3097 #Nombre de requêtes pour une même page dans l'intervale DOSPageInvernal, au delà, l'IP est bloquée. DOSPageCount 2 #Intervalle du nombre de pages en secondes. DOSPageInterval 1 #Pareil qu'au dessus mais pour un site au lieu d'une page. DOSSiteCount 150 #Intervalle du nombre de sites par secondes. DOSSiteInterval 1 #Période en secondes pendant laquelle l'IP sera bloquée. DOSBlockingPeriod 60 #IP Jamais blacklistés DOSWhitelist 66.249.65.* DOSWhitelist 66.249.66.* DOSWhitelist 66.249.71.* #Email de notification DOSEmailNotify william.vincent@mondomaine.fr # Dossiers de logs DOSLogDir "/var/log/mod_evasive" #Commande supplementaire ( %s = IP ) # DOSSystemCommand "sudo iptables -A INPUT -s %s -j DROP" # DOSSystemCommand "/bin/nomduscript.sh %s"
mkdir /var/log/mod_evasive chown apache:apache /var/log/mod_evasive
#!/usr/bin/perl -w # Script original : mod_dosevasive test.pl # A ajouter : : Permettre un sleep, Choisir un nombre de requêtes, use IO::Socket; $num_args = $#ARGV + 1; if ($num_args != 1) { print "\nUsage: ddos_web.pl ipOrNameServer:80\n"; exit; } my $time=time; for ($i=0; $i<300; $i++) { my($response); my($SOCKET) = new IO::Socket::INET( Proto => "tcp", PeerAddr=> $ARGV[0]); print $SOCKET "GET / HTTP/1.0\n\n"; $response = <$SOCKET>; print $i; print $response; if ($response =~ "Forbid") { $time=time-$time; print "Temps d'execution : ", $time, " secondes \n"; print "Ip bloquée\n\n"; exit; } close($SOCKET); } print "Le bloquage n'a pas eu lieu"; exit;
<VirtualHost *:443> ServerName domaine.fr Protocols h2 h2c http/1.1
RewriteCond %{REQUEST_URI} !^/site/.*$ RewriteRule "^/REPERTOIRE$" "/REPERTOIRE/cible" [R,L]