Разрешить только предопределенные устройства для подключения к моему устройству через таблицы IP

Я хочу разрешить только несколько конкретных подключений в Ubuntu Core-16.

  • Разрешить SSH-соединение
  • Разрешить MQTT-соединение с конкретным адресом брокера от MQTT-клиента на моем устройстве.
  • Разрешить REST-клиенту ip подключаться к серверу на моем устройстве.

Проблема, с которой я сталкиваюсь, это соединение с MQTT из-за следующих настроек:

iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -P FORWARD DROP

iptables -A OUTPUT -p tcp -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -p udp -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -p icmp -m state --state NEW,ESTABLISHED -j ACCEPT
#iptables -A INPUT -p tcp -m state --state ESTABLISHED -j ACCEPT
iptables -A INPUT -p udp -m state --state ESTABLISHED -j ACCEPT
iptables -A INPUT -p icmp -m state --state ESTABLISHED -j ACCEPT

Вот так я настраиваю конкретный IP из txt файла:

input="/home/admin/ip.txt"

while read line; do
var=$line
#echo "var= $var"
var1="$(cut -d' ' -f 1 <<< $var)"
echo "string = $var1"
case $var1 in
     jumper)
          #echo "Thank you"
          #echo "Your type: jumper"
          ip="$(cut -d' ' -f 2 <<< $var)"
          port="$(cut -d' ' -f 3 <<< $var)"
          iptables -A INPUT -p tcp -s $ip --dport $port -j ACCEPT
          iptables -A OUTPUT -p tcp -s $ip --dport $port -j ACCEPT
          iptables -A INPUT -p tcp -m state --state ESTABLISHED -j ACCEPT
          iptables -A OUTPUT -p tcp -m state --state NEW,ESTABLISHED -j ACCEPT
          ;;
     mqtt)
          #echo "Thank you"
          #echo "Your type: mqtt"
          ip="$(cut -d' ' -f 2 <<< $var)"
          port="$(cut -d' ' -f 3 <<< $var)"
          iptables -A INPUT -p tcp -s $ip --dport $port -j ACCEPT
          iptables -A OUTPUT -p tcp -s $ip --dport $port -j ACCEPT
          iptables -A INPUT -p tcp --dport $port -m state --state ESTABLISHED -j ACCEPT
          iptables -A OUTPUT -p tcp --dport $port -m state --state NEW,ESTABLISHED -j ACCEPT
          ;;
     rest)
          #echo "Thank you"
          #echo "Your type: rest"
          ip="$(cut -d' ' -f 2 <<< $var)"
          port="$(cut -d' ' -f 3 <<< $var)"
          iptables -A INPUT -p tcp -s $ip --dport $port -j ACCEPT
          iptables -A OUTPUT -p tcp -s $ip --dport $port -j ACCEPT
          iptables -A INPUT -p tcp --dport $port -m state --state NEW,ESTABLISHED -j ACCEPT
          ;;
     server)
          #echo "Thank you"
          #echo "Your type: server"
          ip="$(cut -d' ' -f 2 <<< $var)"
          port="$(cut -d' ' -f 3 <<< $var)"
          iptables -A INPUT -p tcp -s $ip --dport $port -j ACCEPT
          iptables -A OUTPUT -p tcp -s $ip --dport $port -j ACCEPT
          ;;
     *)
          echo "Sorry, invalid input"
          ;;
esac

done < $input
0
задан 1 August 2019 в 16:41

1 ответ

Результат получил следующим образом (убедитесь, что в файле ip.txt указаны правильные IP-адреса и порты):

Сначала сделайте все подключаемым, чтобы не потерять существующие соединения, выполнив следующие 3 команды на терминале:

iptables -P INPUT ACCEPT
iptables -P OUTPUT ACCEPT
iptables -P FORWARD ACCEPT

Затем сбросьте все существующие настройки IP-таблиц:

iptables -F

Наконец запустите скрипт, который блокирует все соединения, а затем включает только IP-адреса, упомянутые в IP Файл .txt (образец этого файла в конце):

iptables -P INPUT DROP 
iptables -P OUTPUT DROP
iptables -P FORWARD DROP

while read line; do
var=$line
var1="$(cut -d' ' -f 1 <<< $var)"
case $var1 in

     jumper)
          ip="$(cut -d' ' -f 2 <<< $var)"
      port="$(cut -d' ' -f 3 <<< $var)"
      iptables -A INPUT -p tcp --dport $port -s $ip -m state --state NEW,ESTABLISHED -j ACCEPT
      iptables -A OUTPUT -p tcp --sport $port -d $ip -m state --state NEW,ESTABLISHED -j ACCEPT          
      ;;

     mqtt)
      ip="$(cut -d' ' -f 2 <<< $var)"
      port="$(cut -d' ' -f 3 <<< $var)"
      iptables -A INPUT -p tcp --sport $port -s $ip -m state --state ESTABLISHED -j ACCEPT
      iptables -A OUTPUT -p tcp --dport $port -d $ip -m state --state NEW,ESTABLISHED -j ACCEPT
          ;;

     rest)
      ip="$(cut -d' ' -f 2 <<< $var)"
      port="$(cut -d' ' -f 3 <<< $var)"
          iptables -A INPUT -p tcp --dport $port -s $ip -m state --state NEW,ESTABLISHED -j ACCEPT
      iptables -A OUTPUT -p tcp --sport $port -d $ip -m state --state NEW,ESTABLISHED -j ACCEPT
      iptables -A INPUT -p tcp --dport $port -m state --state NEW -j ACCEPT
          ;;

     server)
      ip="$(cut -d' ' -f 2 <<< $var)"
      port="$(cut -d' ' -f 3 <<< $var)"
          iptables -A INPUT -p tcp -s $ip --dport $port -j ACCEPT
          iptables -A OUTPUT -p tcp -s $ip --dport $port -j ACCEPT
          ;;

     rangeJumper)
          ip="$(cut -d' ' -f 2 <<< $var)"
          port="$(cut -d' ' -f 3 <<< $var)"
          iptables -A INPUT -p tcp -m iprange --src-range $ip --dport $port -m state --state NEW,ESTABLISHED -j ACCEPT
          iptables -A OUTPUT -p tcp -m iprange --dst-range $ip --sport $port -m state --state NEW,ESTABLISHED -j ACCEPT
          ;;

     *)
          echo "Sorry, invalid input"
          ;;
esac

done < $input

Образец файла IP.txt:

jumper 10.100.100.249 22
jumper 10.100.100.76 22
mqtt 10.100.99.238 8883
rest 10.100.100.76 34568
rest 10.100.100.249 34568
server 10.100.100.76 154
rangeJumper 10.100.99.71-10.100.99.100 22
rangeJumper 10.100.97.72-10.100.97.100 22
0
ответ дан 5 November 2019 в 15:01

Другие вопросы по тегам:

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