URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID10
Нить номер: 4712
[ Назад ]

Исходное сообщение
"IPTABLES Прошу помощи в пробросе NAT"

Отправлено Bionis , 14-Окт-10 14:44 
Доброго времени суток.

Пытаюсь открыть nat на несколько компов в сети, но ни чего у меня не получается...
Перелопатил пол инета все что нашел не помогло да и пробросы отдельных портов в основном попадаются.

схема классическая Inet->(ADSL)->("eth0"сервак"eth1")->("hub"local)

IP статика -> ADSL
eth0 смотрит в модем (192.168.0.2)
eth1 локалка (192.168.1.1) воткнут в хаб

Собственно КОНФИГ

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

IF_OUT="eth0"                
IF_LAN="eth1"                
MASK_LAN="192.168.1.0/24"    

IF_LO="lo"
ADDR_LO="127.0.0.1"
LOOPBACK="127.0.0.0/8"

sysctl -w net.ipv4.ip_forward=1  
sysctl -w net.ipv4.ip_dynaddr=1  
sysctl net.ipv4.conf.all.forwarding=1

modprobe ip_nat_ftp              

$IPTABLES -t mangle -P OUTPUT ACCEPT
$IPTABLES -F
$IPTABLES -t nat -F
$IPTABLES -t mangle -F
$IPTABLES -X
$IPTABLES -t nat -X
$IPTABLES -t mangle -X
$IPTABLES -N sshguard

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

$IPTABLES -I INPUT    -p tcp --dport 4000 -j DROP
$IPTABLES -I FORWARD  -p tcp --dport 4000 -j ACCEPT
$IPTABLES -I OUTPUT   -p tcp --dport 4000 -j ACCEPT

        $IPTABLES -N common-check
        $IPTABLES -F common-check
        $IPTABLES -A common-check -m state --state INVALID -j DROP
        $IPTABLES -A common-check -p tcp --tcp-flags SYN,ACK SYN,ACK -m state --state NEW -j REJECT --reject-with tcp-reset
$IPTABLES -A common-check -p tcp ! --syn -m state --state NEW -j DROP
$IPTABLES -A common-check -p tcp --tcp-flags ALL FIN,URG,PSH -j DROP
$IPTABLES -A common-check -p tcp --tcp-flags ALL ALL -j DROP
$IPTABLES -A common-check -p tcp --tcp-flags ALL SYN,RST,ACK,FIN,URG -j DROP
$IPTABLES -A common-check -p tcp --tcp-flags ALL NONE -j DROP
$IPTABLES -A common-check -p tcp --tcp-flags SYN,RST SYN,RST -j DROP
$IPTABLES -A common-check -p tcp --tcp-flags SYN,FIN SYN,FIN -j DROP

$IPTABLES -N icmp-in
$IPTABLES -F icmp-in
$IPTABLES -A icmp-in -m state --state NEW -p icmp --icmp-type echo-request -j ACCEPT
$IPTABLES -A icmp-in -m state --state NEW -p icmp --icmp-type time-exceeded -j ACCEPT
$IPTABLES -A icmp-in -m state --state NEW -p icmp --icmp-type destination-unreachable -j ACCEPT

$IPTABLES -N statefull
$IPTABLES -F statefull
$IPTABLES -A statefull -m state --state ESTABLISHED,RELATED -j ACCEPT

$IPTABLES -A INPUT -j common-check

$IPTABLES -I INPUT -p icmp --icmp-type echo-request -j ACCEPT

$IPTABLES -A INPUT -p tcp --dport 22 -i $IF_LAN -j ACCEPT
$IPTABLES -A sshguard -m state --state NEW -m recent --name SSH --update --seconds 60 --hitcount 2 -j DROP
$IPTABLES -A sshguard -m state --state NEW -m recent --name SSH --set -j ACCEPT
$IPTABLES -A sshguard -j ACCEPT
$IPTABLES -A INPUT -p tcp --dport 22 -j sshguard

$IPTABLES -A INPUT -i $IF_LAN -j ACCEPT
$IPTABLES -A INPUT -i $IF_LO -d $LOOPBACK -j ACCEPT
$IPTABLES -A INPUT -j statefull

$IPTABLES -A OUTPUT -j common-check
$IPTABLES -A FORWARD -j common-check
$IPTABLES -A FORWARD -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
$IPTABLES -A FORWARD -m conntrack --ctstate NEW -i eth1 -s 192.168.1.0/24 -j ACCEPT #

iptables -t nat -A PREROUTING -i eth0 -p tcp -d 192.168.0.2 --dport 5555 -j DNAT --to 192.168.1.50:5555
iptables -A INPUT -p tcp --dport 5555 -j DROP

$IPTABLES -t nat -A POSTROUTING -p tcp -s 192.168.1.0/24 -d 192.168.0.2 -j SNAT --to-source 192.168.1.1
# $IPTABLES -t nat -A POSTROUTING -s $MASK_LAN -o $IF_OUT -j MASQUERADE
$IPTABLES -t nat -A PREROUTING -i eth0 -s 192.168.1.0/24 -p tcp --dport 80 -j REDIRECT --to-port 8080

$IPTABLES -A FORWARD -i $IF_LAN -s $MASK_LAN -j ACCEPT
$IPTABLES -A FORWARD -j statefull

echo done!


# $IPTABLES -t nat -A POSTROUTING -s $MASK_LAN -o $IF_OUT -j MASQUERADE
правило открывает нат на локалку

Помогите разобраться всю голову сломал, может в конфиге где что не так? или можно оптимизировать его....

Заранее благодарен...


Содержание

Сообщения в этом обсуждении
"IPTABLES Прошу помощи в пробросе NAT"
Отправлено PavelR , 14-Окт-10 16:48 
> Доброго времени суток.
> Пытаюсь открыть nat на несколько компов в сети, но ни чего у
> меня не получается...
> Перелопатил пол инета все что нашел не помогло да и пробросы отдельных
> портов в основном попадаются.
> схема классическая Inet->(ADSL)->("eth0"сервак"eth1")->("hub"local)
> Помогите разобраться всю голову сломал, может в конфиге где что не так?
> или можно оптимизировать его....

Не пользуйтесь чужими конфигами бездумно, напишите свой с нуля, тогда будет понятно.



"IPTABLES Прошу помощи в пробросе NAT"
Отправлено vehn , 14-Окт-10 19:10 
> Доброго времени суток.
> Пытаюсь открыть nat на несколько компов в сети, но ни чего у
> меня не получается...
> Перелопатил пол инета все что нашел не помогло да и пробросы отдельных
> портов в основном попадаются.

Для того, чтобы заработало:

echo 1 > /proc/sys/net/ipv4/ip_forward && iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

В точке ADSL, возможно, необходимо указазать статический маршрут до локальной сети (man route).

Выше вам правильно указали: катать такую простыню не понимая, как это работает -- опрометчиво.



"IPTABLES Прошу помощи в пробросе NAT"
Отправлено reader , 14-Окт-10 22:10 
>[оверквотинг удален]
> $IPTABLES -A OUTPUT -j common-check
> $IPTABLES -A FORWARD -j common-check
> $IPTABLES -A FORWARD -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
> $IPTABLES -A FORWARD -m conntrack --ctstate NEW -i eth1 -s 192.168.1.0/24 -j
> ACCEPT #
> iptables -t nat -A PREROUTING -i eth0 -p tcp -d 192.168.0.2 --dport
> 5555 -j DNAT --to 192.168.1.50:5555
> iptables -A INPUT -p tcp --dport 5555 -j DROP
> $IPTABLES -t nat -A POSTROUTING -p tcp -s 192.168.1.0/24 -d 192.168.0.2 -j
> SNAT --to-source 192.168.1.1

-p tcp и -d 192.168.0.2 - убрать, и указать -o eth0
вместо 192.168.1.1 - 192.168.0.2

> # $IPTABLES -t nat -A POSTROUTING -s $MASK_LAN -o $IF_OUT -j MASQUERADE
> $IPTABLES -t nat -A PREROUTING -i eth0 -s 192.168.1.0/24 -p tcp --dport
> 80 -j REDIRECT --to-port 8080

если 192.168.1.0/24 за eth1, то почему -i eth0

и в целом, порядок следования правил имеет значение.
поэтому для начала оставить только SNAT и добиться работы, а потом уже добавлять по немного что захотите

> $IPTABLES -A FORWARD -i $IF_LAN -s $MASK_LAN -j ACCEPT
> $IPTABLES -A FORWARD -j statefull
> echo done!
> # $IPTABLES -t nat -A POSTROUTING -s $MASK_LAN -o $IF_OUT -j MASQUERADE
> правило открывает нат на локалку
> Помогите разобраться всю голову сломал, может в конфиге где что не так?
> или можно оптимизировать его....
> Заранее благодарен...


"IPTABLES Прошу помощи в пробросе NAT"
Отправлено Bionis , 15-Окт-10 09:09 

> Не пользуйтесь чужими конфигами бездумно, напишите свой с нуля, тогда будет понятно.

конфиг писал сам, пользуясь примерами других и различными примерами...


> В точке ADSL, возможно, необходимо указазать статический маршрут до локальной сети (man route).

ip у модема 192.168.0.1

iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-ports 8080
если 192.168.1.0/24 за eth1, то почему -i eth0

> -p tcp и -d 192.168.0.2 - убрать, и указать -o eth0
> вместо 192.168.1.1 - 192.168.0.2

Благодарю... )))

> > echo 1 > /proc/sys/net/ipv4/ip_forward && iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

мне нужно не на все 30 компов открыть нат а только на некоторые по ip


"IPTABLES Прошу помощи в пробросе NAT"
Отправлено reader , 15-Окт-10 10:03 
>[оверквотинг удален]
> ip у модема 192.168.0.1
> iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-ports
> 8080
> если 192.168.1.0/24 за eth1, то почему -i eth0
>> -p tcp и -d 192.168.0.2 - убрать, и указать -o eth0
>> вместо 192.168.1.1 - 192.168.0.2
> Благодарю... )))
>> > echo 1 > /proc/sys/net/ipv4/ip_forward && iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
> мне нужно не на все 30 компов открыть нат а только на
> некоторые по ip

nat сделать для всего, а в таблице фильтров уже разрешать|запрещать.


"IPTABLES Прошу помощи в пробросе NAT"
Отправлено Bionis , 15-Окт-10 10:23 
> nat сделать для всего, а в таблице фильтров уже разрешать|запрещать.

разрешить всем и вся не проблема, раскоментировать одно правило...  может дадите пример фильтра? :-[ буду признателен )))


"IPTABLES Прошу помощи в пробросе NAT"
Отправлено reader , 15-Окт-10 13:27 
>> nat сделать для всего, а в таблице фильтров уже разрешать|запрещать.
> разрешить всем и вся не проблема, раскоментировать одно правило...  может дадите
> пример фильтра? :-[ буду признателен )))

-P FORWARD DROP
-A FORWARD -s 192.168.1.10 -i eth1 -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -s 192.168.1.11 -i eth1 -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -i eth0 -m state --state RELATED,ESTABLISHED -j ACCEPT
со статусом INVALID через nat не пойдут, поэтому убиваем. начинать соединение будет разрешено из локалки, из инета только ответные пакеты (почти только из-за RELATED)

на время отладки что бы в логах было видно что заблокировалось.
-A FORWARD -j LOG --log-prefix "IPT FORWARD: " --log-level 7


"IPTABLES Прошу помощи в пробросе NAT"
Отправлено Bionis , 15-Окт-10 14:20 
Пришел к слеующему... Не могу понять если закомментировать
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
нат пропадает везде это все понятно, но почему не идет инет на указанные ip 192.168.1.* в цепочке если закомментровать  (iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE)....

Вопрос остается открытым (Как открыть нат некоторым компам в сети (полный доступ))


!/bin/bash
IPTABLES="/sbin/iptables"

IF_OUT="eth0"
IF_LAN="eth1"
MASK_LAN="192.168.1.0/24"

IF_LO="lo"
ADDR_LO="127.0.0.1"
LOOPBACK="127.0.0.0/8"

sysctl -w net.ipv4.ip_forward=1
sysctl -w net.ipv4.ip_dynaddr=1
sysctl net.ipv4.conf.all.forwarding=1

modprobe ip_nat_ftp

$IPTABLES -t mangle -P OUTPUT ACCEPT
$IPTABLES -F
$IPTABLES -t nat -F
$IPTABLES -t mangle -F
$IPTABLES -X
$IPTABLES -t nat -X
$IPTABLES -t mangle -X
$IPTABLES -N sshguard

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

$IPTABLES -I INPUT    -p tcp --dport 4000 -j DROP
$IPTABLES -I FORWARD  -p tcp --dport 4000 -j ACCEPT
$IPTABLES -I OUTPUT   -p tcp --dport 4000 -j ACCEPT

$IPTABLES -N common-check
$IPTABLES -F common-check
$IPTABLES -A common-check -m state --state INVALID -j DROP
$IPTABLES -A common-check -p tcp --tcp-flags SYN,ACK SYN,ACK -m state --state NEW -j REJECT --reject-with tcp-reset
$IPTABLES -A common-check -p tcp ! --syn -m state --state NEW -j DROP
$IPTABLES -A common-check -p tcp --tcp-flags ALL FIN,URG,PSH -j DROP
$IPTABLES -A common-check -p tcp --tcp-flags ALL ALL -j DROP
$IPTABLES -A common-check -p tcp --tcp-flags ALL SYN,RST,ACK,FIN,URG -j DROP
$IPTABLES -A common-check -p tcp --tcp-flags ALL NONE -j DROP
$IPTABLES -A common-check -p tcp --tcp-flags SYN,RST SYN,RST -j DROP
$IPTABLES -A common-check -p tcp --tcp-flags SYN,FIN SYN,FIN -j DROP

$IPTABLES -N icmp-in
$IPTABLES -F icmp-in
$IPTABLES -A icmp-in -m state --state NEW -p icmp --icmp-type echo-request -j ACCEPT
$IPTABLES -A icmp-in -m state --state NEW -p icmp --icmp-type time-exceeded -j ACCEPT
$IPTABLES -A icmp-in -m state --state NEW -p icmp --icmp-type destination-unreachable -j ACCEPT
$IPTABLES -N statefull
$IPTABLES -F statefull
$IPTABLES -A statefull -m state --state ESTABLISHED,RELATED -j ACCEPT

$IPTABLES -A INPUT -j common-check

$IPTABLES -I INPUT -p icmp --icmp-type echo-request -j ACCEPT

$IPTABLES -A INPUT -p tcp --dport 22 -i $IF_LAN -j ACCEPT
$IPTABLES -A sshguard -m state --state NEW -m recent --name SSH --update --seconds 60 --hitcount 2 -j DROP
$IPTABLES -A sshguard -m state --state NEW -m recent --name SSH --set -j ACCEPT
$IPTABLES -A sshguard -j ACCEPT
$IPTABLES -A INPUT -p tcp --dport 22 -j sshguard

$IPTABLES -A INPUT -i $IF_LAN -j ACCEPT
$IPTABLES -A INPUT -i $IF_LO -d $LOOPBACK -j ACCEPT
$IPTABLES -A INPUT -j statefull

$IPTABLES -A OUTPUT -j common-check
$IPTABLES -A FORWARD -j common-check
$IPTABLES -A FORWARD -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
$IPTABLES -A FORWARD -m conntrack --ctstate NEW -i eth1 -s 192.168.1.0/24 -j ACCEPT #

iptables -t nat -A PREROUTING -i eth0 -p tcp -d 192.168.0.2 --dport 5555 -j DNAT --to 192.168.1.50:5555
iptables -A INPUT -p tcp --dport 5555 -j DROP
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

#-------------------------------------------------------------------------------------------
iptables -N check_ours_sp00f # Создаем цепочку, в которой будут проверяться MAC-адреса
iptables -A check_ours_sp00f -s 192.168.1.199 -m mac --mac-source 6c:62:6d:53:0e:32 -j RETURN
iptables -A check_ours_sp00f -s 192.168.1.50 -m mac --mac-source 00:1f:c6:bc:xx:xx -j RETURN # Alex
iptables -A check_ours_sp00f -s 192.168.1.60 -m mac --mac-source 00:1a:92:9d:xx:xx -j RETURN # Boss
iptables -A check_ours_sp00f -s 192.168.1.30 -m mac --mac-source 00:19:d1:8b:xx:xx -j RETURN # адамова
iptables -A check_ours_sp00f -s 192.168.1.70 -m mac --mac-source 6c:f0:49:a3:xx:xx -j RETURN # Galy
iptables -A check_ours_sp00f -s 192.168.1.72 -m mac --mac-source 00:19:66:53:xx:xx -j RETURN # makeeva
# iptables -A check_ours_sp00f -s 192.168.1. -m mac --mac-source  -j RETURN
     # Аналогичным образом проверяем все адреса нашей подсети
     # И в конце обязательно добаляем правило для НЕ прошедших проверку
iptables -A check_ours_sp00f -j DROP
iptables -N check_ours # Создаем цепочку, которая будет описывать логику работы с нашей подсетью
iptables -A check_ours ! -i eth1 -j DROP # С других интерфейсов пакеты от них придти не могут
iptables -A check_ours -j check_ours_sp00f # Прогоняем их через проверку на спуфинг
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT # Как обычно, пропускаем все, что идет по установленным соединениям
iptables -A INPUT -s 192.168.1.0/24 -j check_ours # Тех, кто претендует на звание своих, прогоняем через проверку
# Прошедшим проверку разрешаем пользовать нащей проксей и самбой, а также соединяться по ssh
iptables -A INPUT -s 192.168.1.0/24 -m multiport --dports 22,8080,139,445,25,110 -j ACCEPT
iptables -P INPUT DROP # Остальных блокируем
iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT # Как обычно, пропускаем все, что идет по установленным соединениям
iptables -A FORWARD -s 192.168.1.0/24 -j check_ours # Проверка
iptables -A FORWARD -s 192.168.1.0/24 -j ACCEPT # Прошедшим проверку разрешеам передавать через нас транзитный трафик
iptables -P FORWARD DROP # Остальных блокируем
iptables -P OUTPUT ACCEPT # Исходящий трафик разрешаем
#-------------------------------------------------------------------------------------------

$IPTABLES -t nat -A PREROUTING -i eth0 -s 192.168.1.0/24 -p tcp --dport 80 -j REDIRECT --to-port 8080

echo done!


"IPTABLES Прошу помощи в пробросе NAT"
Отправлено reader , 15-Окт-10 15:17 
> Пришел к слеующему... Не могу понять если закомментировать
> iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
> нат пропадает везде это все понятно, но почему не идет инет на
> указанные ip 192.168.1.* в цепочке если закомментровать  (iptables -t nat
> -A POSTROUTING -o eth0 -j MASQUERADE)....

у вас только одно правило для SNAT (-j MASQUERADE), если его убрать ,то инета в локалке не будет
> Вопрос остается открытым (Как открыть нат некоторым компам в сети (полный доступ))

а я вам что выше предложил.
что значит "полный доступ"? из локалки в инет. из инета в локалку?

>[оверквотинг удален]
> пропускаем все, что идет по установленным соединениям
> iptables -A FORWARD -s 192.168.1.0/24 -j check_ours # Проверка
> iptables -A FORWARD -s 192.168.1.0/24 -j ACCEPT # Прошедшим проверку разрешеам передавать
> через нас транзитный трафик
> iptables -P FORWARD DROP # Остальных блокируем
> iptables -P OUTPUT ACCEPT # Исходящий трафик разрешаем
> #-------------------------------------------------------------------------------------------
> $IPTABLES -t nat -A PREROUTING -i eth0 -s 192.168.1.0/24 -p tcp --dport
> 80 -j REDIRECT --to-port 8080
> echo done!


"IPTABLES Прошу помощи в пробросе NAT"
Отправлено Bionis , 15-Окт-10 16:05 

> а я вам что выше предложил.
> что значит "полный доступ"? из локалки в инет. из инета в локалку?

ипать как все просто то.... Удалил весь конфиг оставил то что посоветовали и самое необходимое.... и воуля.. работает.. осталось вернуть некоторые моменты обратно...
CПАСИБО....


"IPTABLES Прошу помощи в пробросе NAT"
Отправлено rishard , 19-Окт-10 07:26 
Попробуйте воспользоваться скриптом для создания конфига iptables и сравнить.
http://masterpro.ws/easyfwgen