Le Forum Non Officiel de la DEDIBOX
Vous n'êtes pas identifié.
Hello Hello,
Toutes les personnes qui auront besoin de se connecter à mon serveur ont une IP fixe
Alors ma question est quelle la manip pour n'autoriser qu'une liste d'IP définie et bloquer le reste ?
Pensez vous que ce soit viable en terme de sécurité ?
Merci
Hors ligne
Salut
Serveur FTP serveur web et bases mysql en accès distant pour l'instant
J'aimerais filtrer par IP ensuite l'accès à tel ou tel service se fera par identification
Merci pour votre aide
Hors ligne
Voilà un petit tuto sur IPtables qui te permettra de faire ca: http://lea-linux.org/cached/index/Resea … ables.html
Hors ligne
Merci KeKeSeb mais je connais déjà ce tuto
Mais je n'y ai pas trouvé la ligne de commande autorisant tout pour une/des IP et rejetant toutes les autres...
Hors ligne
samixite,
tu dois pouvoir utiliser une commande comme celle-là pour chaque adresse à autoriser :
/sbin/iptables -A SERVICES -p tcp -s 88.88.88.88 --dport 6970:6999 -j ACCEPT
En utilisant bien sur la bonne IP et la bonne plage de ports ![]()
Daniel
Hors ligne
danielha a écrit:
samixite,
tu dois pouvoir utiliser une commande comme celle-là pour chaque adresse à autoriser :
/sbin/iptables -A SERVICES -p tcp -s 88.88.88.88 --dport 6970:6999 -j ACCEPT
En utilisant bien sur la bonne IP et la bonne plage de ports
Daniel
Merci Daniel
Par contre pour bloquer tout le reste (en tcp ) ?![]()
Est on obligé de spécifier une plage de ports si je ne veux rien fermer ?
Dernière modification par samixite (2006-06-13 21:10:18)
Hors ligne
Samixite,
Je ne suis pas un pro sur iptables. J'ai récupéré un script qui a été posté sur le site (par Flav) et je l'ai mis à ma sauce. En fait, tu prends le problème à l'envers .. Le but d'un firewall est d'ouvrir uniquement ce qui est nécessaire pour ceux à qui c'est nécessaire. En fonction des services que tu as besoin de fournir pour les différents utilisateurs, ouvre les ports correspondants et uniquement ceux-ci !
Voici "mon" script. Il ouvre le port 999 pour le SSH (donc port non standard qui demande de reconfigurer SSH depuis l'interface webmin), webmin, FTP en actif et passif, HTTP & HTTPS ainsi que les ports TCP/UDP nécessaires pour du streaming. Quand j'utilise un outil tel que nmap pour vérifier les ports ouverts sur la machine que je configure en ce moment, il n'y a rien d'autre qui soit ouvert que les ports indiqués dans le script. Tu devrait pouvoir le modifier sans trop de soucis pour ouvrir les portes nécessaires à tes utilisateurs.
#!/bin/sh
################################################
# #
# Script de Firewall de base #
# #
# Flav #
# #
###############################################
#############
# Variables #
#############
IPTABLES=/sbin/iptables
IF_EXT=eth0
IP_SSH=xx.xx.xx.xx
###################
# Vide les tables #
###################
${IPTABLES} -t mangle -F
${IPTABLES} -t nat -F
${IPTABLES} -F
${IPTABLES} -t mangle -X
${IPTABLES} -t nat -X
${IPTABLES} -X
${IPTABLES} -Z
#####################
# Regles par defaut #
#####################
## ignore_echo_broadcasts, TCP Syncookies, ip_forward
echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts
## Strat�giepar defaut
${IPTABLES} -P INPUT DROP
${IPTABLES} -P OUTPUT DROP
${IPTABLES} -P FORWARD DROP
## Loopback accepte
${IPTABLES} -A FORWARD -i lo -o lo -j ACCEPT
${IPTABLES} -A INPUT -i lo -j ACCEPT
${IPTABLES} -A OUTPUT -o lo -j ACCEPT
## REJECT les fausses connex pretendues s'initialiser et sans syn
${IPTABLES} -A INPUT -p tcp ! --syn -m state --state NEW,INVALID -j REJECT
####################
# Regles speciales #
####################
### Creation des chaines
${IPTABLES} -N SPOOFED
${IPTABLES} -N SERVICES
${IPTABLES} -N udp_packets
### Interdit les paquets spoof�
${IPTABLES} -A SPOOFED -s 127.0.0.0/8 -j DROP
${IPTABLES} -A SPOOFED -s 169.254.0.0/12 -j DROP
${IPTABLES} -A SPOOFED -s 172.16.0.0/12 -j DROP
${IPTABLES} -A SPOOFED -s 192.168.0.0/16 -j DROP
${IPTABLES} -A SPOOFED -s 10.0.0.0/8 -j DROP
### INPUT autoris�
### ICMP
## Ping (*)
${IPTABLES} -A INPUT -p icmp --icmp-type echo-request -j ACCEPT
### TCP
## SSH
## pour restreindre SSH �une IP, utiliser : -s ${IP_SSH} pour autoriser SSH �toute adresse IP,
## utiliser : -s 0/0
## Port 999 pour acc� SSH
${IPTABLES} -A SERVICES -p tcp -s 0/0 --dport 999 -j ACCEPT
## HTTP
${IPTABLES} -A SERVICES -p tcp -s 0/0 --dport 80 -j ACCEPT
## HTTPS
${IPTABLES} -A SERVICES -p tcp -s 0/0 --dport 443 -j ACCEPT
## FTP Server (Control)
${IPTABLES} -A SERVICES -p tcp -s 0/0 --dport 21 -j ACCEPT
## FTP Client - Non Passive
${IPTABLES} -A SERVICES -p tcp -s 0/0 --dport 20 -j ACCEPT
## Darwin Streaming Server
${IPTABLES} -A SERVICES -p tcp -s 0/0 --dport 1220 -j ACCEPT
## FTP Client - Passive
${IPTABLES} -A SERVICES -p tcp -s 0/0 --dport 62000:64000 -j ACCEPT
## HTTP - Webmin
${IPTABLES} -A SERVICES -p tcp -s 0/0 --dport 10000 -j ACCEPT
## RTSP Ports
${IPTABLES} -A SERVICES -p tcp -s 0/0 --dport 554 -j ACCEPT
${IPTABLES} -A SERVICES -p tcp -s 0/0 --dport 7070 -j ACCEPT
${IPTABLES} -A SERVICES -p tcp -s 0/0 --dport 6970:6999 -j ACCEPT
${IPTABLES} -A SERVICES -p TCP -s 0/0 --dport 8000:8001 -j ACCEPT
### UDP
## RTSP Protocol
${IPTABLES} -A udp_packets -p udp -s 0/0 --dport 554 -j ACCEPT
${IPTABLES} -A udp_packets -p udp -s 0/0 --dport 7070 -j ACCEPT
${IPTABLES} -A udp_packets -p udp -s 0/0 --dport 6970:6999 -j ACCEPT
${IPTABLES} -A udp_packets -p udp -s 0/0 --dport 800:8001 -j ACCEPT
#################################
# Ports ouverts sur le firewall #
#################################
${IPTABLES} -A OUTPUT -j ACCEPT
${IPTABLES} -A INPUT -m state --state ESTABLISH,RELATED -j ACCEPT
${IPTABLES} -A INPUT -j SPOOFED
${IPTABLES} -A INPUT -i ${IF_EXT} -j SERVICES
${IPTABLES} -A INPUT -i ${IF_EXT} -j udp_packetsDaniel
Dernière modification par danielha (2006-06-13 21:46:14)
Hors ligne
Si c'est du Web, tu peux aussi faire un filtrage par .htaccess

Hors ligne
Merci à tous
Il n'y a donc aucun moyen d'autoriser tout pour des IP déterminées et rejeter toutes les autres ?
Ben zut alors !! ![]()
Mon appli dispose déjà d'un accès par login + pass, si je passe par htaccess il va falloir s'enregistrer 2 fois ?
Et puis il n'y a pas que du web...
Que pensez vous de ça :
# begin code
IPT=/sbin/iptables
$IPT -A INPUT -i eth0 --source XXX.XXX.XXX.XXX -j ACCEPT
# transaction avec les autres serveurs
$IPT -A INPUT -i eth0 -m state --state ESTABLISHED,RELATED -j ACCEPT
$IPT -A INPUT -i eth0 -j REJECT
$IPT -A FORWARD -i eth0 -j REJECT
# end code
XXX.XXX.XXX.XXX est à remplacer par l'IP autorisée
Ca m'a l'air bon pour autoriser mais pour le blocage de tous les autres ??
Thanx
Dernière modification par samixite (2006-06-13 23:46:31)
Hors ligne
Sisi avec un truc comme ca :
iptables -P INPUT DROP iptables -A INPUT -i lo -j ACCEPT iptables -A INPUT -i eth0 --protocol tcp -m state --state ESTABLISHED,RELATED -j ACCEPT iptables -A INPUT -s XXX.XXX.XXX.XXX -j ACCEPT
En répetant la dernière ligne pour chaque IP. Je garanti pas que ca marche, il faudrait tester. Attention, si tu mets que la première ligne, ca va couper la connexion SSH. Il faut faire un script et l'executer d'un coup.
Pour tout remettre à 0 :
iptables -P INPUT ACCEPT iptables -F
Voili voilou...
Dernière modification par KeKeSeB (2006-06-13 23:48:50)
Hors ligne
Attention, script de goret inside ! Lire la man d'iptables pour affiner (doit y avoir moyen de factoriser et/ou renforcer certaines règles, surtout sur l'autorisation du trafic local):
#!/bin/bash IP_DEDIBOX=a.b.c.d iptables -F iptables -X iptables -A INPUT -i lo -j ACCEPT iptables -A OUTPUT -o lo -j ACCEPT # Le routage linux semble faire que ces deux lignes sont inutiles #iptables -A INPUT --source $IP_DEDIBOX --destination $IP_DEDIBOX -j ACCEPT #iptables -A OUTPUT --source 192.168.10.20 --destination $IP_DEDIBOX -j ACCEPT iptables -A INPUT --source e.f.g.h -j ACCEPT iptables -A OUTPUT --destination e.f.g.h -j ACCEPT iptables -A INPUT --source i.j.k.l -j ACCEPT iptables -A OUTPUT --destination i.j.k.l -j ACCEPT iptables -P INPUT DROP iptables -P OUTPUT DROP iptables -P FORWARD DROP
Bref, voila l'idée de base, mais à affiner/valider/tester.
Autre solution pour de l'accès distant: du VPN. OpenVPN se laisse vraiment bien installer ca tourne sous les Unix, Windows, MacOSX... donc tu peux avoir toutes sortes de clients. Ca évite de laisser trainer en clair des mots de passe mysql, etc...
Edit: mise en commentaire de règles apparemment inutiles
Dernière modification par Calimero (2006-06-14 00:05:50)
Hors ligne