Я пытаюсь написать сценарий iptables sh, который позже я могу обновить из одного места для всех моих серверов. Пока у меня это работает.
я получаю эту ошибку
Bad argument `LOG'
Try `iptables -h' or 'iptables --help' for more information.
сначала я протираю некоторые настройки по умолчанию iptables-restore /etc/iptables.conf
затем загрузите файл диапазонов IP-адресов или только отдельных IP-адресов
_input=/root/firewall/badips.db
_pub_if="eth0"
IPT=/sbin/iptables
$IPT -A INPUT -i lo -j ACCEPT
$IPT -A OUTPUT -o lo -j ACCEPT
egrep -v "^#|^$" x | while IFS= read -r ip
do
$IPT -A INPUT -i ${_pub_if} -s $ip -j LOG --log-prefix " Drop BadIP "
done <"${_input}"
$IPT -I INPUTlist
$IPT -I OUTPUTlist
$IPT -I FORWARDlist
$IPT -A INPUT -i ${_pub_if} -p icmp --icmp-type 8 -m state --state NEW,ESTABLISHED,RELATED -m limit --limit 30/sec -j ACCEPT
$IPT -A INPUT -i ${_pub_if} -p icmp -m icmp --icmp-type 3 -m limit --limit 30/sec -j ACCEPT
$IPT -A INPUT -i ${_pub_if} -p icmp -m icmp --icmp-type 5 -m limit --limit 30/sec -j ACCEPT
$IPT -A INPUT -i ${_pub_if} -p icmp -m icmp --icmp-type 11 -m limit --limit 30/sec -j ACCEPT
Если сомневаетесь в поведении bash: цитируйте ненадежные данные.
Если у вас есть строка с пробелом в badips.db
файл, то эта строка соответствует:
/sbin/iptables -A INPUT -i eth0 -s -j LOG --log-prefix " Drop BadIP "
Сообщение об ошибке не указывает на проблему из-за того, как iptables анализирует аргументы, изначально игнорируя тот факт, что -j
не верный аргумент -s
и застревает на следующем аргументе.
Текущее влияние вредоносных записей на ваш badips.db
это «выполнение кода с привилегиями root», поэтому обязательно убедитесь, что ваш скрипт правильно обрабатывает недопустимые исходные IPS / Nets.