Use CT helper for ftp rules 'FTP out only'.

This commit is contained in:
Christoph 2019-02-24 17:25:12 +01:00
parent f4693f3426
commit 7a024c025e
2 changed files with 86 additions and 31 deletions

View File

@ -1226,23 +1226,38 @@ fi
echononl "\t\tFTP out only"
# - (Re)define helper
# -
$ip6t -A OUTPUT -t raw -p tcp --dport 21 -j CT --helper ftp
for _dev in ${ext_if_arr[@]} ; do
# (Datenkanal aktiv)
$ip6t -A INPUT -i $_dev -p tcp --sport 20 -m state --state NEW -j ACCEPT
# (Datenkanal passiv)
$ip6t -A OUTPUT -o $_dev -p tcp --sport $unprivports --dport $unprivports -m state --state NEW -j ACCEPT
# (Kontrollverbindung)
# - Open FTP connection
$ip6t -A OUTPUT -o $_dev -p tcp --dport 21 -m state --state NEW -j ACCEPT
if $kernel_forward_between_interfaces ; then
# (Datenkanal aktiv)
$ip6t -A FORWARD -i $_dev -p tcp --sport 20 -m state --state NEW -j ACCEPT
# (Datenkanal passiv)
$ip6t -A FORWARD -o $_dev -p tcp --sport $unprivports --dport $unprivports -m state --state NEW -j ACCEPT
# (Kontrollverbindung)
$ip6t -A FORWARD -o $_dev -p tcp --dport 21 -m state --state NEW -j ACCEPT
fi
#
# - Accept (helper ftp) related connections
# -
$ip6t -A OUTPUT -m conntrack --ctstate RELATED -m helper --helper ftp -o $_dev -p tcp --dport 1024: -j ACCEPT
$ip6t -A INPUT -m conntrack --ctstate RELATED -m helper --helper ftp -i $_dev -p tcp --dport 1024: -j ACCEPT
done
#for _dev in ${ext_if_arr[@]} ; do
# # (Datenkanal aktiv)
# $ip6t -A INPUT -i $_dev -p tcp --sport 20 -m state --state NEW -j ACCEPT
# # (Datenkanal passiv)
# $ip6t -A OUTPUT -o $_dev -p tcp --sport $unprivports --dport $unprivports -m state --state NEW -j ACCEPT
# # (Kontrollverbindung)
# $ip6t -A OUTPUT -o $_dev -p tcp --dport 21 -m state --state NEW -j ACCEPT
# if $kernel_forward_between_interfaces ; then
# # (Datenkanal aktiv)
# $ip6t -A FORWARD -i $_dev -p tcp --sport 20 -m state --state NEW -j ACCEPT
# # (Datenkanal passiv)
# $ip6t -A FORWARD -o $_dev -p tcp --sport $unprivports --dport $unprivports -m state --state NEW -j ACCEPT
# # (Kontrollverbindung)
# $ip6t -A FORWARD -o $_dev -p tcp --dport 21 -m state --state NEW -j ACCEPT
# fi
#done
echo_done

View File

@ -34,12 +34,36 @@ if ! $host_is_vm ; then
# - net.netfilter.nf_conntrack_helper = 1
# -
# - Reboot or type "sysctl -p"
# -
# - !! But this is NOT the recommend method !!
## - Load module for FTP Connection tracking and NAT
## -
/sbin/modprobe ip_conntrack > /dev/null 2>&1
/sbin/modprobe ip_conntrack_ftp > /dev/null 2>&1
/sbin/modprobe ip_nat_ftp > /dev/null 2>&1
# ---
# - Load module for FTP Connection tracking and NAT
# ---
# - Once a helper is loaded, it will treat packets for a given port and all IP addresses.
# - As explained before, this is not optimal and is even a security risk. A better
# - solution is to load the module helper and deactivate their parsing by default. Each
# - helper we need to use is then set by using a call to the CT target.
# -
# - Desactivate the automatic conntrack helper assignment:
# -
# - method 1: modprobe nf_conntrack nf_conntrack_helper=0
# - method 2: echo 0 > /proc/sys/net/netfilter/nf_conntrack_helper
# -
# - Note:
# - =====
# - Each helper we need to use is then set by using a call to the CT target.
# - Example for ftp helper on standardport:
# -
# - ipt -A OUTPUT -t raw -p tcp --dport 21 -j CT --helper ftp
# -
/sbin/modprobe nf_conntrack nf_conntrack_helper=0 > /dev/null 2>&1
#echo 0 > /proc/sys/net/netfilter/nf_conntrack_helper
/sbin/modprobe nf_conntrack_ftp > /dev/null 2>&1
/sbin/modprobe nf_nat > /dev/null 2>&1
/sbin/modprobe nf_nat_ftp > /dev/null 2>&1
## - Load modules for SIP VOIP
## -
@ -1486,23 +1510,39 @@ fi
echononl "\t\tFTP out only"
# - (Re)define helper
# -
$ipt -A OUTPUT -t raw -p tcp --dport 21 -j CT --helper ftp
for _dev in ${ext_if_arr[@]} ; do
# (Datenkanal aktiv)
$ipt -A INPUT -i $_dev -p tcp --sport 20 -m state --state NEW -j ACCEPT
# (Datenkanal passiv)
$ipt -A OUTPUT -o $_dev -p tcp --sport $unprivports --dport $unprivports -m state --state NEW -j ACCEPT
# (Kontrollverbindung)
# - Open FTP connection
$ipt -A OUTPUT -o $_dev -p tcp --dport 21 -m state --state NEW -j ACCEPT
if $kernel_activate_forwarding ; then
# (Datenkanal aktiv)
$ipt -A FORWARD -i $_dev -p tcp --sport 20 -m state --state NEW -j ACCEPT
# (Datenkanal passiv)
$ipt -A FORWARD -o $_dev -p tcp --sport $unprivports --dport $unprivports -m state --state NEW -j ACCEPT
# (Kontrollverbindung)
$ipt -A FORWARD -o $_dev -p tcp --dport 21 -m state --state NEW -j ACCEPT
fi
#
# - Accept (helper ftp) related connections
# -
$ipt -A OUTPUT -m conntrack --ctstate RELATED -m helper --helper ftp -o $_dev -p tcp --dport 1024: -j ACCEPT
$ipt -A INPUT -m conntrack --ctstate RELATED -m helper --helper ftp -i $_dev -p tcp --dport 1024: -j ACCEPT
done
#for _dev in ${ext_if_arr[@]} ; do
# # (Datenkanal aktiv)
# $ipt -A INPUT -i $_dev -p tcp --sport 20 -m state --state NEW -j ACCEPT
# # (Datenkanal passiv)
# $ipt -A OUTPUT -o $_dev -p tcp --sport $unprivports --dport $unprivports -m state --state NEW -j ACCEPT
# # (Kontrollverbindung)
# $ipt -A OUTPUT -o $_dev -p tcp --dport 21 -m state --state NEW -j ACCEPT
# if $kernel_activate_forwarding ; then
# # (Datenkanal aktiv)
# $ipt -A FORWARD -i $_dev -p tcp --sport 20 -m state --state NEW -j ACCEPT
# # (Datenkanal passiv)
# $ipt -A FORWARD -o $_dev -p tcp --sport $unprivports --dport $unprivports -m state --state NEW -j ACCEPT
# # (Kontrollverbindung)
# $ipt -A FORWARD -o $_dev -p tcp --dport 21 -m state --state NEW -j ACCEPT
# fi
#done
echo_done