Par exemple pf moi la syntaxe me rentre pas dans la tête. Je sais que le but c'est que ça ressemble à du langage naturel, mais je sais pas si c'est que mon niveau en anglais est pourri ou si c'est une sorte de vallée de l'étrange.
Ben je ne sais pas pourquoi tu n'accroches pas mais honnetement, j'ai essayé IPFilter (puis Packet Filter plus tard), et honnetement je ne reviendrai jamais à IPTable ou dérivés. Mais comme tu le dis c'est peut-être un problème avec l'anglais ... D'ailleurs un exemple pour s'en convaincre.
Le code Packet Filter :
# Macros
int_if="rl0"
ports_ouverts_pour_tous="{ http https }"
ports_ouverts_pour_lequipe="{ ssh 21 60000:60100 }"
# Tables
table <ip_de_lequipe> { XYZ.XYZ.XYZ.XYZ, XYZ.XYZ.XYZ.XYZ, XYZ.XYZ.XYZ.XYZ }
# Normalisation du trafic
scrub in no-df
# NAT
nat on egress -> (egress)
# Règles de filtrage
block in
pass out keep state
pass in on egress proto tcp from <ip_de_lequipe> to port $ports_ouverts_pour_lequipe
pass in on egress proto tcp to port $ports_ouverts_pour_tous
block in quick on $int_if proto tcp from $int_if:network to port 4662
pass quick on !egress
La même chose en iptable (issu de chatgpt donc à prendre avec des pincettes) :
#!/bin/sh
set -eu
int_if="rl0"
egress_if="eth0"
int_net="192.168.1.0/24"
ip1="XYZ.XYZ.XYZ.XYZ"
ip2="XYZ.XYZ.XYZ.XYZ"
ip3="XYZ.XYZ.XYZ.XYZ"
iptables -F
iptables -X
iptables -t nat -F
iptables -t nat -X
iptables -t mangle -F
iptables -t mangle -X
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT
iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -i lo -j ACCEPT
# Différence avec "scrub in no-df" : iptables n'a pas d'équivalent direct ; TCPMSS ne traite que le MSS TCP sur les paquets SYN routés.
iptables -t mangle -A FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu
iptables -t nat -A POSTROUTING -o "$egress_if" -j MASQUERADE
iptables -A INPUT -i "$int_if" -s "$int_net" -p tcp --dport 4662 -j DROP
iptables -A FORWARD -i "$int_if" -s "$int_net" -p tcp --dport 4662 -j DROP
iptables -A INPUT -i "$int_if" -j ACCEPT
iptables -A FORWARD -i "$int_if" -j ACCEPT
iptables -A INPUT -i "$egress_if" -p tcp -s "$ip1" -m multiport --dports 22,21,60000:60100 -j ACCEPT
iptables -A INPUT -i "$egress_if" -p tcp -s "$ip2" -m multiport --dports 22,21,60000:60100 -j ACCEPT
iptables -A INPUT -i "$egress_if" -p tcp -s "$ip3" -m multiport --dports 22,21,60000:60100 -j ACCEPT
iptables -A INPUT -i "$egress_if" -p tcp -m multiport --dports 80,443 -j ACCEPT
Avec nftables (toujours issu de chatgpt pour être transparent) :
#!/usr/sbin/nft -f
flush ruleset
define int_if = "rl0"
define egress_if = "eth0"
define int_net = 192.168.1.0/24
table inet firewall {
set ip_de_lequipe {
type ipv4_addr
elements = { 198.51.100.10, 198.51.100.11, 198.51.100.12 }
}
set ports_ouverts_pour_tous {
type inet_service
elements = { 80, 443 }
}
set ports_ouverts_pour_lequipe {
type inet_service
flags interval
elements = { 22, 21, 60000-60100 }
}
chain input {
type filter hook input priority filter; policy drop;
ct state established,related accept
iifname "lo" accept
iifname $int_if ip saddr $int_net tcp dport 4662 drop
iifname != $egress_if accept
iifname $egress_if ip saddr @ip_de_lequipe tcp dport @ports_ouverts_pour_lequipe accept
iifname $egress_if tcp dport @ports_ouverts_pour_tous accept
}
chain forward {
type filter hook forward priority filter; policy drop;
ct state established,related accept
iifname $int_if ip saddr $int_net tcp dport 4662 drop
iifname != $egress_if accept
iifname $egress_if ip saddr @ip_de_lequipe tcp dport @ports_ouverts_pour_lequipe accept
iifname $egress_if tcp dport @ports_ouverts_pour_tous accept
}
chain output {
type filter hook output priority filter; policy accept;
}
}
table ip nat {
chain postrouting {
type nat hook postrouting priority srcnat; policy accept;
oifname $egress_if masquerade
}
}
table inet mangle {
chain forward {
type filter hook forward priority mangle; policy accept;
# Différence avec "scrub in no-df" : nftables n'a pas d'équivalent direct complet ; cette règle ne traite que l'ajustement MSS TCP, pas la normalisation PF ni le retrait global du bit DF.
tcp flags syn tcp option maxseg size set rt mtu
}
}
Pour ma part je trouve que Packet Filter reste bien plus lisible et compréhensible que IPTable ou NFtable.
[^] # Re: Alternative à Linux ?
Posté par totof2000 . En réponse à la dépêche Sortie de la 60e version d’OpenBSD. Évalué à 6 (+4/-0).
Ben je ne sais pas pourquoi tu n'accroches pas mais honnetement, j'ai essayé IPFilter (puis Packet Filter plus tard), et honnetement je ne reviendrai jamais à IPTable ou dérivés. Mais comme tu le dis c'est peut-être un problème avec l'anglais ... D'ailleurs un exemple pour s'en convaincre.
Le code Packet Filter :
La même chose en iptable (issu de chatgpt donc à prendre avec des pincettes) :
Avec nftables (toujours issu de chatgpt pour être transparent) :
Pour ma part je trouve que Packet Filter reste bien plus lisible et compréhensible que IPTable ou NFtable.