Всех приветсвую!
Вообщем описываю сложившуюся ситуацию:
Есть ЛВС(192,168,1,0),В данной ЛВС имеются ПЭВМ(хосты) для различных людей(экономисты,бухгалтеры,технический отKubuntu+firewall(разрешить только 1003 и 440 порты)дел и т,п,) Подключены все хосты через свич к sqlсерверу(работает он у меня в ЛВС на 1003 порту),
Значит задача в чём: отделить все хосты? кроме наших подобной ПЭВМ(на ней прозрачный мост+frewall),Для данного firewalla определить правила таким образом, чтобы открыть 1003 и 440 порты для не наших хостов,а остальные порты запретить для них
Графически схема примерна такова:
Хосты экономистов(192,168,1,10-1952,168,1,20) Хосты юристов(192,168,1,20-1952,168,1,30)
| |
|_________________________________________________|
|
ПЭВМ(Kubuntu8,04+firewall(разрешить только 1003 и 440 порты).прозрачный мосто между eth0 и eth1)
|
swich-----------SQLServer
|
Наши Хосты(192,168,1,50-1952,168,1,70)
Соответсвенно для наших хостов ничего не изменится,но мы ограничим другие не наши хосты по доступу к sqlserverу
С организацией прозрачного моста я разобрался,с умею без проблем настройить(в предыдущих письмах я описывал как я это делал), А вот как прописать именно данные правила в iptable(firewall) не могу понять(может напишешь как пример)просто разобраться легче,когда в виде примеров видишь,а я их что-то в инете не могу найти на рус яз(анг/ не очень) именно в kubuntu данный iptable
Т,е, может подскажет кто что мне нужно написать в виде команд в терминале?Раньше не имел дело с подобным(можно сказать синтаксис не знаю+ ко всему по настройке),
Ситуация выше описана именно так как требуется, вот сижу теперь и мучаюсь как её решить,Подмогите, пожалуйста,
Очень был бы благодарен!
Схема описана старательно, но несколько коряво. Например довольно сложно понять что скрывается за 192,168,1,50-1952,168,1,70. Я бы предположил опечатку в 192.168.1.50-192.168.1.50, но четыре раза одинаково не опечатываются. Также не понятно откуда куда нужно разрешить подключения. Для простоты покажите в виде источник(ip:port) - назначение (ip:port). Например 192.168.1.50-70 : любой - 192.168.1.1:1003К прочтению крайне рекомендуется http://www.opennet.me/docs/RUS/iptables/. По личному опыту достаточно потратить на это меньше пары часов, дабы больше не иметь проблем с iptables в будущем.
>Схема описана старательно, но несколько коряво. Например довольно сложно понять что скрываетсяВообщем уточняю ситуацию: скажем так ограничить доступ к sqlсерверу хосты других кабинетов(192.168.1.10-192.168.1.20;192.168.1.21-192.168.1.30)(т,е, запретить передачу данных по всем портам,кроме 1003 и 440).
А для наших хостов(192.168.1.50-192.168.1.70) осавить все порты для доступа к sqlсерверу.(т,е, как и сейчас-без изменений)
sqlсервер имеет адрес 192.168.1.1
маска везде 255.255.255.0
НА ПЭВМ(где установлена ОС Kubuntu+firewall) создан прозрачный мост между сетевыми интерфесами eth0 и eth1 следующим способом:mm@mm-desktop:~$ sudo brctl addbr most
mm@mm-desktop:~$ sudo brctl addif most eth0
mm@mm-desktop:~$ sudo brctl addif most eth1
mm@mm-desktop:~$ sudo ifconfig eth0 0.0.0.0
mm@mm-desktop:~$ sudo ifconfig eth1 0.0.0.0
mm@mm-desktop:~$ sudo ifconfig most up
mm@mm-desktop:~$ sudo ifconfig eth0 promisc
mm@mm-desktop:~$ sudo ifconfig eth1 promisc
mm@mm-desktop:~$ sudo brctl show
bridge name bridge id STP enabled interfaces
most 8000.0016760c9748 no eth0
eth1
mm@mm-desktop:~$>Для простоты покажите в виде источник(ip:port) - назначение (ip:port). Например 192.168.1.50-70
>: любой - 192.168.1.1:1003уточняю
Источник(host's) Назначение(sqlserver)
(192.168.1.10-192.168.1.20):1003 - 192.168.1.1:1003
(192.168.1.10-192.168.1.20):440 - 192.168.1.1:440
(192.168.1.21-192.168.1.30):1003 - 192.168.1.1:1003
(192.168.1.30-192.168.1.30):440 - 192.168.1.1:440
(192.168.1.50-192.168.1.70):любой порт - 192.168.1.1:любой порт>К прочтению крайне рекомендуется http://www.opennet.me/docs/RUS/iptables/. По личному опыту достаточно потратить на это
>меньше пары часов, дабы больше не иметь проблем с iptables в
>будущем.На данный момент вывод результата команды sudo iptables -L выглядит сл. образом:
mm@mm-desktop:~$ sudo iptables -L
Chain INPUT (policy ACCEPT)
target prot opt source destinationChain FORWARD (policy ACCEPT)
target prot opt source destinationChain OUTPUT (policy ACCEPT)
target prot opt source destination
mm@mm-desktop:~$Изучив немного http://www.opennet.me/docs/RUS/iptables/ я в затруднении всё же что мне именно необходиом написать в терминале, чтобы решить данную ситуацию?
Может так:
mm@mm-desktop:~$ sudo iptables -t filter -A INPUT -p tcp -m multiport --port 1003,440
mm@mm-desktop:~$ sudo iptables -t filter -A DROP -p tcp -m multiport --port :440
mm@mm-desktop:~$ sudo iptables -t filter -A DROP -p tcp -m multiport --port 441:1002
mm@mm-desktop:~$ sudo iptables -t filter -A DROP -p tcp -m multiport --port 1002:
или по другому?
Уточняю схему(может не совсем понятно изначально объяснил и обрисовал её):
grouphosts1(192.168.1.10-192.168.1.20)-------------------
|
grouphosts1(192.168.1.21-192.168.1.30)----------------- swich1
|интерфейс eth1(открыты только 1003,440порты)
|
ПЭВМ(Kubuntu+firewall)
|
интерфейс eth0(открыты только 1003,440порты)| |
swich2
| |
grouphosts3(192.168.1.50-192.168.1.70)------------------ ------SQLсерверПЭВМ(Kubuntu+firewall) имеет две сетевые кврты eth1 и eth0(соединены в виед прозрачного моста)
Так уже значительно понятней.
Сразу уточню один важный момент, с мостами мне приходилось сталкиваться редко и в основном на виртуалках, так что следующие утверждения/советы не обязательно верны, буду рад, если кто-то поправит или предложит другой вариант.
INPUT и OUTPUT цепочки сработают только для сервисов поднятых на самом шлюзе. Пакеты копируемые мостом на вторую сетевую карту через эти цепочки не пройдут.
Вероятно(я не следил за этим нюансом в ядрах и NF), что копируемые пакеты проходят через цепочку FORWARD и именно в ней желательно вести фильтрацию. Пример:
iptables -A FORWARD -p tcp -s 192.168.1.10 --dport 1003 -j REJECT
Данное правило отклоняет(-j REJECT) пакеты идущие с 192.168.1.10(-s 192.168.1.10) на порт 1003( --dport 1003). REJECT лучше с точки зрения клиента чем DROP, так как сообщение об ошибке приходит сразу, а не по таймауту.
Обычно режутся/допускаются целые сети и их можно задать в -s, но в вашем случае разграничения в пределах одной сети, а значит либо придется для каждого ip отдельное правило(понятное дело скриптом, а не руками) либо добавить еще ip_set. Так как сеть небольшая, то лучше первое, ipset имеет смысл когда ip исчисляются хотя бы сотнями.Альтернативой мосту может быть обыкновенная проброска портов:
iptables -t nat -A FORWARD -A PREROUTING -p tcp --dport 1003 -j DNAT --to-destination ip_sql_server
Разумеется в этом правиле можно в качестве условий указать -s ip и вообще не трогать таблицу filter, оставив в ней -P ACCEPT.
>iptables -A FORWARD -p tcp -s 192.168.1.10 --dport 1003 -j REJECTТ,е, Вы имеете ввиду, что для того чтобы мне через firewall пропускать пакеты для хостов,принадлежащих к group1,group2, только через порты 1003 и 440(а по остальным портам вообще запрет пакетов к и от данных хостов необходимо прописать следующее:
Для хоста 192.168.1.10(принадлежащий к group1):
mm@mm-desktop:~$sudo iptables -A FORWARD -p tcp -s 192.168.1.10 --dport :439-j REJECT
mm@mm-desktop:~$sudo iptables -A FORWARD -p tcp -s 192.168.1.10 --dport 441:1002-j REJECT
mm@mm-desktop:~$sudo iptables -A FORWARD -p tcp -s 192.168.1.10 --dport 1004:-j REJECTДля хоста 192.168.1.11:
mm@mm-desktop:~$sudo iptables -A FORWARD -p tcp -s 192.168.1.11 --dport :439-j REJECT
mm@mm-desktop:~$sudo iptables -A FORWARD -p tcp -s 192.168.1.11 --dport 441:1002-j REJECT
mm@mm-desktop:~$sudo iptables -A FORWARD -p tcp -s 192.168.1.11 --dport 1004:-j REJECT
И так аналогично для всех хостов group1 и group2 ?????? 8-0>iptables -t nat -A FORWARD -A PREROUTING -p tcp --dport 1003
раз я уже организовал мост между сетевыми картами,думаю данное перенапраление мне нет необходимости прописывать или есть?
Назрел вопрос по-ходу:
с tcp пакетами более менее понятно, а если мне есть необходимось запрет прохождения через firewall icmp и udp пакетов вообще?может следующими командами:mm@mm-desktop:~$sudo iptables -D FORWARD -p icmp
mm@mm-desktop:~$sudo iptables -D FORWARD -p udp???
Я просто привел общие примеры и четко описал, что они делают, давать вам готовое решение не собирался. Вариантов настройки может быть несколько. Два основных подхода:
1. По умолчанию разрешить, а тем кому нельзя запретить
2. По умолчанию запретить, а тем кому можно разрешить.
Второй подход считается более кошерным, однако в вашем случае скорее всего будет проще разрешить все всем, а потом нужным срезать все, что не попадает в указанные порты.Смотрю вы несколько путаетесь с синтаксисом iptables. Попробую изложить кратко, без отсылки к доке. Команда состоит из следующих частей
1. Указание таблицы -t имя. Таблицы бывают filter(фильтрация, если -t не указать, то будет использоватся именно эта), nat(для замены адресов источника SNAT или назначения DNAT, это ключевая таблица для проброса портов или обеспечения выхода в инет), mangle и raw(эти две вам пока не нужны)
2. Основная операция: -A добавить правило, -D удалить правило, -I вставить правило, -F убрать все правила, -P политика по усолчанию итд
3. Указание цепочки. INPUT для пакетов предназначенных самому шлюз, OUTPUT для пакетов созданных шлюзом, FORWARD для транзитных пакетов, POSTROUTING и PREROUTING использутся в основном для NAT
4. Различные критерии и модули, например -p tcp(протокол tcp), -s IP(адрес источника), --dport N(порт назначения) итд
5. Действие в случае выполнения _всех_ критериев: -j DROP/REJECT/ACCEPT(используется в filter), -j SNAT/DNAT(для NAT), -j LOG/ULOG(для ведения логов, помогающих в отладке правил) итд. У действия могут быть дополнительные параметры.Пример отключение icmp:
iptables -I FORWARD 1 -p icmp -d 192.168.1.1 -j REJECT
По частям
1. так как таблица filter дефолтная, то -t filter можно не писать
2. "-I цепочка 1" вставить первым правилом в указанную цепочку
3. цепочка FORWARD для транзитных пакетов
4. критерии: протокол icmp, адрес назначения 192.168.1.1. Резать в обратном направлении обычно не стоит, но если хочется, то убираем критерий -d 192.168.1.1
5. действие -j REJECTА теперь попробуйте еще раз прочесть доку, которую я вам советовал. Особое внимание обратите на раздел, описывающий порядок прохождения пакетов через таблицы и цепочки в них. Порядок прохождения это самое важное, пока не усвоите его будете путаться.
Т.Е. из вышесказанногои сново изученной доки получается следущим образомотключение icmp пакетов между sqlсервером и хостами:
sudo iptables -I FORWARD 1 -p icmp -d 192.168.1.1 -j REJECT
sudo iptables -I FORWARD 2 -p icmp -d 192.168.1.10 -j REJECT
...
sudo iptables -I FORWARD 22 -p icmp -d 192.168.1.30 -j REJECTотключение udp пакетов между sqlсервером и хостами:
sudo iptables -I FORWARD 22 -p udp -d 192.168.1.1 -j REJECT
sudo iptables -I FORWARD 23 -p udp -d 192.168.1.10 -j REJECT
...
sudo iptables -I FORWARD 43 -p udp -d 192.168.1.30 -j REJECT---------------------tcp пакеты от sqlсервера----------------------
разрешение прохождения tcp пакетов от sqlсервера только по 440 порту через шлюз к хостам:
sudo iptables -I FORWARD 44 -p FORWARD - tcp -s 192.168.1.1 --dport 440 -j ACCEPT
sudo iptables -I FORWARD 45 -p FORWARD - tcp -s 192.168.1.1 --dport :439 -j REJECT
sudo iptables -I FORWARD 46 -p FORWARD - tcp -s 192.168.1.1 --dport 441: -j REJECT---------------------tcp пакеты от хостов----------------------
разрешение прохождения tcp пакетов от ХОСТА 192.168.1.10(принадлежащий к group1) только по 440 порту через шлюз к sqlсерверу:
sudo iptables -I FORWARD 47 -p FORWARD - tcp -s 192.168.1.10 --dport 440 -j ACCEPT
sudo iptables -I FORWARD 48 -p FORWARD - tcp -s 192.168.1.10 --dport :439 -j REJECT
sudo iptables -I FORWARD 49 -p FORWARD - tcp -s 192.168.1.10 --dport 441: -j REJECT
И так для каждого хоста анологичным способом.
Подскажите, верно я думаю или всё же ошибаюсь?