Author Topic: rc.firewall и shell  (Read 4032 times)

0 Members and 1 Guest are viewing this topic.

Offline Krueger

  • Full Member
  • ***
  • Posts: 195
  • Karma: +0/-0
    • http://www.zaonsv.ru
rc.firewall и shell
« on: December 20, 2005, 11:41:25 »
Не хочется добавлять ручками в фаревол для каждой сети своё правило. проще и красивее, на мой взгляд сделать это скриптом, взяв из отдельного файла список сетей. а вот как это сделать на shell не знаю:-(
Собственно вопрос, как средствами шелл брать из файла по одной строке и запхивать их в переменные?

Offline DrDeath

  • Full Member
  • ***
  • Posts: 124
  • Karma: +1/-0
    • http://
rc.firewall и shell
« Reply #1 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
...
« Last Edit: December 20, 2005, 13:44:24 by DrDeath »

Offline Nameless

  • Jr. Member
  • **
  • Posts: 67
  • Karma: +0/-0
    • http://
rc.firewall и shell
« Reply #2 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 Файл с томскими сетями возьми у своего провайдера.
Windows: where do you want to go today?
Linux: where do you want to go tomorrow?
BSD: are you guys coming or what?

Offline Krueger

  • Full Member
  • ***
  • Posts: 195
  • Karma: +0/-0
    • http://www.zaonsv.ru
rc.firewall и shell
« Reply #3 on: December 20, 2005, 14:22:24 »
Спасиба всем. сделал на shell потому, как по умолчанию скрипт написан на нём, а переделывать не хочется.