M
M
Marat Taganov2020-11-25 14:55:26
bash
Marat Taganov, 2020-11-25 14:55:26

How to fix iptables error in shell script (Ubuntu 18.04)?

In general, I wrote a simple script to block ip addresses on the server and ran into a problem:
Bad argument `REJECT'
Try `iptables -h' or 'iptables --help' for more information.
iptables: unrecognized service
Same error with unblock:
Here is the code:

#!/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 ; 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

And for some reason the line: sed -e '/Name: $nam; IP: $ip/d' < filename.txt doesn't work.
Tried various options, but nothing helps. I decided to contact you)
PS I just started to learn the shell.
Thanks in advance)

Answer the question

In order to leave comments, you need to log in

1 answer(s)
S
Sand, 2020-11-25
@sand3001

iptables - command to control the kernel firewall netfilter
no such service in ubuntu You have the name "filename.txt" specified 1 time in the script, where did it come from?
sed -e '/Имя: $nam; IP: $ip/d' < filename.txt

Didn't find what you were looking for?

Ask your question

Ask a Question

731 491 924 answers to any question