Показать полную графическую версию : Вопрос по 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
Почему не пускает в локалку??????
По мне так правила очень запутанные, и много ненужных. Все можно сделай намного короче и понятнее.
Сервер пускает 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 описывал выше
Я так понял пускать он должен в другую локалку? Если же нет, то удали последнее правило.
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
можно ли это какимто правилом запретить?
Попробуй так 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 - это внешний интерфейс, без него непускал в инет
насколько я понимаю - он разрешает общаться серверу с внешним миром...
PTABLES -A OUTPUT -i $EXTIF_LIST -j ACCEPT
OUTPUT у тебя и так открыт по дефолту, это пакеты с сервера.
Non-Stop
29-11-2006, 18:20
ясно,,,, а какже запретить приём и отправку почты и icq
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
Статью читаю уже на протяжении недели...
материала слишком много и всё в голове не укладывается
Гораздо лутше материал усваивается на наглядных примерах
За что Вам огромное СПАСИБО!
У меня на сервере так:
Юзеры цепляются по 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;
Понял. Тогда нужно изменять правила в скрипте. Побалуйся там с параметром 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
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.
Народ! Подскажите как мне сделать это =) У меня есть веб сервер, который стоит за шлюзом т.е. в локалке, а точнее в ДМЗ. На шлюзе написано правило которое перекидывает 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 из локалки.
Смотришь с какого интерфейса летит пакет. Если это интерфейс который смотрит в локалку то делаешь портмаппинг, а если с другого то направляешь в другую подсеть.
Например 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
Возможно я не прав, пишу полу сонный. Напишите какие правила у вас уже есть, и правильно ли своим правилом я вас понял.
Все, ребята не парьтесь! Решил проблему в итоге за 4 минуты. Вспомнил что есть свободный ip в инет, а в bind прописал типа такого:
good A 195.2.4.15
в iptables добавил правило на проброс на 0.166 порт 50501 т.к. владелец этой машины и сервиса (IIS) корорый должен быть доступен из Инета только по порту 50501 " - Так безопасней!" =))
В итоге получил:
good.domain.ru:50501
и из локалки все работает шоколадно! =)
В любом случае всем большое спасибо т.к. именно разговор про bind`ы навел меня на это!
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.