1 votes

Demande d'aide avec iptables

Tout d'abord, je voudrais demander pourquoi mon rules.v4 a l'air si compliqué après utilisation : iptables -F . Je pensais qu'il serait vide après la chasse d'eau :

# Generated by iptables-save v1.6.0 on Tue Jan  9 21:25:13 2018
*filter
:INPUT ACCEPT [76:4024]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [1:40]
:ufw-after-forward - [0:0]
:ufw-after-input - [0:0]
:ufw-after-logging-forward - [0:0]
:ufw-after-logging-input - [0:0]
:ufw-after-logging-output - [0:0]
:ufw-after-output - [0:0]
:ufw-before-forward - [0:0]
:ufw-before-input - [0:0]
:ufw-before-logging-forward - [0:0]
:ufw-before-logging-input - [0:0]
:ufw-before-logging-output - [0:0]
:ufw-before-output - [0:0]
:ufw-logging-allow - [0:0]
:ufw-logging-deny - [0:0]
:ufw-not-local - [0:0]
:ufw-reject-forward - [0:0]
:ufw-reject-input - [0:0]
:ufw-reject-output - [0:0]
:ufw-skip-to-policy-forward - [0:0]
:ufw-skip-to-policy-input - [0:0]
:ufw-skip-to-policy-output - [0:0]
:ufw-track-forward - [0:0]
:ufw-track-input - [0:0]
:ufw-track-output - [0:0]
:ufw-user-forward - [0:0]
:ufw-user-input - [0:0]
:ufw-user-limit - [0:0]
:ufw-user-limit-accept - [0:0]
:ufw-user-logging-forward - [0:0]
:ufw-user-logging-input - [0:0]
:ufw-user-logging-output - [0:0]
:ufw-user-output - [0:0]
-A INPUT -i enp3s0 -p udp -m udp --dport 67 -j ACCEPT
-A INPUT -i enp3s0 -p tcp -m tcp --dport 67 -j ACCEPT
-A INPUT -i enp3s0 -p udp -m udp --dport 53 -j ACCEPT
-A INPUT -i enp3s0 -p tcp -m tcp --dport 53 -j ACCEPT
-A INPUT -i enp2s0 -p udp -m udp --dport 67 -j ACCEPT
-A INPUT -i enp2s0 -p tcp -m tcp --dport 67 -j ACCEPT
-A INPUT -i enp2s0 -p udp -m udp --dport 53 -j ACCEPT
-A INPUT -i enp2s0 -p tcp -m tcp --dport 53 -j ACCEPT
-A INPUT -j ufw-before-logging-input
-A INPUT -j ufw-before-input
-A INPUT -j ufw-after-input
-A INPUT -j ufw-after-logging-input
-A INPUT -j ufw-reject-input
-A INPUT -j ufw-track-input
-A FORWARD -d 10.42.0.0/24 -o enp3s0 -m state --state RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -s 10.42.0.0/24 -i enp3s0 -j ACCEPT
-A FORWARD -i enp3s0 -o enp3s0 -j ACCEPT
-A FORWARD -o enp3s0 -j REJECT --reject-with icmp-port-unreachable
-A FORWARD -i enp3s0 -j REJECT --reject-with icmp-port-unreachable
-A FORWARD -d 10.42.1.0/24 -o enp2s0 -m state --state RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -s 10.42.1.0/24 -i enp2s0 -j ACCEPT
-A FORWARD -i enp2s0 -o enp2s0 -j ACCEPT
-A FORWARD -o enp2s0 -j REJECT --reject-with icmp-port-unreachable
-A FORWARD -i enp2s0 -j REJECT --reject-with icmp-port-unreachable
-A FORWARD -j ufw-before-logging-forward
-A FORWARD -j ufw-before-forward
-A FORWARD -j ufw-after-forward
-A FORWARD -j ufw-after-logging-forward
-A FORWARD -j ufw-reject-forward
-A FORWARD -j ufw-track-forward
-A OUTPUT -j ufw-before-logging-output
-A OUTPUT -j ufw-before-output
-A OUTPUT -j ufw-after-output
-A OUTPUT -j ufw-after-logging-output
-A OUTPUT -j ufw-reject-output
-A OUTPUT -j ufw-track-output
-A ufw-after-input -p udp -m udp --dport 137 -j ufw-skip-to-policy-input
-A ufw-after-input -p udp -m udp --dport 138 -j ufw-skip-to-policy-input
-A ufw-after-input -p tcp -m tcp --dport 139 -j ufw-skip-to-policy-input
-A ufw-after-input -p tcp -m tcp --dport 445 -j ufw-skip-to-policy-input
-A ufw-after-input -p udp -m udp --dport 67 -j ufw-skip-to-policy-input
-A ufw-after-input -p udp -m udp --dport 68 -j ufw-skip-to-policy-input
-A ufw-after-input -m addrtype --dst-type BROADCAST -j ufw-skip-to-policy-input
-A ufw-after-logging-forward -m limit --limit 3/min --limit-burst 10 -j LOG --log-prefix "[UFW BLOCK] "
-A ufw-after-logging-input -m limit --limit 3/min --limit-burst 10 -j LOG --log-prefix "[UFW BLOCK] "
-A ufw-before-forward -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A ufw-before-forward -p icmp -m icmp --icmp-type 3 -j ACCEPT
-A ufw-before-forward -p icmp -m icmp --icmp-type 4 -j ACCEPT
-A ufw-before-forward -p icmp -m icmp --icmp-type 11 -j ACCEPT
-A ufw-before-forward -p icmp -m icmp --icmp-type 12 -j ACCEPT
-A ufw-before-forward -p icmp -m icmp --icmp-type 8 -j ACCEPT
-A ufw-before-forward -j ufw-user-forward
-A ufw-before-input -i lo -j ACCEPT
-A ufw-before-input -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A ufw-before-input -m conntrack --ctstate INVALID -j ufw-logging-deny
-A ufw-before-input -m conntrack --ctstate INVALID -j DROP
-A ufw-before-input -p icmp -m icmp --icmp-type 3 -j ACCEPT
-A ufw-before-input -p icmp -m icmp --icmp-type 4 -j ACCEPT
-A ufw-before-input -p icmp -m icmp --icmp-type 11 -j ACCEPT
-A ufw-before-input -p icmp -m icmp --icmp-type 12 -j ACCEPT
-A ufw-before-input -p icmp -m icmp --icmp-type 8 -j ACCEPT
-A ufw-before-input -p udp -m udp --sport 67 --dport 68 -j ACCEPT
-A ufw-before-input -j ufw-not-local
-A ufw-before-input -d 224.0.0.251/32 -p udp -m udp --dport 5353 -j ACCEPT
-A ufw-before-input -d 239.255.255.250/32 -p udp -m udp --dport 1900 -j ACCEPT
-A ufw-before-input -j ufw-user-input
-A ufw-before-output -o lo -j ACCEPT
-A ufw-before-output -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A ufw-before-output -j ufw-user-output
-A ufw-logging-allow -m limit --limit 3/min --limit-burst 10 -j LOG --log-prefix "[UFW ALLOW] "
-A ufw-logging-deny -m conntrack --ctstate INVALID -m limit --limit 3/min --limit-burst 10 -j RETURN
-A ufw-logging-deny -m limit --limit 3/min --limit-burst 10 -j LOG --log-prefix "[UFW BLOCK] "
-A ufw-not-local -m addrtype --dst-type LOCAL -j RETURN
-A ufw-not-local -m addrtype --dst-type MULTICAST -j RETURN
-A ufw-not-local -m addrtype --dst-type BROADCAST -j RETURN
-A ufw-not-local -m limit --limit 3/min --limit-burst 10 -j ufw-logging-deny
-A ufw-not-local -j DROP
-A ufw-skip-to-policy-forward -j DROP
-A ufw-skip-to-policy-input -j DROP
-A ufw-skip-to-policy-output -j ACCEPT
-A ufw-track-output -p tcp -m conntrack --ctstate NEW -j ACCEPT
-A ufw-track-output -p udp -m conntrack --ctstate NEW -j ACCEPT
-A ufw-user-limit -m limit --limit 3/min -j LOG --log-prefix "[UFW LIMIT BLOCK] "
-A ufw-user-limit -j REJECT --reject-with icmp-port-unreachable
-A ufw-user-limit-accept -j ACCEPT
COMMIT
# Completed on Tue Jan  9 21:25:13 2018
# Generated by iptables-save v1.6.0 on Tue Jan  9 21:25:13 2018
*nat
:PREROUTING ACCEPT [306:30491]
:INPUT ACCEPT [79:4750]
:OUTPUT ACCEPT [128:10004]
:POSTROUTING ACCEPT [122:8932]
-A POSTROUTING -s 10.42.0.0/24 ! -d 10.42.0.0/24 -j MASQUERADE
-A POSTROUTING -s 10.42.1.0/24 ! -d 10.42.1.0/24 -j MASQUERADE
COMMIT
# Completed on Tue Jan  9 21:25:13 2018

Deuxième question - J'ai besoin iptables pour limiter le débit des nouvelles connexions sur un port spécifique (pas par IP, mais pour toutes les nouvelles tentatives s'il y en a trop), tout en ne bloquant pas le trafic qui n'arrive pas sur ce port spécifique. Tous les exemples que j'ai vus sur Internet utilisent DROP comme politique INPUT par défaut, mais cela ne me convient pas.

Mise à jour : Je fais tourner un serveur de jeu sur le port 45000 (il utilise le protocole tcp et upd)et récemment j'ai eu des problèmes de spam bot. Les robots essaient de se connecter à mon serveur depuis le monde entier en utilisant des centaines de proxys. Les plugins du serveur de jeu ont réussi à les bloquer, mais cette attaque est devenue beaucoup plus forte ces derniers temps et provoque maintenant des décalages. Idéalement, je voudrais bloquer l'accès à ce port en fonction de la géolocalisation et n'autoriser que 5 à 10 pays, mais c'est compliqué. Une autre option consiste à limiter le débit des nouvelles connexions à ce port tout en conservant les connexions existantes. Bien sûr, cela bloquera les joueurs normaux qui essaient de se joindre au jeu pendant l'attaque, mais au moins ceux qui jouent déjà peuvent le faire sans être extrêmement retardés. Mon serveur n'est pas très grand (30 joueurs maximum), donc je suppose que la limitation du taux à 30 nouvelles connexions au port 45000 par 30 secondes sera suffisante.

1voto

Panther Points 96601

Tous les éléments que vous avez postés sont dus au fait qu'à un moment donné, vous avez activé ufw, qui est une interface pour iptables, et créé toutes ces tables personnalisées.

L'option -F supprime les règles de certaines tables, mais pas toutes les règles de toutes les tables ni les chaînes vides que vous voyez.

Vous avez besoin de quelques options supplémentaires :

Desde https://serverfault.com/questions/200635/linux-iptables-best-way-to-clear-all-rules-leaving-anything-open le jeu complet de commandes pour réinitialiser iptables est :

iptables -P INPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -P OUTPUT ACCEPT
iptables -t nat -F
iptables -t mangle -F
iptables -F
iptables -X
  • L'option -P réinitialise la politique par défaut pour les tables.
  • L'option -t nat -F vide la table nat.
  • Le -t mangle -F vide mangle, qui n'est presque jamais utilisé.
  • -X supprime les chaînes vides.

Voir le lien pour IPv6 et le man iptables pour plus de détails.

Le "problème" est que l'option -F, sans spécifier une chaîne, n'évacue pas toutes les chaînes, dans votre cas vous avez quelques chaînes restantes créées par UFW.

Pour supprimer ces chaînes, vous devez d'abord les vider (-X ne les supprimera que si elles sont vides).

Ainsi, pour chaque chaîne, vous devez d'abord supprimer toute référence à la chaîne, vider la chaîne, puis la supprimer.

En commençant par "ufw-before-logging-forward".

sudo iptables -D FORWARD -j ufw-before-logging-forward
sudo iptables -F ufw-before-logging-forward
sudo iptables -X ufw-before-logging-forward

et ainsi de suite pour toutes les chaînes personnalisées que l'ufw a ajoutées.

Bien sûr, comme vous utilisez ufw, il existe une méthode beaucoup plus simple :

sudo ufw disable

Quelques commentaires généraux

  1. Je vous suggère de conserver la politique par défaut ACCEPT plutôt que REJECT ou DROP. Si vous définissez la politique par défaut sur REJECT/DROP, vous risquez de vous bloquer si vous exécutez la commande suivante iptables -F

  2. Si vous écrivez manuellement des règles iptables, n'utilisez pas ufw ou d'autres outils pour modifier vos règles.

  3. Je suggère fortement le REJECT plutôt que le DROP. Dans une Shell, DROP est plus gênant pour le trafic légitime et bien que cela semble agréable, DROP ne ralentit ni ne trompe aucun des outils de craquage modernes. Parce que votre système réagit à un paquet, les pirates savent que vous êtes opérationnel à votre adresse IP et DROP ne cache rien.

参照 http://www.chiark.greenend.org.uk/~peterb/network/drop-vs-reject pour les détails.

  1. Utiliser iptables-persistent

La meilleure réponse Comment sauvegarder les règles d'iptables ? examine l'utilisation de base, y compris la sauvegarde et la restauration de votre ensemble de règles. Consultez la page de manuel pour plus de détails.


Pour l'aide à la rédaction des règles, j'ai besoin de plus de détails, quel port et quel trafic voulez-vous limiter et comment. Limiter le ping est différent. Limiter un serveur web est différent de limiter les connexions ssh. Autoriser la plupart mais en limiter quelques-uns, c'est peut-être utiliser une liste noire. Limiter tout et en autoriser quelques-uns est une liste blanche, etc.

Exemples :

Trafic web - Je pourrais utiliser la syntaxe générale pour un serveur web s'il était très fréquenté :

iptables -I INPUT -p tcp -m state --state NEW -m limit --limit 30/minute --limit-burst 5 -j ACCEPT

Vous pouvez certainement ajouter l'option --dport 80 à la commande ci-dessus.

Cela limite à 30 connexions par minute, ce qui est très lent pour Apache. Si le serveur web n'était pas si occupé vous pouvez libéraliser jusqu'à des milliers de connexions / minute.

SSH - Ces règles sont très utiles pour bloquer les tentatives de force brute.

# This rule tracks incoming connections to port 22
iptables -A INPUT -p tcp -m tcp --dport 22 -m tcp -m state --state NEW -m recent --set --name SSH --rsource

# This command rejects any attempt to connect to ssh more than
# 8 times in 10 minutes
# After 10 minutes you can attempt again so not permanent ban
iptables -A INPUT -p tcp -m tcp --dport 22 -m recent --update --seconds 600 --hitcount 8 --rttl --name SSH --rsource -j REJECT --reject-with icmp-host-prohibited

# Finally this will accept the connections 
iptables -A INPUT -p tcp -m tcp --dport 22 -j ACCEPT

Si vous avez besoin d'une aide plus spécifique, veuillez mettre à jour votre question =)

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X