Comment bloquer tous les ports sauf 80 443 avec iptables? [dupliquer]

15

Le blocage de tous les ports (entrants et sortants) est facile mais difficile avec le mot «sauf». Je ne connais aucune règle qui remplisse la condition.

PS: Je sais que cette question n'a rien de nouveau. Mais en fait, je n'ai rien trouvé d'aide. Alors, aidez-moi pls!

user71169
la source
Vous ne pouvez pas fermer TOUS les ports, puis OUVRIR un seul port sur la ligne suivante?
sinni800
Je fais ceci: iptables -P INPUT DROP iptables -P OUTPUT DROP iptables -P FORWARD DROP iptables -I INPUT -p tcp --dport 80 -j ACCEPT ------ Ce n'est pas le travail!
user71169

Réponses:

25

Premièrement les ! est le symbole NOT.

iptables -A INPUT -p tcp -m tcp -m multiport ! --dports 80,443 -j DROP

Deuxièmement, les règles que vous avez écrites peuvent ne pas avoir les résultats escomptés. Vous supprimez tout, y compris la réponse à la connexion sur le port 80. Par conséquent, vous ne pourrez pas vous y connecter, dit-il à des fins de serveur Web.

Ces règles autorisent les connexions RELATED et ESTABLISHED, donc un serveur Web devrait fonctionner, si c'est en fait ce que vous essayez de faire.

iptables -A INPUT -p tcp -m tcp -m multiport --dports 80,443 -j ACCEPT
<insert further allowed list here>
iptables -A INPUT -m conntrack -j ACCEPT  --ctstate RELATED,ESTABLISHED
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -j DROP
iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -j DROP
iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -j DROP
cybernard
la source
2
Ne devrait pas !être échappé comme ça \!, si le shell Bash est utilisé?
Cristian Ciupitu
@CristianCiupitu Non, il ne devrait pas avoir besoin d'être échappé. Vous avez peut-être quelque chose de bizarre qui se passe, mais sur mon bash, je n'ai pas besoin d'y échapper.
cybernard
J'ai vérifié la sortie de "iptables -nvL" pour voir les paquets en connexion. Cela semble fonctionner, vos règles. Mais je ne peux pas vérifier que cela fonctionne vraiment ou non, sauf en utilisant certaines applications utilisant ces ports. Une application utilise un port ne signifie pas qu'elle utilise uniquement ce port. Alors, quelqu'un suggère de vérifier?
user71169
1
@cybernard, oui, vous avez raison. Une plaine !n'a pas besoin d'être échappée. Désolé pour la fausse alarme.
Cristian Ciupitu
3
Les règles @MohammadShahid ne sont pas permanentes automatiquement, redémarrez et elles disparaîtront et vous pourrez vous connecter. Vous devez ajouter 22 à la liste des ports si vous souhaitez maintenir une connexion ssh.
cybernard
5
# Set the default policy of the INPUT chain to DROP
iptables -P INPUT DROP

# Accept incomming TCP connections from eth0 on port 80 and 443
iptables -A INPUT -i eth0 -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -i eth0 -p tcp --dport 443 -j ACCEPT

Cela devrait vous donner ce dont vous avez besoin

Fazer87
la source
4
N'oubliez pas que si vous êtes connecté via SSH, vous devez ouvrir le port TCP 22
Maximilian Ast
Oui, n'oubliez pas votre port SSH, vous devriez probablement ajouter votre port SSH avant de définir la stratégie par défaut. ;)
James Little
3

Vous pouvez définir votre action par défaut sur DROP, puis créer des règles d'exception pour autoriser 80 et 443, comme suit:

# Setting default policies:
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT

# Exceptions to default policy
iptables -A INPUT -p tcp --dport 80 -j ACCEPT       # HTTP
iptables -A INPUT -p tcp --dport 443 -j ACCEPT      # HTTPS

iptables parcourra la liste des «exceptions» jusqu'à ce qu'il trouve une correspondance. Il effectuera alors l'action spécifiée par le -jparamètre (ACCEPTER dans ce cas). S'il ne trouve pas de correspondance, il reviendra à la politique par défaut et supprimera le paquet.

Notez qu'avec cette solution de contournement, tous les sous-domaines seront verrouillés. Par exemple, avec cette méthode, vous pourrez la faire fonctionner sur www.mydomain.com, mais votre sous-domaine, disons que www.sub.mydomain.com ne s'ouvrira pas pour les erreurs DNS.

mtak
la source
Ça devrait être du travail mais ça ne l'est pas. Je suis tellement confus.
user71169
Qu'est-ce qui ne marche pas? Autorise-t-il tous les paquets entrants, ou aucun? Pouvez-vous mettre à jour votre question avec la sortie de iptables -nvL?
mtak
Pourquoi le vote négatif? J'ai ce fonctionnement en production, donc je suis sûr à 100% que cela fonctionne.
mtak
Pardon! Ce n'est pas moi, quelqu'un a fait ça :)) Oui, vous aimez bien, mais ce n'est pas le travail. C'est pourquoi je dois poser la question.
user71169
2
Ne refais pas ça ssh.
Ashesh