Quelle est la bonne façon d'ouvrir une plage de ports dans iptables

56

J'ai trouvé des articles sur les sujets suivants:

iptables -A INPUT -p tcp 1000:2000 -j ACCEPT

Et d'autres déclarant que ce qui précède ne fonctionnera pas et qu'iptables ne supporte que plusieurs déclarations de port avec l' --multiportoption.

Existe-t-il un moyen correct d'ouvrir de nombreux ports avec iptables?

Paul Whalley
la source
Question connexe: iptables et ports multiples
Cristian Ciupitu

Réponses:

60

C'est la bonne façon:

iptables -A INPUT -p tcp --match multiport --dports 1024:3000 -j ACCEPT

Par exemple. Source ici .

Nathan C
la source
5
Si vous ne connaissez pas l’état des règles, -Ic’est un peu plus sûr que -A.
user9517 prend en charge GoFundMonica
@Iain, pourriez-vous s'il vous plaît expliquer le raisonnement derrière cela?
Jayhendren
2
@jayhendren de nombreux jeux de règles auront une règle tout supprimer par défaut, par exemple -A INPUT -j REJECT --reject-with icmp-host-prohibitedà la fin de INPUT et d'autres tables. Utiliser -Aajoute la règle à la fin de la table, après la règle finale, pour que cela ne soit jamais considéré comme un netfilter qui fonctionne dès le premier match. L'utilisation -Iinsère la règle au début de la table et sera considérée comme telle.
user9517 prend en charge GoFundMonica
4
@Iain cependant, certains jeux de règles ont aussi au début des règles qui filtrent ou limitent les paquets, il est donc intéressant de souligner que ce -In'est pas toujours plus sûr si vous ne connaissez pas le jeu de règles.
Jayhendren
3
@ Jayhendren Je pense que vous venez de le faire et notez aussi que j'ai dit un peu pas toujours .
user9517 prend en charge GoFundMonica
54

Ce qui vous a été dit est juste, même si vous l’avez mal écrit (vous l’avez oublié --dport).

iptables -A INPUT -p tcp --dport 1000:2000 ouvrira le trafic entrant sur les ports TCP 1000 à 2000 inclus.

-m multiport --dportsn'est nécessaire que si la plage que vous souhaitez ouvrir n'est pas continue, par exemple -m multiport --dports 80,443, ce qui ouvrira uniquement HTTP et HTTPS - pas ceux entre les deux.

Notez que l'ordre des règles est important et (comme Iain le mentionne ailleurs dans son commentaire), il vous incombe de vous assurer que toute règle que vous ajoutez est à un endroit où elle sera efficace.

MadHatter soutient Monica
la source
1
Je pourrais faire allusion ici aussi si vous voulez;)
user9517 soutient GoFundMonica
1
Hé hé hé! Continuez, alors, le message mérite d'être répété!
MadHatter soutient Monica
2
C'est la bonne réponse. c'est plus complet.
Andrew Kozak
10

TL; DR mais ...

Plage de ports pure sans module multiport: iptables -A INPUT -p tcp --dport 1000:2000 -j ACCEPT

Exemple multiport équivalent: iptables -A INPUT -p tcp -m multiport --dports 1000:2000 -j ACCEPT

... et variation à propos du multi-port avec plusieurs gammes (oui, cela est également possible): iptables -A INPUT -p tcp -m multiport --dports 1000,1001,1002:1500,1501:2000 -j ACCEPT

... et exemple multi-plages multi-ports équivalentes avec négation: iptables -A INPUT -p tcp -m multiport ! --dports 0:999,2001:65535 -j ACCEPT

Avez-Phun.

BloodMan
la source
0

Selon man iptables-extensions, vous pouvez définir une plage de ports en utilisant simplement le commutateur --dport.

tcp
Ces extensions peuvent être utilisées si `--protocol tcp 'est spécifié. Il fournit les options suivantes:
[!] --Destination-port, - dport port [: port]

Spécification du port de destination ou de la plage de ports . Le drapeau --dport est un alias pratique pour cette option.

Donc, cela spécifie également une plage de ports:
iptables -A INPUT -p tcp 1000:2000 -j ACCEPT

starvis
la source