#!/bin/bash

# АСР "Гидра". Скрипт по управлению доступом в Интернет
# Автор: Петров Н. В.
# (C) ООО "Латера Софтвер"
# www.latera.ru | info@latera.ru


# Коды возврата скрипта
RET_OK="0"

RET_BAD_USAGE="1"
RET_BAD_RTYPE="2"
RET_FAILED_RUN="3"


# Запись в вывод ошибок
function echo_err {
  echo $@ >&2
}

# Выполнение команды
function run {
  # Выполнение команды
  $@
  
  # Если выполнение было неудачным
  if [ $? != "0" ]; then
    # Завершение выполнения скрипта
    echo_err "Failed run of $@ (return code $?)"
    exit $RET_FAILED_RUN
  fi
}

# Действия над адресами
function execute {
  # Цикл по каждому адресу
  IFS=$','
  for addr in $2; do
    # Действие в зависимости от варианта выполнения
    case "$1" in
      # Включение
      on)
        run /sbin/iptables -D users_out -s $addr -j ACCEPT
        run /sbin/iptables -D users_out -d $addr -j ACCEPT
        
        run /sbin/iptables -I users_out -s $addr -j ACCEPT
        run /sbin/iptables -I users_out -d $addr -j ACCEPT
        
        ;;
      # Выключение
      off)
        run /sbin/iptables -D users_out -s $addr -j ACCEPT
        run /sbin/iptables -D users_out -d $addr -j ACCEPT
        
        ;;
      *)
        echo_err "Invalid run type"
        exit $RET_BAD_RTYPE
        
        ;;
    esac
  done
}

# Выбор действия по первому аргументу
case "$1" in
  # Допустимые варианты запуска
  on|off)
    execute $1 $2
    ;;
  # Остальные варианты
  *)
    echo_err "Usage: $0 (on|off) addresses"
    echo_err
    echo_err "  addresses - comma separated ip subnets list in CIDR format"
    echo_err "             (e.g. 10.15.11.84/30,172.16.20.33/32,192.168.14.0/24)"
    
    exit $RET_BAD_USAGE
    ;;
esac

# Выход с успехом
exit $RET_OK
