OVH Community, votre nouvel espace communautaire.

[HOW-TO] Sécurité: APF (Firewall) et BFD (Brute Force Detection)


fugitif
29/07/2010, 13h13
Citation Envoyé par lacalau33
Merci, j'aime trop le truc qui permet de charger les listes d'ips .
Si tu a une liste d'IP dans /etc/ip_banned tu peu la charger via un script bash / sh de ce style.

Code:
for ip in `cat /etc/ip_banned | grep -v ^$ | grep -v ^#`; do
   iptables -I INPUT -s $ip -j DROP;
   iptables -I OUTPUT -d $ip -j DROP;
   iptables -I FORWARD -s $ip -j DROP;
done
Dans le fichier /etc/ip_banned tu peu ajouter des commentaires / espaces et les IP bien sûr.

Exemple:
# hackeur de site
123.123.123.123

# defaceur
234.234.234.234

# spam
456.456.456.456
Arno's iptables firewall utilise un code similaire et améliorer, mais on à l'avantage de pouvoir ban des plages d'IP entière.

Exemple dans le fichier tu met la plage d'IP que tu veut ban

123.123.123.1-255

Ca ban de 123.123.123.1 à 123.123.123.255

cmer81
09/07/2010, 16h43
Moi perso j'adore csf il fait tout

Rajout d'ip dynsDns
lecture des log pour MODSEC,BIND,SUHOSIN,HTACCESS ect.......

Mais ceux que j'aime avant tout ces la gestion des status de connexion exemple SYN_RECV,TIME_WAIT,ESTABLISHED qui depasse les 150 et l'ip saute

Il y a aussi les alerte email dont voici un exemple

Code:
Time:         Thu Jul  8 18:57:06 2010 +0200
Account:      rpc
Resource:     Process Time
Exceeded:     3698 > 1800 (seconds)
Executable:   /sbin/portmap
Command Line: portmap
PID:          22379
Killed:       No
Code:
Time:    Thu Jul  8 22:42:30 2010 +0200
PID:     8609
Account: supremee
Uptime:  65 seconds


Executable:

/usr/local/bin/perl


Command Line (often faked in exploits):

/usr/bin/perl ./hlstats.pl --port=30001


Network connections by the process (if any):

tcp: 127.0.0.1:60986 -> 127.0.0.1:3306
udp: 0.0.0.0:30001 -> 0.0.0.0:0
tcp: 178.32.77*** -> 87.98.**:28000
tcp: 178.32.77.*** -> 87.98.190.**:27050
tcp: 178.32.77.*** -> 87.98.190.**:27025
Code:
Time:                    Thu Jul  8 22:47:41 2010 +0200
1 Min Load Avg:          16.26
5 Min Load Avg:          7.27
15 Min Load Avg:         4.71
Running/Total Processes: 36/220
3 pièces jointes — Télécharger toutes les pièces jointes  
	ps.txt
21 Ko   Ouvrir en tant que document Google   Afficher   Télécharger  
	vmstat.txt
1 Ko   Ouvrir en tant que document Google   Afficher   Télécharger  
	apachestatus.html
38 Ko   Ouvrir en tant que document Google   Afficher   Télécharger
Time: Fri Jul 9 09:38:54 2010 +0200
IP: 66.249.65.24 (US/United States/crawl-66-249-65-24.googlebot.com)
Failures: 5 (mod_security)
Interval: 300 seconds
Blocked: Permanent Block (IP match in csf.allow, block may not work)

Log entries:

[Fri Jul 09 09:38:34 2010] [error] [client 66.249.65.24] ModSecurity: Access denied with code 501 (phase 2). Match of "rx ^((??:POS|GE)T|OPTIONS|HEAD))$" against "REQUEST_METHOD" required. [file "/usr/local/apache/conf/modsec2.user.conf"] [line "38"] [id "960032"] [msg "Method is not allowed by policy"] [severity "CRITICAL"] [tag "POLICY/METHOD_NOT_ALLOWED"] [hostname "web1.cmer.fr"] [uri "/"] [unique_id "TDbR@rIgTUAAACUj1awAAAAL"]
[Fri Jul 09 09:38:34 2010] [error] [client 66.249.65.24] ModSecurity: Access denied with code 501 (phase 2). Match of "rx ^((??:POS|GE)T|OPTIONS|HEAD))$" against "REQUEST_METHOD" required. [file "/usr/local/apache/conf/modsec2.user.conf"] [line "38"] [id "960032"] [msg "Method is not allowed by policy"] [severity "CRITICAL"] [tag "POLICY/METHOD_NOT_ALLOWED"] [hostname "web1.cmer.fr"] [uri "/"] [unique_id "TDbR@rIgTUAAACdnNoUAAAAR"]
[Fri Jul 09 09:38:47 2010] [error] [client 66.249.65.24] ModSecurity: Access denied with code 501 (phase 2). Match of "rx ^((??:POS|GE)T|OPTIONS|HEAD))$" against "REQUEST_METHOD" required. [file "/usr/local/apache/conf/modsec2.user.conf"] [line "38"] [id "960032"] [msg "Method is not allowed by policy"] [severity "CRITICAL"] [tag "POLICY/METHOD_NOT_ALLOWED"] [hostname "web1.cmer.fr"] [uri "/"] [unique_id "TDbSB7IgTUAAACRo9x0AAAAF"]
[Fri Jul 09 09:38:47 2010] [error] [client 66.249.65.24] ModSecurity: Access denied with code 501 (phase 2). Match of "rx ^((??:POS|GE)T|OPTIONS|HEAD))$" against "REQUEST_METHOD" required. [file "/usr/local/apache/conf/modsec2.user.conf"] [line "38"] [id "960032"] [msg "Method is not allowed by policy"] [severity "CRITICAL"] [tag "POLICY/METHOD_NOT_ALLOWED"] [hostname "web1.cmer.fr"] [uri "/"] [unique_id "TDbSB7IgTUAAACtKjpUAAAAC"]
[Fri Jul 09 09:38:53 2010] [error] [client 66.249.65.24] ModSecurity: Access denied with code 501 (phase 2). Match of "rx ^((??:POS|GE)T|OPTIONS|HEAD))$" against "REQUEST_METHOD" required. [file "/usr/local/apache/conf/modsec2.user.conf"] [line "38"] [id "960032"] [msg "Method is not allowed by policy"] [severity "CRITICAL"] [tag "POLICY/METHOD_NOT_ALLOWED"] [hostname "web1.cmer.fr"] [uri "/"] [unique_id "TDbSDbIgTUAAACtc7k8AAAAE"]
bref beaucoup de chose mais vraiment dommage qu'il soit mal connus :/ car il offre vraiment beaucoup de solution niveaux Security
Apres c'est mon avis perso hein

quentinheb
08/07/2010, 18h31
y en a d'autres aussi mis à part apf il existe : shorewall, csf, lfd etc

lacalau33
08/07/2010, 09h11
Merci, j'aime trop le truc qui permet de charger les listes d'ips .

kingteamdunet
24/06/2010, 14h56
merci
donc je peut cree la page iptable

quentinheb
22/06/2010, 18h37
Apf travaille avec iptables ..

kingteamdunet
22/06/2010, 13h00
bonjour
Merci, petite question on peut rajouter iptable avec ?

Furious13
08/12/2009, 16h18
Merci

wxop
08/12/2009, 16h03
non, mais on peut rajouter DDOS Deflate, qui peut utiliser APF

voir ici
http://forums.ovh.net/showthread.php?t=47272
(un autre HowTo sur APF , que j'avais pas repéré...)

Furious13
08/12/2009, 13h36
est-ce que cela bloque également les attaques ddos ?

Furious13
07/12/2009, 18h44
Merci, je regarde cela plus en détail dès demain.

wxop
07/12/2009, 15h36
Pour securiser son serveur, l'emploi d'un Firewall est très fortement conseillé, mais jouer avec Iptables est long, pénible, et assez casse gueule, si on n'est pas un expert.
Mais heureusement, il ya un petit script (APF) qui fait tout cela pour vous, avec plein de paramètres bien pratiques et simple à configurer:
http://www.rfxn.com/projects/advanced-policy-firewall/

APF permet de configurer facilement un firewall, il rajoute un certains nombres de règles par defaults, et permet meme d'importer automatiquement des listes de spammeurs en provenance de site specialisés comme "Project Honey Pot", "Spamhaus" ou "DShield". Il permet egalement d'avoir une liste d'IPs authorisées et d'IPs bannies, et ce, meme de facon globale, multi serveurs... Que demande le peuple ?

APF, peut etre accompagné de BFD, qui en plus surveille les logs du server, et "ban" automatiquement les IPs suspectes...

Voici donc comment installer tout ca:

( Edit 2015 : APF est aussi directement dispo dans les paquet debians : apt-get install apf-firewall )

__ APF ______________________________

On va a la maison:
cd /root/

On télécharge la derniere version:
wget http://www.rfxn.com/downloads/apf-current.tar.gz

On decompacte
tar xvfz apf-current.tar.gz

On va dans le dossier ainsi créé (le nom peut varier légèrement en fonction de la version: corrigez au besoin)
cd apf-9.7-1/

On installe
./install.sh

Si on est sur une RedHat ou Centos, ya plus qu'a configurer.

Par contre sous debian, il faut modifier le script de lancement pour qu'il fonctionne proprement.
-- (Pour Debian uniquement) --------------------------------------------------------------------
On edite le fichier de lancement
nano /etc/init.d/apf

Tout effacer, et remplacer Par:
Code:
#!/bin/bash
##
# chkconfig: 345 55 25
# description: Advanced Policy Firewall
#

# import variables
. /etc/apf/conf.apf
. /etc/apf/internals/internals.conf

ipt="/sbin/iptables"
inspath="/etc/apf"
prog="apf"

case "$1" in
start)
        echo -n "Starting APF:"
        /usr/local/sbin/apf --start >> /dev/null 2>&1
        echo " [Started]"
        ;;
stop)
        echo -n "Stopping APF:"
        /usr/local/sbin/apf --stop >> /dev/null 2>&1
        echo " [Stopped]"
        ;;
restart)
        $0 stop
        $0 start
        ;;
*)
        echo "usage: $0 [start|stop|restart]"
esac
exit 0
On fait Control-X, puis "O" (ou "Y"), puis "Return" pour sauver
---------------------------------------------------------------------------------------------

Bien c'est bon, on peut configurer

La premiere chose a faire c'est d'editer /etc/apf/allow_hosts.rules , pour decider à quelles IPs le firewall ne s'applique pas
nano /etc/apf/allow_hosts.rules

Rajouter au moins:
Code:
## (remplacer xxx... par votre IP fixe , pour vous laisser passer ####
xxx.xxx.xxx.xxx

## ovh #############################
# voir http://guide.ovh.net/FireWall
# ping.ovh.net (ping)
213.186.33.13
# proxy.p19.ovh.net (ping)
213.186.45.4
# proxy.rbx.ovh.net (ping)
213.251.184.9
# proxy.ovh.net (ping)
213.186.50.98
# cache.ovh.net (SSH)
213.186.50.100

## eventuellement, pour authorizer Google, sur le port 80 #######
d=80:s=66.249.64.0/19
## c'est utile si vous activez aussi BFD, pour eviter de bannir google, 
## s'il est un peu trop violent
Bien, maintenant on va configurer le Firewall lui meme
nano /etc/apf/conf.apf

Pour l'instant, laissez DEVEL_MODE="1" , qui désactive le firewall automatiquement toutes les 5 mins. C'est tres utile pour vous éviter de vous auto-bloquer (surtout si vous n'avez pas d'IP fixe, que vous auriez pu définir dans le 'fichier allow_hosts.rules') ...
Quand vous serez satisfait, vous DEVREZ le passer à 0!

Pour la config, lisez les commentaires dans le fichiers, ils sont assez clair (en english tout de meme).
Voici un parametre à ne pas manquer (sous peine que ca marche juste pas du tout):
SET_MONOKERN="1" (Si iptables n'est pas utilisé comme module, mais directement dans le Kernel, ce qui est le cas des noyaux OVH)

Personnellement je laisse les defaults sauf:
BLK_MCATNET="1"
BLK_PRVNET="1"
BLK_IDENT="1"
SYSCTL_ROUTE="1"
SYSCTL_LOGMARTIANS="1"


On arrive maintenant a la partie interressante: "Common inbound (ingress) TCP ports"
Ici on defini les ports TCP qu'on laisse passer en entree (pour tout le monde)
Moi, par exemple je ne laisse passer que le http et le https (et comme mon IP est dans le allow_hosts.rules, je peux MOI uniquement acceder aux autres ports, comme le SSH)
IG_TCP_CPORTS="80,443" (Modifiez a votre convenance)
Pareil en UDP:
IG_UDP_CPORTS=""

Puis on a le "Outbound (egress) filtering ", qui permet de faire pareil pour les paquets qui sortent.
EGF="1" (Il faut l'activer, si on veut s'en servir, perso je ne l'utilise pas) et regler de la meme facon EG_TCP_CPORTS et EG_UDP_CPORTS

Enfin, on peut importer automatiquement des listes de spammers a filtrer depuis "Project Honey Pot", "Spamhaus" et "DShield").
C'est trop bien ca, donc :
DLIST_PHP="1"
DLIST_SPAMHAUS="1"
DLIST_DSHIELD="1"


Apres, il y a quelques réglages, permettant d'avoir un allow_hosts.rules et deny_hosts.rules centralisés pour plusieurs serveurs (bien ca!) ou de logger le traffic rejetté.

Bon maintenant qu'on a tout bien réglé, on peut tester si ca marche en relancant le firewall
/etc/init.d/apf restart

Pour verifier qu'il est bien actif
iptables -L -n

et la vous vous dites que s'il avait fallu rentrer toutes ces regles iptables a la mano, vous auriez déja des cheveux blancs...

Si tout fonctionne comme prevu (n'oublier pas le firewall se desactive toutes les 5 min), vous allez de nouveau modifier la conf:
nano /etc/apf/conf.apf
et changer:
DEVEL_MODE="0"

On redemarre APF
/etc/init.d/apf restart

et Voila!

Notez que, vous pouvez virer quelqu'un en rajoutant son IP dans :
deny_hosts.rules, puis en redemarrant apf : /etc/init.d/apf restart
ou tout d'un coup en faisant:
apf -d 123.123.123.123 Spammeur sur mes forums
ce qui aura pour effet d'ajouter l'ip 123.123.123.123, a deny_hosts.rules, avec un commentaire "Spammeur sur mes forums", puis d'activer cette regle.

APF, c'est trop pratique , non?

Et il a un petit frere : BFD....

__ BFD ______________________________

On télécharge la derniere version:
wget http://www.rfxn.com/downloads/bfd-current.tar.gz

On decompacte
tar xvfz bfd-current.tar.gz

On va dans le dossier ainsi créé (le nom peut varier légèrement en fonction de la version: corrigez au besoin)
cd bfd-1.3/

On installe
./install.sh

Voila, ca y est :-)

Eventuellement on peut modifier la conf:
nano /usr/local/bfd/conf.bfd

Pour definir au bout de combiens de tentatives echouées, il banne quelqu'un, et s'envoyer un mail quand ca se produit...



Enjoy