Проверьте наличие ip в файле и обновите скрипт iptables bash - PullRequest
0 голосов
/ 02 марта 2020

Я хочу проверить, что ip присутствует в папке ccd и pu sh ip-маршрут в цепочку FORWARDING в iptables. Я новичок в bash сценариях и мне нужна небольшая помощь для завершения этого сценария.

файл клиента в / etc / openvpn / ccd:

ifconfig-push 10.8.0.45 255.255.255.0
push 'route 10.10.0.45'

Мне нужно grep 10.8.0.45 & 10.10.0.45

и pu sh эти маршруты в iptables. например,

iptables -A FORWARD -s 10.8.0.45 -d 10.10.0.45 -j ACCEPT

клиент-соединение /etc/openvpn/on_connect.sh

скрипт Мне нужна помощь с «grep» или «awk»

static_ip=  cat $CCD_DIR/$common_name | grep -w "ifconfig-push" | awk -F ' ' {'print $2'}

ip_destination=cat $CCD_DIR/$common_name | grep -w "push 'route" | awk -F ' ' {'print $3'}  | tr -d "'"
#!/usr/bin/env bash
#
#  Add iptables rules based on CCD client config.
#

CCD_DIR="/etc/openvpn/ccd"

RULE_COMMENT="FORWARD"$common_name
static_ip=cat $CCD_DIR/$common_name | grep -w "ifconfig-push" | awk -F ' ' {'print $2'}.
ip_destination=cat $CCD_DIR/$common_name | grep -w "push 'route" | awk -F ' ' {'print $3'}  | tr -d "'"



if [ -f $CCD_DIR/$common_name ]; then
  sudo iptables -A FORWARD -s $static_ip -d ip_destination -j ACCEPT
fi

exit 0

Редактировать: Я думаю, что я использую кошку неправильно.

1 Ответ

0 голосов
/ 02 марта 2020

Попробуйте вот так.

static_ip=$( cat $CCD_DIR | grep -oE "\b([0-9]{1,3}\.){3}[0-9]{1,3}\b" | grep -E '(^|\s)10.8.0.45($|\s)' )
ip_destination=$( cat $CCD_DIR | grep -oE "\b([0-9]{1,3}\.){3}[0-9]{1,3}\b" | grep -E '(^|\s)10.10.0.45($|\s)' )

Итак, сначала вы подбираете все IP адреса в файле, а затем ищете именно то, что вам нужно

Отредактировано после вашего комментария.

Если я правильно понимаю, "ifconfig-pu sh" - это только один одноранговый файл ccd? так что вы можете использовать это:

static_ip=$( grep -w "ifconfig-push" | awk -F ' ' {'print $2'})

Для остальных в "pu sh route" вам нужно использовать l oop, чтобы найти все соответствующие IP-адреса и поместить их в iptables.

if [ -f $CCD_DIR/$common_name ]
then
 cat $CCD_DIR | awk -F 'route' {'print $2'} | awk -F ' ' {'print $1'} | sed '/^$/d' | grep -E "\b(10)\.(8)\.(0)\.|(10)\.(10)\.(0).\b" | while read ip_destination
 do
  sudo iptables -A FORWARD -s $static_ip -d ip_destination -j ACCEPT
 done
fi
...