Форум русскоязычного сообщества Ubuntu


Следите за новостями русскоязычного сообщества Ubuntu в Twitter-ленте @ubuntu_ru_loco

Автор Тема: Помогите с iptables  (Прочитано 1441 раз)

0 Пользователей и 1 Гость просматривают эту тему.

iks

  • Автор темы
  • Гость
Помогите с iptables
« : 11 Августа 2011, 23:48:00 »
Есть такой скрипт#!/bin/bash

iptables --flush
iptables --table nat --flush
iptables --delete-chain
iptables --table nat --delete-chain
iptables -F
iptables -X

#####################################################################

EXT_IP=x.x.x.x # внешний, реальный IP-адрес
INT_IP=192.168.0.1 # внутренний IP-адрес локальной сети
LAN_IP=192.168.0.2 # внутренний IP-адрес сервера
EXT_IF=ppp0 # внешний интерфейс
INT_IF=vboxnet0 # внутренний интерфейс
SSH_PORT=22 # ssh порт
HTML_PORT=8080 # html внешний порт
LanHTML_PORT=80 # html порт виртуалки

##### Перенапрвления по портам в локальную сеть #####

##### SSH #####
iptables -t nat -A PREROUTING --dst $EXT_IP -p tcp --dport $SSH_PORT -j DNAT --to-destination $LAN_IP
iptables -t nat -A POSTROUTING --dst $LAN_IP -p tcp --dport $SSH_PORT -j SNAT --to-source $INT_IP
iptables -t nat -A OUTPUT --dst $EXT_IP -p tcp --dport $SSH_PORT -j DNAT --to-destination $LAN_IP
iptables -A FORWARD -i $EXT_IF -o $INT_IF -d $LAN_IP -p tcp -m tcp --dport $SSH_PORT -j ACCEPT

##### HTML #####
iptables -A INPUT -p tcp --dport $HTML_PORT -m state --state NEW -j ACCEPT

iptables -t nat -A PREROUTING -d $EXT_IP -p tcp --dport $HTML_PORT -j DNAT --to-destination $LAN_IP:$LanHTML_PORT
iptables -t nat -A POSTROUTING -d $LAN_IP -p tcp --dport $LanHTML_PORT -j SNAT --to-source $INT_IP
iptables -t nat -A OUTPUT -d $EXT_IP -p tcp --dport $LanHTML_PORT -j DNAT --to-destination $LAN_IP
iptables -A FORWARD -i $EXT_IF -o $INT_IF -d $LAN_IP -p tcp --dport $LanHTML_PORT -j ACCEPT

##### Раздача интернета в локалку #####
iptables -A FORWARD -i $EXT_IF -o $INT_IF -s 192.168.0.0/24 -m conntrack --ctstate NEW -j ACCEPT
iptables -A FORWARD -m conntrack --ctstate ESTABLISHED,RELATED,DNAT,NEW -j ACCEPT
iptables -A POSTROUTING -t nat -j MASQUERADE
перенаправление по ssh отрабатывает нормально, а вот с внешний_IP:8080<-->192.168.0.2:80 не проходит, порт не открывается, хотя если запрашиваю на главной машине http://192.168.0.2/ все нормально отрабатывает, покажите где допустил ошибку, направлять на мануалы не стоит, перечитал их вагон, тележку скурить успел тоже =)
« Последнее редактирование: 12 Августа 2011, 12:15:10 от iks »

Оффлайн AnrDaemon

  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 28511
    • Просмотр профиля
Re: Помогите с iptables
« Ответ #1 : 12 Августа 2011, 05:25:24 »
iptables-save показывайте.
Хотите получить помощь? Потрудитесь представить запрошенную информацию в полном объёме.

Прежде чем [Отправить], нажми [Просмотр] и прочти собственное сообщение. Сам-то понял, что написал?…

Оффлайн fisher74

  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 13763
    • Просмотр профиля
Re: Помогите с iptables
« Ответ #2 : 12 Августа 2011, 08:35:07 »
Выкидываем смело
Цитировать
iptables -t nat -A OUTPUT --dst $EXT_IP -p tcp --dport $SSH_PORT -j DNAT --to-destination $LAN_IP
iptables -t nat -A OUTPUT -d $EXT_IP -p tcp --dport $LanHTML_PORT -j DNAT --to-destination $LAN_IP


Если на шлюзе НЕ работает свой http-сервер, то выкидываем:
Цитировать
iptables -A INPUT -p tcp --dport $HTML_PORT -m state --state NEW -j ACCEPT

Если на машине 192.168.0.2 совпадает с этим
Цитировать
~$ ip r | grep default
default via 192.168.0.1 dev eth0  metric 100
то смело удаляем
Цитировать
iptables -t nat -A POSTROUTING --dst $LAN_IP -p tcp --dport $SSH_PORT -j SNAT --to-source $INT_IP
iptables -t nat -A POSTROUTING -d $LAN_IP -p tcp --dport $LanHTML_PORT -j SNAT --to-source $INT_IP

А потом, после ребута, то что сказал AnrDaemon - в студию

P.S. И попробуйте ещё раз изучить туториал iptables - хотя бы в плане какая таблица и какая цепочка где работает.

iks

  • Автор темы
  • Гость
Re: Помогите с iptables
« Ответ #3 : 12 Августа 2011, 11:35:09 »
iptables-save
(Нажмите, чтобы показать/скрыть)
« Последнее редактирование: 26 Августа 2011, 10:01:12 от iks »

Оффлайн fisher74

  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 13763
    • Просмотр профиля
Re: Помогите с iptables
« Ответ #4 : 12 Августа 2011, 12:23:27 »
Повторяться не буду.
К тому же
Цитировать
-A POSTROUTING -j MASQUERADE
тоже криво сделано

Оффлайн Vened

  • Участник
  • *
  • Сообщений: 163
    • Просмотр профиля
Re: Помогите с iptables
« Ответ #5 : 12 Августа 2011, 14:12:33 »
консоль, канЭшн, круто, но попробуй webmin заюзать. Намного наглядней и понятней ИМХО.

iks

  • Автор темы
  • Гость
Re: Помогите с iptables
« Ответ #6 : 12 Августа 2011, 14:14:24 »
если перекрываю строкуiptables -t nat -A OUTPUT --dst $EXT_IP -p tcp --dport $SSH_PORT -j DNAT --to-destination $LAN_IPне получается подключится к локальному компу по ssh с внешки, а перекрываяiptables -A POSTROUTING -t nat -j MASQUERADEперестает работать инет в локальной машине.

На локалке (виртуалка) стоит debian, на нем установлен индеец, повторюсь все нормально отрабатывает по ssh и вызов http://192.168.0.2/ из основной машины обрабатывается нормально, ответ в локальной$ ip r | grep default
default via 192.168.0.1 dev eth0
« Последнее редактирование: 12 Августа 2011, 14:16:37 от iks »

Оффлайн fisher74

  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 13763
    • Просмотр профиля
Re: Помогите с iptables
« Ответ #7 : 12 Августа 2011, 14:25:16 »
если перекрываю строкуiptables -t nat -A OUTPUT --dst $EXT_IP -p tcp --dport $SSH_PORT -j DNAT --to-destination $LAN_IPне получается подключится к локальному компу по ssh с внешки, а
Из внешки или с Вашего компошлюза?

перекрываяiptables -A POSTROUTING -t nat -j MASQUERADEперестает работать инет в локальной машине.
А я и не говорил что это правило нужно убрать. Я сказал, что оно неправильно составлено. Оно показывает, что ВЕСЬ траффик нужно маскарадить. А это нужно только для траффика уходящего в интернет из локальной сети.

iks

  • Автор темы
  • Гость
Re: Помогите с iptables
« Ответ #8 : 12 Августа 2011, 14:29:11 »
Из внешки или с Вашего компошлюза?
из внешки, добавлены акки для парочки друзей, для них есть доступ с внешки, эта цепочка сейсас устраивает по ssh, надо правильно прописать цепочку для html чтоб нормально локалный комп был виден тоже с внешки
Порты на 192.168.0.2
Цитировать
Порт   Состояние   Сервис
22   открыт   ssh
80   открыт   www
111   открыт   sunrpc
53964   открыт   неизвестно
« Последнее редактирование: 12 Августа 2011, 14:37:56 от iks »

Оффлайн fisher74

  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 13763
    • Просмотр профиля
Re: Помогите с iptables
« Ответ #9 : 12 Августа 2011, 14:34:24 »
У меня есть небольшие сомнения по поводу ошибочных правил:
Цитировать
iptables -t nat -A OUTPUT --dst $EXT_IP -p tcp --dport *
потому как дело происходит на виртуалке...
Не буду спорить, потому как с VirtualBox игрался пару раз всего.

iks

  • Автор темы
  • Гость
Re: Помогите с iptables
« Ответ #10 : 12 Августа 2011, 14:45:07 »
Да разницы то ни какой, поднят интерфейс vboxnet0 то-есть та-же локальная сеть связь идет через нее.$ ifconfig -a
eth0      Link encap:Ethernet  HWaddr 00:80:48:3f:fe:c0 
          inet6 addr: fe80::280:48ff:fe3f:fec0/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:46549 errors:0 dropped:0 overruns:0 frame:0
          TX packets:26291 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:53128922 (53.1 MB)  TX bytes:2589468 (2.5 MB)
          Interrupt:16 Base address:0xa800

lo        Link encap:Локальная петля (Loopback) 
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:16436  Metric:1
          RX packets:525 errors:0 dropped:0 overruns:0 frame:0
          TX packets:525 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:42248 (42.2 KB)  TX bytes:42248 (42.2 KB)

ppp0      Link encap:Протокол PPP (Point-to-Point Protocol) 
          inet addr:91.192.x.x  P-t-P:91.192.x.x  Mask:255.255.255.255
          UP POINTOPOINT RUNNING NOARP MULTICAST  MTU:1492  Metric:1
          RX packets:41096 errors:0 dropped:0 overruns:0 frame:0
          TX packets:25732 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:3
          RX bytes:51691718 (51.6 MB)  TX bytes:1989625 (1.9 MB)

vboxnet0  Link encap:Ethernet  HWaddr 0a:00:27:00:00:00 
          inet addr:192.168.0.1  Bcast:192.168.0.255  Mask:255.255.255.0
          inet6 addr: fe80::800:27ff:fe00:0/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:368 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:0 (0.0 B)  TX bytes:55504 (55.5 KB)
то-есть виртуалка работает как отдельная машина, связаная с реальной через vboxnet0 (виртуальная сетевая карта)

Оффлайн fisher74

  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 13763
    • Просмотр профиля
Re: Помогите с iptables
« Ответ #11 : 12 Августа 2011, 14:48:44 »
Это для Вас нет разницы. Вот Вы и ляпаете правила те, что увидели и "вроде подходят". А ядру с ними работать и виртуалка живёт внутри машины, потому и не знаю. как iptables  с этим мирятся.

P.S. Сорри, если сгрубил.

iks

  • Автор темы
  • Гость
Re: Помогите с iptables
« Ответ #12 : 12 Августа 2011, 15:00:56 »
iptables -t nat -A OUTPUT -d $EXT_IP -p tcp --dport $LanHTML_PORT -j DNAT --to-destination $LAN_IPто-же гложат сомнения с этим правилом, где-то тут похоже собака порылась

iks

  • Автор темы
  • Гость
Re: Помогите с iptables
« Ответ #13 : 12 Августа 2011, 16:34:20 »
Сейчас ни чего не меняя попробовал перенаправить по 80 порту#!/bin/bash

iptables --flush
iptables --table nat --flush
iptables --delete-chain
iptables --table nat --delete-chain
iptables -F
iptables -X

#####################################################################

EXT_IP=91.192.x.x # внешний, реальный IP-адрес
INT_IP=192.168.0.1 # внутренний IP-адрес локальной сети
LAN_IP=192.168.0.2 # внутренний IP-адрес сервера
EXT_IF=ppp0 # внешний интерфейс
INT_IF=vboxnet0 # внутренний интерфейс
SSH_PORT=22 # ssh порт
HTML_PORT=8080 # html внешний порт
LanHTML_PORT=80 # html порт виртуалки

ifconfig vboxnet0 $INT_IP

##### Перенапрвления по портам в локальную сеть #####

iptables -t nat -A PREROUTING --dst $EXT_IP -p tcp --dport $SSH_PORT -j DNAT --to-destination $LAN_IP
iptables -t nat -A POSTROUTING --dst $LAN_IP -p tcp --dport $SSH_PORT -j SNAT --to-source $INT_IP
iptables -t nat -A OUTPUT --dst $EXT_IP -p tcp --dport $SSH_PORT -j DNAT --to-destination $LAN_IP
iptables -A FORWARD -i $EXT_IF -o $INT_IF -d $LAN_IP -p tcp -m tcp --dport $SSH_PORT -j ACCEPT


#iptables -A INPUT -p tcp --dport $HTML_PORT -m state --state NEW -j ACCEPT

iptables -t nat -A PREROUTING --dst $EXT_IP -p tcp --dport $LanHTML_PORT -j DNAT --to-destination $LAN_IP
iptables -t nat -A POSTROUTING --dst $LAN_IP -p tcp --dport $LanHTML_PORT -j SNAT --to-source $INT_IP
iptables -t nat -A OUTPUT --dst $EXT_IP -p tcp --dport $LanHTML_PORT -j DNAT --to-destination $LAN_IP
iptables -A FORWARD -i $EXT_IF -o $INT_IF -d $LAN_IP -p tcp --dport $LanHTML_PORT -j ACCEPT

##### Раздача интернета в локалку #####

iptables -A FORWARD -i $EXT_IF -o $INT_IF -s 192.168.0.0/24 -m conntrack --ctstate NEW -j ACCEPT
iptables -A FORWARD -m conntrack --ctstate ESTABLISHED,RELATED,DNAT,NEW -j ACCEPT
iptables -A POSTROUTING -t nat -j MASQUERADE

exit 0
все отработало нормально, а на разных портах совсем что-то не хочет.

P.S. Это чистый тест был, зацикливать 80 порт само собой не хочется )
« Последнее редактирование: 12 Августа 2011, 16:40:25 от iks »

iks

  • Автор темы
  • Гость
Re: Помогите с iptables
« Ответ #14 : 12 Августа 2011, 17:16:58 »
Пока решил через такой костыль#!/bin/bash

iptables -t nat -N RED
iptables -t nat -A RED -p tcp --dport 8080 -j REDIRECT --to 80
iptables -t nat -A PREROUTING -i eth0 -j RED
iptables -t nat -A OUTPUT -o lo -j RED
в виртуалке
в основной машине использую такой скрипт#!/bin/bash

iptables --flush
iptables --table nat --flush
iptables --delete-chain
iptables --table nat --delete-chain
iptables -F
iptables -X

#####################################################################

EXT_IP=91.192.x.x # внешний, реальный IP-адрес
INT_IP=192.168.0.1 # внутренний IP-адрес локальной сети
LAN_IP=192.168.0.2 # внутренний IP-адрес сервера
EXT_IF=ppp0 # внешний интерфейс
INT_IF=vboxnet0 # внутренний интерфейс
SSH_PORT=22 # ssh порт
HTML_PORT=8080 # html внешний порт

ifconfig vboxnet0 $INT_IP

##### Перенапрвления по портам в локальную сеть #####

iptables -t nat -A PREROUTING --dst $EXT_IP -p tcp --dport $SSH_PORT -j DNAT --to-destination $LAN_IP
iptables -t nat -A POSTROUTING --dst $LAN_IP -p tcp --dport $SSH_PORT -j SNAT --to-source $INT_IP
iptables -t nat -A OUTPUT --dst $EXT_IP -p tcp --dport $SSH_PORT -j DNAT --to-destination $LAN_IP
iptables -A FORWARD -i $EXT_IF -o $INT_IF -d $LAN_IP -p tcp -m tcp --dport $SSH_PORT -j ACCEPT


iptables -A INPUT -p tcp --dport $HTML_PORT -m state --state NEW -j ACCEPT

iptables -t nat -A PREROUTING --dst $EXT_IP -p tcp --dport $HTML_PORT -j DNAT --to-destination $LAN_IP
iptables -t nat -A POSTROUTING --dst $LAN_IP -p tcp --dport $HTML_PORT -j SNAT --to-source $INT_IP
iptables -t nat -A OUTPUT --dst $EXT_IP -p tcp --dport $HTML_PORT -j DNAT --to-destination $LAN_IP
iptables -A FORWARD -i $EXT_IF -o $INT_IF -d $LAN_IP -p tcp --dport $HTML_PORT -j ACCEPT

##### Раздача интернета в локалку #####

iptables -A FORWARD -i $EXT_IF -o $INT_IF -s 192.168.0.0/24 -m conntrack --ctstate NEW -j ACCEPT
iptables -A FORWARD -m conntrack --ctstate ESTABLISHED,RELATED,DNAT,NEW -j ACCEPT
iptables -A POSTROUTING -t nat -j MASQUERADE

exit 0
открылся порт 8080 все нормально отрабатывается с внешки

 

Страница сгенерирована за 0.018 секунд. Запросов: 22.