Il existe un serveur sans aucune défense iptables :ACCEPT all..
Il pourrait y avoir des applications personnalisées sur ce serveur.
Si nous devons durcir ce serveur (donc nier tout, et ne laisser que ce dont les applications ont besoin) avec des règles iptables strictes, nous devons trouver à la main ce que l'application utilise dst/src
port/protocol
et ensuite nous devons écrire les règles iptables pour leur..
La question : existe-t-il des scripts qui peuvent aider à collecter ces informations à partir d'une machine en cours d'exécution? (à partir des journaux?) - Et générer automatiquement les règles iptables?
Comme s'il y audit2allow
en avait SELinux
. Juste pour iptables
!
La machine ne doit pas avoir de panne!
Ex.: Le script "MAGIC" devrait s'exécuter une semaine / mois sur la machine, collectant les informations, puis, après une semaine / mois, le script pourra produire un fichier de règles iptables que nous pourrons utiliser.
Beaucoup de gens pourraient se retrouver dans cette situation (comment durcir un serveur concernant iptables). Et ce serait formidable s'il y avait un script / solution qui peut faire ceci: \
Réponses:
Faites-le manuellement
ou
Explication:
la source
Exécutez
tcpdump
sur la machine pendant environ une semaine pour capturer le trafic moyen. Ensuite, vous pouvez parcourir le trafic à l'aide de Wireshark plus tard pour voir quels ports sont utilisés.La commande pour cela serait
tcpdump -i <interface> -s 65535 -w <some-file>
Vous pouvez ensuite mapper cela en arrière
netstat -tuanp
pour voir quels PID / applications utilisent quels ports.Théoriquement, cela pourrait être écrit.
la source
Vous pouvez commencer avec un modèle très basique comme - https://gist.github.com/jirutka/3742890 , qui n'autorise que ssh et ping, et ajouter autre chose manuellement.
un hack de script rapide pour générer des règles iptables pour votre application à l'écoute sur l'interface publique (0.0.0.0) / tcp
vous pouvez également utiliser le
iptables -I INPUT <number>
pour injecter les règles dans un emplacement spécifique, que vous pouvez répertorier aveciptables -nvL --line-numbers INPUT
la source
Malheureusement, je n'ai jamais vu un tel script qui puisse fonctionner en mode d'apprentissage ou en mode passif, enregistrant toute votre utilisation du réseau, prenant ses résultats et générant un pare-feu réel à
iptables
partir de ses journaux.Votre meilleur pari va être de commencer simplement et de continuer à ajouter les différentes pièces au fur et à mesure que vous commencez à bien comprendre quels services votre système fournit. Vous devrez utiliser des outils tels que
netstat
pour voir quels ports sont utilisés pour les différents services que vous hébergez, ainsi que les adresses IP qui y accèdent.REMARQUE: Dans ce qui précède, vous pouvez voir les services que j'exécute sur un serveur qui acceptent les connexions TCP, c'est-à-dire qu'ils "écoutent" les connexions sur différents ports.
Il est plus simple de commencer avec des choses comme SSH (port 22) et HTTP (port 80), si elles sont typiques de votre système, donc je ferais ces types de services en masse en même temps. Pour d'autres services tels que LDAP ou NIS, vous souhaiterez peut-être les faire de manière plus contrôlée, en vous assurant que les choses ne se cassent pas lorsque vous les introduisez.
Des outils tels que FireHOL , Firewall Builder (fwbuilder) et eztables peuvent être utiles lorsque vous attaquez ce projet, car ils fournissent une belle couche d'abstraction d'avoir à créer des
FireHOLiptable
règles personnalisées à la main, ce qui peut être délicat.exemple
fwbuilderexemple
Utilisation de Fail2Ban
Avec un
extraitiptables
pare-feu rudimentaire en place, vous voudrez probablement le complimenter en utilisant un outil tel que Fail2Ban .L'utilisation d'outils tels que celui-ci contribuera à limiter l'exposition que votre système devra supporter pendant que vous continuez à le durcir. Même après avoir été assez convaincu que votre système a été renforcé, vous souhaiterez peut-être continuer à utiliser Fail2Ban dans le cadre de vos mesures de sécurité.
Références
la source
Utilisez des règles iptables pour enregistrer les nouvelles connexions, ce qui enregistrera également udp.
Vous pouvez spécifier différent
--log-level
d'avoir les journaux dans un autre fichier que / var / log / messages (vous devrez configurer le démon syslog).Je pense que vous devriez lire les principaux journaux des applications car certains serveurs ont une activité très périodique comme midi, fin de semaine, fin de mois (trimestre, année) afin de ne pas manquer une activité réseau importante du serveur.
Comme le serveur est critique, fait la matrice de flux réseau du serveur sur une belle feuille de calcul (source ip, destination ip, protocole, port, application) qui vous aidera à construire les règles.
la source
Je sais que ce n'est pas un script et ce n'est pas une réponse à la question d'OP mais c'est une de mes idées que je veux partager avec OP.
J'ai tous les ports d'écoute avec:
Peut-être que cela peut vous rapprocher de l'écriture de votre propre script. :)
la source
Vous pouvez commencer avec quelque chose comme ceci:
puis le suivre avec
ou
La première ligne utilise Netstat pour répertorier les processus d'écoute et leurs ports. Il générera ensuite des lignes «iptables» pour permettre chacune de ces connexions entrantes. La petite substitution de regex sed a été personnalisée pour la sortie netstat sur mon serveur, donc cela pourrait nécessiter quelques ajustements pour vous. Lorsque cela fonctionne, vous devriez vous retrouver avec quelque chose qui ressemble à:
Deux choses importantes à noter:
1) Ces règles ne font rien pour vous jusqu'à ce que vous mettiez une ligne DROP ou REJECT à la fin ou que vous en fassiez la politique par défaut pour les paquets sans correspondance. Ces règles autorisent les paquets, ce qui est théorique, si la stratégie par défaut autorise tout ce qui ne correspond pas.
2) Ces règles sont ambivalentes sur l' IP source . D'après votre message d'origine, il semble que vous souhaitiez autoriser tous vos clients à utiliser le serveur, puis examinez les journaux pour obtenir les adresses IP source pour aller avec les ports de destination. Je ne connais pas d'outil pour le faire, donc ce script empêchera seulement les gens de faire de nouveaux services sur votre serveur qui écoutent sur d'autres ports ... ce qui est quelque chose .
la source