Mettez un manchot dans votre PC
Dernière modification 2 décembre 2002
- limitation d'accès aux services suivant une plage horaire
- limite les risques de Deny of Services (DoS), le DoS consiste à faire
de multiples requêtes sur un serveur ce qui va accaparer toutes ses
ressources jusqu'à le bloquer. xinetd permet de limiter le
nombre de serveurs d'un même type tournant simultanément, cette
limitation porte sur le nombre de server et/ou sur la taille du fichier de
log
- un service peut être attaché à une interface particulière,
ainsi si vous avez un serveur connecté à internet et que seules
les machines du réseau local peuvent accèder en telnet
sur ce serveur, vous pouvez spécifier que les requêtes telnet
ne pourront venir que de la carte réseau interne.
- redirection d'une requête vers une autre machine de votre réseau
local
/etc/rc.d/init.d/xinetd status
Devrait vous renvoyer un truc du style
xinetd (pid 462) is running...
defaults
{
paramètres par défaut pour tous les services
}
service nom-du-service1
{
paramètres pour le service1
}
service nom-du-service2
{
paramètres pour le service2
}
...
On peut très bien faire comme sous la Mandrake avoir un fichier xinetd.confcontenant :
defaults
{
paramètres par défaut
pour tous les services
}
includedir /etc/xinetd.d
On créera un répertoire /etc/xinetd.d contenant autant de fichier qu'il y a de service, chaque fichier portant le nom du service et contenant :
service nom-du-service1
{
paramètres pour le service1
}
On aura donc le fichier telnet, ftp, finger...
log_type vous pouvez spécifier un archivage des logs en utilisant le daemon syslogd ou alors archiver dans un fichier. Exemple :
log_type = FILE /var/log/xinetd.log 20M 25M
Quand vous atteindrez un fichier de log de 20M, un message d'alerte va s'inscrire dans le fichier /var/log/messages mais le log continue, quand on va atteindre 25M, xinetd n'écrit plus dans le fichier de log.
log_on_success qui va spécifier les informations à archiver en cas de lancement réussi d'un service, vous avez le choix des paramètres suivant :
PID le PID du serveur
HOST adresse IP du client
USERID identité de l'utilisateur
EXIT le status de sortie du processus
DURATION le temps de la connexion
Exemple :
log_on_success = PID HOST USERID EXIT DURATION
Va donner les lignes suivantes pour un telnet
00/12/15@20:15:46: START: telnet pid=1889 from=192.168.13.10
00/12/15@20:18:39: EXIT: telnet status=0 pid=1889 duration=173(sec)
log_on_failure qui va spécifier les informations
à archiver en cas d'erreur de lancement d'un service (erreur
d'authentification,
manque de ressource), vous avez le choix des paramètres suivant :
HOST et USERID comme précédemment
RECORD pour enregistrer toutes les info disponibles sur le client
Exemple :
log_on_failure = HOST RECORD
no_access pour définir les clients non autorisés à se connecter
only_from pour définir les clients autorisés à se connecter. Exemple avec le sous réseau 192.168.13.X
only_from = 192.168.13.0/32
instances pour fixer le nombre maximum d'instances de serveur à lancer, ce qui permet d'éviter le DoS
per_source pour restreindre le nombre de connexion à un service venant d'une même machine
cps pour limiter le taux de connexion, il prend deux arguments, le premier fixe le nombre max de connexion à gérer par seconde, si le nombre de connexion dépasse ce chiffre, le service sera temporairement désactivé. Le deuxième argument fixe le nombre de secondes pendant lesquelles le service restera inactivé.
Sur une Mandrake, vous aurez ainsi les arguments communs à tous les services suivants:
defaults
{
instances
=
60
log_type
=
SYSLOG authpriv
log_on_success
= HOST PID
log_on_failure
= HOST
cps
=
25 30
}
nice pour définir la priorité d'un service (-20 plus prioritaire 19 plus prioritaire)
port numéro du port associé au service défini dans /etc/services
protocol nom du protocole défini dans /etc/protocols
server le chemin du service
server_args arguments à passer au service
socket_type type de socket (stream pour TCP et dgram pour UDP), pour savoir si c'est l'un ou l'autre voir le fichier /etc/services
wait si wait=yes une seule instance du service peut être lancé à la fois, si wait=no, on lance un serveur à chaque nouvelle connexion (dans la limite du nombre d'instance max)
access_times pour définir une plage horaire la syntaxe est la suivante heure:minute-heure:minute, exemple pour une plage horaire entre 7h-12h et 14h-19h
access_times = 7:00-12:00 14:00-19:00
env pour passer une variable d'environnement avant de lancer le service
bind (ou interface) pour attacher une interface à un service, pour limiter les requêtes à une interface réseau par exemple
redirect permet de rediriger une requête sur le port particulier d'une de vos machines de votre réseau local.
On peut réutiliser les paramètres déjà définis dans les paramètres par défaut et modifier les options :
exemple avec log_on_success, si celui-ci est définit dans les paramètres par défaut avec les options suivantes PID HOST USERID EXIT DURATION, on veut avoir pour un service particulier uniquement PID et HOST on écrira donc
log_on_success -= USERID EXIT DURATION
De même si on a log_on_success défini à PID HOST et qu'on veut rajouter DURATION on écrira
log_on_success += DURATION
defaults
{
instances
=
20
per_source
= 5
log_type
=
FILE /var/log/xinetd.log 20M 25M
log_on_success
= HOST USERID DURATION
log_on_failure
= HOST RECORD
only_from = 192.168.13.0/32
}
includedir /etc/xinetd.d
Les autres définitions de service se trouve sous le répertoire /etc/xinetd.d
service nom-du-service
{
socket_type = type de socket
wait
= pour lancer un ou plusieurs instances du service
user = à
qui appartiendra le service
server=
chemin
du serveur
server_args= argument du
serveur
(facultatif)
access_times=plage horaire
(facultatif)
nice
= priorité (facultatif)
}
Vous pouvez éventuellement rajouter d'autres options vues précédemments (access_times, ...) et redéfinir certains paramètres définis dans la section defaults
Exemple avec pop3
service pop3
{
socket_type
= stream
wait
=
no
user
=
root
server
=
/usr/sbin/ipop3d
log_on_success
+= USERID
log_on_failure
+=
USERID
}
Avec le serveur NNTP leafnode
service nntp
{
socket_type = stream
wait
= no
protocol =
tcp
user
= news
server
= /usr/local/sbin/leafnode
}
Avec ftp avec une plage horaire et une limitation à 4 personnes connectées simultanément
service ftp
{
socket_type = stream
wait
= no
protocol =
tcp
user
= root
server
= /usr/sbin/in.ftpd
instances = 4
access_times = 7:00-12:00 14:00-17:00
nice=15
}
Exemple avec xtelw le serveur minitel pour windows qui permet de voir comment passer un argument au service
service xtelw
{
socket_type = stream
wait
= no
protocol =
tcp
user
= root
server
= /usr/X11R6/bin/xtelw
server_args = -H
}
Exemple avec un serveur ftp privé, seules les requêtes venant de l'interface réseau internet sont acceptées, id va redéfinir le nom du service, dans le fichier log on verra la mention ftp-private au lieu de ftp tout simplement.
service ftp
{
id = ftp-private
socket_type = stream
wait =no
user =root
server=/usr/sbin/in.ftpd
instances= 4
only_from= 192.168.13.0/24
bind= 192.168.13.11
}
Autre exemple avec la redirection, ici on rediriger vers le port 23 (telnet) de la machine 192.168.13.10
service telnet
{
flags
= REUSE
socket_type
= stream
wait
= no
user
= root
server
= /usr/sbin/in.telnetd
redirect =
192.168.13.10
23
}
[Retour page d'accueil FUNIX] |