Войти

Показать полную графическую версию : Вопрос по iptables


Non-Stop
28-11-2006, 18:57
Всем доброго времени суток.
Помогите пожалуйста разобраться с iptables
Ситуация такая:
Есть набор правил

$IPTABLES -P INPUT DROP
$IPTABLES -F INPUT
$IPTABLES -P OUTPUT DROP
$IPTABLES -F OUTPUT
$IPTABLES -P FORWARD DROP
$IPTABLES -F FORWARD
$IPTABLES -t nat -F


$IPTABLES -t filter -A INPUT -p icmp -j ACCEPT
$IPTABLES -t filter -A FORWARD -p icmp -j ACCEPT
$IPTABLES -t filter -A OUTPUT -p icmp -j ACCEPT
########################################################

$IPTABLES -t filter -A INPUT -d 127.0.0.1 -j ACCEPT
$IPTABLES -t filter -A OUTPUT -d 127.0.0.1 -j ACCEPT
##########################################################

#$IPTABLES -t filter -A INPUT -d 192.168.0.0/16 -j ACCEPT
#$IPTABLES -t filter -A OUTPUT -d 192.168.0.0/16 -j ACCEPT
#########################################################

$IPTABLES -t filter -A INPUT -i $EXTIF_LIST -j ACCEPT
$IPTABLES -t filter -A OUTPUT -o $EXTIF_LIST -j ACCEPT
##########################################################

$IPTABLES -t filter -A INPUT -p tcp --sport 53 -j ACCEPT
$IPTABLES -t filter -A FORWARD -p tcp --sport 53 -j ACCEPT
$IPTABLES -t filter -A FORWARD -p tcp --dport 53 -j ACCEPT
$IPTABLES -t filter -A OUTPUT -p tcp --dport 53 -j ACCEPT

$IPTABLES -t filter -A INPUT -p udp --sport 53 -j ACCEPT
$IPTABLES -t filter -A FORWARD -p udp --sport 53 -j ACCEPT
$IPTABLES -t filter -A FORWARD -p udp --dport 53 -j ACCEPT
$IPTABLES -t filter -A OUTPUT -p udp --dport 53 -j ACCEPT
###########################################################
$IPTABLES -t filter -A INPUT -p udp -s 192.168.0.0/24 --sport 7723 -j ACCEPT
$IPTABLES -t filter -A INPUT -p udp -s 192.168.0.0/24 --dport 7723 -j ACCEPT
$IPTABLES -t filter -A OUTPUT -p udp -s 192.168.0.0/24 --sport 7723 -j ACCEPT
$IPTABLES -t filter -A OUTPUT -p udp -s 192.168.0.0/24 --dport 7723 -j ACCEPT

Задача добавить цепочку правил для ip 192.168.0.1 разрешающую ходить везде.

при добавлении цепочки
iptables -t filter -A INPUT -s 192.168.0.1 -j ACCEPT
iptables -t filter -A FORWARD -s 192.168.0.1 -j ACCEPT
iptables -t filter -A FORWARD -d 192.168.0.1 -j ACCEPT
iptables -t filter -A OUTPUT -d 192.168.0.1 -j ACCEPT

Сервер пускает ip 192.168.0.1 в инет, но почемуто не пускает в локальную сеть 192,168,0,0 (((

на команду iptables -L -n для данного ip выдаёт после добавления цепочки выдаёт
chain INPUT (policy DROP)
ACCEPT all -- 192.168.0.1 0.0.0.0/0

Chain FORWARD (policy DROP)
ACCEPT all -- 0.0.0.0/0 192.168.0.1
ACCEPT all -- 192.168.0.1 0.0.0.0/0


Chain OUTPUT (policy DROP)
ACCEPT all -- 0.0.0.0/0 192.168.0.1

Почему не пускает в локалку??????

fossil
28-11-2006, 20:07
По мне так правила очень запутанные, и много ненужных. Все можно сделай намного короче и понятнее.

Сервер пускает ip 192.168.0.1 в инет, но почемуто не пускает в локальную сеть 192,168,0,0 (((
А где находится локальная сеть? Как должен осуществляться доступ в локалку, через маскарадинг?
Или с сервер должен осуществляться доступ?
Ничего непонятно. Скажи лучше что должен делать фаервол, я тебе напишу правила.

Non-Stop
28-11-2006, 21:12
Благодарю за содействие!
Значится так...
Собссна пытаюсь настроить iptables для раздачи инета для локалки. 192.168.0.0
По умолчанию - всё запрещено.
- открыть для ЛС UDP-порт 7723 - этот порт "слушает" серверная часть моего биллинга , для того чтоб осуществлять авторизацию клиентов.
- Разрешить пинги
- Разрешить dns
Можно также разрешить доступ из ЛС к внутреннему веб-серверу, к внутреннему почтовому серверу без авторизации но необязательно, лутше бы конечно чтоб при авторизации просто разрешал данному ip ходить везде
Из необходиміх вроди всё, но может ещё чтото посоветуешь?

Далее клиент авторизируется с помощью автоизатора и срабатівает скрипт, который поидее добавляет в iptables цепочкую разрешающую данному ip ходить в инет и по локалке
вот сам скрипт

#!/usr/bin/perl
#===========================================================================
# &Allow - Разрешение доступа

sub Allow
{
my ($num,$ip,$gorod,$paket,$adm,$dop,$detail) = @_;
unless ($gorod)
{
system ("/sbin/iptables -t filter -A INPUT -s $ip -j ACCEPT");
system ("/sbin/iptables -t filter -A FORWARD -s $ip -j ACCEPT");
system ("/sbin/iptables -t filter -A FORWARD -d $ip -j ACCEPT");
system ("/sbin/iptables -t filter -A OUTPUT -d $ip -j ACCEPT");
}
}
sub Deny
{
my ($num,$ip) = @_;
system("/sbin/iptables -t filter -D INPUT -s $ip -j ACCEPT ");
system("/sbin/iptables -t filter -D FORWARD -s $ip -j ACCEPT ");
system("/sbin/iptables -t filter -D FORWARD -d $ip -j ACCEPT ");
system("/sbin/iptables -t filter -D OUTPUT -d $ip -j ACCEPT ");


}
1;
У меня он почемуто при авторизации пользователя пускал только в интет, в локалку никак (((
команду iptables -L -n описывал выше

fossil
29-11-2006, 08:03
Я так понял пускать он должен в другую локалку? Если же нет, то удали последнее правило.

IPTABLES -F
IPTABLES -t nat -F
IPTABLES -X

IPTABLES -P INPUT DROP
IPTABLES -P OUTPUT ACCEPT
IPTABLES -P FORWARD DROP

IPTABLES -A INPUT -i lo -j ACCEPT
IPTABLES -A INPUT -p UDP -m multiport --dport 53,7723 -j ACCEPT
IPTABLES -A INPUT -p ICMP --icmp-type 8 -j ACCEPT

IPTABLES -A INPUT --source 192.168.0.0/24 -j ACCEPT
IPTABLES -A FORWARD --source 192.168.0.0/24 -j ACCEPT

IPTABLES -t nat -A POSTROUTING -o eth1 -j SNAT --to-source 10.10.10.10

Non-Stop
29-11-2006, 15:51
Благодарю, вроди работает )))
Ещё такой вопрос...
при такой схеме почемуто принимается и отправляется почта через бат , а также работает icq и jabber
можно ли это какимто правилом запретить?

fossil
29-11-2006, 17:33
Попробуй так IPTABLES -A FORWARD --source 192.168.0.0/24 --dport 80 -j ACCEPT
Таким образом мы разрешаем форвард пакетов только на 80 порт.

Non-Stop
29-11-2006, 17:46
меня получился такой набор правил
##########################
IPTABLES -F
IPTABLES -t nat -F
IPTABLES -X

IPTABLES -P INPUT DROP
IPTABLES -P OUTPUT ACCEPT
IPTABLES -P FORWARD DROP

IPTABLES -A INPUT -i lo -j ACCEPT
IPTABLES -A INPUT -p UDP -m multiport --dport 53,7723 -j ACCEPT
IPTABLES -A INPUT -p ICMP --icmp-type 8 -j ACCEPT

IPTABLES -A INPUT -i $EXTIF_LIST -j ACCEPT
IPTABLES -A OUTPUT -i $EXTIF_LIST -j ACCEPT
##################################
EXTIF_LIST - это внешний интерфейс, без него непускал в инет
насколько я понимаю - он разрешает общаться серверу с внешним миром...

fossil
29-11-2006, 17:55
PTABLES -A OUTPUT -i $EXTIF_LIST -j ACCEPT
OUTPUT у тебя и так открыт по дефолту, это пакеты с сервера.

Non-Stop
29-11-2006, 18:20
ясно,,,, а какже запретить приём и отправку почты и icq

fossil
29-11-2006, 18:41
IPTABLES -A INPUT -i $EXTIF_LIST -j ACCEPT
Тебе нужно указать помимо интерфейса источника. Допустим --source 192.168.0.0/24. Определенную подсеть в которую юзеры попадают после авторизации. Иначе при таком правиле у тебя все будут получать интернет.
Параметр --dport указывает на какой порт придет пакет.
Вобщем почитай на досуге, полезно http://www.opennet.ru/docs/RUS/iptables/

Non-Stop
29-11-2006, 19:21
Статью читаю уже на протяжении недели...
материала слишком много и всё в голове не укладывается

Гораздо лутше материал усваивается на наглядных примерах

За что Вам огромное СПАСИБО!

fossil
29-11-2006, 20:37
У меня на сервере так:
Юзеры цепляются по VPN к серверу, попадают в виртуальную сеть. И затем я разрешаю (с помощью NAT) с ихнего интерфейса и их IP доступ, в интернет.
У каждого юзера есть свой pppN интерфейс. Я не понимаю как у тебя юзеры авторизируются и как им доступ должен осуществляться в инет.

Non-Stop
01-12-2006, 14:00
клиент авторизируется с помощью автоизатора и срабатвает скрипт, который добавляет в iptables цепочкую разрешающую данному ip ходить в инет и по локалке после выхода из авторизатора - правила для данного айпи убирается...

sub Allow - разрешение доступа
sub Deny - запрет

вот сам скрипт

#!/usr/bin/perl
#===========================================================================
# &Allow - Разрешение доступа

sub Allow
{
my ($num,$ip,$gorod,$paket,$adm,$dop,$detail) = @_;
unless ($gorod)
{
system ("/sbin/iptables -t filter -A INPUT -s $ip -j ACCEPT");
system ("/sbin/iptables -t filter -A FORWARD -s $ip -j ACCEPT");
system ("/sbin/iptables -t filter -A FORWARD -d $ip -j ACCEPT");
system ("/sbin/iptables -t filter -A OUTPUT -d $ip -j ACCEPT");
}
}
sub Deny
{
my ($num,$ip) = @_;
system("/sbin/iptables -t filter -D INPUT -s $ip -j ACCEPT ");
system("/sbin/iptables -t filter -D FORWARD -s $ip -j ACCEPT ");
system("/sbin/iptables -t filter -D FORWARD -d $ip -j ACCEPT ");
system("/sbin/iptables -t filter -D OUTPUT -d $ip -j ACCEPT ");


}
1;

fossil
01-12-2006, 14:24
Понял. Тогда нужно изменять правила в скрипте. Побалуйся там с параметром dport, sport.

Non-Stop
01-12-2006, 14:57
fossil если можно поподробнее...
Ситуация следующая...
В данный момент скрипт инеет такое содержание
IPTABLES -F
IPTABLES -t nat -F
IPTABLES -X

IPTABLES -P INPUT DROP
IPTABLES -P OUTPUT ACCEPT
IPTABLES -P FORWARD DROP

IPTABLES -A INPUT -i lo -j ACCEPT
IPTABLES -A INPUT -p UDP -m multiport --dport 53,7723 -j ACCEPT
IPTABLES -A INPUT -p ICMP --icmp-type 8 -j ACCEPT

IPTABLES -A INPUT -i $EXTIF_LIST -j ACCEPT
IPTABLES -A OUTPUT -i $EXTIF_LIST -j ACCEPT
##################################
EXTIF_LIST - это внешний интерфейс, без него непускал в инет
насколько я понимаю - он разрешает общаться серверу с внешним миром...

При таком наборе правил даже без авторизации, клиентская машина в сети 192,168,0,0/24 может забрать отправить почту в/из мира, работает ICQ, Jabber

Как это можно устранить...
желательно всё приблизить к минимуму, чтобы был минимальный набор правил по умолчанию запрещающий все пакеты из любого адреса сети 192.168.0.0 кроме UDP 7723 - это порт для авторизации клиента на сервере
IPTABLES -A INPUT -p UDP -m multiport --dport 53,7723 -j ACCEPT
IPTABLES -A INPUT -p ICMP --icmp-type 8 -j ACCEPT

fossil
01-12-2006, 17:03
IPTABLES -A INPUT -i $EXTIF_LIST -j ACCEPT
IPTABLES -A OUTPUT -i $EXTIF_LIST -j ACCEPT
Убери это из основного правила и проиши в скрипт для включения и отключения. К примеру для включения так:

system ("/sbin/iptables -t filter -A INPUT -i $EXTIF_LIST -s $ip -j ACCEPT");
system ("/sbin/iptables -t filter -A FORWARD -i $EXTIF_LIST -s $ip --dport 80 -j ACCEPT");

Впринципе при таком правиле включения, должен разрешаться только HTTP.

Neteru
20-02-2008, 22:54
Народ! Подскажите как мне сделать это =) У меня есть веб сервер, который стоит за шлюзом т.е. в локалке, а точнее в ДМЗ. На шлюзе написано правило которое перекидывает 80 порт с внешнего ИПА на мой внутр. веб-сервер. Потом я добавил правило которое при обращении на мой веб-сервер по порту 50501, т.е. набираем www.domain.ru:50501, перекидывало это соединение на 192.168.0.166 - и все замечательно из Инета работает! Потом от меня потребывалось сделать так что бы и из локалки при наборе www.domain.ru:50501 попадать на 192.168.0.166 и тут я уже че только не делал все не получается!

Одна надежда что тут кто подскажит!

И так что имеем:

195.1.2.4 - $EXT_IP - внешний ip;

195.1.2.5 - $EXT_IP_WEB_SRV - внешний ip для HTTP (алиас);

192.168.0.1 - $LOCAL_GW_IP - внутр. ip шлюза;

192.168.4.2 - $LOCAL_HTTP_IP - внут. ip HTTP сервака;

192.168.0.166 - $LOCAL_HTTP_SRV_IP_PORT_50501 - др. машина на которую должно все перекидываться при наборе www.domain.ru:50501 из локалки.

fossil
21-02-2008, 18:37
Смотришь с какого интерфейса летит пакет. Если это интерфейс который смотрит в локалку то делаешь портмаппинг, а если с другого то направляешь в другую подсеть.
Например eth0 это внешняя сеть, а eth1 внутреняя.

IPTABLES -t nat -A PREROUTING -i eth0 -p TCP --source 195.1.2.4/24 --dport 50501 -j DNAT --to-destination 192.168.0.166:50501

Возможно я не прав, пишу полу сонный. Напишите какие правила у вас уже есть, и правильно ли своим правилом я вас понял.

Neteru
21-02-2008, 18:51
Все, ребята не парьтесь! Решил проблему в итоге за 4 минуты. Вспомнил что есть свободный ip в инет, а в bind прописал типа такого:

good A 195.2.4.15

в iptables добавил правило на проброс на 0.166 порт 50501 т.к. владелец этой машины и сервиса (IIS) корорый должен быть доступен из Инета только по порту 50501 " - Так безопасней!" =))

В итоге получил:

good.domain.ru:50501

и из локалки все работает шоколадно! =)

В любом случае всем большое спасибо т.к. именно разговор про bind`ы навел меня на это!




© OSzone.net 2001-2012