J'ai passé un certain temps à réfléchir à deux choses à propos de cet iptables: la plupart de ceux qui recherchent ces tutoriels sont des débutants et deuxièmement, beaucoup recherchent déjà quelque chose d'assez simple et déjà élaboré.
Cet exemple concerne un serveur Web, mais vous pouvez facilement ajouter d'autres règles et les adapter à vos besoins.
Lorsque vous voyez "x" changer pour votre adresse IP
#!/bin/bash
# Nous nettoyons les tables iptables -F iptables -X # Nous nettoyons NAT iptables -t nat -F iptables -t nat -X # mangle table pour des choses comme PPPoE, PPP et ATM iptables -t mangle -F iptables -t mangle -X # Politiques Je pense que c'est le meilleur moyen pour les débutants et # toujours pas mal, je vais vous expliquer la sortie (sortie) tout parce que ce sont des connexions sortantes #, l'entrée nous supprimons tout, et aucun serveur ne doit transférer. iptables -P INPUT DROP iptables -P OUTPUT ACCEPT iptables -P FORWARD DROP #Intranet LAN intranet = eth0 #Extranet wan extranet = eth1 # Conserver l'état. Tout ce qui est déjà connecté (établi) est laissé comme ceci: iptables -A INPUT -m state --state ESTABLISHED, RELATED -j ACCEPT # Loop device. iptables -A INPUT -i lo -j ACCEPT # http, https, nous ne spécifions pas l'interface car # nous voulons qu'elle soit tous iptables -A INPUT -p tcp --dport 80 -j ACCEPT iptables -A INPUT -p tcp - dport 443 -j ACCEPT # ssh uniquement en interne et à partir de cette plage d'iptables d'ip -A INPUT -p tcp -s 192.168.xx / 24 -i $ intranet --dport 7659 -j ACCEPT # surveillance par exemple s'ils ont zabbix ou un autre service snmp iptables -A INPUT -p tcp -s 192.168.xx / 24 -i $ intranet --dport 10050 -j ACCEPTER # icmp, ping bien c'est à vous iptables -A INPUT -p icmp -s 192.168.xx / 24 - i $ intranet -j ACCEPTER #mysql avec postgres est le port 5432 iptables -A INPUT -p tcp -s 192.168.xx --sport 3306 -i $ intranet -j ACCEPTER #sendmail bueeeh si vous voulez envoyer du courrier #iptables -A OUTPUT -p tcp --dport 25 -j ACCEPT # Anti-SPOOFING 09/07/2014 # SERVER_IP = "190.xxx" # server IP - le vrai wan ip de votre serveur LAN_RANGE = "192.168.xx / 21" # LAN range de votre réseau ou de vos # Ip vlan qui ne doivent jamais entrer dans l'extranet,est d'utiliser un peu de # logique si nous avons une interface purement WAN, il ne faut jamais entrer de trafic de type LAN via cette interface SPOOF_IPS = "0.0.0.0/8 127.0.0.0/8 10.0.0.0/8 172.16.0.0/12 192.168.0.0 / 16 "# Action par défaut - à effectuer lorsqu'une règle correspond à ACTION =" DROP "# Paquets avec la même adresse IP de mon serveur via le wan iptables -A INPUT -i $ extranet -s $ SERVER_IP -j $ ACTION # iptables -A OUTPUT -o $ extranet -s $ SERVER_IP -j $ ACTION # Paquets avec la plage LAN pour le wan, je le mets comme ceci au cas où vous auriez # un réseau particulier, mais c'est redondant avec la règle # suivante dans la boucle " pour "iptables -A INPUT -i $ extranet -s $ LAN_RANGE -j $ ACTION iptables -A OUTPUT -o $ extranet -s $ LAN_RANGE -j $ ACTION ## Tous les réseaux SPOOF non autorisés par le wan pour ip dans $ SPOOF_IPS faire iptables -A INPUT -i $ extranet -s $ ip -j $ ACTION iptables -A OUTPUT -o $ extranet -s $ ip -j $ ACTION terminé
Comme toujours j'attends vos commentaires, restez à l'écoute dans ce blog, merci
Cela m'aide à continuer à apprendre un peu plus grâce copié.
vous êtes le bienvenu, heureux de vous aider
Je suis vraiment désolé, mais j'ai deux questions (et une en cadeau 😉):
Arriveriez-vous avec cette configuration pour qu'Apache fonctionne et ferme le reste sauf SSH?
#Nous nettoyons les tables
iptables -F
iptables -X
Nous nettoyons NAT
iptables -t nat -F
iptables -t nat -X
iptables -A INPUT -p tcp –dport 80 -j ACCEPTER
ssh uniquement en interne et à partir de cette gamme d'adresses IP
iptables -A INPUT -p tcp -s 192.168.xx / 24 -i $ intranet –dport 7659 -j ACCEPTER
Deuxième question: 7659 est-il le port utilisé en SSH dans cet exemple?
Et troisième et dernier: dans quel fichier cette configuration doit-elle être enregistrée?
Merci beaucoup pour le tutoriel, c'est dommage que vous soyez un débutant et que vous ne puissiez pas bien l'utiliser.
c'est la règle dont vous avez besoin pour http depuis apache
iptables -A INPUT -p tcp –dport 80 -j ACCEPTER
mais vous devez également déclarer les politiques de dépôt par défaut (c'est dans le script)
iptables -P BAISSE D'ENTRÉE
iptables -P OUTPUT ACCEPT
iptables -P DROP FORWARD
et cela parce que si vous êtes éloigné, cela vous jettera.
iptables -A INPUT -m state -state ESTABLISHED, RELATED -j ACCEPT
si 7659 est le port de ce ssh dans l'exemple, il est par défaut 22, bien que je vous recommande de changer pour un port "pas bien connu"
mec je ne sais pas, comme tu veux ... firewall.sh et tu le mets dans rc.local (sh firewall.sh) pour qu'il s'exécute automatiquement, cela dépend du système d'exploitation que tu as, il y a des fichiers où tu peux mettre les règles directement.
Hé, votre script est très bon, en l’analysant… Savez-vous comment je pourrais refuser toutes les requêtes de mes utilisateurs à un site Web spécifique?…. mais ce site Web a beaucoup de serveurs….
Je recommande d'autres options:
1) Vous pouvez créer une fausse zone dans votre DNS ...
2) Vous pouvez placer un proxy avec acl
cependant
Pour iptables, vous pouvez aimer ça ... ce n'est pas toujours la meilleure option (il y a plus de façons)
iptables -A INPUT -s blog.desdelinux.ne -j DROP
iptables -A OUTPUT -d blog.desdelinux.net -j DROP
Dis moi si ça a marché
Merci pour la réponse, tout s'est éclairci. Je posais des questions sur le port parce que j'ai été surpris d'utiliser le 7659, puisque les ports privés démarrent dans le 49152, et cela pourrait interférer avec un service ou quelque chose.
Encore une fois, merci pour tout, c'est sympa!
Salutations.
BrodyDalle, comment puis-je vous contacter? Très intéressant votre script.
soulofmarionet_1@hotmail.com
L'avant dernière ligne "iptables -A OUTPUT -o $ extranet -s $ ip -j $ ACTION" sert à empêcher l'usurpation de votre propre machine? Ou est-il possible qu'un paquet empoisonné entre et puisse repartir avec cette source empoisonnée et c'est pourquoi la règle est également incluse avec OUTPUT?
Merci beaucoup pour la clarification !!!
c'est mon propre script iptables, il est très complet:
# franes.iptables.airy
# doc.iptables.airoso: iptables pour l'héritage et pour nft
#
# ports de pare-feu
##########################
#! / Bin / bash
#
# effacer l'écran
############################# début de /etc/f-iptables/default.cfg |||||
clair
# laisser une ligne vide
echo
export oui = »» non = »écho désactivé»
# les variables que vous pouvez modifier pour autoriser l'accès
##################### variables à modifier avec $ yes ou $ no
export hayexcepciones = »$ non»
# il y a des exceptions: $ yes pour autoriser les hôtes exceptionnels et $ no pour désactiver
export hayping = »$ non»
# hayping: $ yes pour autoriser les pings tiers et $ no pour refuser
export haylogserver = »$ non»
# haylogeosserver: $ yes pour pouvoir enregistrer tcp $ no pour ne pas pouvoir enregistrer tcp
######
##################### variables à modifier en ajoutant "," ou avec des plages de ":"
exceptions d'exportation = »baldras.wesnoth.org»
# exceptions autorisent un ou plusieurs hôtes du pare-feu ou aucune valeur
export logserver = supprimer, ipp, dict, ssh
# ports de serveur TCP qui sont enregistrés lorsque les paquets arrivent
export redserver = 0/0
# redserver: le réseau pour les ports du serveur réseau local préférable ou plusieurs ips
client d'exportation rouge = 0/0
# clientnet: le réseau pour les ports clients préférable à tous les réseaux
export servidortcp = ignorer, ipp, dict, 6771
# servidortcp: les ports de serveur tcp spécifiés
export serverudp = supprimer
#udpserver: les ports de serveur udp spécifiés
export clientudp = domaine, bootpc, bootps, ntp, 20000: 45000
#udp client: les ports client udp spécifiés
export clienttcp = domaine, http, https, ipp, git, dict, 14999: 15002
# tcp client: les ports client tcp spécifiés
########################### fin de /etc/f-iptables/default.cfg |||||
############################## fin des variables à modifier
pare-feu d'exportation = 1 $ variables = 2 $
if ["$ variables" = "$ NULL"]; puis source /etc/f-iptables/default.cfg;
autre source / etc / f-iptables / $ 2; Fi
############################# ou écrasera les variables avec un fichier .cfg
################################################ #######################################
pare-feu d'exportation = 1 $ variables d'exportation = 2 $
######################################## variables système automatiques
if ["$ firewall" = "déconnecté"]; puis echo FIREWALL DISCONNECTED;
export activateserver = »$ no» activateclient = »$ no» wet = »$ no»;
elif ["$ firewall" = "client"]; then echo FIREWALL CLIENT;
export activateserver = »$ no» activateclient = »» wet = »$ no»;
elif ["$ firewall" = "serveur"]; puis echo FIREWALL SERVER;
export activateserver = »» activateclient = »$ no» wet = »$ no»;
elif ["$ firewall" = "client et serveur"]; puis echo FIREWALL CLIENT AND SERVER;
export activer le serveur = »»; export activateclient = »»; export wet = »$ no»;
elif ["$ firewall" = "permissif"]; puis echo PARE-FEU PERMISSIF;
export activateserver = »$ no» activateclient = »$ no» wet = »»;
d'autre
$ check sudo echo iptables-legacy:
$ check sudo iptables-legacy -v -L INPUT
$ check sudo iptables-legacy -v -L OUTPUT
$ check sudo echo iptables-nft:
$ vérifier sudo iptables-nft -v -L INPUT
$ check sudo iptables-nft -v -L SORTIE
echo _____paramètres____ $ 0 $ 1 $ 2
echo "cast sans paramètres est de lister iptables."
echo "Le premier paramètre (activer iptables): déconnecté ou client ou serveur ou client et serveur ou permissif."
echo "Le second paramètre: (optionnel): le fichier default.cfg choisit /etc/f-iptables/default.cfg"
echo "Paramètres des variables:" $ (ls / etc / f-iptables /)
sortie 0; Fi
#################
echo
echo Lance $ 0 déconnecté ou client ou serveur ou client et serveur ou permissif ou variables ou sans utiliser de paramètre pour lister les iptables.
echo Le fichier $ 0 contient des variables modifiables à l'intérieur.
############################## les variables ci-dessus sont activées
###############################
echo définition des variables iptables
variables activées par écho
echo
########################## les règles iptables
echo Réglage iptables-legacy
sudo / usr / sbin / iptables-legacy -t filtre -F
sudo / usr / sbin / iptables-legacy -t nat -F
sudo / usr / sbin / iptables-legacy -t mangle -F
sudo / usr / sbin / ip6tables-legacy -t filtre -F
sudo / usr / sbin / ip6tables-legacy -t nat -F
sudo / usr / sbin / ip6tables-legacy -t mangle -F
sudo / usr / sbin / ip6tables-legacy -A INPUT -j DROP
sudo / usr / sbin / ip6tables-legacy -A OUTPUT -j DROP
sudo / usr / sbin / ip6tables-legacy -A FORWARD -j DROP
sudo / usr / sbin / iptables-legacy -A INPUT -s 127.0.0.1 -d 127.0.0.1 -j ACCEPTER> / dev / null
$ haylogserver sudo / usr / sbin / iptables-legacy -A INPUT -p tcp -m multiport –dports $ logserver -j LOG> / dev / null
$ il y a des exceptions sudo / usr / sbin / iptables-legacy -A INPUT -s $ exceptions -j ACCEPT> / dev / null
$ activer le serveur sudo / usr / sbin / iptables-legacy -A INPUT -p udp -m multiport –dports $ serverudp -s $ redserver -d $ redserver -j ACCEPT> / dev / null
$ activer le serveur sudo / usr / sbin / iptables-legacy -A INPUT -p tcp -m multiport –dports $ serverrtcp -s $ redserver -d $ redserver -j ACCEPT> / dev / null
$ activateclient sudo / usr / sbin / iptables-legacy -A INPUT -p udp -m multiport –sports $ clientudp -m état –état établi -s $ clientnet -d $ clientnet -j ACCEPTER> / dev / null
$ activateclient sudo / usr / sbin / iptables-legacy -A INPUT -p tcp -m multiport –sports $ clienttcp -m état –état établi -s $ clientnet -d $ clientnet -j ACCEPT> / dev / null
$ hayping sudo / usr / sbin / iptables-legacy -A INPUT -p icmp –icmp-type echo-reply -j ACCEPT> / dev / null
sudo / usr / sbin / iptables-legacy -A INPUT -j DROP> / dev / null
sudo / usr / sbin / iptables-legacy -A OUTPUT -s 127.0.0.1 -d 127.0.0.1 -j ACCEPTER> / dev / null
$ hayeexceptions sudo / usr / sbin / iptables-legacy -A OUTPUT -d $ exceptions -j ACCEPTER> / dev / null
$ activer le serveur sudo / usr / sbin / iptables-legacy -A OUTPUT -p udp -m multiport –sports $ serverudp -s $ redserver -d $ redserver -j ACCEPTER> / dev / null
$ activer le serveur sudo / usr / sbin / iptables-legacy -A OUTPUT -p tcp -m multiport –sports $ serverrtcp -s $ redserver -d $ redserver -j ACCEPTER> / dev / null
$ activateclient sudo / usr / sbin / iptables-legacy -A OUTPUT -p udp -m multiport –dports $ clientudp -s $ clientnet -d $ clientnet -j ACCEPT> / dev / null
$ activateclient sudo / usr / sbin / iptables-legacy -A OUTPUT -p tcp -m multiport –dports $ clienttcp -s $ clientnet -d $ clientnet -j ACCEPT> / dev / null
$ hayping sudo / usr / sbin / iptables-legacy -A OUTPUT -p icmp –icmp-type echo-request -j ACCEPT> / dev / null
sudo / usr / sbin / iptables-legacy -A OUTPUT -j DROP
sudo / usr / sbin / iptables-legacy -A FORWARD -j DROP
echo iptables-legacy activé
echo
echo Réglage iptables-nft
sudo / usr / sbin / iptables-nft -t filtre -F
sudo / usr / sbin / iptables-nft -t nat -F
sudo / usr / sbin / iptables-nft -t mangle -F
sudo / usr / sbin / ip6tables-nft -t filtre -F
sudo / usr / sbin / ip6tables-nft -t nat -F
sudo / usr / sbin / ip6tables-nft -t mangle -F
sudo / usr / sbin / ip6tables-nft -A INPUT -j DROP
sudo / usr / sbin / ip6tables-nft -A OUTPUT -j DROP
sudo / usr / sbin / ip6tables-nft -A FORWARD -j DROP
sudo / usr / sbin / iptables-nft -A INPUT -s 127.0.0.1 -d 127.0.0.1 -j ACCEPTER> / dev / null
$ haylogserver sudo / usr / sbin / iptables-nft -A INPUT -p tcp -m multiport –dports $ logserver -j LOG> / dev / null
$ hayeexceptions sudo / usr / sbin / iptables-nft -A INPUT -s $ exceptions -j ACCEPTER> / dev / null
$ activer le serveur sudo / usr / sbin / iptables-nft -A INPUT -p udp -m multiport –dports $ serverudp -s $ redserver -d $ redserver -j ACCEPTER> / dev / null
$ activer le serveur sudo / usr / sbin / iptables-nft -A INPUT -p tcp -m multiport –dports $ serverrtcp -s $ redserver -d $ redserver -j ACCEPTER> / dev / null
$ activateclient sudo / usr / sbin / iptables-nft -A INPUT -p udp -m multiport –sports $ clientudp -m état –état établi -s $ clientnet -d $ clientnet -j ACCEPTER> / dev / null
$ activateclient sudo / usr / sbin / iptables-nft -A INPUT -p tcp -m multiport –sports $ clienttcp -m état –état établi -s $ clientnet -d $ clientnet -j ACCEPTER> / dev / null
$ hayping sudo / usr / sbin / iptables-nft -A INPUT -p icmp –icmp-type echo-reply -j ACCEPT> / dev / null
sudo / usr / sbin / iptables-nft -A INPUT -j DROP> / dev / null
sudo / usr / sbin / iptables-nft -A OUTPUT -s 127.0.0.1 -d 127.0.0.1 -j ACCEPTER> / dev / null
$ il y a des exceptions sudo / usr / sbin / iptables-nft -A OUTPUT -d $ exceptions -j ACCEPTER> / dev / null
$ activer sudo server / usr / sbin / iptables-nft -A OUTPUT -p udp -m multiport –sports $ serverudp -s $ redserver -d $ redserver -j ACCEPTER> / dev / null
$ activer le serveur sudo / usr / sbin / iptables-nft -A OUTPUT -p tcp -m multiport –sports $ serverrtcp -s $ redserver -d $ redserver -j ACCEPTER> / dev / null
$ activateclient sudo / usr / sbin / iptables-nft -A OUTPUT -p udp -m multiport –dports $ clientudp -s $ clientnet -d $ clientnet -j ACCEPT> / dev / null
$ activateclient sudo / usr / sbin / iptables-nft -A OUTPUT -p tcp -m multiport –dports $ clienttcp -s $ clientnet -d $ clientnet -j ACCEPT> / dev / null
$ hayping sudo / usr / sbin / iptables-nft -A OUTPUT -p icmp –icmp-type echo-request -j ACCEPT> / dev / null
sudo / usr / sbin / iptables-nft -A OUTPUT -j DROP
sudo / usr / sbin / iptables-nft -A FORWARD -j DROP
echo iptables-nft activé
echo
$ sudo humide / usr / sbin / iptables-legacy -F> / dev / null
$ wet sudo / usr / sbin / iptables-legacy -A INPUT -s 127.0.0.1 -d 127.0.0.1 -j ACCEPT> / dev / null
$ wet sudo / usr / sbin / iptables-legacy -A INPUT -m state –state établi -j ACCEPT> / dev / null
$ wet sudo / usr / sbin / iptables-legacy -A INPUT -j DROP> / dev / null
$ wet sudo / usr / sbin / iptables-legacy -A OUTPUT -j ACCEPT> / dev / null
$ wet sudo / usr / sbin / iptables-legacy -A FORWARD -j DROP> / dev / null
$ sudo humide / usr / sbin / iptables-nft -F> / dev / null
$ wet sudo / usr / sbin / iptables-nft -A INPUT -s 127.0.0.1 -d 127.0.0.1 -j ACCEPT> / dev / null
$ wet sudo / usr / sbin / iptables-nft -A INPUT -m state –state établi -j ACCEPT> / dev / null
$ wet sudo / usr / sbin / iptables-nft -A INPUT -j DROP> / dev / null
$ wet sudo / usr / sbin / iptables-nft -A OUTPUT -j ACCEPT> / dev / null
$ wet sudo / usr / sbin / iptables-nft -A FORWARD -j DROP> / dev / null
#########################
echo vous avez jeté $ 0 $ 1 $ 2
# quitte le script
sortie 0
Comment définirais-je une règle si ce pare-feu l'utilisait pour ma passerelle et avait un calmar dans le LAN ???