sécurité iptables sur elastix

Joined
Feb 18, 2013
Messages
38
Points
0
Bonjour,

J'ai activé le firewall depuis l'interface d'elastix, te je me pose des questions concernant la sécurité. Je voudrai implémenter des règles qui ne peuvent pas l'être depuis l'interface web:

Code:
iptables -I ELASTIX_INPUT 2 -p udp --dport 5060 -m state --state NEW -m recent --rcheck --seconds 3600 --hitcount 100 -j DROP
iptables -I ELASTIX_INPUT 3 -p udp --dport 5060 -m state --state NEW -m recent --rcheck --seconds 600 --hitcount 20 -j DROP
iptables -I ELASTIX_INPUT 4 -p udp --dport 5060 -m state --state NEW -m recent --rcheck --seconds 300 --hitcount 10 -j DROP
iptables -I ELASTIX_INPUT 5 -p udp --dport 5060 -m state --state NEW -m recent --rcheck --seconds 180 --hitcount 5 -j DROP
iptables -I ELASTIX_INPUT 6 -p udp --dport 5060 -m state --state NEW -m recent --rcheck --seconds 60 --hitcount 3 -j DROP
Bon j'ai déjà des problèmes car iptables ne sait gérer le hitcoutn 100. Donc il faut que je trouve les bonnes valeurs. Qu'estce que vous utilisez comme valeurs ?

De plus, où mettez-vous les règles en plus pour qu'elles soient bien chargées au démarrage ? Peut-être avez-vous désactiver le firewall de l'interface web pour vous faire votre script perso ?

J'espère que vous pourrez m'aider dans cette mise en place.
 
Joined
Dec 3, 2007
Messages
8,069
Points
88
Salut.

Le module de sécurité Elastix (utilisant iptables), utilise une base de données SQLite3 pour le stockage des paramètres, avant de l'inclure dans le fichiers de config iptables.
C'est tout ce que je sais.

Si toute fois il y avait des problèmes de règles ou autres qui seraient manquants, il est possible d'utiliser le site http://bugs.elastix.org.

En tout cas il n'y a pas de telles key dans la base de données SQLite3.

Si le hitcount n'est pris en compte c'est peut-être due à la version de netfilter!?
Pour moi il ne serait pas à la dernière version.
J'ai essayé d'appliquer un iprange, mais il refuse l'argument, qui normalement serait valide dans netfilter de nos jour (à en croire les forums).
S'il est possible de mettre à jour netfilter avec l'approbation de l'équipe Elastix à travers le site bugs report, ce serait cool.
 
Joined
Feb 18, 2013
Messages
38
Points
0
Ah si si, il prend les règles si je les appliques à la main, mais l'interface n'est pas prévue pour faire des règles plus poussées.

Par exemple, ces règles permettebt d'embler de se prémunir d'attaques sur le sip:
Code:
iptables -t filter -A INPUT -p udp -m string --to 300 --algo bm --string "friendly-scanner" -m udp --dport 5060 -j LOGDROP
iptables -t filter -A INPUT -p udp -m string --to 300 --algo bm --string "sip-scan" -m udp --dport 5060 -j LOGDROP
iptables -t filter -A INPUT -p udp -m string --to 300 --algo bm --string "iWar" -m udp --dport 5060 -j LOGDROP
iptables -t filter -A INPUT -p udp -m string --to 300 --algo bm --string "sipsak" -m udp --dport 5060 -j LOGDROP
Ces règles ne sont pas par défaut, et ne peuvent pas être ajoutés par l'interface. il faut les ajouter à la main.
Je pense que je vais me faire mon script à la main et désactiver le firewall de l'interface.

Je ferai un iptables-restore au démarrage lorsque le réseau démarre.
 
Joined
Feb 18, 2013
Messages
38
Points
0
Voilà pour ceux que ça interresserait par faire leur propre iptables. Commencez par désactiver le firewall d'elastix.

Insérez toutes vos règles avec iptables ou faites comme moi, je me suis créé un script avec toutes mes règles et je l'exécute pour insérer tout d'un coup. Testez vos règles, et une fois le tout validé, exécutez la commande ci dessous:
Code:
/sbin/iptables save
Ce la sauvegarder toutes vos règles dans /etc/sysconfig/iptables et seront charger par iptables au démarreg du serveur. C'est tout.

Si vous avez besoin d'ajouter une règle une fois le serveur démarré, ajouter la règle avec la commande iptables, et refaite le save. Sinon, vous pouvez aussi modifier le fichier /etc/sysconfig/iptables en ajoutant votre règle et pour recharger iptables:
Code:
/sbin/iptables-restore < /etc/syscnfig/iptables
Conseil de sécurité:
- Changer le port SSH par défaut
- N'ouvrez le ssh qu'à votre réseau local si possible, sinon, pour un accès distant essayez de jouer avec vos adresses IP publiques
- Pour le sip, ajouter les règles string que j'ai posté qui permettent de se prémunir contre certaines attaques sur le SIP
- Ajoutez également les règles hitcount qui permet de limiter le nombre de tentative infructueuses sur le SIP
- N'ouvrez pas le SIP au net sans bonne raison. Si vous avez un opérateur qui vous fourni un trunk sip et a besoin que le port 5060 soit ouvert pour lui, faites le, mais en spécifiant les IP sources du provider.
- Idem si vous avez besoin de lancer votre softphone ou telip de l'extérieur. Essayez de privilégier les ouvertures avec ip sources ou vpn.
- idem pour le RTP
- limiter le nombre de requêtes icmp à la secondes:
Code:
iptables -A INPUT -p icmp --icmp-type echo-request -m limit --limit 1/s -j ACCEPT
- Démarrez le service fail2ban sur le serveur (/etc/init.d/fail2ban start) et pour le démarrer au démarrage, exécutez la commande ntsysv, et cocher la case de fail2ban
- Configurez fail2ban en ajoutant un fichier asterisk.conf dans filter.d et qui contient:
Code:
# Fail2Ban configuration file
#
#
# $Revision: 250 $
#

[INCLUDES]

# Read common prefixes. If any customizations available -- read them from
# common.local
#before = common.conf


[Definition]

#_daemon = asterisk

# Option:  failregex
# Notes.:  regex to match the password failures messages in the logfile. The
#          host must be matched by a group named "host". The tag "<HOST>" can
#          be used for standard IP/hostname matching and is only an alias for
#          (?:::f{4,6}:)?(?P<host>\S+)
# Values:  TEXT
#

failregex = NOTICE.* .*: Registration from '.*' failed for '<HOST>' - Wrong password
            NOTICE.* .*: Registration from '.*' failed for '<HOST>' - No matching peer found
            NOTICE.* .*: Registration from '.*' failed for '<HOST>' - Username/auth name mismatch
            NOTICE.* .*: Registration from '.*' failed for '<HOST>' - Device does not match ACL
            NOTICE.* <HOST> failed to authenticate as '.*'$
            NOTICE.* .*: No registration for peer '.*' \(from <HOST>\)
            NOTICE.* .*: Host <HOST> failed MD5 authentication for '.*' (.*)
            NOTICE.* .*: Failed to authenticate user .*@<HOST>.*

# Option:  ignoreregex
# Notes.:  regex to ignore. If this regex matches, the line is ignored.
# Values:  TEXT
#
ignoreregex =
Vous pouvez aussi tuner un peu la conf pour ajouter des règles.
- Vous pouvez aussi limiter le nombre de requêtes ssh à x secondes, sur le même modèle que pour le hitcount du SIP.


Voilà. C'est quelques petites astuces si ça vous interesse. Une petite note par rapport à fail2ban. Il est assez limité pour gérer les attaques sur asterisk et ssh, mais c'est mieux que rien.

++
 
Joined
Dec 3, 2007
Messages
8,069
Points
88
Ton choix de "squeezer" le module de sécurité Elastix est peut-être bonne dans l'absolu et fort justifié quant à la sécurité du serveur Elastix. Mais je ne suis pas trop d'accord dans le fait qu'il faille donner l'idée aux lecteurs du forum de faire de même.
Il suffit que certains d'entre eux le fasse mal..
Il vaut mieux améliorer ce qui est imparfait que de contourner le problème avec un bricolage "made in himslef". (Bricolage même fonctionnel)

Par contre la démarche de soumettre l'origine du problème sur le site que je t'ai cité ce matin, aura pour avantage de lancer l'idée à l'équipe de développeur Elastix, de faire en sorte de pouvoir ajouter lesdites règles impossible à entrer aujourd'hui.
C'est dans cette action qu'Elastix pourra évoluer et être plus performant.
Pour l'idée de rajouter des règles améliorant la sécurité d'Elastix: +1 ;)

Tiens moi au courant sur la démarche sur bugs report d'Elastix (n° de ticket est donné).
ça me permettra de savoir son avancement. Car je suis assez attentif sur la sécurité sur Elastix.
 
Joined
Feb 18, 2013
Messages
38
Points
0
yess, je vais poster demain proposant les améliorations.

Je donnais ces quelques piste pour celui qui veut. Je me suis cassé les dents là dessus il y a quelques années déjà, alors je fais partager ce que j'ai pu trouver.

celui qui veut, peut prendre ce qu'il veut, et même l'améliorer et faire comme il le veut ;)

++
 
Joined
Dec 3, 2007
Messages
8,069
Points
88
Ok cool.

J'ai mis une note pour suivre l'avancement du problème. ;)

Ceci dit sur Elastix 1.6, LOGDROP n'existe pas.
Version iptables trop ancienne pour cette distro.

Mais bon, comme je n'autorise que des adresses ip de confiances et que j'ai un moyen assez efficace d'en ajouter une règle pour des remote extensions à travers un appel externe, ce n'est pas grave.
 
Joined
Feb 18, 2013
Messages
38
Points
0
en fait le logdrop ets juste une table que j'ajoute au début du chargement des règles:

Code:
iptables -t filter -N LOGDROP
iptables -t filter -A LOGDROP -j LOG
iptables -t filter -A LOGDROP -j DROP
En gros je crée la table et je renvoi les tentatives vers cette table qui log et ensuite drop. Par contre effectivement, le log peut-être trop récent pour la version 1.6.

Sinon, c'est juste un prob kernel. Il suffirait de re-compiler le kernel avec un kernel plus récent en ajoutant les options manquantes. Mais vu qu'elastix est une meta-distro embarquant plein de choses, je ne le conseille pas :p
 
Joined
Dec 3, 2007
Messages
8,069
Points
88
C'est bien pour ça que j'écoute ce que disait le soldat Pithiviers disait dans la 7em compagnie: Touch'pas à çà p'tit con. :laugh:

En fait, je suis toujours en 1.6 car j'ai tellement de truc perso dedans, que de tout réinstaller me fout le bourdon.

J'ai eu peur d'obligé de le faire à cause un gros problème sur le BUS USB due à une appli assez instable qui m'a due keuter mon kernel. J'ai fait un yum update du kernel et autre librairies, et je suis passer en dernière update connue de la 1.6 (pour Centos 5.2). Ce qui a due débloquer la situation. Du coup pas de reconfiguration. Ouffff

Seule issue que j'ai, c'est de monter une machine virtuelle en y configurant à la mano tout ce que j'ai en 1.6. de basculer le serveur en 2.4 et si les test en virtuels sont ok, fait une install from scratch en 2.4 avec les mises à jours qui vont bien pour être synchro avec ma config et de faire une restauration.
Bien que je sois obligé de compiler également mes moutons à 5 pattes même après restauration. (Domotic...Etc)
 
Joined
Feb 18, 2013
Messages
38
Points
0
arff oui, effectivement. Je ne mets jamais rien d'autres sur les serveurs comme ça. Pour tout ce qui infra et domotique, j'utilise un sheevaplug (dhcp/tftp, dns, etc) et une raspberry (domotique) ;)

Mais je te comprends que tout refaire c'est du taff :)
 
Joined
May 16, 2007
Messages
113
Points
0
Bonjour Franck,

J'ai suivi les instructions pour utiliser fail2ban, j'ai bien un message quand j'active ou j’arrête le service, mais rien quand une adresse est bannie. Tu as une idée?
Merci
Brice
 
Joined
Feb 18, 2013
Messages
38
Points
0
Normalement, tu devrai avoir une variable "destemail" qui doit être renseignée dans le fichier jail.conf.

Le contenu des mails peuevnt être configurés dans le fichier sendmail.conf du répertoire fail2ban/action.d

Dans ce même fichier, tu peux configurer les options actioncheck et actionban. Ca devrait régler le problème que tu rencontres :)

Ce que j'ai configuré chez moi dans ce fichier, est juste l'option dest que j'ai initialisé à "root", et j'ai modifié la destination du compte local root pour envoyer par mail à plusieurs destinataires.
 
Joined
May 16, 2007
Messages
113
Points
0
Merci pour ta réponse,
dans le jail.conf j'ai bien renseigné la variable dest

dans jail.conf

[asterisk-iptables]

enabled = true
filter = asterisk
action = iptables-allports[name=ASTERISK, protocol=all]
sendmail-whois[name=ASTERISK, [email=dest=titi@gmail.com]dest=titi@gmail.com[/email], sender=asterisk-jail.conf]
logpath = /var/log/asterisk/full
maxretry = 3
bantime = 36000

[ssh-iptables]

enabled = true
filter = sshd
action = iptables[name=SSH, port=ssh, protocol=tcp]
sendmail-whois[name=SSH, [email=dest=titi@gmail.com]dest=titi@gmail.com[/email], sender=SSH-jail.conf-test]
logpath = /var/log/secure
maxretry = 5

--------------------------------------------------------------------------------------------

Le sendmail-whois.conf complet est le suivant
# Fail2Ban configuration file
#
# Author: Cyril Jaquier
#
# $Revision: 660 $
#

[Definition]

# Option: actionstart
# Notes.: command executed once at the start of Fail2Ban.
# Values: CMD
#
actionstart = printf %%b "Subject: [Fail2Ban] <name>: started
From: Fail2Ban <<sender>>
To: <dest>\n
Hi,\n
The jail <name> has been started successfully.\n
Regards,\n
Fail2Ban" | /usr/sbin/sendmail -f <sender> <dest>

# Option: actionstop
# Notes.: command executed once at the end of Fail2Ban
# Values: CMD
#
actionstop = printf %%b "Subject: [Fail2Ban] <name>: stopped
From: Fail2Ban <<sender>>
To: <dest>\n
Hi,\n
The jail <name> has been stopped.\n
Regards,\n
Fail2Ban" | /usr/sbin/sendmail -f <sender> <dest>

# Option: actioncheck
# Notes.: command executed once before each actionban command
# Values: CMD
#
actioncheck =

# Option: actionban
# Notes.: command executed when banning an IP. Take care that the
# command is executed with Fail2Ban user rights.
# Tags: <ip> IP address
# <failures> number of failures
# <time> unix timestamp of the ban time
# Values: CMD
#
actionban = printf %%b "Subject: [Fail2Ban] <name>: banned <ip>
From: Fail2Ban <<sender>>
To: <dest>\n
Hi,\n
The IP <ip> has just been banned by Fail2Ban after
<failures> attempts against <name>.\n\n
Here are more information about <ip>:\n
`/usr/bin/whois <ip>`\n
Regards,\n
Fail2Ban" | /usr/sbin/sendmail -f <sender> <dest>

# Option: actionunban
# Notes.: command executed when unbanning an IP. Take care that the
# command is executed with Fail2Ban user rights.
# Tags: <ip> IP address
# <failures> number of failures
# <time> unix timestamp of the ban time
# Values: CMD
#
actionunban =

[Init]

# Defaut name of the chain
#
name = titi

# Destination/Addressee of the mail
#
dest = titi@gmail.com

# Sender of the mail
#
sender = fail2ban-sendmail-whois.conf





Je ne vois pas où est mon erreur. Au demarrage, j'ai un message ssh de fail2ban, mais aucun message d'asterisk, ni aucun message indiquant un bannissement.

Brice
 
Joined
Feb 18, 2013
Messages
38
Points
0
hum, essai sans les espace ...
exemple:
Code:
sendmail-whois[dest="your@mail.com",name="ssh",sender="fail2ban@mail.com"]
Sinon, quand fail2ban démarre, tout ce que tu auras ce sera un mail. Asterisk ne te dira rien du tout ...

Je ne vois pas non plus où tu peux avoir un problème. Mon seul serveur elastix me permettant de tester at conf est dans un carton en route pour sa destination finale. alors je ne pourrai le tester qu'après le 24, date à laquelle iil sera mis en prod.

[EDIT] Es tu certain qu'une ip a été bannie ? c'est peut-être pour ça que tu ne reçois pas de mail. peux-tu poster le résultat de lla commande "iptables -v -L -n" quand tu penses qu'une ip est bloquée ?
 
Joined
May 16, 2007
Messages
113
Points
0
Je ne comprends plus rien. En fait, je n'ai jamais rien compris!!!

Quand j'arrete et relance fail2ban, j'ai maintenant deux message, un venant d'ASTERISK et un venant de SSH.

Il devait y avoir un espace mal placé.
Je vais maintenant bloquer une adresse ip pour voir si cela fonctionne.
Pour tester si l'IP est bannie, j'avais changé le PWD puis attendu de la voir en UNKNOWN dans le sip show peers. Puis j'ai remis le bon PWD, relancé une séquence d'inscription: rien, j'ai arrêté Fail2ban, relancé la séquence d'inscription, et là ça a fonctionné. J'en ai deduit que fail2ban avait banni mon ip.

Je n'ai pas fait le iptables -v -L -n
 
Joined
May 16, 2007
Messages
113
Points
0
Ecoute, maintenant cela fonctionne parfaitement:

Chain fail2ban-ASTERISK (1 references)
pkts bytes target prot opt in out source destination
260 164K DROP all -- * * 192.168.1.133 0.0.0.0/0
6127 806K RETURN all -- * * 0.0.0.0/0 0.0.0.0/0



Le système a bien banni le 192.168.1.133 en m'envoyant un petit message

Merci en tout cas

Brice
 

Members online

No members online now.

Latest posts

Forum statistics

Threads
30,994
Messages
131,110
Members
17,716
Latest member
Orbit114
Top