Bonjour,
j'aimerai votre avis sur mes configs iptables. C'est mon premier script alors désolé pour les imbécilités...
Les scripts sont destinées à un serveur web. J'ai fais 2 scripts parce qu'il y en a un pour tout les jours (plutôt restrictif) et un autre qui ouvre le dns/le web/"solr" (port 8983) quand j'en ai besoin, mise à jour des fichier php, des packages, etc... Solr c'est un moteur de recherche qui tourne sur jetty qui n'est écouté que sur le localhost en temps normal et quand je travaille dessus il doit écouter sur le réseau. Il n'y a pas de ftp je compte utiliser sftp qui passe par le 22 je crois.
Déjà première question, est ce une bonne idée 2 scripts ? Est ce que cela coupe les connexions quand on change de script ? J'aurais tendance à dire oui à cause de "iptables -P INPUT/OUTPUT DROP". Est ce grave ?
Bon je continue :
1er script :
Ssh et http (côté serveur uniquement) autorisé.
Le reste refusé et en log.
Le ssh est en log aussi, je veux savoir qui vient sur ma machine, normalement que moi.
2eme script
ssh http https dns solr (port 8983)
Je ne log pas car ce script ne sera pas souvent actif
Voici le 1er script :
#!/bin/sh
#####################################################################
#
# Shell Script for configuration of Itables
# Server web Pomelojob powered by Gandi.net
#
# only web and ssh available used in webserver mode
#
# author: Charles Bourasseau
# date: 2009
#####################################################################
## On active quelques modules utiles
modprobe ip_tables
modprobe ip_conntrack
modprobe iptable_filter
## On vide les règles
iptables -F
iptables -X
## On log tout
iptables -N LOG_DROP
iptables -A LOG_DROP -j LOG --log-prefix '[IPTABLES DROP] : '
iptables -A LOG_DROP -j DROP
iptables -N LOG_ACCEPT
iptables -A LOG_ACCEPT -j LOG --log-prefix '[IPTABLES ACCEPT] : '
iptables -A LOG_ACCEPT -j ACCEPT
## On interdit tout
iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -P FORWARD DROP
## On autorise la boucle local
iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT
## SSH
iptables -A INPUT -p tcp -i eth0 --dport 22 --sport 1024:65535 -m state --state NEW,ESTABLISHED -j LOG_ACCEPT
iptables -A OUTPUT -p tcp -o eth0 --dport 1024:65535 --sport 22 -m state --state ESTABLISHED -j LOG_ACCEPT
## web
iptables -A INPUT -p tcp -i eth0 --dport 80 --sport 1024:65535 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -p tcp -o eth0 --dport 1024:65535 --sport 80 -m state --state ESTABLISHED -j ACCEPT
iptables -A FORWARD -j LOG_DROP
iptables -A INPUT -j LOG_DROP
iptables -A OUTPUT -j LOG_DROP
Voici le 2eme script :
#!/bin/sh
#####################################################################
#
# Shell Script for configuration of Itables
# Server web Pomelojob powered by Gandi.net
#
# http htpps ssh solr dns available : more possibilities to work
#
# author: Charles Bourasseau
# date: 2009
#####################################################################
## On active quelques modules utiles
modprobe ip_tables
modprobe ip_conntrack
modprobe iptable_filter
## On vide les règles
iptables -F
iptables -X
## On interdit tout
iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -P FORWARD DROP
## On autorise la boucle local
iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT
## ssh (server)
iptables -A INPUT -i eth0 -p tcp --dport 22 --sport 1024:65535 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp --dport 1024:65535 --sport 22 -m state --state ESTABLISHED -j ACCEPT
## http (server)
iptables -A INPUT -i eth0 -p tcp --dport 80 --sport 1024:65535 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp --dport 1024:65535 --sport 80 -m state --state ESTABLISHED -j ACCEPT
## http (client)
iptables -A INPUT -i eth0 -p tcp --dport 1024:65535 --sport 80 -m state --state ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp --dport 80 --sport 1024:65535 -m state --state NEW,ESTABLISHED -j ACCEPT
## https (server)
iptables -A INPUT -i eth0 -p tcp --dport 443 --sport 1024:65535 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp --dport 1024:65535 --sport 443 -m state --state ESTABLISHED -j ACCEPT
## https (client)
iptables -A INPUT -i eth0 -p tcp --dport 1024:65535 --sport 443 -m state --state ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp --dport 443 --sport 1024:65535 -m state --state NEW,ESTABLISHED -j ACCEPT
## solr
iptables -A INPUT -i eth0 -p tcp --dport 8983 --sport 1024:65535 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp --dport 1024:65535 --sport 8983 -m state --state ESTABLISHED -j ACCEPT
## dns (client)
iptables -A INPUT -i eth0 -p udp --dport 1024:65535 --sport 53 -j ACCEPT
iptables -A OUTPUT -o eth0 -p udp --dport 53 --sport 1024:65535 -j ACCEPT
## Voila merci d'avance pour toutes les réponses :)
# man iptables
Posté par NeoX . Évalué à 0.
time
This matches if the packet arrival time/date is within a given range. All options are optional, but are ANDed when specified.
--datestart YYYY[-MM[-DD[Thh[:mm[:ss]]]]]
--datestop YYYY[-MM[-DD[Thh[:mm[:ss]]]]]
Only match during the given time, which must be in ISO 8601 "T" notation. The possible time range is 1970-01-01T00:00:00 to 2038-01-19T04:17:07.
If --datestart or --datestop are not specified, it will default to 1970-01-01 and 2038-01-19, respectively.
--timestart hh:mm[:ss]
--timestop hh:mm[:ss]
Only match during the given daytime. The possible time range is 00:00:00 to 23:59:59. Leading zeroes are allowed (e.g. "06:03") and correctly interpreted as base-10.
[!] --monthdays day[,day...]
Only match on the given days of the month. Possible values are 1 to 31. Note that specifying 31 will of course not match on months which do not have a 31st day; the same goes for 28- or 29-day
February.
[!] --weekdays day[,day...]
Only match on the given weekdays. Possible values are Mon, Tue, Wed, Thu, Fri, Sat, Sun, or values from 1 to 7, respectively. You may also use two-character variants (Mo, Tu, etc.).
--utc
Interpret the times given for --datestart, --datestop, --timestart and --timestop to be UTC.
--localtz
Interpret the times given for --datestart, --datestop, --timestart and --timestop to be local kernel time. (Default)
EXAMPLES. To match on weekends, use:
-m time --weekdays Sa,Su
Or, to match (once) on a national holiday block:
-m time --datestart 2007-12-24 --datestop 2007-12-27
Since the stop time is actually inclusive, you would need the following stop time to not match the first second of the new day:
-m time --datestart 2007-01-01T17:00 --datestop 2007-01-01T23:59:59
During lunch hour:
-m time --timestart 12:30 --timestop 13:30
The fourth Friday in the month:
-m time --weekdays Fr --monthdays 22,23,24,25,26,27,28
ca devrait simplifier grandement ton code en ajoutant les contraintes de jours/heures sur les regles qui varient au cours de la journée
[^] # Re: man iptables
Posté par einboubou . Évalué à 2.
Si c'est pour le switch entre script 1 et 2, je ne peux pour le moment pas prévoir car mon travail sur le serveur est très irrégulier. C'est un projet personnel, que je réalise suivant mes disponibilités.
[^] # Re: man iptables
Posté par NeoX . Évalué à 1.
tu ajoute --m time --timestart 20:30 --timestop 23:30
pour cette regle soit valide uniquement entre 20h30 et 23h30
## solr
iptables -A INPUT -i eth0 -p tcp --dport 8983 --sport 1024:65535 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp --dport 1024:65535 --sport 8983 -m state --state ESTABLISHED -j ACCEPT
devient alors
## solr
iptables -A INPUT -i eth0 -p tcp --dport 8983 --sport 1024:65535 --m time --timestart 20:30 --timestop 23:30 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp --dport 1024:65535 --sport 8983 --m time --timestart 20:30 --timestop 23:30 -m state --state ESTABLISHED -j ACCEPT
[^] # Re: man iptables
Posté par einboubou . Évalué à 1.
Comme je l'ai dis je fais ce projet quand j'ai du temps et c'est très irrégulier, il est possible que je travaille n'importe quand.
Je préfère donc changer mes tables quand je commence à travailler et les remodifier quand j'arrête, d'où l'idée dans 2 scripts.
[^] # Re: man iptables
Posté par tomachaka . Évalué à 3.
[^] # Re: man iptables
Posté par NeoX . Évalué à 3.
donc oui il te faut 2 scripts pour chacune des situations
mais tu pourrais tres bien juste faire les ouvertures/fermetures necessaires dans le deuxieme
à coup de -A (ajout) et -D (delete) pour les services occasionnels
ca eviterait de repasser par le flush/drop du debut de script
[^] # Re: man iptables
Posté par einboubou . Évalué à 1.
Oui c'est pas faux mais j'aimai bien l'idée que tout est remis à 0 quand on change de script comme ça je suis certains qu'il n'y a pas de problème dans la configuration. Genre un port qui a été ouvert à la main sans être refermé.
Pour des soucis de perf et de simplicité on m'a conseillé d'utiliser iptables-save iptables-restore. C'est peut être plus adapté à ma situation ?
[^] # Re: man iptables
Posté par NeoX . Évalué à 2.
avec comme inconvenient de ne pas pouvoir scripter certains passages (boucle sur une liste de machine à autoriser par exemple)
et les connexions en cours risque quand meme d'etre coupées
# fail2ban
Posté par nono14 (site web personnel) . Évalué à 3.
Système - Réseau - Sécurité Open Source - Ouvert à de nouvelles opportunités
[^] # Re: fail2ban
Posté par einboubou . Évalué à 1.
D'ailleurs c'est un des premiers truc à mettre en place, j'ai filé l ip à personnes et mes sites sont pas référencé que j'ai déjà eu pleins de tentatives et beaucoup de ban c'est dingue...
[^] # Re: fail2ban
Posté par nono14 (site web personnel) . Évalué à 1.
un "match limit" sur l'état NEW peut etre utile, que ce soit en entrée ou en sortie.
Système - Réseau - Sécurité Open Source - Ouvert à de nouvelles opportunités
[^] # Re: fail2ban
Posté par Donk . Évalué à 1.
# limit
Posté par einboubou . Évalué à 1.
## On log tout
iptables -N LOG_DROP
iptables -A LOG_DROP -j DROP
iptables -A LOG_DROP --limit 1/s --limit-burst 1 -m state -j LOG --log-prefix '[IPTABLES DROP] : '
J'ai lu ici : http://groups.google.com/group/fr.comp.securite/browse_threa(...)
que l'ordre était important, d'abord drop puis log.
Si je comprends bien et si ce que j'ai écris est correcte, iptables va bloquer puis maximum 1 fois par seconde va loger.
J'ai bon ?
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.