GNU/Linux >> Tutoriels Linux >  >> Linux

Refuser toutes les connexions entrantes avec iptables ?

Essayez ceci avec un accès root :

# Set default chain policies
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT

# Accept on localhost
iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT

# Allow established sessions to receive traffic
iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT

Notez que cela coupera brutalement toutes les connexions en cours - cela inclut des choses comme la connexion SSH que vous pouvez utiliser pour administrer le serveur. Utilisez-le uniquement si vous avez accès à une console locale.

Voir la réponse de Miphix pour savoir comment ajouter une exception pour SSH.


Si vous travaillez à distance via SSH, vous pouvez ajouter ceci (-I l'insère avant toutes les autres règles dans INPUT ):

iptables -I INPUT -p tcp --dport 22 -j ACCEPT

Si votre service SSH écoute sur un autre port, vous devrez utiliser ce port au lieu de 22 .

Sinon, vous risquez de perdre accidentellement l'accès.


Sachez que les autres réponses ne couvrent pas IPv6 ! Si votre système accepte le trafic IPv6, aucune règle iptables ne s'appliquera au trafic IPv6.

au lieu d'utiliser iptables / ip6tables directement, je recommande d'utiliser iptables-restore et save. Ces outils permettent de spécifier une configuration iptables avec plusieurs règles et de la charger facilement avec une seule commande.

créez un fichier (je l'ai nommé iptables.rules) avec le contenu suivant :

*filter

# drop forwarded traffic. you only need it of you are running a router
:FORWARD DROP [0:0]

# Accept all outgoing traffic
:OUTPUT ACCEPT [623107326:1392470726908]


# Block all incoming traffic, all protocols (tcp, udp, icmp, ...) everything.
# This is the base rule we can define exceptions from.
:INPUT DROP [11486:513044]

# do not block already running connections (important for outgoing)
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT

# do not block localhost
-A INPUT -i lo -j ACCEPT

# do not block icmp for ping and network diagnostics. Remove if you do not want this
# note that -p icmp has no effect on ipv6, so we need an extra ipv6 rule
-4 -A INPUT -p icmp -j ACCEPT
-6 -A INPUT -p ipv6-icmp -j ACCEPT

# allow some incoming ports for services that should be public available
-A INPUT -p tcp -m tcp --dport 22 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 80 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 443 -j ACCEPT

# commit changes
COMMIT

Notez que j'ai ajouté un exemple supplémentaire si vous souhaitez autoriser ICMP et le trafic vers des ports spécifiques.

vous pouvez maintenant le charger avec ces commandes :

iptables-restore < iptables.rules
ip6tables-restore < iptables.rules

Désormais, vos règles couvrent également ipv6 et sont faciles à gérer.

Remarque supplémentaire pour les utilisateurs de Debian :si vous êtes satisfait de vos règles, vous pouvez apt install iptables-persistent les règles sont donc restaurées après le redémarrage. Les règles ne sont pas enregistrées automatiquement à l'arrêt, alors exécutez netfilter-persistent save pour mettre à jour les règles persistantes.


Linux
  1. Test des connexions SSL avec SSLyze, Nmap ou OpenSSL

  2. Supprimer tous les commentaires C avec Sed ?

  3. Définissez nginx.conf pour refuser toutes les connexions sauf à certains fichiers ou répertoires

  4. Dois-je limiter le débit des paquets avec iptables ?

  5. Comment lister tous les utilisateurs avec root ?

Surveillez les connexions et les requêtes MySQL avec mytop

Répertorier toutes les adresses e-mail dans un fichier avec grep

Comment réinstaller tous les packages installés avec Zypper ?

Comment configurer un pare-feu avec iptables sur Ubuntu et CentOS

Utiliser iptables avec CentOS 7

Comment sécuriser un pare-feu Linux avec les règles IPTables