The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  вход/выход  слежка  RSS
"bash конструкция"
Вариант для распечатки  
Пред. тема | След. тема 
Форумы OpenNET: Виртуальная конференция (Public)
Изначальное сообщение [ Отслеживать ]

"bash конструкция"  
Сообщение от daevy on 16-Окт-08, 07:34 
всем привет! знатоки bash'а подскажите конструкцию для следующей ситуации...
есть текстовый файл содержащий строки типа
192.168.0.10 85.15.24.68 1592
т.е. адрес источника, адрес назначения, порт назначения.
в скрипте я хочу сделать цикл, чтоб содержимое строки подставлялось в разные места команды, что то типа
while read line
  do
     iptables -t nat -A POSTROUTING -s $'1-й параметр в строке' -d $'2-й параметр' --dport $'3-й парметр' -j SNAT --to-source 78.105.12.1
  done < $TEXTFILE
типа в сетке есть клиентбанки, и их нужно натить на определнные адреса и порты, в реальный адрес. и чтобы не писать много строчек для каждого клиентбанка, охота это сделать через цикл, чтобы потом, когда будут появляться новые клиентбанки, можно было просто редактировать текстовик.
Или может есть какое то более элегантное решение?
Высказать мнение | Ответить | Правка | Cообщить модератору

 Оглавление

Сообщения по теме [Сортировка по времени | RSS]


1. "bash конструкция"  
Сообщение от daevy on 16-Окт-08, 08:18 
вобщем я сделал так, но может можно как то укоротить? или соптимизировать?
#!/bin/bash
TEXTFILE="/root/temp/addresses"
while read line
  do
    iptables -t nat -A POSTROUTING -s `echo -e "$line" |awk '{print $1}'` -d `echo -e "$line" |awk '{print $2}'` -p tcp --dport `echo -e "$line" |awk '{print $3}'` -j SNAT --to-source 212.220.129.40
  done < $TEXTFILE
Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

2. "bash конструкция"  
Сообщение от Andrey Mitrofanov on 16-Окт-08, 09:33 
>while read line
>  do
>     iptables -t nat -A POSTROUTING -s $'1-й
>параметр в строке' -d $'2-й параметр' --dport $'3-й парметр' -j SNAT
>--to-source 78.105.12.1
>  done < $TEXTFILE

Что касается bash-а -

tablicca() {
cat <<EOT
10.0.0.10 pop3.mail.ru 110
10.0.0.12 mail.ya.ru 25      #ну, и т.д.
EOT
}

while read src dst dpt cmt; do
iptables -t nat -A POSTROUTING -s $src -d $dst --dport $dpt \
-j SNAT --to-source 78.105.12.1
done <( tablicca )

Можно вместо вызова функции собственно cat <<EOT вставить. С функцией можно воспользоваться таблицей ещё раз, если понадобится.

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

3. "ещё пример"  
Сообщение от Andrey Mitrofanov on 16-Окт-08, 10:02 
>Что касается bash-а -
>
>tablicca() {

Вот ещё пример: как я у себя форварды портов клиентам на firehol (он сам - на баше) делал.

#Forward pords
fwd_mail() {
  for pp in 110 25; do #pop3+smtp
    ##### vv---тут ошибка: dst адрес не проверяется, но не суть
    dnat to "$3:$pp" inface "$2" src "$1" proto tcp dport "$((pp+${4:-0}))"
    done
  snat to "$PUBLIC_MYIP" outface eth2 src "$1" dst "$3"
  }
do_mail_clients() {
  #"Таблица" клиентов port-forwarding-а: pop3+smtp => внеш.сервер
  fwd_mail "10.1.2.5 10.1.2.7 10.1.2.34" eth1 "$MAIL_SVR1"
  fwd_mail "192.168.13.115" eth0 "$MAIL_SVR1"
#
MCLIENTS="192.168.13.52 192.168.13.96"
  fwd_mail "$MCLIENTS" eth0 "$MAIL_SVR2"
  fwd_mail "$MCLIENTS" eth0 "$MAIL_SVR3" 5000
  fwd_mail "$MCLIENTS" eth0 "$MAIL_SVR4" 6000
  }
do_mail_clients #####(1)

### ROUTER:
router nat
#
fwd_mail() {
  server "smtp pop3" accept dst "$3" inface "$2" src "$1"
  }
    do_mail_clients #####(2)

Вызов (1) генерирует несколько вызовов функций dnat и snat firehol. Они д.б. до первой "секции" router. Вызов (2) уже внутри секции router вызывает команды server с набором параметров... Изменение "генерируемых" команд - через переопределение "промежуточной функции. Цикл while read писать было скушно и утомительно, поэтому :) строки таблицы в виде вызовов своей функции (м.б. навеяно структурой самого firehol).

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

4. "bash конструкция"  
Сообщение от daevy on 16-Окт-08, 11:23 
что такое 'cmt' в while read src dst dpt cmt; do
и потом таблица где составляется, в теле скрипта?
Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

5. "bash конструкция"  
Сообщение от daevy on 16-Окт-08, 11:31 
по этому примеру получилось лучше это то что мне было нужно, модифицировал под себя
while read src dst dport; do
   iptables -t nat -A POSTROUTING -s $src -d $dst -p tcp --dport $dport -j SNAT --to-source 212.220.129.40
done < $TEXTFILE

данные хранятся в текстовике потому что надо чтобы, некоторые люди, когда меня нет на месте длительное время, могли добавлять туда других клиентов не вникая в сущность Iptables

Большое спасибо за помощь!

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

Архив | Удалить

Индекс форумов | Темы | Пред. тема | След. тема
Оцените тред (1=ужас, 5=супер)? [ 1 | 2 | 3 | 4 | 5 ] [Рекомендовать для помещения в FAQ]




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру