Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Общий по Linux (http://forum.oszone.net/forumdisplay.php?f=9)
-   -   Вопрос по iptables (http://forum.oszone.net/showthread.php?t=75353)

Non-Stop 28-11-2006 18:57 518082

Вопрос по iptables
 
Всем доброго времени суток.
Помогите пожалуйста разобраться с 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 518109

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

Цитата:

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

Non-Stop 28-11-2006 21:12 518125

Благодарю за содействие!
Значится так...
Собссна пытаюсь настроить 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 518266

Я так понял пускать он должен в другую локалку? Если же нет, то удали последнее правило.
Код:

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 518486

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

fossil 29-11-2006 17:33 518529

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

Non-Stop 29-11-2006 17:46 518534

меня получился такой набор правил
##########################
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 518544

Цитата:

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

Non-Stop 29-11-2006 18:20 518558

ясно,,,, а какже запретить приём и отправку почты и icq

fossil 29-11-2006 18:41 518574

Цитата:

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 518600

Статью читаю уже на протяжении недели...
материала слишком много и всё в голове не укладывается

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

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

fossil 29-11-2006 20:37 518630

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

Non-Stop 01-12-2006 14:00 519399

клиент авторизируется с помощью автоизатора и срабатвает скрипт, который добавляет в 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 519411

Понял. Тогда нужно изменять правила в скрипте. Побалуйся там с параметром dport, sport.

Non-Stop 01-12-2006 14:57 519429

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 519485

Цитата:

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 745059

Народ! Подскажите как мне сделать это =) У меня есть веб сервер, который стоит за шлюзом т.е. в локалке, а точнее в ДМЗ. На шлюзе написано правило которое перекидывает 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 745632

Смотришь с какого интерфейса летит пакет. Если это интерфейс который смотрит в локалку то делаешь портмаппинг, а если с другого то направляешь в другую подсеть.
Например 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 745636

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

good A 195.2.4.15

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

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

good.domain.ru:50501

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

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


Время: 13:04.

Время: 13:04.
© OSzone.net 2001-