IpTables : script de firewalling [Reseau] - réseaux et sécurité - Linux et OS Alternatifs
Marsh Posté le 19-01-2003 à 15:26:18
alors le debut de tout script:
on purge les regles !!
iptables -F
iptables -X
iptables -t nat -F
iptables -t nat -X
#regles par defaut: drop maintenant que tu es grand
iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -P FORWARD ACCEPT (chuis faineant)
#on autorise le traffic sur lo
iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT
moi j'ai cree une regle qui verifie que les paquets sont bien valides. Tu peux ne pas la mettre
iptables -N CHECK_VALID
/usr/sbin/iptables -A CHECK_VALID -p tcp -m state --state NEW,INVALID --tcp-flags ALL FIN,PSH,URG -j LOG --log-prefix '[IPTABLES X-max Packet] '
/usr/sbin/iptables -A CHECK_VALID -p tcp -m state --state NEW,INVALID --tcp-flags ALL FIN,PSH,URG -j DROP
/usr/sbin/iptables -A CHECK_VALID -p tcp -m state --state NEW,INVALID --tcp-flags ALL NONE -j LOG --log-prefix '[IPTABLES NULL scan packet] '
/usr/sbin/iptables -A CHECK_VALID -p tcp -m state --state NEW,INVALID --tcp-flags ALL NONE -j DROP
/usr/sbin/iptables -A CHECK_VALID -p tcp -m state --state NEW,INVALID --tcp-flags ALL SYN,FIN -j LOG --log-prefix '[IPTABLES Syn-Fin packet] '
/usr/sbin/iptables -A CHECK_VALID -p tcp -m state --state NEW,INVALID --tcp-flags ALL SYN,FIN -j DROP
/usr/sbin/iptables -A CHECK_VALID -p tcp -m state --state NEW,RELATED ! --syn -j LOG --log-prefix '[IPTABLES ACK packet] '
/usr/sbin/iptables -A CHECK_VALID -p tcp -m state --state NEW,RELATED ! --syn -j REJECT
/usr/sbin/iptables -A CHECK_VALID -p tcp -m state --state ESTABLISHED --syn -j LOG --log-prefix '[IPTABLES SYN packet] '
/usr/sbin/iptables -A CHECK_VALID -p tcp -m state --state ESTABLISHED --syn -j REJECT
/usr/sbin/iptables -A CHECK_VALID -p tcp -m state --state NEW,INVALID,RELATED --tcp-flags ALL FIN -j LOG --log-prefix '[IPTABLES FIN packet]'
/usr/sbin/iptables -A CHECK_VALID -p tcp -m state --state NEW,INVALID,RELATED --tcp-flags ALL FIN -j REJECT
/usr/sbin/iptables -A CHECK_VALID -i ppp0 -m state --state INVALID -j LOG --log-prefix '[IPTABLES Paquet invalide] '
/usr/sbin/iptables -A CHECK_VALID -i ppp0 -m state --state INVALID -j DROP
#/usr/sbin/iptables -A CHECK_VALID -i ppp0 -p tcp --syn -m limit --limit 10/m -j RETURN
#/usr/sbin/iptables -A CHECK_VALID -i ppp0 -p tcp --syn -m limit --limit 1/m -j LOG --log-prefix '[IPTABLES syn flood] '
#/usr/sbin/iptables -A CHECK_VALID -i ppp0 -p tcp --syn -j DROP
#on fait passer tous les paquets par la
iptables -A INPUT -i ppp0 -A CHECK_VALID
iptables -A FORWARD -o eth0 (et eth1 pour toi) -A CHECK_VALID
#on autorise les connections etablies
iptables -A INPUT -i ppp0 -m state --state ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o ppp0 -m state --state ESTABLISHED -j ACCEPT
#tu autorises l'acces exterieur sur ton serveur web
iptables -A INPUT -i ppp0 -p tcp --dport 80 -m state --state NEW -j ACCEPT
#etc pour les autres services
#on autorise le dns sur la passerelle
iptables -A OUTPUT -o ppp0 -p tcp -d ip_du_dns -j ACCEPT
#idem en udp, et pour les deux dns
je te laisse le soin de completer
Marsh Posté le 19-01-2003 à 15:28:46
oky
je vais pouvori me pencher la dessus
Qu'entend tu par on verifie la validité des packets ? Pour etre sur qu'il n'ya pas eu de packets endommagés ou pr augmenter la securité ? Quel serait l'interet de cet verif pr moi ? consommation des ressources sur la machine ?
Marsh Posté le 19-01-2003 à 15:32:46
l'interet c'est d'eviter de recevoir/relayer des paquets pourris
ca evites aussi certaines techniques de scan de port a l'aide de paquets ACK, SYN, FIN, etc...
ca consomme certainement un peu plus de ressources, mais rien d'enorme.
j'ai aussi une protection ping flood (les trois lignes commentees) qui peut bloquer un scan aggressifs apres quelques ports (il verra le reste fermé)
Marsh Posté le 19-01-2003 à 15:39:27
si tu te sens d'attaque, tu peux en faire un topic 'officiel' sur netfiler/iptables
a grand renfort de commentaires/explications
les topics sur iptables sont a la mode ces temps ci...
Marsh Posté le 19-01-2003 à 15:53:03
Ok merci pr l'explication
je verrai le w-e prochain prle tomic officiel parceque là je suis là pas là semaine...
Mais si j'ai bien tt compris dans une semaine je vous pond un tomci officiel tt detaillé
Marsh Posté le 19-01-2003 à 17:48:51
Pour les IP, je suis d'accord avec la proposition qui t'as été faite sur ton ancien post :
eth0 => 192.168.0.1, la machine derriere => 192.168.0.2
eth1 => 192.168.1.1, la machine derriere => 192.168.1.2
Ca sera deja plus propre architecturalement parlant.
Et pis ca sera plus simple au nivau de tes regles iptables aussi...
Marsh Posté le 19-01-2003 à 17:52:01
pkoi pas ... mais qqn peut m'explqiuer ce que ca implique et pkoi ?
Ji'a pas tt compris aux classes / sous classes ...
Marsh Posté le 19-01-2003 à 17:59:32
HuGoBioS a écrit : pkoi pas ... mais qqn peut m'explqiuer ce que ca implique et pkoi ? |
Tout d'abord, c'est d'un point de vue logique...
En effet, tu as d'une certaine facons, deus sous-reseaux differents (pisque pas sur la meme carte de ton routeur/passerelle.
De plus, telle qu'elle, le probleme de ta config et que suppose le deroulement suivant :
1) depuis ta gentoo tu te connecte a Internet sur www.moncochon.com
2) ca passe par ta passerelle qui nat, et met son adresse, et conserve l'adresse de depart pour la reponse
3) le serveur moncochon.com te repond
4) la passerelle recoit le paquet, et remplace l'adresse de destination pour ta gentoo.
5) la passerelle doit maintenant router, et d'apres ta table de routage, elle va trouver ton reseau sur les deux interfaces... donc deux suppositions :
i) elle agit comme un hub et envoit sur les deux sous reseaux (mouais...)
ii) elle envoit que sur la premiere carte, puisqu'elle pense que la seconde est une voie de secours, avec une metrique moins importante (c'est un peu complexe, je sais, mais c'est comme ca...).
Bref, avec ton architecure actuelle, en cas de probleme tu vas t'arracher les cheveux, et pis c'est pas optimal...
Deux solutions :
1) soit decouper en deux sous reseaux comme on t'as dis
2) soit calculer un bon masque de sous reseau pour chacune des cartes au lieu d'utiliser le cassique 255.255.255.0 qui n'est pas correct dans ton cas. Mais bon c'est beaucoup plus complexe a comprendre, alors utilise le 1)
Marsh Posté le 19-01-2003 à 18:06:40
e_esprit a écrit : |
ha d'accord ! J'ai a peu pres compris le truc ! donc en fait une carte par sous reseau, et tout va bien, deux carte dans le mm sous reseau, et la sa part en live sauf cacluls complexe ! Oky ! Merci, j'ai changé ca, et j'ai commencé a mettre les regles en places, je vais essayer de faire ca bien
Marsh Posté le 19-01-2003 à 18:09:02
je suis d'accord avec e_esprit
C est pourquoi je t'avais proposer d'utiliser 2 identifiant réseaux différent (192.168.0.0 et 192.168.1.0), ce sera par la suite beaucoup plus simple à administrer.
Il faudra par contre que tu rajoutes quelques règles pour que les 2 PC de ton LAN puisse communiquer ensemble( concernant les port 137-139 pour un échange de fichier avec samba si tu as un XP par exemple).
Marsh Posté le 19-01-2003 à 18:10:25
je vais avoir un 98 ...
et les echanges de fichiers je pense que mon pere s'en passera ;-)
donc si j'ai bien tout compris, si je rajoute une 3eme carte reseau, ca sera 192.168.2.1, ce qui fera un 3eme sous reseau
Marsh Posté le 19-01-2003 à 18:12:01
HuGoBioS a écrit : je vais avoir un 98 ... |
Par exemple...
Marsh Posté le 19-01-2003 à 18:13:32
mouais okey okey
sur les regles iptables, si j'ai bien compris ke script plus haut :
on accepte tt les cnx deja presentes, par contre, c'est sur new que s'effectuent les restrictions, c'est bien ca?
Marsh Posté le 26-01-2003 à 15:07:06
Bon, je met la premiere version de mon script de firewalling, c'est pas encore tt a fait o point, mais ca avance !
#! /bin/sh |
c'est pas forcement tres propre et rigoureux, mais ca prend forme !
Marsh Posté le 26-01-2003 à 15:34:50
evites d'utiliser le suivi de connection sur ton port 4662.
ca ne sert a rien, car il doit etre ouvert dans les deux sens, et ca surcharge le systeme pour rien.
Marsh Posté le 26-01-2003 à 15:51:04
hummm tu peux detailler j'ai pas bien saisi là ;-)
il est pas ouvert le 4662 c'est 4661 et 4242 que j'ai en accept
sinon, j'aimerai que si on se connecte au routeur sur le port 443 on soit en fait connecté @192.168.0.2:443
quelle est la commande ? merci !
Marsh Posté le 26-01-2003 à 16:02:44
iptables -A PREROUTING -t nat -i ppp0 -p tcp --dport 443 -j DN
AT --to 192.168.0.2
iptables -A FORWARD -i ppp0 -o eth1 -p tcp --dport 443 -d 192.
168.0.2 -j ACCEPT
Marsh Posté le 26-01-2003 à 17:21:44
HuGoBioS a écrit : hummm tu peux detailler j'ai pas bien saisi là ;-) |
si tu ouvres pas le 4662, tu as un lowid assuré !
Marsh Posté le 26-01-2003 à 17:34:22
ha bah forcement c pour ca que ca deconnait ! bon suis pas en forme moi ! merci a toi apolon34
Marsh Posté le 01-02-2003 à 21:21:14
Bon, j'ai un peu avancé, mais il me reste un pb pour le ftp : la conneciton passe pas !
Le pb ce situe au niveau d'une regle d'output ... mais laquelle ?
Voici donc un copié/collé de mon /etc/init.d/firewall
#! /bin/sh |
Marsh Posté le 01-02-2003 à 23:11:57
BOn, j'arrive tjs pas a faire passer les connexions sur le port 4662.... je lowid là c reloo !
Marsh Posté le 03-02-2003 à 14:20:45
hello
moi aussi j'y arrivais pas. du coup j'ai loggué les refus et j'ai rajouté ces 2 lignes :
iptables -A INPUT -o ppp0 -p tcp --dport 4662 -j ACCEPT
iptables -A OUTPUT -i ppp0 -p tcp --sport 4662 -j ACCEPT
(attention je te donne ça de tête)
et du coup ça marche!!!!
ps: si c'est pas ça, dis moi je vérifierai chez moi ce soir!
HuGoBioS a écrit : BOn, j'arrive tjs pas a faire passer les connexions sur le port 4662.... je lowid là c reloo ! |
Marsh Posté le 03-02-2003 à 20:05:27
confirmation:
iptables -A INPUT -i ppp0 -p tcp --dport 4662 -j ACCEPT
iptables -A OUTPUT -o ppp0 -p tcp --sport 4662 -j ACCEPT
et ça marche
Marsh Posté le 04-02-2003 à 14:14:20
oky merci je mettrait ca a jour des que je rentre chez moi ...
ou des que j'ai un acces ssh qui marche !
Marsh Posté le 04-02-2003 à 14:41:51
J'ai juste lu en diagonale vite fait... mais ... t'es sur que tu n'es pas en train de faire une énorme connerie?
Des règles de ce type tu en as plein:
iptables -A INPUT -i ppp0 -p tcp --sport 80 -m state --state NEW -j ACCEPT |
A moins que la fatigue n'altère mon jugement, cette règle = j'autorise tous les paquets qui viennent du port 80.
Bref, il suffit d'envoyer des paquets qui viennent du port 80 pour que ton firewall les laisse passer.
A mon avis, la sécurité c'est une affaire de spécialistes, et si on a pas le temps et l'envie de se plonger completement dedans, il faut faire confiance à ceux qui le font.
Sur freshmeat tu peux trouver des tonnes de scripts de firewalling iptables. Alors certes c'est moins l337 et moins nerd que de le faire soit même, mais a priori tu evites les erreurs de ce type.
Perso j'utilise ce script:
http://rulhmpc57.leidenuniv.nl/pro [...] -firewall/
Qui est un des rares à permettre de natter plusieurs interfaces en standard (si tu prends la 1.73rc1). Ca se configure rapidement avec un fichier de conf tout simple à editer.
Enfin bref à mon humble avis si tu es pas prêt à te documenter abondamment et à passer plusieurs heures à tester ton firewall, utilise un script tout fait.
J'ai entendu parler de shorewall aussi mais jamais essayé.
Marsh Posté le 04-02-2003 à 14:46:59
fl0ups a écrit : Des règles de ce type tu en as plein:
|
Oui je me posais la meme question, il me semble que tu as raison.
Marsh Posté le 04-02-2003 à 17:18:53
en effet
je suppose que c'est pour l'acces au serveur, et dans ce cas c'est --dport 80
en tout cas floups, je trouve ca bien mieux qu'il se casse le cul a faire son script et a essayer de comprendre ce qu'il fait, plutot que de pomper un truc tout fait !
Marsh Posté le 04-02-2003 à 17:40:35
apolon34 a écrit : en effet |
niveau sécu aussi c'est bien mieux?
J'ai envie de faire mon propre OS plutot que de pomper un truc tout fait comme Linux ou windows, des volontaires pour m'aider?
Marsh Posté le 04-02-2003 à 17:49:53
D'ailleurs partir d'un script fait par un autre n'empêche pas de comprendre comment ça marche. Il suffit de lire les sources, d'essayer de comprendre, et de commencer à modifier en fonction de ses besoins.
La preuve je me suis jamais fait mon propre script iptables de A à Z et j'ai vu tout de suite les nombreux trous du gruyère
Amha en terme de sécurité il faut mieux pas jouer au jedi quand on comprend pas encore à 100% ce qu'on fait.
Marsh Posté le 05-02-2003 à 15:55:07
oui je sais y'a des trucs chelou dans ce script, mais je suis en train de me plonger là dedans (le w-e seulement, pas chez moi en semaine) et de comprendre !
Celà dit, vu ce qu'il y a à hacker chez moi, c'est pas grave si pour l'instant mon pc est une passoire ;-)
Mais j'arriverai a faire un truc impec vs en faite pas !
Marsh Posté le 05-02-2003 à 21:45:57
fl0ups a écrit : |
Je viens de tester ce script, et il est franchement impressionnant de simplicite et d'efficacite. L'essayer, c'est l'adopter
Marsh Posté le 15-02-2003 à 17:03:18
me revoilà !
J'ai corrigé les histoires de sport, j'ia maintenant ca :
en script :
#on purge les tables |
Routeur:~# iptables -L |
et je lowid toujours c'est chiant merdeuh
Marsh Posté le 16-02-2003 à 20:14:16
y a des exemples par ici:
http://forum.hardware.fr/forum2.ph [...] h=&subcat=
si ça vous interressent
Marsh Posté le 21-02-2003 à 18:57:51
Reply
Marsh Posté le 19-01-2003 à 15:14:36
Comme tout le monde commence a le savoir, j'ai enfin reussi a connecter ma passerelle au net, et avoir mes deux cartes reseaux actives, et a router les données !
Mias tous ca est pas vraiment secure donc ... il va falloir mettre en place de vraies regles exigeantes pr le routage !
Je rapelle l'archi du reseau local :
__________________ _______________ _____________
| PC1 Xp & Gentoo| eth1 | Routeur Woody | eth0 | PC2 Win98 |
| 192.168.0.2 |------| 192.168.0.1 |------| 192.168.1.2 |
|__________________| |__192.168.1.1__| |_____________|
|
|Usb: Sagem F@st 800 (eth2)
___|___
| Free |
| Adsl |
| ppp0 |
|_______|
On me dit que mettre les deux carte reseau sur la meme plage d'ip c'est mal ! Je fais quoi alors ?
Le pc2 doit juste pouvoir surfer et prendre des mails
Le pc1 doit pouvoir faire du p2p, du ftp, du netmeeting, lire les mails, utilisé trillian ou son equivalent nux (aim, icq, ...), et surfer biensur, en http et https
Le routeur devra heberger un serveur web (apache+php4+mysql) et mail (lequel ?) ainsi qu'un filtre mail(marre du spam) et peut etre junkbuster !
Je demande pas forcement qu'on me ponde des fihciers totu fait, mais au moins les ports a ouvrir pr les protocoles pas tres connus !
Je sais que je pourrais trouver pas mal de truc en cherchant moi meme, mais je pense que pas mal de monde ici a deja fait des choses se rapprochant de ca alors, comme je suis pris par le tps, je me permet d'abuser ;-)
Merci a tous !
Message édité par HuGoBioS le 26-01-2003 à 15:03:46
---------------
-= In Kik00 101 I trust :o =-