Usando o script bash para mesclar duas regras ipset

1

Eu tenho duas regras ipset em dois arquivos, elas são:

arquivo 1: /etc/ipset.up.rules

add mynetrulesssh 103.207.38.64/26
add mynetrulesssh 103.207.38.96
add mynetrulesssh 222.186.34.122

arquivo 2: /etc/ipset.up.rules.new

add mynetrulesssh 103.207.38.0/24
add mynetrulesssh 222.186.34.0/24

Eu quero mesclar essas regras ipset para que a saída seja executada (eval) nessas sequências:

del mynetrulesssh 103.207.38.64/26
del mynetrulesssh 103.207.38.96
add mynetrulesssh 103.207.38.0/24
del mynetrulesssh 222.186.34.122
add mynetrulesssh 222.186.34.0/24

Eu uso este script para mesclá-los, mas ele não é excluído corretamente. Por favor, ajude.

#!/bin/bash

## create by dedetok April 2016

## last update 2016-04-15

## GNU GPL v3

## Disclaimer: experimental, use it with your own risk

echo "download from http://www.garasiku.web.id/ipset.up.rules into /etc/ipset.up.rules.new"

wget -O /etc/ipset.up.rules.new http://www.garasiku.web.id/ipset.up.rules

chmod 444 /etc/ipset.up.rules.new

chown root:root /etc/ipset.up.rules.new

## Compare ipset.up.rules vs ipset.uprules.new

echo "updating new rules"

diff --new-line-format="+ %L" --old-line-format="- $L" <(sort /etc/ipset.up.rules) <(sort /etc/ipset.up.rules.new) |

while IFS=' ' read -r r1 r2 r3 r4; do

 if [ "$r2" = "add" ]; then

  if [ "$r1" = "+" ]; then

   cmdline="/sbin/ipset $r2 $r3 $r4"

   echo "eval $cmdline"

   eval "$cmdline"

  fi

  if [ "$r2" = "-" ]; then

   cmdline="/sbin/ipset del $r3 $r4"

   echo "eval $cmdline"

   eval "$cmdline"

  fi

 fi

done

echo "Saving new ipset rules into /etc/ipset.up.rules"

eval "/sbin/ipset save > /etc/ipset.up.rules"

echo "End process"

problema com script: /etc/ipset.up.rules (arquivo 1) contém a regra atual (regras antigas). depois que eu baixar uma nova regra, /etc/ipset.up.rules.new (arquivo 2), eu quero mesclar no arquivo 1. Para evitar vários ip no meu ipset (arquivo 1), eu quero que o script remova todos IP com máscara de rede / sub-rede específica e substituí-lo por um novo. no caso ip 103.207.38. *, eu quero que o script execute essas seqüências

ipset del mynetrulesssh 103.207.38.64/26
ipset del mynetrulesssh 103.207.38.96
ipset add mynetrulesssh 103.207.38.0/24

no caso ip 222.186.34. *, eu quero que o script execute essas seqüências

ipset del mynetrulesssh 222.186.34.122
ipset add mynetrulesssh 222.186.34.0/24

Convido algo errado durante a comparação do processo, ou seja, o processo de comparação. Eu sou novato no bash. este é meu primeiro roteiro.

    
por Dedetok 15.07.2016 / 11:14

0 respostas