Доброго времени суток.Пытаюсь открыть 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=1modprobe 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 statefullecho done!
# $IPTABLES -t nat -A POSTROUTING -s $MASK_LAN -o $IF_OUT -j MASQUERADE
правило открывает нат на локалкуПомогите разобраться всю голову сломал, может в конфиге где что не так? или можно оптимизировать его....
Заранее благодарен...
> Доброго времени суток.
> Пытаюсь открыть nat на несколько компов в сети, но ни чего у
> меня не получается...
> Перелопатил пол инета все что нашел не помогло да и пробросы отдельных
> портов в основном попадаются.
> схема классическая Inet->(ADSL)->("eth0"сервак"eth1")->("hub"local)
> Помогите разобраться всю голову сломал, может в конфиге где что не так?
> или можно оптимизировать его....Не пользуйтесь чужими конфигами бездумно, напишите свой с нуля, тогда будет понятно.
> Доброго времени суток.
> Пытаюсь открыть nat на несколько компов в сети, но ни чего у
> меня не получается...
> Перелопатил пол инета все что нашел не помогло да и пробросы отдельных
> портов в основном попадаются.Для того, чтобы заработало:
echo 1 > /proc/sys/net/ipv4/ip_forward && iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
В точке ADSL, возможно, необходимо указазать статический маршрут до локальной сети (man route).
Выше вам правильно указали: катать такую простыню не понимая, как это работает -- опрометчиво.
>[оверквотинг удален]
> $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
> правило открывает нат на локалку
> Помогите разобраться всю голову сломал, может в конфиге где что не так?
> или можно оптимизировать его....
> Заранее благодарен...
> Не пользуйтесь чужими конфигами бездумно, напишите свой с нуля, тогда будет понятно.конфиг писал сам, пользуясь примерами других и различными примерами...
> В точке 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
>[оверквотинг удален]
> 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 компов открыть нат а только на
> некоторые по ipnat сделать для всего, а в таблице фильтров уже разрешать|запрещать.
> nat сделать для всего, а в таблице фильтров уже разрешать|запрещать.разрешить всем и вся не проблема, раскоментировать одно правило... может дадите пример фильтра? :-[ буду признателен )))
>> 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 -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=1modprobe 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 -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!
> а я вам что выше предложил.
> что значит "полный доступ"? из локалки в инет. из инета в локалку?ипать как все просто то.... Удалил весь конфиг оставил то что посоветовали и самое необходимое.... и воуля.. работает.. осталось вернуть некоторые моменты обратно...
CПАСИБО....
Попробуйте воспользоваться скриптом для создания конфига iptables и сравнить.
http://masterpro.ws/easyfwgen