Jump to content

[IPTABLES] Работа с группами адрессов


Recommended Posts

Вот никак не могу понять как сделать правило такого вида:

 

iptables -A FORWARD -s 10.10.0.55 -d !"UA-IX" -j REJECT

 

где "UA-IX" - адресса подсетей UA-IX

 

(просто их много).

 

Может кто-то с примерами обяснить как делаеться правило такого рода?

Т.е. может как-то можно считівать с файла в котором введено какое-то количество групп адрессов, или может как то алиас создать...

Link to post
Share on other sites

вот так вот можно сделать:

iptables -N UA_IX

потом скриптом или как-нть ещё загнать в эту цепочку правила для всех сетей входящих UA_IX:

iptables -A UA_IX -d xxx.xxx.xxx.xxx/xx -j RETURN

 

и в конце добавить iptables -A UA_IX -j REJECT

 

теперь пакеты прошедшую эту цепочку направленные не в UA_IX будут отброшены, а входящие в UA_IX пойдут проверяться по цепочке filter дальше.

удобство в том что если нужно поменять список сетей нужно всего лишь изменить одну цепочку UA_IX

 

а в в цепочке filter писать

iptables -A FORWARD -s 10.10.0.55 -j UA_IX

 

это бывает не всегда удобно, но вам думаю подойдет.

 

Может кто знает метод лучше? Поделитесь плиз.

Link to post
Share on other sites

А можно сделать такой файлик:

ips.txt

в каждой строке пишем IP

и создаем файлик iptables.cpp с таким содержанием:

#include <string.h>
#include <stdio.h>
#include <stdlib.h>

int main()
{
   char *stroka,line[100],ip[255];
   char *s,str[255];
   FILE *f;
   
   f=fopen("ips.txt", "r");
while (stroka=fgets(line,100,f))
    {
 if (strcmp(stroka,"\n")!=0)
     {
 	strcpy(str,stroka);
 	s=strtok(str,"\n\t\r");
 	sprintf(ip,"iptables -t filter -A INPUT -s %s -j DROP",s);
 	system(ip);
     }
    }
   fclose(f);
}

 

думаю там понятно, что можно поменять :) Там где sprintf - правило iptables

потом компилируем его: gcc iptables.cpp

и запускаем - ./a.out

a.out и ips.txt должны быть в одной папке

 

Проще конечно в шелле делать, но я сним не дружу :)

Link to post
Share on other sites

Вот еще Maikl подкинул идейку.

Создается файл например ipt.sh

имеет вот такое содержание:

#!/bin/sh

IPFILE="ips.txt"

grep "^" $IPFILE | while read ip;
do
   if [ $ip <> NULL ]
       then /sbin/iptables -t filter -A INPUT -s $ip -j DROP
   fi
done

делаем файл исполняемым:

chmod +x ipt.sh

 

Понятно, что в файле ips.txt хранятся айпишники - каждый с новой строки

вот и все

Link to post
Share on other sites
  • 1 month later...

Поднимим данную тему вверх. Я думаю этот вопрос больше будет касатся Quarcelа.

В общем ситуация такова:

Сделал я новую цепочку UA_IX

загнал в нее украинскую зону (colocall.net/ua/?list)

И решил открыть только украину для одного пользователя. Делал так:

 

iptables -t filter -A FORWARD -s 192.168.0.1 -j UA_IX

iptables -t filter -A FORWARD -d 192.168.0.1 -j ACCEPT

iptables -t nat -A POSTROUTING -o ppp0 -s 192.168.0.1 -j MASQUERADE

iptables -t nat -A POSTROUTING -o eth0 -d 192.168.0.1 -j MASQUERADE

И получаю, что к некоторой украине доступ есть, к другой нет :(

Тоесть. Когда сделал, получил, что открывалась Украина с IP<196.xxx.xxx.xxx

Потом сервак ребутнул, и увидел, что открываются сайты у которых IP<68.xxx.xxx.xxx

В чем глюк? В цепочку UA_IX загружены все адресса. Специально сидел и 40 мин ждал, пока всю цепочку выведет.

З.Ы. Правда, что iptables должен долго выводить цепочку? У меня он показываеьт по одной записи/пару сек, если цепочка становится обьемной....

Link to post
Share on other sites

Скорее всего у тебя некоторые сетки с неправильной маской прошли.

Список, кот. формаруется на UA-IX в связи с обоенностями выдечей кисками информации надо доводить до ума.

Если в коце нет маски, то это значит, что на самом деле что это сетка класса С, 256 адресов или /24.

Link to post
Share on other sites

Маска там есть везде. Это проверил в первую очередь....

Вообще правила открытия таким способом только украины правельные? У кого-то работает? Аль предложите другой способ, сам пока ничего не могу придумать

Link to post
Share on other sites
Маска там есть везде. Это проверил в первую очередь....

Вообще правила открытия таким способом только украины правельные? У кого-то работает? Аль предложите другой способ, сам пока ничего не могу придумать

ну у меня собственно работает..... проблем не встречал...

Link to post
Share on other sites

Своими правилами поделится можеш? Т.к. обнаружил следующею вещь:

iptables -L -v

......

Chain FORWARD (policy DROP 4218 packets, 253K bytes)

pkts bytes target prot opt in out source destination

54 3559 UA_IX all -- any any 192.168.0.1 anywhere

0 0 ACCEPT all -- any any anywhere 192.168.0.1

.......

Тоесть пакеты передаются, но не принимаются..... :(

Link to post
Share on other sites

Может это кто-то (некоторые провайдеры, например укртелеком) дропает пакеты на революционные сайты типа .5TV

Link to post
Share on other sites

Да нет. Я даже незнаю почему, но все заработало :(. Суть в следующем.

Сначало в цепочку я добавлял как

iptables -A UA_IX -d xxx.xxx.xxx.xxx/xx -j RETURN

и не работало, а когда сделал

iptables -A UA_IX -d xxx.xxx.xxx.xxx/xx -j ACCEPT

то все стало ОК. МИР не пускает, пускает только украину. В чем тут был глюк?

Link to post
Share on other sites
Да нет. Я даже незнаю почему, но все заработало :(. Суть в следующем.

Сначало в цепочку я добавлял как

iptables -A UA_IX -d xxx.xxx.xxx.xxx/xx -j RETURN

и не работало, а когда сделал

iptables -A UA_IX -d xxx.xxx.xxx.xxx/xx -j ACCEPT

то все стало ОК. МИР не пускает, пускает только украину. В чем тут был глюк?

Суть как раз была в том что бы пакетик отсеялся в цепочке ЮА_ИКС и вернулся в формард обратно если он бежит на украину, попутно добежав до своего логического ACCEPT или REJECT дополнительно фильтровался.

 

У меня написано RETURN и всё ок.

Link to post
Share on other sites

глюка никакого нет, просто вы похоже не поняли разницы между RETURN и ACCEPT

Какую из этих целей использовать зависит от конкретного случая и от того как построена фильтрация пакетов.

 

Вот например, если в UA_IX используется RETURN то правила могут выглядеть примерно так:

iiptables -A FORWARD -j UA_IX

iiptables -A FORWARD -j ACCEPT

 

А вот если используется ACCEPT то правило: iptables -A FORWARD -j ACCEPT не нужно

 

RETURN возвращает проверку в предыдующую цепочку(в данном случае пакет пойдет проверятся дальше по цепочке FORWARD)

 

ACCEPT дает пакету зеленый свет и пакет уже не проверяется по другим правилам - идет в сеть

Link to post
Share on other sites
  • 1 year later...

Скажите, а нет ли более разумного способа, чем фильтровать пакет через 1222 (в моем файле УА-ИХ) проверок?

В частности, я хочу, чтобы на SQUID попадал только иностранный трафик. Прокси работает в прозрачном виде.

Я создаю цепочку UAIX в таблице nat. Из цепочки PREROUTING загоняю в UAIX адрес, если он удовлетворяет одной из этих 1222 проверок. Последним в PREROUTING делаю REDIRECT на порт 3128, а в UAIX создаю только

iptables -t nat -A UAIX -j ACCEPT.

Можно это как-то сделать красивее? И сильно ли снижает такая большая проверка

производительность канала?

Спасибо.

Link to post
Share on other sites

иначе это как? не файрволом? думаю нет при данных условиях.

не нагружает совсем..... хотя смотря какойтазик стоит шлюзом...

но целерон 600 вполне нормально себя чувствует....

А чем некрасиво собственно?

 

а если у вас в онлайне 1000 пользователей к примеру и на каждого по 2 как минимум правила в файрволе - вас не смущает нагрузка??

Link to post
Share on other sites
Скажите, а нет ли более разумного способа, чем фильтровать пакет через 1222 (в моем файле УА-ИХ) проверок?

1222 правила это явно излишне. Агрегация списка дает его сокращение примерно в два раза (у меня 662 подсети).

Link to post
Share on other sites
Скажите, а нет ли более разумного способа, чем фильтровать пакет через 1222 (в моем файле УА-ИХ) проверок?

1222 правила это явно излишне. Агрегация списка дает его сокращение примерно в два раза (у меня 662 подсети).

Простите за темноту, но не подскажете ли на примере, как эту агрегацию UA-IX сетей делать?

Link to post
Share on other sites
маской наверное

Это типа, если есть

212.42.64.0/22

212.42.68.0/22

212.42.70.0/24

212.42.72.0/23

212.42.74.0/23

212.42.76.0/23

212.42.78.0/23

212.42.80.0/23,

то написать 212.42.0.0/16? Разве это корректно?

Edited by fufnf
Link to post
Share on other sites

ЭЭЭ, а где вы 48 единиц возьмете, если их максимум может быть 32 :) ?

 

извиняюсь, что влез... в общем-то можно и так использовать ( маска 16) мот только захватываете лишние айпишники, которые не входят в список.

Edited by N.Leiten
Link to post
Share on other sites
Тогда может кто поделится где брать уже "агрегированные" списки или подкинет скрипт для агрегации?

Мои списки можно брать здесь. Основа - список UA-IX от DG с исключением нескольких небольших диапазонов (VPN провайдеры).

 

Для аггрегирования списков в свое время нашел утилиту:

 

файл 1 (20 кБ)

файл 2 (1 кБ)

 

Вроде нужен только первый, но мало ли...

Link to post
Share on other sites
маской наверное

Это типа, если есть

212.42.64.0/22

212.42.68.0/22

212.42.70.0/24

212.42.72.0/23

212.42.74.0/23

212.42.76.0/23

212.42.78.0/23

212.42.80.0/23,

то написать 212.42.0.0/16? Разве это корректно?

писать 212.42.0.0/16 некорректно, а вот заменить вышеприведенный список вот этим:

212.42.64.0/20
212.42.80.0/23

очень даже корректно. А два правила это меньше чем 8 :(

Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...