Pour que le service FTP puisse correctement fonctionner derrière un pare-feu restrictif, il faut mettre en place un dispositif particulier de suivi du protocole (un helper).
L' exemple de configuration ci-dessous utilise une politique restrictive pour les trafics entrants et sortants. On n'autorise le trafic FTP que vers certains serveurs identifiés.
table ip ipfilter {
ct helper ftp-standard {
type "ftp" protocol tcp
l3proto ip
}
chain inbound {
type filter hook input priority filter; policy drop;
ct state established,related counter accept
# Tout trafic entrant non explicitement autorisé est journalisé et rejeté
log prefix "[FW] [REJECT] [RID=666] " counter reject
}
chain outbound {
type filter hook output priority filter; policy drop;
# Accepte tout paquet en lien avec un trafic explicitement autorisé
ct state established,related counter accept
# Accepte le trafic FTP vers les serveurs de confiance (ici l' hote 19.168.33.10)
ct state new ip daddr 192.168.33.10 tcp dport 21 log prefix "[ACCEPT] " level notice counter accept
# Tout trafic sortant non explicitement autorisé est journalisé et rejetté
log prefix "[FW] [REJECT] [RID=667] " counter reject
}
chain POST {
type filter hook postrouting priority filter; policy accept;
# Le trafic sortant à destination du port 21 (FTP) est marqué et suivi
tcp dport 21 ct helper set "ftp-standard"
}
}