|
|
@ -12,7 +12,7 @@ |
|
|
|
export LC_ALL=C |
|
|
|
export PATH="/usr/sbin:/usr/bin:/sbin:/bin" |
|
|
|
set -o pipefail |
|
|
|
ban_ver="0.7.5" |
|
|
|
ban_ver="0.7.6" |
|
|
|
ban_enabled="0" |
|
|
|
ban_mail_enabled="0" |
|
|
|
ban_proto4_enabled="0" |
|
|
@ -536,102 +536,90 @@ f_iptrule() |
|
|
|
# |
|
|
|
f_iptables() |
|
|
|
{ |
|
|
|
local destroy="${1}" dev |
|
|
|
local ipt_cmd chain chainsets dev pos timeout="-w 5" destroy="${1}" |
|
|
|
|
|
|
|
if [ "${ban_action}" != "refresh" ] && [ "${ban_action}" != "resume" ] |
|
|
|
then |
|
|
|
for dev in ${ban_ipdevs} |
|
|
|
do |
|
|
|
if [ "${src_name}" = "maclist" ] |
|
|
|
if [ ! -f "${ban_tmpfile}.${src_name}.delete" ] |
|
|
|
then |
|
|
|
f_iptrule "-D" "${ban_chain}" "-o ${dev} -m conntrack --ctstate NEW -m set --match-set ${src_name} src -j RETURN" |
|
|
|
elif [ "${src_name%_*}" = "whitelist" ] |
|
|
|
then |
|
|
|
f_iptrule "-D" "${ban_chain}" "-i ${dev} -m conntrack --ctstate NEW -m set --match-set ${src_name} src -j RETURN" |
|
|
|
f_iptrule "-D" "${ban_chain}" "-o ${dev} -m conntrack --ctstate NEW -m set --match-set ${src_name} dst -j RETURN" |
|
|
|
else |
|
|
|
f_iptrule "-D" "${ban_chain}" "-i ${dev} -m conntrack --ctstate NEW -m set --match-set ${src_name} src -j ${ban_logtarget_src}" |
|
|
|
f_iptrule "-D" "${ban_chain}" "-o ${dev} -m conntrack --ctstate NEW -m set --match-set ${src_name} dst -j ${ban_logtarget_dst}" |
|
|
|
f_iptrule "-D" "${ban_chain}" "-i ${dev} -m conntrack --ctstate NEW -m set --match-set ${src_name} src -j ${ban_logchain_src}" |
|
|
|
f_iptrule "-D" "${ban_chain}" "-o ${dev} -m conntrack --ctstate NEW -m set --match-set ${src_name} dst -j ${ban_logchain_dst}" |
|
|
|
> "${ban_tmpfile}.${src_name}.delete" |
|
|
|
if [ "${src_name}" = "maclist" ] |
|
|
|
then |
|
|
|
f_iptrule "-D" "${ban_chain}" "-o ${dev} -m set --match-set ${src_name} src -j RETURN" |
|
|
|
elif [ "${src_name%_*}" = "whitelist" ] |
|
|
|
then |
|
|
|
f_iptrule "-D" "${ban_chain}" "-i ${dev} -m set --match-set ${src_name} src -j RETURN" |
|
|
|
f_iptrule "-D" "${ban_chain}" "-o ${dev} -m set --match-set ${src_name} dst -j RETURN" |
|
|
|
else |
|
|
|
f_iptrule "-D" "${ban_chain}" "-i ${dev} -m set --match-set ${src_name} src -j ${ban_logtarget_src}" |
|
|
|
f_iptrule "-D" "${ban_chain}" "-o ${dev} -m set --match-set ${src_name} dst -j ${ban_logtarget_dst}" |
|
|
|
f_iptrule "-D" "${ban_chain}" "-i ${dev} -m set --match-set ${src_name} src -j ${ban_logchain_src}" |
|
|
|
f_iptrule "-D" "${ban_chain}" "-o ${dev} -m set --match-set ${src_name} dst -j ${ban_logchain_dst}" |
|
|
|
fi |
|
|
|
fi |
|
|
|
done |
|
|
|
fi |
|
|
|
if [ -z "${destroy}" ] && { [ "${cnt}" -gt "0" ] || [ "${src_name%_*}" = "blacklist" ] || [ "${src_name%_*}" = "whitelist" ]; } |
|
|
|
then |
|
|
|
if [ "${src_settype}" != "dst" ] |
|
|
|
if [ "${src_name##*_}" = "4" ] |
|
|
|
then |
|
|
|
if [ "${src_name##*_}" = "4" ] |
|
|
|
ipt_cmd="${ban_ipt4_cmd}" |
|
|
|
if [ ! -f "${ban_tmpfile}.${src_name##*_}.chains" ] |
|
|
|
then |
|
|
|
for chain in ${ban_wan_inputchains_4} |
|
|
|
do |
|
|
|
f_iptrule "-I" "${chain}" "-j ${ban_chain}" |
|
|
|
done |
|
|
|
for chain in ${ban_wan_forwardchains_4} |
|
|
|
> "${ban_tmpfile}.${src_name##*_}.chains" |
|
|
|
chainsets="${ban_lan_inputchains_4} ${ban_wan_inputchains_4} ${ban_lan_forwardchains_4} ${ban_wan_forwardchains_4}" |
|
|
|
for chain in ${chainsets} |
|
|
|
do |
|
|
|
f_iptrule "-I" "${chain}" "-j ${ban_chain}" |
|
|
|
done |
|
|
|
f_iptrule "-A" "${ban_chain}" "-p udp --dport 67:68 --sport 67:68 -j RETURN" |
|
|
|
elif [ "${src_name##*_}" = "6" ] |
|
|
|
f_iptrule "-A" "${ban_chain}" "-m conntrack ! --ctstate NEW -j RETURN" |
|
|
|
fi |
|
|
|
elif [ "${src_name##*_}" = "6" ] |
|
|
|
then |
|
|
|
ipt_cmd="${ban_ipt6_cmd}" |
|
|
|
if [ ! -f "${ban_tmpfile}.${src_name##*_}.chains" ] |
|
|
|
then |
|
|
|
for chain in ${ban_wan_inputchains_6} |
|
|
|
do |
|
|
|
f_iptrule "-I" "${chain}" "-j ${ban_chain}" |
|
|
|
done |
|
|
|
for chain in ${ban_wan_forwardchains_6} |
|
|
|
> "${ban_tmpfile}.${src_name##*_}.chains" |
|
|
|
chainsets="${ban_lan_inputchains_6} ${ban_wan_inputchains_6} ${ban_lan_forwardchains_6} ${ban_wan_forwardchains_6}" |
|
|
|
for chain in ${chainsets} |
|
|
|
do |
|
|
|
f_iptrule "-I" "${chain}" "-j ${ban_chain}" |
|
|
|
done |
|
|
|
f_iptrule "-A" "${ban_chain}" "-p ipv6-icmp -s fe80::/10 -d fe80::/10 -j RETURN" |
|
|
|
f_iptrule "-A" "${ban_chain}" "-p udp -s fc00::/6 --sport 547 -d fc00::/6 --dport 546 -j RETURN" |
|
|
|
f_iptrule "-A" "${ban_chain}" "-m conntrack ! --ctstate NEW -j RETURN" |
|
|
|
fi |
|
|
|
fi |
|
|
|
if [ "${src_settype}" != "dst" ] |
|
|
|
then |
|
|
|
for dev in ${ban_devs} |
|
|
|
do |
|
|
|
if [ "${src_name}" = "maclist" ] |
|
|
|
then |
|
|
|
f_iptrule "-I" "${ban_chain}" "-o ${dev} -m conntrack --ctstate NEW -m set --match-set ${src_name} src -j RETURN" "1" |
|
|
|
f_iptrule "-I" "${ban_chain}" "-o ${dev} -m set --match-set ${src_name} src -j RETURN" "1" |
|
|
|
elif [ "${src_name%_*}" = "whitelist" ] |
|
|
|
then |
|
|
|
f_iptrule "-I" "${ban_chain}" "-i ${dev} -m conntrack --ctstate NEW -m set --match-set ${src_name} src -j RETURN" "2" |
|
|
|
pos="$(( $("${ipt_cmd}" "${timeout}" -vnL "${ban_chain}" --line-numbers | grep -cF "RETURN")+1))" |
|
|
|
f_iptrule "-I" "${ban_chain}" "-i ${dev} -m set --match-set ${src_name} src -j RETURN" "${pos}" |
|
|
|
else |
|
|
|
f_iptrule "${action:-"-A"}" "${ban_chain}" "-i ${dev} -m conntrack --ctstate NEW -m set --match-set ${src_name} src -j ${ban_target_src}" |
|
|
|
f_iptrule "${action:-"-A"}" "${ban_chain}" "-i ${dev} -m set --match-set ${src_name} src -j ${ban_target_src}" |
|
|
|
fi |
|
|
|
done |
|
|
|
fi |
|
|
|
if [ "${src_settype}" != "src" ] |
|
|
|
then |
|
|
|
if [ "${src_name##*_}" = "4" ] |
|
|
|
then |
|
|
|
for chain in ${ban_lan_inputchains_4} |
|
|
|
do |
|
|
|
f_iptrule "-I" "${chain}" "-j ${ban_chain}" |
|
|
|
done |
|
|
|
for chain in ${ban_lan_forwardchains_4} |
|
|
|
do |
|
|
|
f_iptrule "-I" "${chain}" "-j ${ban_chain}" |
|
|
|
done |
|
|
|
f_iptrule "-A" "${ban_chain}" "-p udp --dport 67:68 --sport 67:68 -j RETURN" |
|
|
|
elif [ "${src_name##*_}" = "6" ] |
|
|
|
then |
|
|
|
for chain in ${ban_lan_inputchains_6} |
|
|
|
do |
|
|
|
f_iptrule "-I" "${chain}" "-j ${ban_chain}" |
|
|
|
done |
|
|
|
for chain in ${ban_lan_forwardchains_6} |
|
|
|
do |
|
|
|
f_iptrule "-I" "${chain}" "-j ${ban_chain}" |
|
|
|
done |
|
|
|
f_iptrule "-A" "${ban_chain}" "-p ipv6-icmp -s fe80::/10 -d fe80::/10 -j RETURN" |
|
|
|
f_iptrule "-A" "${ban_chain}" "-p udp -s fc00::/6 --sport 547 -d fc00::/6 --dport 546 -j RETURN" |
|
|
|
fi |
|
|
|
for dev in ${ban_devs} |
|
|
|
do |
|
|
|
if [ "${src_name%_*}" = "whitelist" ] |
|
|
|
then |
|
|
|
f_iptrule "-I" "${ban_chain}" "-o ${dev} -m conntrack --ctstate NEW -m set --match-set ${src_name} dst -j RETURN" "3" |
|
|
|
pos="$(( $("${ipt_cmd}" "${timeout}" -vnL "${ban_chain}" --line-numbers | grep -cF "RETURN")+1))" |
|
|
|
f_iptrule "-I" "${ban_chain}" "-o ${dev} -m set --match-set ${src_name} dst -j RETURN" "${pos}" |
|
|
|
elif [ "${src_name}" != "maclist" ] |
|
|
|
then |
|
|
|
f_iptrule "${action:-"-A"}" "${ban_chain}" "-o ${dev} -m conntrack --ctstate NEW -m set --match-set ${src_name} dst -j ${ban_target_dst}" |
|
|
|
f_iptrule "${action:-"-A"}" "${ban_chain}" "-o ${dev} -m set --match-set ${src_name} dst -j ${ban_target_dst}" |
|
|
|
fi |
|
|
|
done |
|
|
|
fi |
|
|
|