Задать вопрос
@Lunatik-cyber
Начинающий программист.

Как исправить ошибку iptables в shell-скрипте (Ubuntu 18.04)?

В общем написал простой скрипт для блокировки ip-адресов на сервере и столкнулся с проблемой:
Bad argument `REJECT'
Try `iptables -h' or 'iptables --help' for more information.
iptables: unrecognized service
Такая же ошибка с разблокировкой:
Вот код:
#!/bin/bash
clear
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin
export PATH

IP4TABLES_BIN=/sbin/iptables
IPTABLES=$IP4TABLES_BIN

echo -e "
Выберите:

0. Выход в главное меню
-----------------------
1. Заблокировать IP
2. Разблокировать IP
-----------------------
3. Подготовка
-----------------------
Подсказка: Перед первой блокировкой выберите функцию подготовка. В дальнейшем ее не нужно трогать.
"
	until [[ $MENU_OPTION =~ ^[0-3]$ ]]; do
		read -rp "Введите число [0-3]: " MENU_OPTION
	done
	case $MENU_OPTION in
	0)
		clear
		bash /root/test.sh
	;;
	1)
	clear
    read -e -r -p "Введите имя:" name
    echo -e "Имя нужно для того чтобы можно было быстро найти нужный IP"
    read -e -r -p "Введите IP:" IP
    $IP4TABLES_BIN -A INPUT -s $IP -j REJECT
    service iptables save
    echo "IP: $IP заблокирован!"
    echo "Имя: $name; IP: $IP" >>/root/IP_list.txt
    read -n1 -r -p "Нажмите Enter для возврата в главное меню..."
    bash /root/test.sh
	;;
	2)
	clear
    cat IP_list.txt
    read -e -r -p "Введите имя:" nam
    echo -e "Имя нужно для того чтобы можно было быстро найти нужный IP. Вводить нужно без ошибок!"
    read -e -r -p "Введите IP:" Ip
    $IP4TABLES_BIN -L INPUT -n --line-numbers | grep ${Ip}
    echo "
    Подсказка: У вас выйдет IP и цифра слева.
    Пример:
    7    REJECT     all  --  123.456.789.000         0.0.0.0/0            reject-with icmp-port-unreachable
    Обратите внимание на цифру (7), в строке 'Введите цифру: 7 (Это пример у вас может быть по другому)'"
    read -e -r -p "Введите цифру:" number
    $IP4TABLES_BIN -D INPUT $number
    service iptables save
    echo "IP: $Ip Разблокирован!"
    sed -e '/Имя: $nam; IP: $ip/d' < filename.txt
    read -n1 -r -p "Нажмите Enter для возврата в главное меню..."
    bash /root/testc.sh
	;;
	3)
	for dir in */; do
    	touch "root/IP_list.txt"
	done
	;;
	*)
	Ban_ip
	;;
esac

И еще почему-то строка: sed -e '/Имя: $nam; IP: $ip/d' < filename.txt не работает.
Пробовал различные варианты, но ничего не помогает. Решил обратиться к вам)
P.S. Я только начал изучать shell.
Заранее, спасибо)
  • Вопрос задан
  • 231 просмотр
Подписаться 1 Простой 1 комментарий
Пригласить эксперта
Ответы на вопрос 1
@sand3001
Всего по немногу
iptables - команда для управления брандмауэром ядра netfilter
нет такого service в убунту
sed -e '/Имя: $nam; IP: $ip/d' < filename.txt
У Вас в скрипте имя "filename.txt" указано 1 раз, откуда оно взялось?
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы