Comme Gilles le démontre, le concept se présente comme suit: Ajoutez des règles ACCEPTER pour chaque chose spécifique que vous souhaitez autoriser, que ce soit par IP source ou par d'autres qualifications, puis définissez la stratégie par défaut sur REJETER.
Commencez par gérer les états que nous savons que nous voulons accepter ou supprimer, et les interfaces.
iptables -P FORWARD DROP # we aren't a router
iptables -A INPUT -m state --state INVALID -j DROP
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -s 192.168.1.1 -j ACCEPT
iptables -P INPUT DROP # Drop everything we don't accept
Si vous voulez juste faire une autorisation par IP uniquement, sans état
iptables -A INPUT -s 192.168.1.1 -j ACCEPT
iptables -A OUTPUT -d 192.168.1.1 -j ACCEPT
iptables -P INPUT DROP
iptables -P OUTPUT DROP
vous êtes susceptible de rencontrer des problèmes en faisant cela, et je suggère d'utiliser l'état pour vous faciliter la vie. Par exemple, ne pas autoriser -i loet -o loentraînera certainement des problèmes pour certaines applications.
J'ai essayé les deux configurations et KeePass2 ne démarre pas, une idée? Aussi, si je fais iptables -Fcela censé effacer toutes les règles, je ne peux même pas faire de ping sur
ubuntu.com
@PawelCioch pourquoi KeePass2 aurait-il quand même besoin d'une connexion Internet?
Alex
@Alex pour stocker le fichier DB dans l'emplacement distant, ce que je veux IP unique. Mais je comprends tout, la configuration est plus compliquée que l'exemple ici
Pawel Cioch
10
Voici un exemple (non testé!) Qui bloque uniquement les connexions entrantes . Les connexions via l'interface de bouclage, provenant de 192.168.3.x, ICMP, ou vers le port SSH sont autorisées. Toutes les autres connexions sont rejetées.
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A INPUT -p icmp -j ACCEPT
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
iptables -A INPUT -s 192.168.3.0/24 -j ACCEPT
iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -j REJECT
@Gilles pour utiliser correctement les états RELATED et ESTABLISHED, vous devez faire correspondre le paquet initial comme un état NEW. lodans l'exemple ci-dessus est exclu de la correspondance d'état et toujours autorisé.
penguin359
@ penguin359: Pourriez-vous expliquer pourquoi le NOUVEAU est nécessaire? Je suis loin d'être un expert iptables, j'ai en partie copié ces règles depuis mon routeur domestique, ce qui ne correspond pas à NEW. D'après ce que je comprends, tout ce qui reste après la première règle est de nouveaux paquets (ou NON SUIVI) de toute façon. (Si je suis trop loin de la réalité et que vous ne pouvez pas l'expliquer dans un commentaire, postez vos versions avec des explications en guise de réponse et je supprimerai la mienne.)
Gilles 'SO- arrête d'être méchant'
@Gilles Je laisse toujours tomber l'état INVALIDE avant d'accepter quoi que ce soit ... ce qui fait que tout ce qui n'est pas invalide, LIÉ, ÉTABLI, doit être un état NOUVEAU Mais je ne connais aucune raison pour laquelle tout le reste doit spécifier NOUVEAU. En théorie, cependant, si vous ne gérez pas INVALID et que vous ne spécifiez pas NEW, vous pourriez finir par accepter INVALID. Mais une fois INVALID traité, il me semble que la vérification de l'état NEW sur chaque règle nécessite simplement plus de traitement pour le paquet.
xenoterracide
@Gilles aussi une politique de rejet par défaut est mauvaise, car elle envoie un paquet de rejet pour chaque paquet reçu, ce qui aggrave une attaque DOS.
La règle ci-dessous autorisera uniquement votre IP et bloquera toutes les autres IP sur le port 22 ou ssh. Testez avec un nouveau terminal avant de vous déconnecter.
merci pour la réponse succincte. Comment cela changerait-il si je veux autoriser quelques IP et plages d'adresses IP? Au lieu de puis yourIPaddress-je ajouter quelques adresses IP et plages? Et si j'utilise SSH sur un port non standard comme 2888, alors la commande changerait le 22dans votre exemple en 2288? En outre, cela bloquera-t-il également rsync, sftp, etc. sur ce serveur de toutes les adresses IP, à l'exception de celles autorisées?
PKHunter
1
Notez que cela -p tcpest important ici car --dportne fonctionne pas sans lui. Je suggérerais également d'utiliser -j REJECTau lieu de DROPcar REJECTrend le port identique au port fermé et DROPrend les paquets destinés à ce port troués noirs. En pratique, un attaquant distant peut détecter DROPdes ports configurés à partir de ports réellement fermés.
Mikko Rantalainen
0
Voici un exemple de travail complet.
Fait également fonctionner les applications (re: mon commentaire sur le non-démarrage de keepass)
Réponses:
J'ai écrit un article de blog sur les règles de base d'Iptables pour l'utilisateur de bureau il y a longtemps et vous devriez probablement le lire, ainsi que son article lié sur la conception d'un pare-feu avec état . Mais pré noyau 2.6.39 (qui inclut
ipset
et vous voudrez peut-être l'utiliser pour la liste blanche des IP si vous avez plus de 10 à ajouter à la liste blanche (où 10 est arbitraire)).Commencez par gérer les états que nous savons que nous voulons accepter ou supprimer, et les interfaces.
Si vous voulez juste faire une autorisation par IP uniquement, sans état
vous êtes susceptible de rencontrer des problèmes en faisant cela, et je suggère d'utiliser l'état pour vous faciliter la vie. Par exemple, ne pas autoriser
-i lo
et-o lo
entraînera certainement des problèmes pour certaines applications.la source
iptables -F
cela censé effacer toutes les règles, je ne peux même pas faire de ping surVoici un exemple (non testé!) Qui bloque uniquement les connexions entrantes . Les connexions via l'interface de bouclage, provenant de 192.168.3.x, ICMP, ou vers le port SSH sont autorisées. Toutes les autres connexions sont rejetées.
la source
lo
dans l'exemple ci-dessus est exclu de la correspondance d'état et toujours autorisé.La règle ci-dessous autorisera uniquement votre IP et bloquera toutes les autres IP sur le port 22 ou ssh. Testez avec un nouveau terminal avant de vous déconnecter.
la source
yourIPaddress
-je ajouter quelques adresses IP et plages? Et si j'utilise SSH sur un port non standard comme 2888, alors la commande changerait le22
dans votre exemple en2288
? En outre, cela bloquera-t-il également rsync, sftp, etc. sur ce serveur de toutes les adresses IP, à l'exception de celles autorisées?-p tcp
est important ici car--dport
ne fonctionne pas sans lui. Je suggérerais également d'utiliser-j REJECT
au lieu deDROP
carREJECT
rend le port identique au port fermé etDROP
rend les paquets destinés à ce port troués noirs. En pratique, un attaquant distant peut détecterDROP
des ports configurés à partir de ports réellement fermés.Voici un exemple de travail complet.
Fait également fonctionner les applications (re: mon commentaire sur le non-démarrage de keepass)
https://github.com/skironDotNet/linux-allow-only-single-ip
la source