Une autre possibilité en plus des fails2ban et autres.
L'idée ici est de bloquer tout le monde sauf bien sur, les ip externes d'ou on s'enregistre et les fournisseurs de trunk sip ou iax.
Etape 1:
Mettre en places un petit script iptables. Ici l'exemple est pour debian.
On va creer un petit script firewall qui sera executé au demarrage de la machine.
Code:
cd /etc/init.d/
touch firewall
chmod +x firewall
update-rc.d firewall defaults
voila pour l'installation du script firewall. Voyons maintenant son contenu.
A adapter !!!
Code:
#!/bin/sh
# description: Firewall
IPT=/sbin/iptables
stop() {
$IPT -F INPUT
$IPT -F LOG_DROP
$IPT -X LOG_DROP
}
start() {
# logs - drop
# tout n'est pas necessaire, c'est juste le principe
$IPT -N LOG_DROP
$IPT -A LOG_DROP -j LOG -p tcp --dport 3306 --log-prefix '[IPTABLES DROP MYSQL] : '
$IPT -A LOG_DROP -j LOG -p tcp --dport 22 --log-prefix '[IPTABLES DROP SSH] : '
$IPT -A LOG_DROP -j LOG -p tcp --dport 10000 --log-prefix '[IPTABLES DROP WEBMIN] : '
$IPT -A LOG_DROP -j LOG -p tcp --dport 5060 --log-prefix '[IPTABLES DROP SIP] : '
$IPT -A LOG_DROP -j LOG -p udp --dport 5060 --log-prefix '[IPTABLES DROP SIP] : '
$IPT -A LOG_DROP -j LOG -p tcp --dport 5038 --log-prefix '[IPTABLES DROP ASTMAN] : '
$IPT -A LOG_DROP -j LOG -p tcp --log-prefix '[DROP] : '
$IPT -A LOG_DROP -j REJECT
# host a bannir
# $IPT -A INPUT -i eth0 -p tcp --source x.x.x.x -j DROP
# facultatif
# on autorise tout ce qui vient du subnet, a adapter pour vous.
# iptables -A INPUT -s 192.168.10.0/24 -j ACCEPT
#asterisk
# supprime erreur dans log asterisk
$IPT -A INPUT -p udp -m udp --dport 5060 -m string --string "Cirpack KeepAlive Packet" --algo bm -j DROP
# pour le port 5060 on autorise uniquement certaines ips
# Tout le subnet, a dapter pour VOTRE config
$IPT -A INPUT -s 192.168.10.0/24 -i eth0 -p udp --dport 5060 -j ACCEPT
#on autorise certains fournisseurs sip
#on ajoutera aussi ses propres ip externes
$IPT -A INPUT -s sip.ovh.net -i eth0 -p udp --dport 5060 -j ACCEPT
$IPT -A INPUT -s sip3.voip-centrex.net -i eth0 -p udp --dport 5060 -j ACCEPT
$IPT -A INPUT -s sip.intervoip.com -i eth0 -p udp --dport 5060 -j ACCEPT
$IPT -A INPUT -s sip.a.lomacom.com -i eth0 -p udp --dport 5060 -j ACCEPT
$IPT -A INPUT -s freephonie.net -i eth0 -p udp --dport 5060 -j ACCEPT
#keyyo
$IPT -A INPUT -s 83.136.161.0/24 -i eth0 -p udp --dport 5060 -j ACCEPT
$IPT -A INPUT -s 83.136.162.0/24 -i eth0 -p udp --dport 5060 -j ACCEPT
$IPT -A INPUT -i eth0 -p tcp --dport 5060 -j LOG_DROP
$IPT -A INPUT -i eth0 -p udp --dport 5060 -j LOG_DROP
$IPT -A INPUT -i eth0 -p udp -m udp --dport 10000:20000 -j ACCEPT
# Le reste est fonction de votre config, juste pour info
# si vous autorisez le subnetlocal, juste ssh est necessaire normalement.
# On le mettra sur un autre port de preference.
# on pourra limiter l'acces ssh a certaines ips avec la meme methode que ci dessus
$IPT -A INPUT -i eth0 -m state --state ESTABLISHED,RELATED -j ACCEPT
$IPT -A INPUT -i eth0 -p tcp --dport 25 -j ACCEPT
$IPT -A INPUT -i eth0 -p tcp --dport 53 -j ACCEPT
$IPT -A INPUT -i eth0 -p udp --dport 53 -j ACCEPT
$IPT -A INPUT -i eth0 -p tcp --dport 80 -j ACCEPT
$IPT -A INPUT -i eth0 -p tcp --dport 110 -j ACCEPT
$IPT -A INPUT -i eth0 -p tcp --dport 443 -j ACCEPT
$IPT -A INPUT -i eth0 -p tcp --dport 143 -j ACCEPT
$IPT -A INPUT -i eth0 -p tcp --dport 4025 -j ACCEPT
$IPT -A INPUT -i eth0 -p tcp --dport 21 -j ACCEPT
$IPT -A INPUT -i eth0 -p tcp --dport 22 -j ACCEPT
$IPT -A INPUT -i eth0 -p udp --dport 1194 -j ACCEPT
$IPT -A INPUT -i eth0 -p tcp --dport 5038 -j ACCEPT
#ping
$IPT -A INPUT -i eth0 -p icmp -j ACCEPT
# on rejette tout les autres
$IPT -A INPUT -i eth0 -j LOG_DROP
}
case "$1" in
start)
start
echo "FireWall Telisk -- Start OK";
exit 0
;;
stop)
stop
echo "FireWall Telisk -- Stop OK";
exit 0
;;
restart)
stop
start
echo "FireWall Telisk -- Restart OK";
exit 0
;;
*)
echo "Usage: /etc/init.d/firewall {start|stop|restart}"
exit 1
;;
esac
Les blocages du port sip seront loggues dans le fichier log systeme ce qui permettra d'ajouter les ips si necessaires et voir le blocage au cas ou on n'a oublié ce firewall.
Avec ce script vous bloquez tous les scans sauf les ips de confiance ce qui est assez efficace. Les fails2ban et controle acl sont tout de meme utiles. On est jamais assez prudent.
Remarques bienvenue.
Ecrit en 2mn...
Cheers !!
Fastm3.