Bloquer l'access WAN – Autoriser l'access au réseau local – Hôtes Linux

Ce que je cherche à faire est de bloquer l'access au WAN et d'autoriser uniquement ces hôtes à se parler sur le LAN 192.168.1.0/24. Cette configuration doit être effectuée sur les hôtes en question.

Il y a des posts similaires à cela, mais ont tendance à être des cas d'utilisation trop spécifiques, ou trop compliqués. Je paye maintenant pour Internet par / Go. J'ai certaines machines virtuelles qui n'ont pas vraiment besoin d'un access WAN après l'installation, mais qui semblent utiliser de grandes quantités de données. (Serveur LDAP pour une raison quelconque?)

Je regarde dans le filtrage DD-WRT, mais je me demandais comment faire ce côté d'hôte.

Je me pencherai également sur l'activation de l'access WAN pendant 1 heure par jour. Cela peut être fait via " script iptables " avec CRON, ou simplement via DD-WRT.

Je devine IPTables est la voie à suivre. Je pense que tous mes servers utilisent IPTables, certains ont UFW et d'autres ont FirewallD.

Je pense que cela peut être une "question générique" avec principalement des réponses qui devraient fonctionner dans plusieurs / toutes les dissortingbutions. Mais pour append, j'utilise principalement Ubuntu 14/16 et CentOS 6/7.

Filtrage avec IPTABLES

Cela peut être accompli en créant un set de règles pour le trafic autorisé et en abandonnant le rest.

Pour la string OUTPUT , créez des règles pour accepter le trafic de bouclage et le trafic vers le réseau 192.168.24.0/24 . L'action par défaut est appliquée lorsqu'aucune règle n'est trouvée, réglez-la sur REJECT .

 iptables -A OUTPUT -o lo -j ACCEPT iptables -A OUTPUT -d 192.168.1.0/24 -j ACCEPT iptables -P OUTPUT REJECT 

Pour la string INPUT , vous pouvez créer des règles similaires. Autoriser le trafic depuis le bouclage et le réseau local, laissez tomber le rest.

Vous pouvez faire correspondre le trafic établi (trafic de réponse aux connections initiées par votre hôte) avec une seule règle en utilisant -m conntrack --ctstate ESTABLISHED . De cette façon, vous n'avez pas besoin de modifier la string lorsque vous souhaitez activer l'access Internet. Cela fonctionne lorsque vous n'exécutez aucun programme / démon en attente de connections en dehors de votre réseau local.

 iptables -A INPUT -i lo -j ACCEPT iptables -A INPUT -s 192.168.1.0/24 -j ACCEPT iptables -A INPUT -m conntrack --ctstate ESTABLISHED -j ACCEPT iptables -P INPUT DROP 

Si vous devez autoriser les connections initiées en dehors de votre réseau local, vous devez configurer la string INPUT de la même manière que la string OUTPUT et utiliser un mécanisme similaire pour appliquer

Pour autoriser l'access réseau sans ressortingction (access WAN), changez l'action par défaut en ACCEPT . Pour rétablir les limites, remplacez l'action par défaut par REJECT . Le même effet est obtenu en ajoutant / supprimant -j ACCEPT tant que dernière règle.

 iptables -P OUTPUT ACCEPT 

Vous pouvez également utiliser le module de time iptables pour accepter le trafic à un moment précis de la journée, auquel cas vous n'avez pas besoin d'utiliser cron. Par exemple, pour autoriser tout trafic sortant entre 12:00 et 13:00 avec la règle suivante:

 iptables -A OUTPUT -m time --timestart 12:00 --timestop 13:00 -j ACCEPT 

Suppression de l' itinéraire par défaut

Lorsque vous supprimez l'itinéraire par défaut de la table de routing de votre hôte, il l'empêche de communiquer avec d'autres hôtes en dehors du réseau local. La route par défaut est configurée avec la ip route : ip route default add ... pour append la route par défaut et ip route del default pour la supprimer.

Le trafic provenant de votre routeur peut toujours atteindre votre hôte. Vous pouvez supprimer le trafic pour lequel il n'existe pas de route vers l'adresse source connue en activant le filtrage par path inverse .

Il existe deux façons de configurer le filtrage de path inverse: sysctl ou iptables . La méthode sysctl s'applique uniquement à ipv4, la règle iptables peut être écrite à la fois pour ipv4 et ipv6.

  • Pour activer le filtrage de path inverse à l'aide de sysctl rp_filter :

     sysctl net.ipv4.conf.all.rp_filter = 1 
  • Avec iptables , en utilisant le module rpfilter :

     iptables -t raw -I PREROUTING -m rpfilter --invert -j DROP 

    La même règle fonctionne également pour ip6tables . Pour nftables , utilisez l'instruction fib .

Pour supprimer et restaurer l'itinéraire par défaut, vous pouvez utiliser un script simple avec cron:

 #!/bin/sh -e FILE="/root/default.gw" case "$1" in "remove") route="$(ip route show default 0.0.0.0/0)" if [ -z "$route" ]; then echo "no default route configured" exit 1 fi echo "$route" > $FILE ip route del default ip route flush cache ;; "restore") route="$(cat $FILE)" if [ -z "$route" ]; then echo "no default route saved" exit 1 fi ip route add $route ;; *) echo "invalid argument" echo "usage: $(basename -- $0) remove|restore" exit 1 esac