Ce tutoriel-atelier va vous apprendre à revenir à l'Internet :) Sur le principe de “vos contenus n'ont rien à faire sur un site que vous ne contrôlez pas”, nous allons voir la majorité des techniques utilisées pour faire un serveur web digne de ce nom.
Ce tuto est réalisé avec des tutos existants, une expérience d'administrateur de serveur, et de la confrontation des indications données avec des débutants, pour une corrections et des compléments quand il doit y en avoir :)
Nous faisons ce tuto dans le cadre d'une Debian Lenny installée. Vous n'avez pas besoin de serveur X :) SI VOUS UTILISEZ Ubuntu server, faites les “sudo” appropriés bien évidemment. À noter que vous devez disposer d'une IP fixe publique, sinon renseignez-vous du côté de no-ip.org par exemple :) Pour Debian Lenny, nous vous recommandons les installations serveurs et “système de base” proposés, afin de simplifier grandement votre travail.
Note pour php: les paquets php5-cli et php-pear non installés par défaut, peuvent s'avérer nécessaires, comme pour l'envoi de mails ou l'éxécution de scripts php en shell.
Il est absolument nécessaire de régler votre serveur en ip statique, comme ceci, en étant root:
nano -w /etc/network/interfaces
# This file describes the network interfaces available on your system # and how to activate them. For more information, see interfaces(5). # The loopback network interface auto lo iface lo inet loopback # The primary network interface #allow-hotplug eth0 auto eth0 iface eth0 inet static address 192.168.0.12 network 192.168.0.0 netmask 255.255.255.0 broadcast 192.168.0.255 gateway 192.168.0.254
faire ensuite
/etc/init.d/networking restart
ou de manière plus rapide et efficace:
ifdown eth0 && ifup eth0
SSH va vous permettre d'administrer votre machine à distance, ainsi, vous pouvez rejoindre votre poste principal de travail pour toute la suite, et descendre le serveur à la cave :p
apt-get install openssh-client openssh-server
Ona régler quelques petites choses
nano -w /etc/ssh/sshd_config
et mettre (à ajouter ou modifier):
PermitRootLogin no MaxStartups 2:50:4 AllowUsers tutu@192.168.0.* toto@192.168.0.* Port 9999
cela va désactiver le login en root, définir une limite de connexion, choisir les utilisateurs adéquats, et changer le port par défaut
On se connecte ensuite avec la commande
ssh user@ip -p port
des exemples:
/etc/init.d/ssh restart
Autre chose importante à faire: triez et rajouter des dépôts! Sur Ubuntu & Debian, c'est très facile. Nous allons rajouter les dépôts backports (pour Ubuntu) et faire le tri; Voici comment faire:
nano -w /etc/apt/sources.list
Vider et mettre:
########## UBUNTU deb http://archive.ubuntu.com/ubuntu/ hardy main restricted universe multiverse deb http://archive.ubuntu.com/ubuntu/ hardy-updates main restricted universe multiverse deb http://archive.ubuntu.com/ubuntu/ hardy-security main restricted universe multiverse deb http://archive.ubuntu.com/ubuntu/ hardy-backports main restricted universe multiverse ########## DEBIAN deb http://ftp.fr.debian.org/debian/ lenny main deb http://security.debian.org lenny/updates main
Adaptez le “hardy” et “lenny” au nom de votre version :)
Première étape pour faire le serveur, installer ce qui va vous permettre de rendre accessible vos pages: APACHE ;)
apt-get install apache2 apache2-doc
Passons aux premières configurations du serveur web.
nano -w /etc/apache2/conf.d/charset
et mettre
AddDefaultCharset ISO-8859-1
nano -w /etc/apache2/apache2.conf
et mettre
ServerSignature Off ServerTokens Prod AddDefaultCharset ISO-8859-1
nano -w /etc/apache2/sites-available/default
et mettre
ServerSignature Off ServerAdmin contact@strapontins.org
puis faire
a2enmod rewrite
/etc/init.d/apache2 reload
nano -w /etc/apache2/httpd.conf
et mettre
############################### ##### PARAMETRES GENERAUX ############################### AddHandler cgi-script .cgi AddHandler cgi-script .pl ServerSignature Off ServerTokens Prod NameVirtualHost 192.168.0.12:80 ServerName localhost DocumentRoot /home/toto/heberg/ AccessFileName .htaccess ErrorLog /home/toto/heberg/YES/logs/error.log CustomLog /home/toto/heberg/YES/logs/access.log combined env=!nolog ############################### ##### VIRTUAL 1 STRAPONTINS ############################### <VirtualHost 192.168.0.12:80> ServerAdmin contact@strapontins.org ServerName strapontins.org DocumentRoot /home/toto/heberg/website1 <Directory /> Order Deny,Allow Deny from all Options None AllowOverride None </Directory> <Directory "/home/toto/heberg/website1"> DirectoryIndex index.html index.php Options Indexes Includes FollowSymLinks MultiViews ExecCGI AllowOverride All Order allow,deny Allow from all </Directory> </VirtualHost> ############################### ##### VIRTUAL 2 STRAPONTINS ############################### <VirtualHost 192.168.0.12:80> ServerAdmin contact@strapontins.org ServerName www.strapontins.org DocumentRoot /home/toto/heberg/website1 <Directory "/home/toto/heberg/website1"> DirectoryIndex index.html index.php Options Indexes Includes FollowSymLinks MultiViews ExecCGI AllowOverride All Order allow,deny Allow from all </Directory> </VirtualHost>
Attention, nous avons customisé l'emplacement des logs, il faut rajouter quelque chose:
nano -w /etc/logrotate.d/apache2
et mettre
/var/log/apache2/*.log {
weekly
missingok
rotate 52
compress
delaycompress
notifempty
create 640 root adm
sharedscripts
postrotate
if [ -f /var/run/apache2.pid ]; then
/etc/init.d/apache2 restart > /dev/null
fi
endscript
}
/etc/init.d/apache2 reload
redémarrer apache sans interrompre les connexions:
/etc/init.d/apache2 graceful
L'utilisation d'un unique httpd.conf ou de fichiers dans /sites-available est identique: c'est simplement différencié au niveau de l'organisation :)
a2enmod ssl
/etc/init.d/apache2 force-reload
openssl req -x509 -nodes -days 365 -newkey rsa:1024 -out /etc/apache2/server.crt -keyout /etc/apache2/server.key
Une série de questions apparait, tapez ENTRÉE à chaque fin de réponse:
Voilà! Adaptez bien évidemment à votre situation
chmod 440 /etc/apache2/server.key
<VirtualHost 192.168.0.2:443> ServerName strapontins.org DocumentRoot "/home/toto/heberg/website1" SSLEngine on SSLCertificateFile /etc/apache2/server.crt SSLCertificateKeyFile /etc/apache2/server.key </VirtualHost>
Apache est le serveur HTTP le plus connu et le plus utilisé. Il est aussi le plus complet, mais comme bien souvent, il est aussi le plus lourd… Lighttpd est né pour les petites configs :) Évidemment, n'installez pas deux serveurs http ensemble sur une même machine :p
aptitude install lighttpd
le fichier de config est:
nano -w /etc/lighttpd/lighttpd.conf
changer
server.document-root = "/var/www/"
pour
server.document-root = "/home/user/www/"
sudo apt-get install php5 libapache2-mod-php5 libapache2-mod-perl2 php5-cgi php5-mysql php-pear php5-cli php5-gd php5-sqlite php5-xsl php5-mcrypt
nano -w /etc/php5/apache2/php.ini
La configuration de PHP utilisé en ligne de commande est stockée dans /etc/php5/cli/php.ini. A ne pas confondre avec la configuration pour Apache qui nous intéresse et est stockée dans /etc/php5/apache2/php.ini. Voici quelques suggestions de modifications (pour cacher des choses notamment, éhéhé!):
max_execution_time = 30 max_input_time = 60 memory_limit = 64M upload_max_filesize = 10M register_globals = Off expose_php = Off display_errors = Off allow_url_fopen = Off
/etc/init.d/apache2 force-reload
à étudier:
register_globals = Off register_long_arrays = Off register_argc_argv = Off magic_quotes_gpc = Off magic_quotes_runtime = Off magic_quotes_sybase = Off
PHP se redémarre avec Apache.
Pour faire connaitre votre site dans le monde entier, il vous faut un nom de domaine; une fois en votre possession, vous allez le lier avec votre hébergement.
sudo apt-get install bind9
EXEMPLE DE CONFIGURATION DE STRAPONTINS.ORG
On édite le fichier
nano -w etc/bind/named.conf.local
et on y met:
zone "strapontins.org" {
type master;
file "/var/cache/bind/strapontins.org.hosts";
};
On crée le fichier
nano -w /var/cache/bind/strapontins.org.hosts
et on y met:
$ttl 38400
strapontins.org. IN SOA ns1.strapontins.org. root.strapontins.org. (
2008011018
10800
3600
604800
38400 )
@ 10800 IN NS ns1.strapontins.org.
www 10800 IN A 88.176.124.69
@ 10800 IN A 88.176.124.69
ftp 10800 IN A 88.176.124.69
mail 10800 IN A 88.176.124.69
@ 10800 IN NS ns6.gandi.net.
@ 10800 IN MX 10 spool.mail.gandi.net.
@ 10800 IN MX 50 fb.mail.gandi.net.
pop 10800 IN CNAME access.mail.gandi.net.
imap 10800 IN CNAME access.mail.gandi.net.
smtp 10800 IN CNAME relay.mail.gandi.net.
webmail 10800 IN CNAME agent.mail.gandi.net.
im 10800 IN CNAME im2.apinc.org.
ns1 10800 IN A 88.176.124.69
blog 10800 IN A 88.176.124.69
www.blog 10800 IN A 88.176.124.69
live 10800 IN A 88.176.124.69
www.live 10800 IN A 88.176.124.69
en mettant une ligne vide en plus à la fin.
/etc/init.d/bind9 restart
Ouvrez le port 3306 dans votre routeur et/ou firewall pour une bonne connexion de vos bases.
aptitude install mysql-server-5.0
On y pense pas forcément mais pour l'instant, on peut accéder aux bases de données MySQL avec le login « root » et sans mot de passe. Nous allons donc sécuriser un peu le serveur.
Si vous avez une erreur comme celle la:
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)
Il suffit de lancer MySql avant de faire ces manipulations:
sudo /etc/init.d/mysql start
OUVREZ UN TERMINAL ET TAPEZ:
sudo -i mysql_secure_installation
Le script de sécurisation du serveur MySQL démarre.
Si vous êtes à l'aise avec l'anglais, les questions posées sont assez simples et il suffit d'y répondre puis de passer à la suite. Depuis Gutsy, le mot de passe demandé précédemment en fin d'installation de mysql est le mot de passe root, il faut donc entrer celui-ci dans l'étape suivante.
Enter current password for root (enter for none):
Validez avec « Entrée ». En effet, pour l'instant, il n'y a pas de mot de passe.
Setting the root password ensures that nobody can log into the MySQL root user without the proper authorisation. Set root password? [Y/n]
Faites Y puis « Entrée » pour choisir un mot de passe.
new password:
Entrez le mot de passe de votre choix et validez par « Entrée ».
By default, a MySQL installation has an anonymous user, allowing anyone to log into MySQL without having to have a user account created for them. This is intended only for testing, and to make the installation go a bit smoother. You should remove them before moving into a production environment. Remove anonymous users? [Y/n]
Faites Y puis « Entrée » pour supprimer l'utilisateur anonyme créé lors de l'installation.
Normally, root should only be allowed to connect from 'localhost'. This ensures that someone cannot guess at the root password from the network. Disallow root login remotely? [Y/n]
Si vous n'avez pas besoin d'administrer votre base de données à distance, ce qui devrait être le cas de la plupart des utilisateurs, validez par Y puis « Entrée ». Ainsi, l'utilisateur « root » ne pourra se connecter qu'en local. Sinon tapez « n ».
Remove test database and access to it? [Y/n]
Validez par Y puis « Entrée » pour supprimer la base de données de test créée lors de l'installation.
Reloading the privilege tables will ensure that all changes made so far will take effect immediately. Reload privilege tables now? [Y/n]
Validez par Y puis « Entrée » pour prendre en compte les changements que vous venez de faire et les appliquer immédiatement.
/etc/init.d/mysql restart
sudo apt-get install phpmyadmin
touch /usr/share/phpmyadmin/favicon.ico
- Depuis la page d'accueil de phpMyAdmin, créez une base de données “test”
- Revenez sur la page d'accueil de phpMyAdmin, et cliquez sur le lien Privilèges.
- Cliquez ensuite sur Ajouter un utilisateur.
- Dans la section Information pour la connexion, remplissez les champs suivants:
- En dessous des informations de connexion, on trouve la section Base de données pour cet utilisateur. Choisissez Aucune.
- Enfin, on trouve la section Privilèges globaux. IL NE FAUT COCHER AUCUNE CASE, car l'utilisateur doit se mêler uniquement de sa base, et pas de celle des autres (les privilèges globaux portent sur l'ensemble de MySQL). Sauf indications contraires, aucune limite de ressources n'est à prévoir, vous pouvez donc tout laisser à zéro.
- Validez l'utilisateur en cliquant sur Exécuter. La requête suivante est alors exécutée :
GRANT USAGE ON * . * TO 'test'@'localhost' IDENTIFIED BY '*********' WITH MAX_QUERIES_PER_HOUR 0 MAX_CONNECTIONS_PER_HOUR 0 MAX_UPDATES_PER_HOUR 0
- Revenez sur la page “Privilèges” de l'accueil, et assurez-vous que le nouvel utilisateur a comme privilèges globaux “USAGE” et non pas “GRANT”.
- Cliquez sur la petite icône à côté de la colonne “Grant” afin de modifier les privilièges de l'utilisateur. En effet, il faut lui donner les permissions appropriées sur la base test créée précédemment.
- Ne touchez à rien dans la section “Privilèges globaux”. Dans la section “Privilèges spécifiques à une base de données”, sélectionnez la base test dans la liste déroulante. Vous changez automatiquement de page.
- Assurez-vous que le titre de la page ressemble à Utilisateur 'test'@'localhost' - Base de données test. Il faut être conscient que les privilèges activés sur la page concernent uniquement la base sélectionnée (test, en l'occurrence) et non l'ensemble des bases du serveur MySQL. Cochez alors les cases suivantes :
- Validez ensuite avec Exécuter. La requête suivante est exécutée :
GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, INDEX, ALTER, CREATE TEMPORARY TABLES, LOCK TABLES ON `test` . * TO 'test'@'localhost' WITH GRANT OPTION
- Revenez sur la page d'accueil et cliquez sur “Bases de données”. En cliquant sur l'image associée à chacune des bases, vous pouvez vous assurer des privilèges donnés aux utilisateurs. Notamment, pour notre base “drupal”, nous voyons:
Phpmyadmin est une appli web: elle n'a pas de daemon et doit être accessible via apache2, il faut donc faire un alias!
Alias /phpmyadmin "/usr/share/phpmyadmin/" <Directory "/usr/share/phpmyadmin"> Options Indexes FollowSymLinks MultiViews AllowOverride All Order allow,deny Allow from all </Directory>
Vous pouvez ajouter une double-protection:
nano -w /usr/share/phpmyadmin/.htaccess
DirectoryIndex index.php Options +FollowSymLinks -Indexes AuthName "authentification phpmyadmin" AuthType Basic AuthUserFile "/home/toto/.htpasswd" <Limit GET POST> Require valid-user </Limit>
sudo aptitude install postfix mailx mutt
Pour un relais simple des mails, on va juste se servir de notre FAI.
nano -w /etc/postfix/main.cf
et mettre
myhostname = strapontins.org alias_maps = $alias_database relayhost = smtp.free.fr
postmap /etc/postfix/sender_canonical
et
newaliases
root contact@strapontins.org toto contact@strapontins.org
Il est agréable de ne pas avoir “root” ou “www-data” dans le nom d'expéditeur lors d'envois de mails, n'es-ce pas?
Éditons le fichier /etc/passwd :
root:x:0:0:Admin strapontins.org:/root:/bin/bash
par exemple
mail -s essai toto@fai.net ctrl + d
dig mx strapontins.org telnet mail.strapontins.org. 25
sudo apt-get install pure-ftpd pure-ftpd-common
Nous avons quelques fichiers à créer:
On les édite comme suit:
On édite aussi le fichier /etc/services
ftp-data numeroport/tcp (par exemple: 353) ftp numeroport/tcp (par exemple: 354)
On peut faire:
/etc/init.d/pure-ftpd stop /etc/init.d/pure-ftpd start
la première fois:
sudo groupadd ftpgroup sudo useradd -g ftpgroup -d /dev/null -s /etc ftpuser
Puis seulement pour les nouveaux:
sudo pure-pw useradd fraiddo -u ftpuser -g ftpgroup -d /home/toto/heberg -N 200
les mdp demandés seront ceux de l'utilisateur
sudo pure-pw mkdb
Puis seulement la première fois:
sudo ln -s /etc/pure-ftpd/conf/PureDB /etc/pure-ftpd/auth/75puredb
sudo pure-pw userdel fraiddo
sudo su && cd /etc/webmin && ./start sudo su && cd /etc/webmin && ./stop https://192.168.0.12:10000/
nano -w /etc/syslog.conf
mettre:
ftp.* /var/log/pure-ftpd/pure.log
et redémarrer:
/etc/init.d/sysklogd restart
Le paquet Webmin ayant été abandonné par Debian, Ubuntu a dû suivre cet évènement, ce qui cause l'indisponibilité de Webmin sur les dépôts. Il y a donc deux méthodes pour l'installer : soit une installation automatique avec le paquet Debian disponible sur le site de Webmin, soit une installation manuelle.
Un « .deb » est proposé au téléchargement sur www.webmin.com - assurez-vous d'avoir toujours la dernière version.
L'installation va créer automatiquement le répertoire /usr/share/webmin.
Le mot de passe de l'administrateur de Webmin (« root ») reprend par défaut celui du système d'exploitation sur lequel il est installé. Or, ce compte « root » est désactivé sur Ubuntu, donc inaccessible. Il faut le changer en tapant :
sudo /usr/share/webmin/changepass.pl /etc/webmin root votre_mot_de_passe
Vous pouvez maintenant vous connecter à partir d'un navigateur client avec l'adresse : https://votre_nom_de_serveur:10000/ ou https://votre_adresse_IP:10000/
Si le pare-feu du serveur bloque le port IP, voyez la résolution du problème (en anglais).
Si vous voulez sécuriser votre Webmin, si vous l'installez sur un serveur public notamment, il vous faut le module « SSLeay » : libnet-ssleay-perl
Maintenant, vous avez effectué tout ce qui est nécessaire à l'installation de Webmin.
sudo su
cd /etc/webmin && ./start cd /etc/webmin && ./stop
sudo apt-get install fail2ban
nano -w /etc/init.d/fail2ban status
nano -w /etc/fail2ban/jail.conf
/etc/init.d/fail2ban restart
## LOG: /var/log/fail2ban.log
Rajouter pour pure-ftpd:
[pure-ftpd] enabled = true port = ftp filter = pure-ftpd logpath = /var/log/pure-ftpd/pure.log maxretry = 2
nano -w /etc/fail2ban/filter.d/pure-ftpd.conf
et mettre:
# Fail2Ban configuration file
#
# Author: Cyril Jaquier
# Modified: Yaroslav Halchenko for pure-ftpd
#
# $Revision: 3$
#
[Definition]
# Error message specified in multiple languages
__errmsg = (?:Authentication failed for user|Erreur d'authentification pour l'utilisateur)
#
# Option: failregex
# Notes.: regex to match the password failures messages in the logfile. The
# host must be matched by a group named "host". The tag "<HOST>" can
# be used for standard IP/hostname matching and is only an alias for
# (?:::f{4,6}:)?(?P<host>\S+)
# Values: TEXT
#
failregex = pure-ftpd: (.+?@<HOST>) \[WARNING\] %(__errmsg)s \[.+\]$
# Option: ignoreregex
# Notes.: regex to ignore. If this regex matches, the line is ignored.
# Values: TEXT
#
ignoreregex =
sudo apt-get install logwatch
/usr/share/logwatch/scripts/logwatch.pl
nano -w /usr/share/logwatch/dist.conf/logwatch.conf
Detail = High mailer = "/usr/sbin/sendmail -t" TmpDir = /tmp MailFrom = root
Et ensuite:
nano -w /usr/share/logwatch/default.conf/logwatch.conf
LogDir = /var/log
TmpDir = /var/cache/logwatch
MailTo = contact@strapontins.org
MailFrom = Logwatch
Print = No
Range = yesterday
Detail = Low
Service = All
Service = "-zz-network" # Prevents execution of zz-network service, which
# prints useful network configuration info.
Service = "-zz-sys" # Prevents execution of zz-sys service, which
# prints useful system configuration info.
Service = "-eximstats" # Prevents execution of eximstats service, which
# is a wrapper for the eximstats program.
mailer = "sendmail -t"
pour avoir un rapport au format HTML:
nano -w /etc/cron.daily/00logwatch
remplacer
/usr/sbin/logwatch --mailto
par
/usr/sbin/logwatch --mailto --output html
Jabber est le standard ouvert et libre pour la messagerie instantannée, et permet une grande confidentialité des échanges. La technologie permet à chacun d'ouvrir son propre serveur Jabber. Ici, nous parlerons de EJABBERD.
apt-get install ejabberd
ejabberdctl register PSEUDO HOSTNAME_INDIQUÉ mon_mot_de_passe
nano -w /etc/ejabberd/ejabberd.cfg
{access, register, [{allow, all}]}.
et décommenter (ou ajouter) la ligne
{access, register, [{deny, all}]}.
(Sous Debian Lenny, la configuration montre que les utilisateurs ne peuvent pas s'enregistrer eux-mêmes, par défaut. Vous devrez donc utiliser la commande: ejabberdctl vue précédemment ).
A RÉDIGER
/etc/init.d/ejabberd {start | stop | restart}
Mettre un pare-feu sur votre serveur est obligatoire pour éviter les mauvaises surprises :) Vous pouvez par exemple vous appuyez sur la configuration que peux fournir Firestarter, et la transporter sur votre serveur en l'adaptant.
Voici un exemple avec la config suivante: serveur derrière une connexion adsl FREE, sur 192.168.0.12, avec les ports suivants ouverts: 80, 8000 et 8080 (web), 22 (ssh, seulement les connexions venant d'une machine locale 192.168.0.11), 53 (dns), 143 et 25 (mail), 3306 (mysql)
Éditez sous root un fichier /etc/init.d/moniptables et mettez-y:
#!/bin/bash
#
#
firewall_start() {
echo "[Démarrage du firewall]"
echo "[Initialisation de la table filter]"
iptables -F
iptables -X
### Chain INBOUND
iptables -A INPUT -p tcp -i eth0 --dport 22 -j ACCEPT
____________ A FINIR ___________
echo "[firewall activé !]"
}
Enregistrez et faites ceci pour le faire démarrer automatiquement au boot:
chmod +x /etc/init.d/moniptables sudo update-rc.d moniptables defaults
Au redémarrage, vérifiez vos règles en faisant:
iptables -L
et vos règles devraient ressembler à:
Chain INPUT (policy DROP) target prot opt source destination ACCEPT tcp -- dns2.proxad.net anywhere tcp flags:!FIN,SYN,RST,ACK/SYN ACCEPT udp -- dns2.proxad.net anywhere ACCEPT tcp -- dns3.proxad.net anywhere tcp flags:!FIN,SYN,RST,ACK/SYN ACCEPT udp -- dns3.proxad.net anywhere ACCEPT all -- anywhere anywhere ACCEPT icmp -- anywhere anywhere limit: avg 10/sec burst 5 DROP all -- anywhere 255.255.255.255 DROP all -- anywhere 192.168.0.255 DROP all -- BASE-ADDRESS.MCAST.NET/8 anywhere DROP all -- anywhere BASE-ADDRESS.MCAST.NET/8 DROP all -- 255.255.255.255 anywhere DROP all -- anywhere 0.0.0.0 DROP all -- anywhere anywhere state INVALID LSI all -f anywhere anywhere limit: avg 10/min burst 5 INBOUND all -- anywhere anywhere LOG_FILTER all -- anywhere anywhere LOG all -- anywhere anywhere LOG level info prefix `Unknown Input' Chain FORWARD (policy DROP) target prot opt source destination ACCEPT icmp -- anywhere anywhere limit: avg 10/sec burst 5 LOG_FILTER all -- anywhere anywhere LOG all -- anywhere anywhere LOG level info prefix `Unknown Forward' Chain OUTPUT (policy DROP) target prot opt source destination ACCEPT tcp -- 192.168.0.12 dns2.proxad.net tcp dpt:domain ACCEPT udp -- 192.168.0.12 dns2.proxad.net udp dpt:domain ACCEPT tcp -- 192.168.0.12 dns3.proxad.net tcp dpt:domain ACCEPT udp -- 192.168.0.12 dns3.proxad.net udp dpt:domain ACCEPT all -- anywhere anywhere DROP all -- BASE-ADDRESS.MCAST.NET/8 anywhere DROP all -- anywhere BASE-ADDRESS.MCAST.NET/8 DROP all -- 255.255.255.255 anywhere DROP all -- anywhere 0.0.0.0 DROP all -- anywhere anywhere state INVALID OUTBOUND all -- anywhere anywhere LOG_FILTER all -- anywhere anywhere LOG all -- anywhere anywhere LOG level info prefix `Unknown Output' Chain INBOUND (1 references) target prot opt source destination ACCEPT tcp -- anywhere anywhere state RELATED,ESTABLISHED ACCEPT udp -- anywhere anywhere state RELATED,ESTABLISHED ACCEPT tcp -- anywhere anywhere tcp dpt:80 ACCEPT udp -- anywhere anywhere udp dpt:80 ACCEPT tcp -- anywhere anywhere tcp dpt:8000 ACCEPT udp -- anywhere anywhere udp dpt:8000 ACCEPT tcp -- anywhere anywhere tcp dpt:8080 ACCEPT udp -- anywhere anywhere udp dpt:8080 ACCEPT tcp -- 192.168.0.11 anywhere tcp dpt:22 ACCEPT udp -- 192.168.0.11 anywhere udp dpt:22 ACCEPT tcp -- anywhere anywhere tcp dpt:53 ACCEPT udp -- anywhere anywhere udp dpt:53 ACCEPT tcp -- anywhere anywhere tcp dpt:143 ACCEPT udp -- anywhere anywhere udp dpt:143 ACCEPT tcp -- anywhere anywhere tcp dpt:25 ACCEPT udp -- anywhere anywhere udp dpt:25 ACCEPT tcp -- anywhere anywhere tcp dpt:3306 ACCEPT udp -- anywhere anywhere udp dpt:3306 LSI all -- anywhere anywhere Chain LOG_FILTER (5 references) target prot opt source destination Chain LSI (2 references) target prot opt source destination LOG_FILTER all -- anywhere anywhere LOG tcp -- anywhere anywhere tcp flags:FIN,SYN,RST,ACK/SYN limit: avg 1/sec burst 5 LOG level info prefix `Inbound ' DROP tcp -- anywhere anywhere tcp flags:FIN,SYN,RST,ACK/SYN LOG tcp -- anywhere anywhere tcp flags:FIN,SYN,RST,ACK/RST limit: avg 1/sec burst 5 LOG level info prefix `Inbound ' DROP tcp -- anywhere anywhere tcp flags:FIN,SYN,RST,ACK/RST LOG icmp -- anywhere anywhere icmp echo-request limit: avg 1/sec burst 5 LOG level info prefix `Inbound ' DROP icmp -- anywhere anywhere icmp echo-request LOG all -- anywhere anywhere limit: avg 5/sec burst 5 LOG level info prefix `Inbound ' DROP all -- anywhere anywhere Chain LSO (0 references) target prot opt source destination LOG_FILTER all -- anywhere anywhere LOG all -- anywhere anywhere limit: avg 5/sec burst 5 LOG level info prefix `Outbound ' REJECT all -- anywhere anywhere reject-with icmp-port-unreachable Chain OUTBOUND (1 references) target prot opt source destination ACCEPT icmp -- anywhere anywhere ACCEPT tcp -- anywhere anywhere state RELATED,ESTABLISHED ACCEPT udp -- anywhere anywhere state RELATED,ESTABLISHED ACCEPT all -- anywhere anywhere
- autoriser les réponses aux pings? - http://scripts.trustonme.net/download.php?elmt=1
- au démarrage:
mv firewall /etc/init.d/firewall
chmod +x /etc/init.d/firewall
update-rc.d firewall defaults
Il y a deux types de softs pour avoir des statistiques: - ceux qui sont en temps réel, et consomment des ressources régulièremment (car basés sur la navigation active) - ceux qui sont en léger différé, mais qui consomment des ressources uniquement quand ils traitent les logs
Nous préférons évidemment la deuxième solution :) Voyons un peu du côté d'Awstats…
sudo aptitude install awstats
Le binaire: /usr/lib/cgi-bin/awstats.pl
Les fichiers de configuration: /etc/awstats/
mettre à la fin du conf:
AllowAccessFromWebToAuthenticatedUsersOnly=1 AllowAccessFromWebToFollowingAuthenticatedUsers=prout Include "/etc/awstats/awstats.conf.local"
sudo apt-get install rkhunter chkrootkit
rkhunter --update rkhunter --checkall /usr/sbin/chkrootkit
Inutile même sur un serveur.
sudo apt-get install clamav
clamscan -V
uname -mrsp
freshclam
Si votre pc a servi de desktop juste avant, il a sans doute emmangasiné des aperçus de sites internet: ils n'ont plus rien à faire sur le serveur!
rm /home/user/.thumbnails/normal/* rm /root/.thumbnails/normal/*
pour Ubuntu par exemple
sudo su && crontab -e
*/30 * * * * /home/toto/cron/planet.sh > /dev/null
sudo nmap 192.168.0.12 -p 1-65535
sur un serveur, il peut être utile de voir l'avancement dans grub:
nano -w /boot/grub/menu.lst
et mettre
# defoptions=splash
puis faire un
sudo update-grub
Afin d'activer les modules, utilisez a2enmod (Apache 2 Enable Module) suivi du nom du module. Ici activons mod_rewrite pour permettre la réécriture des URLs.
a2enmod rewrite
Pour désactiver un module, utilisez a2dismod.
Il convient de garder son serveur web à jour!
apt-get install ntpdate
Dans le fichier /etc/default/ntpdate, mettre
NTPDATE_USE_NTP_CONF=no
25 4 * * * /usr/sbin/ntpdate-debian > /dev/null 2> /dev/null