91

Ребят, возникла проблема:

делаю шлюз на debian dhcp+squid+iptables

dhcp - заработал
squid - запустился
c iptables - возникла проблема

у меня 2 интерфейса eth0 - раздает локальную сеть
eth1 - раздает интернет

eth0 = 192.168.10.1
eth1 = 10.10.10.2

DNS провайдера: 10.10.10.35 и 10.10.9.202

прописываю:

/etc/resolv.conf


nameserver 10.10.10.35
nameserver 10.10.9.202

Конфигурирую интерфейсы

/etc/network/interfaces


auto lo
iface lo inet loopback

# Внешняя карта
auto eth1
iface eth1 inet static
address 10.10.10.2
netmask 255.255.255.252
gateway 10.10.10.1

#Внутрисетевая карта
auto eth0
iface eth0 inet static
address 192.168.10.1
network 192.168.20.0
netmask 255.255.255.0
broadcast 192.168.10.255

Подключаю интернет все работает

далее делаю DHCP

#Конфигурация для 2 интерфейсов с 2мя подсетями
ddns-update-style none;
default-lease-time 604800;
max-lease-time 864001;

# Логирование работы сервера
log-facility local7;

#Подсеть адресов для выдачи клиентам, DNS доменное имя, широковещательный адрес, и диапазон выдаваемых адресов.

subnet 192.168.10.0 netmask 255.255.255.0 {
range 192.168.10.10 192.168.10.120;
option domain-name-servers 192.168.10.1;
option routers 192.168.10.1;
option subnet-mask 255.255.255.0;
option broadcast-address 192.168.10.255;
default-lease-time 604800;
max-lease-time 864001;
}

DHCP работает, компьютеры получают ip

далее делаю файл iptables:

#
# /usr/local/firewall.sh
#

#!/bin/sh
IPTABLES="/sbin/iptables"

# Очищаем все правила в таблицах filter, nat и mangle
$IPTABLES -t filter -F
$IPTABLES -t nat -F
$IPTABLES -t mangle -F

# Удаляем все пользовательские цепочки в таблицах filter, nat и mangle
$IPTABLES -t filter -X
$IPTABLES -t nat -X
$IPTABLES -t mangle -X

# Задаем политики по умолчанию
$IPTABLES -t filter -P INPUT DROP
$IPTABLES -t filter -P FORWARD DROP
$IPTABLES -t filter -P OUTPUT DROP

# Создаем пользовательские цепочки.
$IPTABLES -N eth0-eth1
$IPTABLES -N eth1-eth0
$IPTABLES -N eth1-out
$IPTABLES -N eth0-out
$IPTABLES -N eth1-in
$IPTABLES -N eth0-in
$IPTABLES -N icmp_packets

# Направляем все входящие пакеты в соответствующие цепочки.

$IPTABLES -A INPUT -d 192.168.10.1 -j eth0-in
$IPTABLES -A INPUT -d 10.10.10.2 -j eth1-in

# Направляем все исходящие пакеты в соответствующие цепочки.

$IPTABLES -A OUTPUT -s 192.168.0.1 -j eth0-out
$IPTABLES -A OUTPUT -s 10.10.10.2 -j eth1-out

# Разрешаем весь трафик с петлевого интерфейса.

$IPTABLES -A INPUT -i lo -j ACCEPT
$IPTABLES -A OUTPUT -o lo -j ACCEPT

# Разрешаем следующие типы icmp пакетов.

$IPTABLES -A icmp_packets -p icmp --icmp-type 0 -j ACCEPT
$IPTABLES -A icmp_packets -p icmp --icmp-type 3 -j ACCEPT
$IPTABLES -A icmp_packets -p icmp --icmp-type 8 -j ACCEPT
$IPTABLES -A icmp_packets -p icmp --icmp-type 11 -j ACCEPT

$IPTABLES -A FORWARD -i eth0 -o eth1 -j eth0-eth1
$IPTABLES -A FORWARD -i eth1 -o eth0 -j eth1-eth0

# eth0-eth1. В данную цепочку попадают все транзитные пакеты,
# направленные из локальной сети в мир.

$IPTABLES -A eth0-eth1 -p icmp -j icmp_packets
$IPTABLES -A eth0-eth1 -m state --state RELATED,ESTABLISHED -j ACCEPT
$IPTABLES -A eth0-eth1 -j DROP

# eth2-eth0. В данную цепочку попадают все транзитные пакеты,
# направленные из мира в локальную сеть.

$IPTABLES -A eth1-eth0 -m state --state RELATED,ESTABLISHED -j ACCEPT
$IPTABLES -A eth1-eth0 -j DROP

# eth0-in. В данной цепочке открываем порты тех служб, которые
# должны быть доступны на сервере из локальной сети.

$IPTABLES -A eth0-in -p icmp -j icmp_packets
$IPTABLES -A eth0-in -p tcp --dport 22 -j ACCEPT
$IPTABLES -A eth0-in -p udp --dport 53 -j ACCEPT
$IPTABLES -A eth0-in -p tcp --dport 3128 -j ACCEPT
$IPTABLES -A eth0-in -j DROP

# eth1-in. В данной цепочке открываем порты тех служб, которые
# должны быть доступны на сервере из внешнего мира.

$IPTABLES -A eth1-in -p icmp -j icmp_packets
$IPTABLES -A eth1-in -p udp --dport 53 -j ACCEPT
$IPTABLES -A eth1-in -p udp --dport 67 --sport 68 -j ACCEPT
$IPTABLES -A eth1-in -p tcp --dport 3128 -j ACCEPT
$IPTABLES -A eth1-in -j DROP

# eth0-out.

$IPTABLES -A eth0-out -p icmp -j icmp_packets
$IPTABLES -A eth0-out -m state --state RELATED,ESTABLISHED -j ACCEPT
$IPTABLES -A eth0-out -j DROP

# eth1-out.

$IPTABLES -A eth1-out -p icmp -j icmp_packets
$IPTABLES -A eth1-out -p udp --dport 53 -j ACCEPT
$IPTABLES -A eth1-out -p tcp -m multiport --dport 80,443,8080 -j ACCEPT
$IPTABLES -A eth1-out -m state --state RELATED,ESTABLISHED -j ACCEPT
$IPTABLES -A eth1-out -j DROP

# Производим сетевую трансляцию адресов (NAT)

$IPTABLES -t nat -A POSTROUTING -s 192.168.10.0/24 \
-o eth1 -j SNAT --to-source 10.10.10.2

# "Заварачиваем" весь http трафик на squid.

$IPTABLES -t nat -A PREROUTING -s 192.168.10.0/24 \
-i eth1 -p tcp -m multiport --dport 80,8080 -j REDIRECT --to-ports 3128

далее конфигурирую сквид:

http_port 192.168.10.1:3128 transparent
acl all src 0.0.0.0/0.0.0.0
acl lan src 192.168.10.0/24
http_access allow lan
http_access deny all

в файле sysctl делаю net.ipv4.ip_forward="1"

в файле ip_forwarding делаю значение 1

далее выполняю chmod +x /usr/local/firewall.sh
запускаю его, правила загружаются

стартую dhcp, squid

локальный ip получился, squid стартанул

пробую зайти в интернет с локальной машины - не работает
пробую пинговать с сервера - тоже не работает


что я неправильно сделал?

92

mastahcookie пишет:

у меня 2 интерфейса eth0 - раздает локальную сеть
eth1 - раздает интернет

Немного не понял, какая смотрит в интернет, а какая в локалку ?

mastahcookie пишет:

$IPTABLES -t nat -A POSTROUTING -s 192.168.10.0/24 \
-o eth1 -j SNAT --to-source 10.10.10.2

Судя по этому правилу eth1 - смотрит в инет

mastahcookie пишет:

$IPTABLES -t nat -A PREROUTING -s 192.168.10.0/24 \
-i eth1 -p tcp -m multiport --dport 80,8080 -j REDIRECT --to-ports 3128

А по этому , что eth1 смотрит в локалку

93

eth1 - смотрит в инет

eth0 - смотрит в локалку

94 (24.03.2011 22:12:22 отредактировано inettel)

Тогда

$IPTABLES -t nat -A PREROUTING -s 192.168.10.0/24 -i eth0 -p tcp -m multiport --dport 80,8080 -j REDIRECT --to-ports 3128
$IPTABLES -t nat -A POSTROUTING -s 192.168.10.0/24 -o eth1 -j SNAT --to-source 10.10.10.2

На eth0 в цепочке INPUT открой порт 3128

А вобще, лучше поставь пока политики по умолчанию в ACCEPT, а когда добьешся, что интернет раздается, меняй на DROP, по одиночке, так быстрее ошибку отловиш, если она есть.

п.с.  правила в конце твоих цепочек, навроде

$IPTABLES -A eth1-in -j DROP

лишние, у тебя итак политики DROP
И дополнительных цепочек, ты наплодил.... не поскупился, проследить прохождене пакета "на глазок" так гораздо труднее

95

iptables -A INPUT -i $inet -p tcp --sport 80 -j ACCEPT
iptables -A OUTPUT -o $inet -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -i $inet -p tcp --sport 22 -j ACCEPT
iptables -A OUTPUT -o $inet -p tcp --dport 22 -j ACCEPT
iptables -A INPUT -i $inet -p tcp --sport 21 -j ACCEPT
iptables -A OUTPUT -o $inet -p tcp --dport 21 -j ACCEPT

Почему не работают правила? Пытаюсь зайти с инета на http, ftp, ssh и не могу

MX 23.6 Libretto x86_64
Чем больше я работаю админом, тем больше понимаю, насколько волшебна фраза - "Нет технической возможности!"

96

--=XliN=--, убери запрет на OUTPUT. Должно заработать. Если заработает читай как работает протокол tcp. А конкретно про то как устанавливаются соединения. Пакетики не обязательно с твоей машины бегут с 21,22 и 80-го портов bx.

97

elve пишет:

Пакетики не обязательно с твоей машины бегут с 21,22 и 80-го портов

Пакетики как раз и бегут с этих портов.

elve пишет:

убери запрет на OUTPUT. Должно заработать.

Мне нужно что бы она закрытая была.

MX 23.6 Libretto x86_64
Чем больше я работаю админом, тем больше понимаю, насколько волшебна фраза - "Нет технической возможности!"

98

Я предлагаю для теста так сделать. Далее будет понятно где искать проблему =). А вообще неплохо бы весь конфиг увидеть, т.к. резаться трафик может быть в каких-то других местах конфига.

99

--=XliN=-- пишет:

iptables -A INPUT -i $inet -p tcp --sport 80 -j ACCEPT
iptables -A OUTPUT -o $inet -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -i $inet -p tcp --sport 22 -j ACCEPT
iptables -A OUTPUT -o $inet -p tcp --dport 22 -j ACCEPT
iptables -A INPUT -i $inet -p tcp --sport 21 -j ACCEPT
iptables -A OUTPUT -o $inet -p tcp --dport 21 -j ACCEPT

Почему не работают правила? Пытаюсь зайти с инета на http, ftp, ssh и не могу

Если ftp ssh и http находятся на твоем компе, а ты пытаешся зайти на них с инета, то --sport и --dport  перепутаны местами

iptables -A INPUT -i $inet -p tcp --dport 80 -j ACCEPT
iptables -A OUTPUT -o $inet -p tcp --sport 80 -j ACCEPT

и т.д.

100

inettel пишет:

Если ftp ssh и http находятся на твоем компе, а ты пытаешся зайти на них с инета, то --sport и --dport  перепутаны местами

В том то и дело. Если я меняю местами, то можно зайти. Сам не пробовал, просил друзей зайти. Я хочу удаленно заходить на сервер из дома, вот основная задача. Прикол в том, что если сделаю nmap, то мне пишет что эти порты открыты но не пускает.
Предлагаете поменять местами dport и sport?

inettel пишет:

А вообще неплохо бы весь конфиг увидеть, т.к. резаться трафик может быть в каких-то других местах конфига.

Не могу. Сервер на работе, а я дома ))) В понедельник покажу, тем паче собирался его переделывать.

MX 23.6 Libretto x86_64
Чем больше я работаю админом, тем больше понимаю, насколько волшебна фраза - "Нет технической возможности!"

101

--=XliN=-- пишет:

В том то и дело. Если я меняю местами, то можно зайти. Сам не пробовал, просил друзей зайти. Я хочу удаленно заходить на сервер из дома, вот основная задача. Прикол в том, что если сделаю nmap, то мне пишет что эти порты открыты но не пускает.
Предлагаете поменять местами dport и sport?

на том компе, на котором http-сервер

INPUT -p tcp --dport 80 ACCEPT
OUTPUT -p tcp --sport  80 ACCEPT

на том компе, с которого заходиш

INPUT -p tcp --sport 80 ACCEPT
OUTPUT -p tcp --dport  80 ACCEPT

102

Имхо правильнее будет сделать так:

/sbin/iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

а ветку

OUTPUT -p tcp --dport  80 ACCEPT

убрать совсем

Истина ускользает от тех кто отказывается её видеть обоими глазами.
Талантам нужно помогать, бездарности пробьются сами.
В Туле настолько суровые парни, что вместо пены для бритья, используют пену монтажную.
cat /broken/hands > /dev/null

103

--=XliN=--
Я не помню твой скрипт до конца но скинь в асю я точно покажу куда вставить правила.
Просто у тя tc как бы его не угробить.
А так тебе как пример

# Разрешаем ssh серверу
iptables -A INPUT -i vlan5 -s 192.168.128.0/24 -p tcp --dport 22 -j ACCEPT
iptables -A OUTPUT -o vlan5 -d 192.168.128.0/24 -p tcp --sport  22 -j ACCEPT
wink

Ищу дополнительный заработок (удалёнка).
Пьянка без секса – признак алкоголизма.

104

Vadimsky пишет:

Имхо правильнее будет сделать так:

/sbin/iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

а ветку

OUTPUT -p tcp --dport  80 ACCEPT

убрать совсем

Видимо опечатка, такие правила запретят утановку любого нового соединения с http сервером, наверно имелось ввиду

/sbin/iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

105 (28.03.2011 14:56:10 отредактировано funky)

добрый день!

пытаюсь поднять шлюз, который раздает интернет локальной сети на debian squeezee

есть несколько вопросов касательно dhcp и iptables:

у меня 2 карточки:

eth0 = смотрит в локальную сеть

eth1 = смотрит в интернет

1-й вопрос:

я сконфигурировал dhcp сервер, ip раздаются, есть провайдер со статическим ip адресом и 2-мя DNS серверами. Как сделать так, чтобы не надо было прописывать DNS провайдера на каждой клиентской машине?

Я прописал ip адреса в конфиге isc-dhcp-server.

Вот листинг:

ddns-update-style none;
default-lease-time 604800;
max-lease-time 864001;
autoritative;
log-facility local7;


subnet 192.168.10.0 netmask 255.255.255.0 {
range 192.168.10.10 192.168.10.120;
option domain-name-servers 20.20.19.3, 20.20.18.1;
option routers 192.168.10.1;
option subnet-mask 255.255.255.0;
option broadcast-address 192.168.10.255;
default-lease-time 604800;
max-lease-time 864001;
}

Правильно ли я сделал? или надо делать как-то по-другому?


2-й вопрос:

Правильно ли я открываю порты в iptables с учетом того, что пользователи будут ходить по http через squid?

вот листинг iptables:

#!/bin/sh

### Определяем переменные
lan="eth0"
lanrange="192.168.10.0/255.255.255.0"

wan="eth1"
wanip="20.10.14.25"

lo="127.0.0.1"

# Очищаем все правила в таблицах filter, nat и mangle
iptables -t filter -F
iptables -t nat -F
iptables -t mangle -F

# Задаем политики по умолчанию
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT DROP

# Разрешаем прохождение любого траффика по петлевому интерфейсу
iptables -A INPUT -i $lo -j ACCEPT
iptables -A OUTPUT -o $lo -j ACCEPT

# Cбрасываем пакеты со статусом INVALID 
iptables -A INPUT -m state --state INVALID -j DROP
iptables -A FORWARD -m state --state INVALID -j DROP

# Пропускаем пакеты уже установленных соединений
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT

#80
iptables -A INPUT -p tcp -i $wan --dport 80 -m state --state NEW -j ACCEPT
iptables -A OUTPUT -p tcp -o $wan --sport 80 -m state --state NEW -j ACCEPT

#8080
iptables -A INPUT -p tcp -i $wan --dport 8080 -m state --state NEW -j ACCEPT
iptables -A OUTPUT -p tcp -o $wan --sport 8080 -m state --state NEW -j ACCEPT

#ICQ
iptables -A INPUT -p tcp -i $wan --dport 5190 -m state --state NEW -j ACCEPT
iptables -A OUTPUT -p tcp -o $wan --sport 5190 -m state --state NEW -j ACCEPT

#DNS
iptables -A INPUT -p udp -i $wan --dport 53 -m state --state NEW -j ACCEPT
iptables -A OUTPUT -p udp -o $wan --sport 53 -m state --state NEW -j ACCEPT

#SMTP
iptables -A INPUT -p tcp -i $wan --dport 465 -m state --state NEW -j ACCEPT
iptables -A OUTPUT -p tcp -o $wan --sport 465 -m state --state NEW -j ACCEPT
iptables -A INPUT -p tcp -i $wan --dport 587 -m state --state NEW -j ACCEPT
iptables -A OUTPUT -p tcp -o $wan --sport 587 -m state --state NEW -j ACCEPT

#POP
iptables -A INPUT -p tcp -i $wan --dport 995 -m state --state NEW -j ACCEPT
iptables -A OUTPUT -p tcp -o $wan --sport 995 -m state --state NEW -j ACCEPT

#IMAP
iptables -A INPUT -p tcp -i $wan --dport 993 -m state --state NEW -j ACCEPT
iptables -A OUTPUT -p tcp -o $wan --sport 993 -m state --state NEW -j ACCEPT

#SQUID
iptables -A INPUT -p tcp -i $wan --dport 3128 -m state --state NEW -j ACCEPT
iptables -A OUTPUT -p tcp -o $wan --sport 3128 -m state --state NEW -j ACCEPT


#Перенаправляем на SQUID
iptables -t nat -A PREROUTING -s $lanrange -i $lan -p tcp -m multiport --dports 80,8080 -j REDIRECT --to-ports 3128

#Включаем NAT
iptables -t nat -A POSTROUTING -s $lanrange -o $wan -j SNAT --to-source $wanip

Может какие-нибудь будут еще замечания?

106 (28.03.2011 18:23:18 отредактировано inettel)

funky пишет:

я сконфигурировал dhcp сервер, ip раздаются, есть провайдер со статическим ip адресом и 2-мя DNS серверами. Как сделать так, чтобы не надо было прописывать DNS провайдера на каждой клиентской машине?

за это отвечает строчка

option domain-name-servers 20.20.19.3, 20.20.18.1;

должно работать

funky пишет:

Правильно ли я открываю порты в iptables с учетом того, что пользователи будут ходить по http через squid?

правила

# Cбрасываем пакеты со статусом INVALID 
iptables -A INPUT -m state --state INVALID -j DROP
iptables -A FORWARD -m state --state INVALID -j DROP

лишние, политики итак DROP

на счет правил

#80
iptables -A INPUT -p tcp -i $wan --dport 80 -m state --state NEW -j ACCEPT
iptables -A OUTPUT -p tcp -o $wan --sport 80 -m state --state NEW -j ACCEPT

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

107

Kettler пишет:

Я не помню твой скрипт до конца но скинь в асю я точно покажу куда вставить правила.
Просто у тя tc как бы его не угробить.

Пока нет времени... кабелируем этаж и руки не дойдут до сервера. Завтра сюда скину скрипт iptables + tc почищенный, заодно проверите его.

MX 23.6 Libretto x86_64
Чем больше я работаю админом, тем больше понимаю, насколько волшебна фраза - "Нет технической возможности!"

108

У тебя в  tc надо переделать prio она коза не так чуть пашет ну это мелочь smile

Ищу дополнительный заработок (удалёнка).
Пьянка без секса – признак алкоголизма.

109

funky
Ставь кеширующий dns сервер на основе bind
Как уже подсказал inettel добавь в dhcp строку option domain-name-servers 192.168.10.0;

На счёт iptables могу посоветовать  ток лучше скажи что и как а тут напишут готовый на твою душу.

Ищу дополнительный заработок (удалёнка).
Пьянка без секса – признак алкоголизма.

110

Kettler пишет:

funky
Ставь кеширующий dns сервер на основе bind
Как уже подсказал inettel добавь в dhcp строку option domain-name-servers 192.168.10.0;

На счёт iptables могу посоветовать  ток лучше скажи что и как а тут напишут готовый на твою душу.

с кеширующим DNS не сработает, т.к. его нужно руками прописывать (такой вот провайдер)

Попробовал скрипт свой, не заработало. попробовал переделать на время тестирования разрешив все.

Получилось вот так:

#!/bin/sh

### Определяем переменные
lan="eth0"
lanrange="192.168.10.0/255.255.255.0"

wan="eth1"
wanip="10.107.10.22"

lo="127.0.0.1"

# Очищаем все правила в таблицах filter, nat и mangle
iptables -t filter -F
iptables -t nat -F
iptables -t mangle -F

# Задаем политики по умолчанию
iptables -P INPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -P OUTPUT ACCEPT

# Разрешаем прохождение любого траффика по петлевому интерфейсу
iptables -A INPUT -i $lo -j ACCEPT
iptables -A OUTPUT -o $lo -j ACCEPT

# Пропускаем пакеты уже установленных соединений
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT

#Перенаправляем на SQUID
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 3128

#Включаем NAT
iptables -t nat -A POSTROUTING -s 192.168.10.0/24 -o eth1 -j SNAT --to-source 10.107.10.22

Заработало, инет раздается, пинги идут, сквид прозрачно работает.

Но, естественно, такая система не пойдет, поэтому не могли бы вы объяснить как открывать и закрывать порты нужные?

допустим мне нужно открыть: 80,8080,443,22,21,465,587,995
как это правильнее сделать?

111

собственно шлюз пока нужен для доступа в интернет + dhcp + proxy

112 (28.03.2011 19:59:08 отредактировано inettel)

У вас

#80
iptables -A INPUT -p tcp -i $wan --dport 80 -m state --state NEW -j ACCEPT
iptables -A OUTPUT -p tcp -o $wan --sport 80 -m state --state NEW -j ACCEPT

Должно быть

#80
iptables -A INPUT -p tcp -i $wan --sport 80 -m state --state NEW -j ACCEPT
iptables -A OUTPUT -p tcp -o $wan --dport 80 -m state --state NEW -j ACCEPT

и так далее.

Всякие icq, pop3 через цепочки INPUT/OUTPUT не пойдут, пойдут через FORWARD

113

inettel пишет:

У вас

#80
iptables -A INPUT -p tcp -i $wan --dport 80 -m state --state NEW -j ACCEPT
iptables -A OUTPUT -p tcp -o $wan --sport 80 -m state --state NEW -j ACCEPT

Должно быть

#80
iptables -A INPUT -p tcp -i $wan --sport 80 -m state --state NEW -j ACCEPT
iptables -A OUTPUT -p tcp -o $wan --dport 80 -m state --state NEW -j ACCEPT

и так далее.

Всякие icq, pop3 через цепочки INPUT/OUTPUT не пойдут, пойдут через FORWARD

а почему через FORWARD?

114 (29.03.2011 05:27:18 отредактировано funky)

iptables -A FORWARD -i eth1 -p tcp --sport 110 -j ACCEPT 
iptables -A FORWARD -i eth1 -p tcp --sport 25 -j ACCEPT 


т.е вот так открывать порты для поп3?

не могли бы вы привести пример чтобы до конца разобраться?

115 (29.03.2011 07:11:27 отредактировано inettel)

funky пишет:

а почему через FORWARD?

http://www.opennet.ru/docs/RUS/iptables … NGOFTABLES
Вот тут все подробно описано, с картинками, очень советую.

funky пишет:

не могли бы вы привести пример чтобы до конца разобраться?

например pop3

iptables -A FORWARD -i eth0 -o eth1  -p tcp --dport 110 -j ACCEPT 
iptables -A FORWARD -i eth1 -o eth0 -p tcp --sport 110 -j ACCEPT

116

Вот рабочий скрипт. Что не так? Не могу зайти из дома хоть тресни.

+ открыть спойлер

#!/bin/bash
inet="ppp0"
echo "1" > /proc/sys/net/ipv4/ip_forward
echo 1 > /proc/sys/net/ipv4/ip_dynaddr
modprobe iptable_nat
modprobe ip_conntrack_ftp
modprobe ip_nat_ftp
iptables -F
iptables -F -t nat
iptables -F -t mangle

iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -P FORWARD DROP

#Маскардинг в инет и локалку
iptables --table nat --append POSTROUTING --out-interface vlan3 -j MASQUERADE
iptables --table nat --append POSTROUTING --out-interface vlan4 -j MASQUERADE
iptables --table nat --append POSTROUTING --out-interface ppp0 -j MASQUERADE
iptables -I FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu

#iptables -A FORWARD -i vlan3 -s 192.168.3.250 -o ppp0 -j DROP
#iptables -A FORWARD -i vlan3 -s 192.168.3.249 -o ppp0 -j DROP

#Разрешаем гулять всем подсетям
iptables -A FORWARD -i vlan4 -o vlan3 -j ACCEPT
iptables -A FORWARD -i vlan3 -o vlan4 -j ACCEPT
# разрешаем локальный траффик для локальной сети
iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT

iptables -A INPUT -i vlan3 -j ACCEPT
iptables -A OUTPUT -o vlan3 -j ACCEPT

iptables -A INPUT -i vlan4 -j ACCEPT
iptables -A OUTPUT -o vlan4 -j ACCEPT

# ICMP разрешаем пинг с локальной сети провайдера до сервера
iptables -A INPUT -i $inet -p icmp -j ACCEPT
iptables -A OUTPUT -o $inet -p icmp -j ACCEPT

# Отбрасывать все пакеты, которые не могут быть идентифицированы и поэтому не могут иметь определенного статуса.
iptables -A INPUT -m state --state INVALID -j DROP
iptables -A FORWARD -m state --state INVALID -j DROP

# Принимать все пакеты, которые инициированы из уже установленного соединения, и имеющим признак ESTABLISHED.
# Состояние ESTABLISHED говорит о том, что это не первый пакет в соединении.
iptables -A INPUT   -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT

# Приводит к связыванию системных ресурсов, так что реальных обмен данными становится не возможным.
iptables -A INPUT -p tcp ! --syn -m state --state NEW -j DROP
iptables -A OUTPUT -p tcp ! --syn -m state --state NEW -j DROP


#Разрешаем ICMP пакеты для vlan3, vlan4 в интернет
iptables -A FORWARD -i ppp0 -o vlan3 -p icmp -j ACCEPT
iptables -A FORWARD -i vlan3 -o ppp0 -p icmp -j ACCEPT

iptables -A FORWARD -i ppp0 -o vlan4 -p icmp -j ACCEPT
iptables -A FORWARD -i vlan4 -o ppp0 -p icmp -j ACCEPT

# Разрешаем dns серверу
#
#iptables -A INPUT -i $inet -p udp --sport 53 -j ACCEPT
#iptables -A OUTPUT -o $inet -p udp --dport 53 -j ACCEPT

iptables -A INPUT -i $inet -p udp --sport 53 -j ACCEPT
iptables -A OUTPUT -o $inet -p udp --dport 53 -j ACCEPT

#Разрешаем серверу http и dydns
iptables -A INPUT -i $inet -p tcp --sport 80 -j ACCEPT
iptables -A OUTPUT -o $inet -p tcp --dport 80 -j ACCEPT

#Разрешаем серверу https
iptables -A INPUT -i eth1 -p tcp --dport 443 -j ACCEPT
iptables -A OUTPUT -o eth1 -p tcp --sport 443 -j ACCEPT

#Разрешаем FTP
iptables -A INPUT -i $inet -p tcp --sport 21 --dport 21 -j ACCEPT
iptables -A OUTPUT -o $inet -p tcp --sport 21 --dport 21 -j ACCEPT

#Разрешаем SSH
iptables -A INPUT -i $inet -p tcp --sport 22 --dport 22 -j ACCEPT
iptables -A OUTPUT -o $inet -p tcp --sport 22 --dport 22 -j ACCEPT

#####################  Разрешаем  доступ в инет и в локалку ##################
NUMBERS_I="192.168.1.186 192.168.1.173 192.168.1.174 192.168.1.177 192.168.1.178 192.168.1.179 192.168.1.180 192.168.1.190"
for number_i in `echo $NUMBERS_I`
do
echo $number_i
echo "ok"
iptables -A FORWARD -s $number_i -o $inet -p tcp -m multiport --dport 80,443,110,25,143,5190,20,21,50225,2106,7772,50110,50025,3389 -j ACCEPT
iptables -A FORWARD -i $inet -d $number_i -p tcp -m multiport --sport 80,443,110,25,143,5190,20,21,50225,2106,7772,50110,50025,3389 -j ACCEPT
iptables -A FORWARD -s $number_i -o $inet -p udp -m multiport --dport 80,443,110,25,143,5190,20,21,50225,2106,7772,50110,50025,3389 -j ACCEPT
iptables -A FORWARD -i $inet -d $number_i -p udp -m multiport --sport 80,443,110,25,143,5190,20,21,50225,2106,7772,50110,50025,3389 -j ACCEPT
done
#############################################################################

###################### Разрешаем все для admin.mgkb1.local ##################
iptables -t mangle -A FORWARD -s 192.168.1.173 -o ppp0 -j MARK --set-mark 100
iptables -t mangle -A FORWARD -i ppp0 -d 192.168.1.173 -j MARK --set-mark 100
iptables -A FORWARD -s 192.168.1.173 -o ppp0 -j ACCEPT
iptables -A FORWARD -i ppp0 -d 192.168.1.173 -j ACCEPT
#############################################################################

################### Разрешаем временно выгрузку Паруса ######################
#iptables -t mangle -A FORWARD -s 192.168.1.177 -o ppp0 -j MARK --set-mark 100
#iptables -t mangle -A FORWARD -i ppp0 -d 192.168.1.177 -j MARK --set-mark 100
#iptables -A FORWARD -s 192.168.1.177 -o ppp0 -j ACCEPT
#iptables -A FORWARD -i ppp0 -d 192.168.1.177 -j ACCEPT
#############################################################################


NUMBERS_I2="192.168.3.10 192.168.3.123 192.168.3.249 192.168.3.250 192.168.3.253 192.168.3.246 192.168.3.245 192.168.3.244"
for number_i2 in `echo $NUMBERS_I2`
do
##Ну а тут разрешаем пользователям внутренней сети доступ в инет и в локалку
echo $number_i2
echo "ok"
iptables -A FORWARD -s $number_i2 -o $inet -p tcp -m multiport --dport 80,443,110,25,143,5190,20,21 -j ACCEPT
iptables -A FORWARD -i $inet -d $number_i2 -p tcp -m multiport --sport 80,443,110,25,143,5190,20,21 -j ACCEPT
iptables -A FORWARD -s $number_i2 -o $inet -p udp -m multiport --dport 80,443,110,25,143,5190,20,21,53 -j ACCEPT
iptables -A FORWARD -i $inet -d $number_i2 -p udp -m multiport --sport 80,443,110,25,143,5190,20,21,53 -j ACCEPT
done

#Режем входящую
NUMBERS_VLAN="vlan3 vlan4"
for number_vl in `echo $NUMBERS_VLAN`
do
echo $number_vl
#Даём всем инет но min
iptables -t mangle -A FORWARD -i $number_vl -o $inet  -j MARK --set-mark 90
iptables -t mangle -A FORWARD -i $inet -o $number_vl  -j MARK --set-mark 90

tc qdisc del dev $number_vl root
tc qdisc add dev $number_vl root handle 1: htb
tc class add dev $number_vl parent 1: classid 1:1 htb rate 100Mbit

tc class add dev $number_vl parent 1:1 classid 1:100 htb rate 100Mbit ceil 100Mbit prio 20
tc class add dev $number_vl parent 1:1 classid 1:90 htb rate 200Kbit ceil 300Kbit prio 90
tc class add dev $number_vl parent 1:1 classid 1:60 htb rate 600Kbit ceil 700Kbit prio 60
tc class add dev $number_vl parent 1:1 classid 1:80 htb rate 1Mbit ceil 2Mbit prio 80
tc class add dev $number_vl parent 1:1 classid 1:70 htb rate 150Kbit ceil 200Kbit prio 1
tc class add dev $number_vl parent 1:1 classid 1:10 htb rate 1Mbit ceil 3Mbit prio 10

tc qdisc add dev $number_vl parent 1:100 handle 100: sfq perturb 10
tc qdisc add dev $number_vl parent 1:90 handle 90: sfq perturb 10
tc qdisc add dev $number_vl parent 1:80 handle 80: sfq perturb 10
tc qdisc add dev $number_vl parent 1:70 handle 70: sfq perturb 10
tc qdisc add dev $number_vl parent 1:60 handle 60: sfq perturb 10
tc qdisc add dev $number_vl parent 1:10 handle 10: sfq perturb 10

tc filter add dev $number_vl parent 1:0 protocol ip prio 1 handle 100 fw classid 1:100
tc filter add dev $number_vl parent 1:0 protocol ip prio 1 handle 90 fw classid 1:90
tc filter add dev $number_vl parent 1:0 protocol ip prio 1 handle 80 fw classid 1:80
tc filter add dev $number_vl parent 1:0 protocol ip prio 1 handle 70 fw classid 1:70
tc filter add dev $number_vl parent 1:0 protocol ip prio 1 handle 60 fw classid 1:60
tc filter add dev $number_vl parent 1:0 protocol ip prio 1 handle 10 fw classid 1:10
done

#Даём начальнику по max
iptables -t mangle -A FORWARD -s 192.168.1.173 -j MARK --set-mark 10
iptables -t mangle -A FORWARD -d 192.168.1.173 -j MARK --set-mark 10

###############Максимум входящей скорости отдел кадров ######################
iptables -t mangle -A FORWARD -s 192.168.1.177 -j MARK --set-mark 10
iptables -t mangle -A FORWARD -d 192.168.1.177 -j MARK --set-mark 10
#############################################################################

#Между подсетями на 100
iptables -t mangle -A FORWARD -i vlan3 -o vlan4 -j MARK --set-mark 100
iptables -t mangle -A FORWARD -i vlan4 -o vlan3 -j MARK --set-mark 100

#Кому необходим интернет на средней скорости + приоритет на портах
NUMBERS_N="192.168.1.174"
for number_n in `echo $NUMBERS_N`
do
iptables -t mangle -A FORWARD -s $number_n -p tcp  -m multiport --dport 80,443,110,25,143,5190,20,21,50225,2106,7772 -j MARK --set-mark 80
iptables -t mangle -A FORWARD -d $number_n -p tcp -m multiport --sport 80,443,110,25,143,5190,20,21,50225,2106,7772 -j MARK --set-mark 80
iptables -t mangle -A FORWARD -s $number_n -p udp  -m multiport --dport 80,443,110,25,143,5190,20,21,50225,2106,7772 -j MARK --set-mark 80
iptables -t mangle -A FORWARD -d $number_n -p udp -m multiport --sport 80,443,110,25,143,5190,20,21,50225,2106,7772 -j MARK --set-mark 80
done

#Даём 150 - 200 Kbit/s
NUMBERS_MAX="192.168.1.186 192.168.1.178 192.168.1.177 192.168.1.179 192.168.1.180 192.168.1.190"
for number_mx in `echo $NUMBERS_MAX`
do
iptables -t mangle -A FORWARD -s $number_mx -j MARK --set-mark 70
iptables -t mangle -A FORWARD -d $number_mx -j MARK --set-mark 70
done

#Даем 200 - 300 Kbit/s
NUMBERS_MAX1="192.168.3.10 192.168.3.123 192.168.3.250 192.168.3.249"
for number_mx1 in `echo $NUMBERS_MAX1`
do
iptables -t mangle -A FORWARD -s $number_mx1 -j MARK --set-mark 90
iptables -t mangle -A FORWARD -d $number_mx1 -j MARK --set-mark 90
done

#Даем 500 - 600 Kbit/s
NUMBERS_MAX2="192.168.3.253 192.168.3.246 192.168.3.245 192.168.3.244"
for number_mx2 in `echo $NUMBERS_MAX2`
do
iptables -t mangle -A FORWARD -s $number_mx2 -j MARK --set-mark 60
iptables -t mangle -A FORWARD -d $number_mx2 -j MARK --set-mark 60
done


#Режем исходящую
tc qdisc del dev $inet root
tc qdisc add dev $inet root handle 1: htb
tc class add dev $inet parent 1: classid 1:1 htb rate 100Mbit
tc class add dev $inet parent 1:1 classid 1:90 htb rate 200Kbit ceil 300Kbit prio 90
tc class add dev $inet parent 1:1 classid 1:80 htb rate 1Mbit ceil 2Mbit prio 80
tc class add dev $inet parent 1:1 classid 1:70 htb rate 150Kbit ceil 200Kbit prio 1
tc class add dev $inet parent 1:1 classid 1:60 htb rate 600Kbit ceil 700Kbit prio 60
tc class add dev $inet parent 1:1 classid 1:10 htb rate 150Kbit ceil 200Kbit prio 10

tc qdisc add dev $inet parent 1:90 handle 90: sfq perturb 10
tc qdisc add dev $inet parent 1:80 handle 80: sfq perturb 10
tc qdisc add dev $inet parent 1:70 handle 70: sfq perturb 10
tc qdisc add dev $inet parent 1:60 handle 60: sfq perturb 10
tc qdisc add dev $inet parent 1:10 handle 10: sfq perturb 10

tc filter add dev $inet parent 1:0 protocol ip prio 1 handle 90 fw classid 1:90
tc filter add dev $inet parent 1:0 protocol ip prio 1 handle 80 fw classid 1:80
tc filter add dev $inet parent 1:0 protocol ip prio 1 handle 70 fw classid 1:70
tc filter add dev $inet parent 1:0 protocol ip prio 1 handle 60 fw classid 1:60
tc filter add dev $inet parent 1:0 protocol ip prio 1 handle 10 fw classid 1:10

Может нужно как то его оптимизировать?

MX 23.6 Libretto x86_64
Чем больше я работаю админом, тем больше понимаю, насколько волшебна фраза - "Нет технической возможности!"

117

Мне нужно для двоих по максимуму скорость, для некоторых 600, а некоторым 200-300. Никакой минималки. Четкие рамки. Канал у меня 4 М/бит. Хочется себе отдать гарантированно 2, а остальное распределить между пользователями.

MX 23.6 Libretto x86_64
Чем больше я работаю админом, тем больше понимаю, насколько волшебна фраза - "Нет технической возможности!"

118 (29.03.2011 14:27:26 отредактировано Kettler)

tc class add dev $number_vl parent 1:1 classid 1:10 htb rate 1Mbit ceil 3Mbit prio 10
может
tc class add dev $number_vl parent 1:1 classid 1:10 htb rate 3Mbit ceil 4Mbit prio 10
?
Вечерком сядю переделаю)

Ищу дополнительный заработок (удалёнка).
Пьянка без секса – признак алкоголизма.

119 (29.03.2011 16:39:25 отредактировано funky)

inettel пишет:
funky пишет:

а почему через FORWARD?

http://www.opennet.ru/docs/RUS/iptables … NGOFTABLES
Вот тут все подробно описано, с картинками, очень советую.

funky пишет:

не могли бы вы привести пример чтобы до конца разобраться?

например pop3

iptables -A FORWARD -i eth0 -o eth1  -p tcp --dport 110 -j ACCEPT 
iptables -A FORWARD -i eth1 -o eth0 -p tcp --sport 110 -j ACCEPT

Спасибо ab

Я правильно понял, что цепочки INPUT-OUTPUT применяются для того чтобы разрешить серверу доступ к определенным портам, а FORWARD для того чтобы локальным пользователям разрешать порты по которым они будут ходить в инет?


--=XliN=--, у меня вопрос по вашей конфигурации:

 
iptables -A FORWARD -s $number_i -o $inet -p tcp -m multiport --dport 80,443,110,25,143,5190,20,21,50225,2106,7772,50110,50025,3389 -j ACCEPT
iptables -A FORWARD -i $inet -d $number_i -p tcp -m multiport --sport 80,443,110,25,143,5190,20,21,50225,2106,7772,50110,50025,3389 -j ACCEPT
iptables -A FORWARD -s $number_i -o $inet -p udp -m multiport --dport 80,443,110,25,143,5190,20,21,50225,2106,7772,50110,50025,3389 -j ACCEPT
iptables -A FORWARD -i $inet -d $number_i -p udp -m multiport --sport 80,443,110,25,143,5190,20,21,50225,2106,7772,50110,50025,3389 -j ACCEPT

Вот вы открыли TCP порты, а потом такие же udp. Зачем?

120 (29.03.2011 18:11:33 отредактировано XliN)

funky пишет:

Вот вы открыли TCP порты, а потом такие же udp. Зачем?

Что бы не разбираться какой протокол нужен для портов. Например 2106,7772 - это линяга. Я не знаю хватит ли ему одного tcp. Что бы не проверять, проще открыть оба. Хотя это и не правильно.
Это одна из причин, почему мне не нравится этот скрипт. Нет лаконичности и хочется его как то более нагляднее написать.

Kettler пишет:

может
tc class add dev $number_vl parent 1:1 classid 1:10 htb rate 3Mbit ceil 4Mbit prio 10
?

Нет, у меня канал в 4 мг/бита будет только с 1 апреля (ЦентрТелеком дерет целых 10500р. за него, ужас!), так что пока верно.

Kettler пишет:

Вечерком сядю переделаю)

Это было бы супер.

MX 23.6 Libretto x86_64
Чем больше я работаю админом, тем больше понимаю, насколько волшебна фраза - "Нет технической возможности!"