Настройка iptables (Нужна помощь)

Обсуждение настройки и работы сервисов, резервирования, сетевых настроек и вопросов безопасности ОС.

Модераторы: SLEDopit, Модераторы разделов

Аватара пользователя
Vadimsky
Сообщения: 30
ОС: Fedora 17

Настройка iptables

Сообщение Vadimsky »

Братья-админы!
выручайте!
Не сплю вторые сутки и ни как не могу увидеть где грабли. Судя по всему пропустил какую то мелочь, но уже глаз замылился и мозги кипят.
Вообщем ситуация такая.
Сейчас есть локалка офисная 192.168.0.1/24
Главный инетовский шлюз 192.168.0.1
Файловая помойка 192.168.0.10
Компы сети имеют выход в инет.
Добовляем второй шлюз eth0 192.168.0.2, eth1 192.168.11.1/28 (eth1:1 192.168.12.1/28, eth1:2 192.168.13.1/28, eth1:3 192.168.14.1/28, eth1:4 192.168.15.1/28)
То есть всего 5 подсетей.
Второй шлюз на Fedora 12.
Задача: все подсети eth1 должны иметь доступ к файловой помойке 192.168.0.10 по SMB, и не иметь доступа в друг друга и в остальную сеть 192.168.0.1/24,
сеть 192.168.0.1/24 так же не должна иметь доступа в сети интерфейса eth1 второго шлюза.
Так же eth1:2 (192.168.13.1/28) и eth1:4 (192.168.15.1/28) должны иметь полный выход в инет, а остальные не должны.
Казалось бы всё просто, но не не получаецо каменный цветок у Данилы-мастера.
Делал так:

Код: Выделить всё

#!/bin/bash
echo 1 > /proc/sys/net/ipv4/ip_forward

## Flush all default
/sbin/iptables -F
/sbin/iptables -X
/sbin/iptables -t nat -F
/sbin/iptables -t nat -X
#
## Setup policy DROP for all
/sbin/iptables -P INPUT DROP
/sbin/iptables -P FORWARD DROP
/sbin/iptables -P OUTPUT DROP
#
## loop=trusted.
/sbin/iptables -A INPUT -i lo -j ACCEPT
/sbin/iptables -A OUTPUT -o lo -j ACCEPT
#
## Drop invalid pakets
/sbin/iptables -A INPUT -m state --state INVALID -j DROP
/sbin/iptables -A FORWARD -m state --state INVALID -j DROP
#
## ESTABLISHED connection
#/sbin/iptables -A INPUT -i eth0 -m state --state NEW -j DROP
#/sbin/iptables -A INPUT -i eth1 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
/sbin/iptables -A INPUT -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
/sbin/iptables -A OUTPUT -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
/sbin/iptables -A FORWARD -i eth0 -m state --state RELATED,ESTABLISHED -j ACCEPT
/sbin/iptables -A FORWARD -i eth1 -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT
#
## Remote SSH control
/sbin/iptables -A INPUT -p tcp --dport 22 -s 192.168.0.120 -j ACCEPT
/sbin/iptables -A INPUT -p tcp --dport 22 -s 192.168.17.3 -j ACCEPT
#
## Setup PING
/sbin/iptables -A OUTPUT -p icmp -m icmp -o eth0 --icmp-type echo-reply -j ACCEPT
/sbin/iptables -A INPUT -p icmp -m icmp -i eth1 --icmp-type echo-request -j ACCEPT
/sbin/iptables -A OUTPUT -p icmp -m icmp -o eth1 --icmp-type echo-reply -j ACCEPT
#
## Setup Internet access for this machine
/sbin/iptables -A OUTPUT -p tcp --sport 80 -j ACCEPT
#
## Setup input united for all HTTP virtual hosh
/sbin/iptables -A INPUT -p tcp --dport 80 -s 192.168.0.0/16 -j ACCEPT

### Firewall rules for USERS
#/sbin/iptables -t nat -A POSTROUTING -p icmp -o eth0 -j SNAT --to-source 192.168.0.2
/sbin/iptables -t nat -A POSTROUTING -p udp -o eth0 -j SNAT --to-source 192.168.0.2
/sbin/iptables -t nat -A POSTROUTING -p tcp -o eth0 -j SNAT --to-source 192.168.0.2

/sbin/iptables -A FORWARD -i eth1 -p tcp --dport 80 -j DROP


При таких правилах, в пределах eth1, у всех есть инет и им доступны ресурсы файлового сервера 192.168.0.10
Чую что упустил какую то мелочь, но какую не пойму.
Помогите найти грабли!
Спасибо.
Спасибо сказали:
pelmen
Сообщения: 1268
ОС: debian

Re: Настройка iptables

Сообщение pelmen »

посмотрел ваши правила и понял, что тут много лишнего.
Рассмотрим только ту часть, о которой вы попросили:
iptables -P FORWARD DROP
iptables -A FORWARD -p tcp -i eth1 -o eth0 -d 192.168.0.10 --dport $SMB -j ACCEPT
iptables -A FORWARD -p tcp -i eth0 -o eth1 -s 192.168.0.10 --sport $SMB -j ACCEPT
iptables -A FORWARD -s 192.168.13.0/28 -d ! 192.168.0.0/16 -j ACCEPT
iptables -A FORWARD -s 192.168.15.0/28 -d ! 192.168.0.0/16 -j ACCEPT
Спасибо сказали:
Аватара пользователя
Alex2ndr
Сообщения: 443
ОС: Debian Lenny

Re: Настройка iptables

Сообщение Alex2ndr »

Не сказа бы что вы забыли какую-то мелочь - вы по моему всю настройку транзитного трафика, которая вам так нужна, забыли. Зато каких-то левых правил хватает за глаза - по объему ваш скрипт вполне похож на то что должно.

Задачи:
1. все подсети eth1 должны иметь доступ к файловой помойке 192.168.0.10 по SMB, и не иметь доступа в друг друга и в остальную сеть 192.168.0.1/24,
2. сеть 192.168.0.1/24 так же не должна иметь доступа в сети интерфейса eth1 второго шлюза.
3. eth1:2 (192.168.13.1/28) и eth1:4 (192.168.15.1/28) должны иметь полный выход в инет, а остальные не должны.

Решения:
Начнем с ната -
/sbin/iptables -t nat -A POSTROUTING -o eth0 -j SNAT --to-source 192.168.0.2
этого вполне за глаза для ваших нужд - не нужен отдельный нат по тсп и удп и тем более ицмп (фильтрацию в таблице nat не проводят)
Затем посмотрим на ваши так называемые ESTABLISHED connection
/sbin/iptables -A FORWARD -i eth0 -m state --state RELATED,ESTABLISHED -j ACCEPT
/sbin/iptables -A FORWARD -i eth1 -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT
и у видим что они вовсе не только установленные - но еще и всё разрешающие изо всех альясов к eth1 - фактически полный доступ всем и вся. Короче делаем из них одно - но проще и правильнее:
/sbin/iptables -A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT
вот только теперь начинаем разрешать то что нужно - сначала просто доступ к файлопомойке
iptables -A FORWARD -s 192.168.11.1/28 -d 192.168.0.10 --dport $SMB -j ACCEPT
iptables -A FORWARD -s 192.168.12.1/28 -d 192.168.0.10 --dport $SMB -j ACCEPT
iptables -A FORWARD -s 192.168.14.1/28 -d 192.168.0.10 --dport $SMB -j ACCEPT
для привилегированных подсетей отдельные правила пошире - но эти же правила разрешают доступ из этих подсетей в остальные подсети. Т к уже вечер и голова у меня варит плоховато, то пока тупо предлагаю их все закрыть:
iptables -A FORWARD -d 192.168.11.1/28 -j DROP
iptables -A FORWARD -d 192.168.12.1/28 -j DROP
iptables -A FORWARD -d 192.168.13.1/28 -j DROP
iptables -A FORWARD -d 192.168.14.1/28 -j DROP
iptables -A FORWARD -d 192.168.15.1/28 -j DROP
iptables -A FORWARD -d 192.168.0.1/24 -j DROP
iptables -A FORWARD -s 192.168.13.1/28 -j ACCEPT
iptables -A FORWARD -s 192.168.15.1/28 -j ACCEPT
Если утром придумаю что-то получше - скажу.
Спасибо сказали:
Аватара пользователя
Vadimsky
Сообщения: 30
ОС: Fedora 17

Re: Настройка iptables

Сообщение Vadimsky »

pelmen писал(а):
28.01.2010 17:38
посмотрел ваши правила и понял, что тут много лишнего.
Рассмотрим только ту часть, о которой вы попросили:
iptables -A FORWARD -s 192.168.13.0/28 -d ! 192.168.0.0/16 -j ACCEPT
iptables -A FORWARD -s 192.168.15.0/28 -d ! 192.168.0.0/16 -j ACCEPT

Попробовал так, ничего не вышло.
Ругается что устарело " ! ".
Спасибо сказали:
Аватара пользователя
Vadimsky
Сообщения: 30
ОС: Fedora 17

Re: Настройка iptables

Сообщение Vadimsky »

Alex2ndr писал(а):
28.01.2010 23:19
Не сказа бы что вы забыли какую-то мелочь - вы по моему всю настройку транзитного трафика, которая вам так нужна, забыли. Зато каких-то левых правил хватает за глаза - по объему ваш скрипт вполне похож на то что должно.

Задачи:
1. все подсети eth1 должны иметь доступ к файловой помойке 192.168.0.10 по SMB, и не иметь доступа в друг друга и в остальную сеть 192.168.0.1/24,
2. сеть 192.168.0.1/24 так же не должна иметь доступа в сети интерфейса eth1 второго шлюза.
3. eth1:2 (192.168.13.1/28) и eth1:4 (192.168.15.1/28) должны иметь полный выход в инет, а остальные не должны.

Решения:
Начнем с ната -
/sbin/iptables -t nat -A POSTROUTING -o eth0 -j SNAT --to-source 192.168.0.2
этого вполне за глаза для ваших нужд - не нужен отдельный нат по тсп и удп и тем более ицмп (фильтрацию в таблице nat не проводят)
Затем посмотрим на ваши так называемые ESTABLISHED connection
/sbin/iptables -A FORWARD -i eth0 -m state --state RELATED,ESTABLISHED -j ACCEPT
/sbin/iptables -A FORWARD -i eth1 -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT
и у видим что они вовсе не только установленные - но еще и всё разрешающие изо всех альясов к eth1 - фактически полный доступ всем и вся. Короче делаем из них одно - но проще и правильнее:
/sbin/iptables -A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT
вот только теперь начинаем разрешать то что нужно - сначала просто доступ к файлопомойке
iptables -A FORWARD -s 192.168.11.1/28 -d 192.168.0.10 --dport $SMB -j ACCEPT
iptables -A FORWARD -s 192.168.12.1/28 -d 192.168.0.10 --dport $SMB -j ACCEPT
iptables -A FORWARD -s 192.168.14.1/28 -d 192.168.0.10 --dport $SMB -j ACCEPT
для привилегированных подсетей отдельные правила пошире - но эти же правила разрешают доступ из этих подсетей в остальные подсети. Т к уже вечер и голова у меня варит плоховато, то пока тупо предлагаю их все закрыть:
iptables -A FORWARD -d 192.168.11.1/28 -j DROP
iptables -A FORWARD -d 192.168.12.1/28 -j DROP
iptables -A FORWARD -d 192.168.13.1/28 -j DROP
iptables -A FORWARD -d 192.168.14.1/28 -j DROP
iptables -A FORWARD -d 192.168.15.1/28 -j DROP
iptables -A FORWARD -d 192.168.0.1/24 -j DROP
iptables -A FORWARD -s 192.168.13.1/28 -j ACCEPT
iptables -A FORWARD -s 192.168.15.1/28 -j ACCEPT
Если утром придумаю что-то получше - скажу.


А эта конструкция работает! Кроме Интернета. Респект автору!
NEW - действительно была лишней!
однако в секции INPUT и OUTPUT я её всё-таки оставил, а то по ssh не пускал.
Файловый сервак разрулил между подсетями, а вот к инету теперь ни у кого доступа нету :(
Как я и говорил в первом посте, этот шлюз второй в цепочке. Первым стоит коробка D-link, её внутренний адрес 192.168.0.1, собственно он GW и DNS1.
Так что прописать в неё какие либо правила не получится.
Пробовал в подсетях указывать шлюзом 192.168.11.1 (ну или как кой там по номеру подсети), а DNS - ом 192.168.0.1. и нифига.
Даже правила специально завёл:

Код: Выделить всё

iptables -A FORWARD -s 192.168.14.0/28 -d 192.168.0.1 -j ACCEPT

Но это правило лишь позволяет пинговать коробку и заходить на её веб-интерфейс, и всё. Инета нету (я имею ввиду в подсетях).
В принципе в пятницу он и не нужен был особо, но в понедельник мне придётся его как-то включить.
Поэтому буду благодарен за любую идею!
Ещё раз спасибо за помощь!
Спасибо сказали:
pelmen
Сообщения: 1268
ОС: debian

Re: Настройка iptables

Сообщение pelmen »

Vadimsky писал(а):
29.01.2010 19:32
Ругается что устарело " ! ".
:unsure:
Спасибо сказали:
Аватара пользователя
Alex2ndr
Сообщения: 443
ОС: Debian Lenny

Re: Настройка iptables

Сообщение Alex2ndr »

Vadimsky писал(а):
29.01.2010 19:32
pelmen писал(а):
28.01.2010 17:38
посмотрел ваши правила и понял, что тут много лишнего.
Рассмотрим только ту часть, о которой вы попросили:
iptables -A FORWARD -s 192.168.13.0/28 -d ! 192.168.0.0/16 -j ACCEPT
iptables -A FORWARD -s 192.168.15.0/28 -d ! 192.168.0.0/16 -j ACCEPT

Попробовал так, ничего не вышло.
Ругается что устарело " ! ".

Да все просто - надо поменить местами -d и ! - вот так
iptables -A FORWARD -s 192.168.13.0/28 ! -d 192.168.0.0/16 -j ACCEPT
iptables -A FORWARD -s 192.168.15.0/28 ! -d 192.168.0.0/16 -j ACCEPT
Читайте man iptables

Vadimsky писал(а):
29.01.2010 19:46
А эта конструкция работает! Кроме Интернета. Респект автору!
NEW - действительно была лишней!
однако в секции INPUT и OUTPUT я её всё-таки оставил, а то по ssh не пускал.
Файловый сервак разрулил между подсетями, а вот к инету теперь ни у кого доступа нету :(
Как я и говорил в первом посте, этот шлюз второй в цепочке. Первым стоит коробка D-link, её внутренний адрес 192.168.0.1, собственно он GW и DNS1.
Так что прописать в неё какие либо правила не получится.
Пробовал в подсетях указывать шлюзом 192.168.11.1 (ну или как кой там по номеру подсети), а DNS - ом 192.168.0.1. и нифига.
Даже правила специально завёл:

Код: Выделить всё

iptables -A FORWARD -s 192.168.14.0/28 -d 192.168.0.1 -j ACCEPT

Но это правило лишь позволяет пинговать коробку и заходить на её веб-интерфейс, и всё. Инета нету (я имею ввиду в подсетях).
В принципе в пятницу он и не нужен был особо, но в понедельник мне придётся его как-то включить.
Поэтому буду благодарен за любую идею!
Ещё раз спасибо за помощь!

Возможно что я ошибся - попробуйте вот так

Код: Выделить всё

iptables -A FORWARD -s 192.168.13.0/28 -d 192.168.11.0/28 -j DROP
iptables -A FORWARD -s 192.168.13.0/28 -d 192.168.12.0/28 -j DROP
iptables -A FORWARD -s 192.168.13.0/28 -d 192.168.14.0/28 -j DROP
iptables -A FORWARD -s 192.168.13.0/28 -d 192.168.15.0/28 -j DROP
iptables -A FORWARD -s 192.168.13.0/28 -d 192.168.0.1 -j ACCEPT
iptables -A FORWARD -s 192.168.13.0/28 -d 192.168.0.0/24 -j DROP
iptables -A FORWARD -s 192.168.13.0/28 -j ACCEPT
iptables -A FORWARD -s 192.168.15.0/28 -d 192.168.11.0/28 -j DROP
iptables -A FORWARD -s 192.168.15.0/28 -d 192.168.12.0/28 -j DROP
iptables -A FORWARD -s 192.168.15.0/28 -d 192.168.14.0/28 -j DROP
iptables -A FORWARD -s 192.168.15.0/28 -d 192.168.13.0/28 -j DROP
iptables -A FORWARD -s 192.168.15.0/28 -d 192.168.0.1 -j ACCEPT
iptables -A FORWARD -s 192.168.15.0/28 -d 192.168.0.0/24 -j DROP
iptables -A FORWARD -s 192.168.15.0/28 -j ACCEPT

а еще лучше выложите сюда ваши правила - посмотрим что там получается
а также вывод route -n
Спасибо сказали:
Аватара пользователя
keir
Сообщения: 317
ОС: linux

Re: Настройка iptables

Сообщение keir »

pelmen писал(а):
29.01.2010 20:03
Vadimsky писал(а):
29.01.2010 19:32
Ругается что устарело " ! ".
:unsure:

надо не -d ! , а ! -d .
Trust №1
Спасибо сказали:
Аватара пользователя
Vadimsky
Сообщения: 30
ОС: Fedora 17

Re: Настройка iptables

Сообщение Vadimsky »

Alex2ndr писал(а):
31.01.2010 15:49
......
а еще лучше выложите сюда ваши правила - посмотрим что там получается
а также вывод route -n

Всё, вроде разобрался. Заработало как надо.
Дело было как раз в этом:
iptables -A FORWARD -s 192.168.13.0/28 -j ACCEPT
Спасибо всем откликнувшимся!
При встрече с меня пиво!
:drunk:

keir писал(а):
31.01.2010 16:57
pelmen писал(а):
29.01.2010 20:03
Vadimsky писал(а):
29.01.2010 19:32
Ругается что устарело " ! ".
:unsure:

надо не -d ! , а ! -d .

Спасибо, уже понял.
Хотя сейчас из без неё работает, но на будущее пригодится!
Спасибо сказали:
pelmen
Сообщения: 1268
ОС: debian

Re: Настройка iptables

Сообщение pelmen »

когда встреча? :)
Спасибо сказали:
Аватара пользователя
Vadimsky
Сообщения: 30
ОС: Fedora 17

Re: Настройка iptables

Сообщение Vadimsky »

Ребят, тут ещё такое осложнение.
Файловый сервак - он же контроллер домена. Все компы в подсетях быи в него заведены. (До разбиения на подсетки).
Сейчас доступ к фалам по SMB есть, но только если комп не является членом домена, или если на компе войти админом.
По обычным пользователем пишет что контроллер домена не найден.
Насколько я понимаю клиенты подрубаются к домену так же по SMB? или я что то путаю и для этих целей есть свой порт?
Если есть, то стыдно признаться, но я не знаю какой - не подскажите номер?
Спасибо.
>
>
Встреча по поводу пива?
Да хоть сегодня ;)
Спасибо сказали:
Аватара пользователя
Alex2ndr
Сообщения: 443
ОС: Debian Lenny

Re: Настройка iptables

Сообщение Alex2ndr »

Vadimsky писал(а):
03.02.2010 12:04
Ребят, тут ещё такое осложнение.
Файловый сервак - он же контроллер домена. Все компы в подсетях быи в него заведены. (До разбиения на подсетки).
Сейчас доступ к фалам по SMB есть, но только если комп не является членом домена, или если на компе войти админом.
По обычным пользователем пишет что контроллер домена не найден.
Насколько я понимаю клиенты подрубаются к домену так же по SMB? или я что то путаю и для этих целей есть свой порт?
Если есть, то стыдно признаться, но я не знаю какой - не подскажите номер?
Спасибо.
>
>
Встреча по поводу пива?
Да хоть сегодня ;)

Контроллер домена ищется по записи в днс сервере, который держит зону домена - вам еще нужно к нему доступ разрешить. Обычно этот днс сервер живет на той же машине что и контролер домена.
Спасибо сказали:
Аватара пользователя
Vadimsky
Сообщения: 30
ОС: Fedora 17

Re: Настройка iptables

Сообщение Vadimsky »

Alex2ndr писал(а):
03.02.2010 12:18
Контроллер домена ищется по записи в днс сервере, который держит зону домена - вам еще нужно к нему доступ разрешить. Обычно этот днс сервер живет на той же машине что и контролер домена.

Доступ к днс контоллера домена разрешён (они на одной машине), возможно я его как то не так открыл тогда?
/sbin/iptables -A FORWARD -p udp -s 192.168.13.0/28 -d 192.168.0.10 --dport 53 -j ACCEPT
/sbin/iptables -A FORWARD -p tcp -s 192.168.13.0/28 -d 192.168.0.10 --dport 53 -j ACCEPT

а соответсвие имени задано в C:\WINDOWS\system32\drivers\etc\hosts на клиентских компах

127.0.0.1 localhost
192.168.10 fileserver
Спасибо сказали:
Аватара пользователя
Alex2ndr
Сообщения: 443
ОС: Debian Lenny

Re: Настройка iptables

Сообщение Alex2ndr »

Vadimsky писал(а):
03.02.2010 13:48
Alex2ndr писал(а):
03.02.2010 12:18
Контроллер домена ищется по записи в днс сервере, который держит зону домена - вам еще нужно к нему доступ разрешить. Обычно этот днс сервер живет на той же машине что и контролер домена.

Доступ к днс контоллера домена разрешён (они на одной машине), возможно я его как то не так открыл тогда?
/sbin/iptables -A FORWARD -p udp -s 192.168.13.0/28 -d 192.168.0.10 --dport 53 -j ACCEPT
/sbin/iptables -A FORWARD -p tcp -s 192.168.13.0/28 -d 192.168.0.10 --dport 53 -j ACCEPT

а соответсвие имени задано в C:\WINDOWS\system32\drivers\etc\hosts на клиентских компах

127.0.0.1 localhost
192.168.10 fileserver

если уж в hosts тогда пишите fqdn -
192.168.10 fileserver.mydomain.ru
или как там у вас домен зовется

а правила - смотря где они находятся (по отношению к остальным) - вы бы или полный набор правил давали или поместите их повыше и сделайте для теста попроще -
/sbin/iptables -A FORWARD -s 192.168.13.0/28 -d 192.168.0.10 -j ACCEPT
Спасибо сказали:
pelmen
Сообщения: 1268
ОС: debian

Re: Настройка iptables

Сообщение pelmen »

ну и не мешало бы уточнить адрес в hosts, а то 3 октета это сеть
Спасибо сказали:
ALexhha
Сообщения: 109

Re: Настройка iptables

Сообщение ALexhha »

Контроллер домена ищется по записи в днс сервере, который держит зону домена - вам еще нужно к нему доступ разрешить. Обычно этот днс сервер живет на той же машине что и контролер домена.

только если КД на windows 2k+, если же на самбе то с помощью WINS
Спасибо сказали:
Аватара пользователя
Vadimsky
Сообщения: 30
ОС: Fedora 17

Re: Настройка iptables

Сообщение Vadimsky »

Вообщем решилось всё очень просто.
Поднял на шлюзе ДНС и прописал в нём файловый сервак.
Компы дружно вошли в домен.
По крайней мере пока всё работает, а там посмотрим.
:punk:
Спасибо сказали: