[Topic unique] Regles iptables: Securiser un serveur

Regles iptables: Securiser un serveur [Topic unique] - réseaux et sécurité - Linux et OS Alternatifs

Marsh Posté le 15-01-2006 à 23:04:53    

Tout est disponible ici !
 
 
****
Quelques liens:
- securisation d'une passerelle
 
EDIT 15/01: Je viens de noter que j'avais mis un flush apres la mise en place des log, modification :)
EDIT 16/01: Ajout de la variable "chemin vers IPTABLES"
EDIT 16/01: Ajout d'une fonction: No synflood
EDIT 16/01: Correction de la regle concernant le telnet (elle etais sous ACCEPT passage en DROP comme prevus)
EDIT 16/01: Corrections de quelques faute d'othographes dans les commentaires
EDIT 16/01: Corrections de quelques problemes concernant les regles ftp serveur/client en OUTPUT
EDIT 16/01: Sur demande, ajout de la fonction ftp passif :)
EDIT 16/01: La fonction ftp passif require le chargement d'un module, ajout de: modprobe ip_conntrack_ftp
EDIT 18/01: Ajout de quelques indications dans le header
EDIT 18/01: Ajout de la regle: "activation du nat" (qui devrais me servire dans quelques jours :D)
EDIT 18/01: Ajout d'une regle pour tracer les demandes de connexions en provenance de l'exterieur (local + wan)
EDIT 18/01: Utilisation de la variables iptables (transformee en fw)
EDIT 19/03: Daemon power :) (merci a trictrac pour son aide)
EDIT 19/03: Fonction nat desormee commenté... (veuillez bien lire le script si vous l'utilisez)
EDIT 27/06: Correction d'un probleme au niveau du daemon (start and stop)
EDIT 27/06: retrait de ip_conntrack (si quelqu'un a plus d'infos)
EDIT 27/06: Changement du header (epuration)
EDIT 27/06: Changement de "mise en page" pour quelque chose de plus leger au regard et a l'octet :)
EDIT 27/06: Retrait de tout les OUTPUT non necessaires (ACCEPT)
EDIT 27/06: Correction du bug qui arretait le nat lors d'un starting ou d'un restart
EDIT 27/06: Correction d'un bug a l'arret du firewall (les regles d'INPUT restaient les memes)
EDIT 27/06: Retrait de tout  les ETABLISHED non necessaires
EDIT 27/06: Retrait de la regle concernant telnet (drop) qui ne sert a rien
EDIT 27/06: Apres verification, ip_conntrack_ftp viens d'etre remis dans le script
EDIT 24/06: Probleme d'un --state orphelin regle


Message édité par anapivirtua le 15-06-2007 à 14:15:01

---------------
Si vis pacem, para bellum.
Reply

Marsh Posté le 15-01-2006 à 23:04:53   

Reply

Marsh Posté le 15-01-2006 à 23:45:47    

Un tit tuto sur la mise en place du script arrive demain (peut etre) :D


---------------
Si vis pacem, para bellum.
Reply

Marsh Posté le 16-01-2006 à 03:54:41    

voila pour le tutorial de mise en place sur serveur debian pour commencer (vous m'escuserez pour le moment j'ai qu'une debian sous la main pour vérifier)
 
donc :  
 
une fois le script du firewall modifier selon votre config il suffit de le copier quand un fichier nommer firewall.
 
Pour cela je vais donner la manière a faire en considerant que vous êtes déjà connecté via ssh au serveur.
 
Si vous n'êtes pas root tapez :
# su
là vous sera demandé votre mot de passe root (attention il ne s'affiche rien donc vous devez taper à l'aveuglette)
 
une fois en root, on peut commencer les choses sérieuse. Déjà vérifions qu'on est bien dans le répertoire de travail du super utilisateur root :
# cd
ou
# cd /root/
en effet les deux commande sont equivalante entre elle
 
ensuite nous allons creer notre fichier avec Vi qui est l'éditeur par défault de debian et parce qu'il est le seul installer par default (et aussi parce que nano ca suxx et qu'emacs a tellement de fonctionnalité qu'on en oubli souvent que c'est un éditeur de texte a la base) (oui il y a un troll qui s'est glisser pour le plus grand bonheur d'Anapivirtua).
commencons par créer le fichier et commencer l'édition :
# vi firewall
 
une fois dans Vi appuyez sur la touche "i" qui vous fera entrer dans le mode insertion
sélectionnez le texte du script et copier le. Pour le coller dans Vi il vous suffira de cliquez sur la molette de la souris dans le terminal ssh si vous êtes sous linux ou autre unix ou de cliquer sur le bouton droit de la souris dans la fenêtre de putty si vous êtes sous Microsft Windows. Une fois le texte dans Vi vous pouvez arrêter le mode insertion en appuyant sur "echap" (la touche tout en haut a gauche de votre clavier). Vous pouvez vous déplacer dans le document avec les flèches du clavier et modifier si besoin est en revenant en mode insertion avec la touche "i" ou en supprimant du texte avec la touche "x" ou les touche "suppr" et "backspace". Si vous voulez supprimer toute une ligne d'un coup, appuyez deux fois d'affiler sur la touche "d". Une fois que vous avez fini appuyez sur "echap" histoire d'être sûr de ne pas être en mode insertion puis taper :
# :w
pour enregistrer (notez que le texte s'affiche en bas de l'application Vi)
# :q
pour quitter
notez que le résultat est le même si vous tapez :
# :wq
 
Voila si vous n'aviez jamais utilisé Vi avant sachez que vous avez fait le plus dur de ce manuel et n'oubliez pas que malgrès l'apparance repoussante de Vi, cette outil est universel, très puissant et étudier pour le confort d'utilisation en mode texte (et oui sans souris on est bien content d'avoir un bon contrôle au clavier de l'application). Pour plus de détail sur Vi :
# man vi  
pour afficher le manuel
# vimtutor  
tutorial fourni avec le paquet vim a condition que celui ci soit installé.
 
aller fini de rigoler maintenant fesons fonctionner ce script. Pour commencer nous allons le rendre executable :
# chmod +x firewall
dès à présent, on peut lancer le script qui mettra en place instantannement le firewall en route (bon à savoir si on veut le tester).
# ./firewall
 
Maintenant on va toucher un peu au script d'initialisation (attention, cette section est spécifique à debian et distribution basé sur debian comme ubuntu)
Déjà copions le script dans le système d'initialisation :
# cp firewall /etc/init.d/
puis ajoutons les lien qui permettront de lancer iptables en cas de redemarrage de la machine :
# update-rc.d firewall defaults
 
et voila maintenant tout marche
 
sinon un petit tip pour pouvoir demarrer et arreter avec deux script iptables facilement :
# cp firewall /etc/network/iptable-start
et ensuite créer un script a laide de Vi de la façon suivante :
# vi /etc/network/iptable-stop
 
vous y insererez :
 

Code :
  1. #!/bin/sh
  2. # /etc/network/if-post-down.d/iptables-stop.sh
  3. # Script qui arrête le filtrage "iptables"
  4. # Formation Debian GNU/Linux par Alexis de Lattre
  5. # http://www.via.ecp.fr/~alexis/formation-linux/
  6. # REMISE à ZERO des règles de filtrage
  7. iptables -F
  8. iptables -t nat -F
  9. # REMISE de toutes les politiques par défaut à ACCEPT
  10. iptables -P INPUT ACCEPT
  11. iptables -P FORWARD ACCEPT
  12. iptables -P OUTPUT ACCEPT


 
puis une fois le script ajouter faite :
# chmod +x /etc/network/iptable-stop
 
ainsi vous démarrerez iptable avec la commande :
# /etc/network/iptable-start
et arrêterez avec :
# /etc/network/iptable-stop
 
Si vous souhaitez profiter de iptable sur une autre distro dite le moi et je tenterai de faire une mise a jour du tutorial et si un détail vous échape ou que vous avez une erreur (ceci reste possible vu que je l'ai taper essentiellement de mémoire) veuillez me le communiquer ici afin que je le corrige en cas de besoin ou que je vous donne la solution a votre problème.
 
voila en esperant que ça vous aide.
 
ps : n'oubliez pas qu'un firewall ne fait pas tout. Faites aussi régulièrement vos mise a jour et ne laissez pas par exemple une vieille version d'un forum en php sur votre site sans le mettre a jour au risque de voir son serveur se faire pirater vulgairement a cause d'une faille idiote (non anapivirtua je ne pense pas du tout a toi en ce moment).

Reply

Marsh Posté le 16-01-2006 à 11:16:31    

ty, kapouik :)
 
EDIT: nano say bieng  :o  :fou:  :o
EDIT: pis chut pour le forum spa ma faute :o


Message édité par anapivirtua le 16-01-2006 à 11:44:30

---------------
Si vis pacem, para bellum.
Reply

Marsh Posté le 16-01-2006 à 11:51:06    

Ajout d'une variable: Chemin vers iptables (comment j'ai pu l'oublier)


---------------
Si vis pacem, para bellum.
Reply

Marsh Posté le 16-01-2006 à 19:10:17    

Et bin, rien a dire... ca attire les foules -.- aller on ce motive un peut, on lis tout ca, on comprend ce qui ce passe, on ajoute, on corrige et on securise ! :D


---------------
Si vis pacem, para bellum.
Reply

Marsh Posté le 16-01-2006 à 20:16:39    

Ajout d'une fonction: No synflood


---------------
Si vis pacem, para bellum.
Reply

Marsh Posté le 16-01-2006 à 20:34:37    

Non, ça va c'est interessant  :o  
Juste par curiosité pourquoi ce passage:
local=eth0
wan=eth0  
 
Sinon, je suis un plus "direct", surtout pour le telnet, une bête régle DROP.
 
 

Reply

Marsh Posté le 16-01-2006 à 20:50:13    

ce passage:
local=eth0
wan=eth0  
 
Sert a la definition des variables local et wan (tu verra que pour l'ouverture de certains port il est possible de desactiver leurs ouverture au wan par exemple... pour mon cas, cela ne sert pas beaucoup, vu que le wan "ce trouve sur le reseau", mais pour certaines personnes ayant de connexions type:
local=eth0
wan=ppp0
cela sert grandement :))


Message édité par anapivirtua le 16-01-2006 à 20:50:26

---------------
Si vis pacem, para bellum.
Reply

Marsh Posté le 16-01-2006 à 20:53:23    

Rah, a propos du telnet, je me suis tromper, il faut les definir sur DROP et non pas accept :/


---------------
Si vis pacem, para bellum.
Reply

Marsh Posté le 16-01-2006 à 20:53:23   

Reply

Marsh Posté le 16-01-2006 à 20:54:16    

Oui je suis dans le même cas que toi.
Et même quand j'étais dans l'autre cas je ne le faisais pas  :whistle:  
 
Je te l'accorde ta solution est peu être plus "propre"  :na:

Reply

Marsh Posté le 16-01-2006 à 20:55:01    

Le FTP passif tu le gère pas ? :/
Pourtant c'est ce qui est le plus utilisé :/

Reply

Marsh Posté le 16-01-2006 à 20:56:14    

anapivirtua a écrit :

Rah, a propos du telnet, je me suis tromper, il faut les definir sur DROP et non pas accept :/

Oui, je me suis que tu en avais peut être besoin pour X ou Y raisons.

Reply

Marsh Posté le 16-01-2006 à 21:06:53    

c'est bien tout ça!
noob inside qui aimerai bien apprendre, et ce tuto aide mechament bien !
thanks a lot !!
:D

Reply

Marsh Posté le 16-01-2006 à 21:18:19    

:)


---------------
Si vis pacem, para bellum.
Reply

Marsh Posté le 16-01-2006 à 21:18:58    

Je@nb a écrit :

Le FTP passif tu le gère pas ? :/
Pourtant c'est ce qui est le plus utilisé :/


 
c'est en cours d'elaboration, la je corrige quelques problemes qui m'on ete sifflés (concernant le ftp en output surtout) :)


Message édité par anapivirtua le 16-01-2006 à 21:23:55

---------------
Si vis pacem, para bellum.
Reply

Marsh Posté le 16-01-2006 à 21:23:00    

Donc  
- corrections des regles ftp OUTPUT serveur/client
- corrections d'une faute d'orthographe :p


---------------
Si vis pacem, para bellum.
Reply

Marsh Posté le 16-01-2006 à 21:31:03    

Le Telnet est repasssé en ACCEPT ?  :??:

Reply

Marsh Posté le 16-01-2006 à 21:32:41    

WOOOPS ! :o
 
Edit: probleme corrige, merci bien jenluca ;)

Message cité 1 fois
Message édité par anapivirtua le 16-01-2006 à 21:34:28

---------------
Si vis pacem, para bellum.
Reply

Marsh Posté le 16-01-2006 à 21:46:43    

Bon, sinon pour le ftp passif...  
il existe un module ip_conntrack_ftp pour le tracage des connexions ftp passivent...  
La question est la suivante: je charge le module a l'aide d'un simple modprobe...  
Puis dans le script partie ftp --> passif je rajoute ces regles:

Citation :

$IPTABLES -A INPUT -i eth0 -p tcp --sport 1024:65535 --dport 1024:65535 -m state --state ESTABLISHED,RELATED -j ACCEPT
$IPTABLES -A OUTPUT -o eth0 -p tcp --sport 1024:65535 --dport 1024:65535 -m state --state ESTABLISHED,RELATED -j ACCEPT


non ?


Message édité par anapivirtua le 16-01-2006 à 22:04:20

---------------
Si vis pacem, para bellum.
Reply

Marsh Posté le 16-01-2006 à 21:56:22    

Je me leve, et je confirme, c'est bien ca, donc je vais ajouter la fonction ftp passif tout de suite :)


Message édité par anapivirtua le 16-01-2006 à 21:58:35

---------------
Si vis pacem, para bellum.
Reply

Marsh Posté le 16-01-2006 à 22:38:25    

anapivirtua a écrit :

WOOOPS ! :o
 
Edit: probleme corrige, merci bien jenluca ;)

You're welcome  :jap:  
Par contre, ça fait un moment que je n'ai plus de ftp@home, de mémoire cela me semble  être ça.
Tiens je vais essayé de faire ça cette semaine si j'ai un petit moment  :whistle:  

Reply

Marsh Posté le 16-01-2006 à 22:41:49    

;)


---------------
Si vis pacem, para bellum.
Reply

Marsh Posté le 17-01-2006 à 00:14:35    

iptables="/sbin/iptables"  
...
iptables  
 
 
 
ça sert à rien ton truc

Reply

Marsh Posté le 17-01-2006 à 00:52:17    

Taz, heu... petite question, tu a penser au faite que:
 
Je veuille epurer le script, pour ca, je change la variable en fw et je remplace tout les iptables en fw...
A tu aussi penser au faite que certaines personnes n'aient pas iptables dans /sbin/iptables (bon, un cas sur mille, mais c'est pas grave) ?


Message édité par anapivirtua le 17-01-2006 à 01:00:44

---------------
Si vis pacem, para bellum.
Reply

Marsh Posté le 17-01-2006 à 09:22:28    

mais je t'en prie, prend ton shell, et tappes
 
iptables="/foo/iptables"
which iptables
iptables
 
et reviens ensuite ...

Reply

Marsh Posté le 17-01-2006 à 18:07:49    

Oo
 
EDIT:  *Jvien de comprendre (il m'en a fallu  :D)... ouai... ca sert a rien :sweat:  :lol:
donc ca va pas tarder a sauter :)

Message cité 1 fois
Message édité par anapivirtua le 17-01-2006 à 18:12:30

---------------
Si vis pacem, para bellum.
Reply

Marsh Posté le 17-01-2006 à 18:11:40    

topic pour sécuriser sa passerelle internet : http://forum.hardware.fr/hardwaref [...] 2995-1.htm
 
je ne l'ai pas mis à jour depuis un bout de temps mais je pense qu'il y a pas mal de choses :)
 
sinon, pour iptables, le script arno's iptables script est vraiment pas mal :)


---------------
:: Light is Right ::
Reply

Marsh Posté le 17-01-2006 à 18:53:14    

hop hop hop

Reply

Marsh Posté le 18-01-2006 à 12:54:24    

Programme de la journee: ajout de quelques regles coter clients :)... ajout de quelques regles coter serveur de jeux aussi :) (toute commentées, a decommenteés si vous les utilisees)... d'ici 2 - 3h (faut bien que je vive un peut :p) ;)


---------------
Si vis pacem, para bellum.
Reply

Marsh Posté le 18-01-2006 à 13:23:23    

anapivirtua a écrit :

EDIT:  *Jvien de comprendre (il m'en a fallu  :D)... ouai... ca sert a rien :sweat:  :lol:
donc ca va pas tarder a sauter :)


C'est pas que ca sert a rien, c'est que l'utilises mal.
Une fois ta variable définie, il ne faut plus utilisé iptables mais $iptables [:spamafote]
 
Sinon il existe un autre topic sur exactement le même sujet...

Reply

Marsh Posté le 18-01-2006 à 13:38:02    

Heu, oui topic non mis a jour
 
 abandonando :o
 
Ps: justement, je n'ai pas utilise $iptables... donc cela ne sert a rien...  :jap:


Message édité par anapivirtua le 18-01-2006 à 13:39:15

---------------
Si vis pacem, para bellum.
Reply

Marsh Posté le 18-01-2006 à 15:30:31    

Ajout de quelques indications dans le header
Ajout de la regle: "activation du nat" (qui devrais me servire dans quelques jours :D)
Ajout d'une regle pour tracer les demandes de connexions en provenance de l'exterieur (local + wan)
Utilisation de la variables iptables (transformee en fw) (il etais temps :D)
 
Wala Wala
 


---------------
Si vis pacem, para bellum.
Reply

Marsh Posté le 18-01-2006 à 15:41:52    

tu as regardé comme je t'ai dit le script arno's iptables ? :o
et mon topic aussi ?


---------------
:: Light is Right ::
Reply

Marsh Posté le 18-01-2006 à 15:46:36    

oui tomate, j'ai regarde ton topic, oui :)...
Arno's iptables, je connais de vu :p


---------------
Si vis pacem, para bellum.
Reply

Marsh Posté le 20-01-2006 à 14:33:40    

[:drapo]  
 
ca me permettra d'ameliorer mon script que je trouve moyen
 
le voici si ca peut servir

#!/bin/sh
 
# pour autoriser les connexions ftp :
modprobe ip_conntrack_ftp
 
# pour autoriser le DCC sous IRC :
modprobe ip_conntrack_irc
 
# pour autoriser le forwarding
echo 1 > /proc/sys/net/ipv4/ip_forward
 
# Plus rien ne passe  
iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -P FORWARD DROP
 
# on accepte tout ce qui entre et sort de l'interface de loopback
iptables -A INPUT  -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT
 
#on accepte tout ce qui passe par la carte reseau
#iptables -A INPUT  -i eth0 -j ACCEPT
#iptables -A OUTPUT -o eth0 -j ACCEPT
 
#on accepte les connexions destinées à être forwardées
iptables -P FORWARD ACCEPT
 
# les connexions sortantes sont acceptées par défaut
iptables -P OUTPUT ACCEPT
 
# on accepte les packets entrants relatifs à des connexions déjà établies
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
 
#amule
iptables -A INPUT -i eth0 -p tcp --dport 4662  -j ACCEPT
iptables -A INPUT -i eth0 -p udp --dport 4662  -j ACCEPT
 
#msn
iptables -A INPUT -i eth0 -p tcp --dport 6901  -j ACCEPT
iptables -A INPUT -i eth0 -p udp --dport 6901 -j ACCEPT
iptables -A INPUT -i eth0 -p tcp --dport 1863  -j ACCEPT
iptables -A INPUT -i eth0 -p udp --dport 1863 -j ACCEPT
 
iptables -A INPUT -i eth0 -p udp --dport 5190 -j ACCEPT
 
 
# ping
iptables -A OUTPUT -p icmp -m icmp --icmp-type echo-reply   -j ACCEPT
iptables -A OUTPUT -p icmp -m icmp --icmp-type echo-request -j ACCEPT  


---------------
In a world without walls and fences, who needs Windows and Gates
Reply

Marsh Posté le 20-01-2006 à 19:13:11    

Citation :

#amule
iptables -A INPUT -i eth0 -p tcp --dport 4662  -j ACCEPT
iptables -A INPUT -i eth0 -p udp --dport 4662  -j ACCEPT
 
#msn
iptables -A INPUT -i eth0 -p tcp --dport 6901  -j ACCEPT
iptables -A INPUT -i eth0 -p udp --dport 6901 -j ACCEPT
iptables -A INPUT -i eth0 -p tcp --dport 1863  -j ACCEPT
iptables -A INPUT -i eth0 -p udp --dport 1863 -j ACCEPT
 
iptables -A INPUT -i eth0 -p udp --dport 5190 -j ACCEPT


 
Merci bien, je vais rajouter ca en commente par defaut ;)

Reply

Marsh Posté le 21-01-2006 à 11:42:26    

pour msn je crois bien q c'est les ports TCP de 6891 a 6900 pour le transfert de fichier ... jsais pas si c bon a rajout ?!

Reply

Marsh Posté le 21-01-2006 à 12:14:57    

y a mport pour pa multiplier les lignes :)

Reply

Marsh Posté le 22-01-2006 à 13:43:40    

Bnjour, ca a l'air interessant ton script, mais essaie de voir,sur base de ce qui se trouve plus ba, si tu as pas moyen d'en faire un pseudo démon ...
C'est pas bien compliqué, et c'est beaucoupplus propre ..


server:~# cat /etc/init.d/firewall
#!/bin/bash
 
#variables globales
NETWORK=192.168.0.0/24
IN_ADDR=192.168.0.1/24
IN_IFACE=eth1
OUT_IFACE=ppp0
 
# Remove all rules
function rules_clean() {
  iptables -F
  iptables -F INPUT
  iptables -F FORWARD
  iptables -F OUTPUT
 
  iptables -F in-if &> /dev/null
  iptables -X in-if &> /dev/null
  iptables -F out-if &> /dev/null
  iptables -X out-if &> /dev/null
  iptables -F in-out &> /dev/null
  iptables -X in-out &> /dev/null
  iptables -F out-in &> /dev/null
  iptables -X out-in &> /dev/null
  iptables -F icmp-chain &> /dev/null
  iptables -X icmp-chain &> /dev/null
  iptables -F log-and-drop &> /dev/null
  iptables -X log-and-drop &> /dev/null
  iptables -F log-and-accept &> /dev/null
  iptables -X log-and-accept &> /dev/null
}
 
 
# Set filtering rules
function rules_set() {
# Set QoS and ToS rules
 
# Start masquerading
function start_masquerading {
  iptables -A POSTROUTING -t nat -o ppp0 -s $NETWORK -j MASQUERADE
  iptables -A POSTROUTING -t nat -o ppp0 -s $NETWORK2 -j MASQUERADE
  # Turn on IP forwarding
  echo 1 > /proc/sys/net/ipv4/ip_forward
#  echo 1 > /proc/sys/net/ipv4/tcp_syncookies
}
 
# Stop masquerading
function stop_masquerading {
  # Turn off IP forwarding
  echo 0 > /proc/sys/net/ipv4/ip_forward
 
  # Remove Masquerade rules.
  iptables -t nat -F
}
 
 
case "$1" in
  start)
    echo -n "Setting up firewall..."
    rules_clean
    rules_set
    start_masquerading
    echo " done."
    ;;
 
  restart)
    echo -n "Reloading firewall rules..."
    stop_masquerading
    rules_clean
    rules_set
    start_masquerading
    echo " done."
    ;;
 
  stop)
    echo -n "Stopping firewall..."
    stop_masquerading
    rules_clean
    echo " done."
    ;;
 
  *)
    echo "Usage: $0 {start|stop|restart}"
    exit 1
esac
exit 0


Message édité par trictrac le 22-01-2006 à 13:44:56
Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed