Tomsk Sysadmins Forum

Unix => Программирование => Topic started by: Krueger on December 20, 2005, 11:41:25

Title: rc.firewall и shell
Post by: Krueger on December 20, 2005, 11:41:25
Не хочется добавлять ручками в фаревол для каждой сети своё правило. проще и красивее, на мой взгляд сделать это скриптом, взяв из отдельного файла список сетей. а вот как это сделать на shell не знаю:-(
Собственно вопрос, как средствами шелл брать из файла по одной строке и запхивать их в переменные?
Title: rc.firewall и shell
Post by: DrDeath on December 20, 2005, 13:43:30
как вариант

Code: [Select]
#!/bin/sh
NETS=`cat /path/to/nets/file`
for i in $NETS
    do
        iptables -t nat -A POSTROUTING -s 192.168.0.0/16 -d $i -j MASQUERADE
    done

в данном случае файл должен выглядеть примерно так:

Quote
80.72.208.0/20
80.89.133.32/27
80.89.135.0/24
80.89.143.0/24
80.89.147.0/24
81.1.202.56/30
...
Title: rc.firewall и shell
Post by: Nameless on December 20, 2005, 13:49:15
Quote
Не хочется добавлять ручками в фаревол для каждой сети своё правило. проще и красивее, на мой взгляд сделать это скриптом, взяв из отдельного файла список сетей. а вот как это сделать на shell не знаю:-(
Собственно вопрос, как средствами шелл брать из файла по одной строке и запхивать их в переменные?
[snapback]6354[/snapback]
Как на shell сделать не скажу, а на перле это быстро

add_rules.pl
##################################3
#!/usr/bin/perl

$count = xxx;

open(ff, "/root/firewall/tomsknet");
@nets = <ff>;
close(ff);

foreach $net (@nets)
{
 chomp $net;
 system("/sbin/ipfw add $count pass tcp from $net to me 20-22,25,80,143");
 $count++;
}
print "Rules for Tomsk Local Network has been added\n";

чтобы удалить по необходимости только их
del_rules.pl
##########################################
#!/usr/bin/perl

$count = xxx;

open(ff, "/root/firewall/tomsknet");
@nets = <ff>;
close(ff);

foreach $net (@nets)
{
 chomp $net;
 system("/sbin/ipfw dele $count");
 $count++;
}
print "Rules for Tomsk Local Network has been deleted\n";

В строчках $count = xxx; вместо ххх поставь свой номер с которого будут идти правила. Чтобы при загрузке они загружались автоматически, пропиши add_rules.pl в /etc/rc.local Файл с томскими сетями возьми у своего провайдера.
Title: rc.firewall и shell
Post by: Krueger on December 20, 2005, 14:22:24
Спасиба всем. сделал на shell потому, как по умолчанию скрипт написан на нём, а переделывать не хочется.