LINUX.ORG.RU
ФорумAdmin

Как сообразить nat для конкретного сайта и порта?

 ,


0

1

Здравствуйте. Есть шлюз. Пускать всех через nat не айс, все работает от аськи до любого сайта.

Когда

-A POSTROUTING -o eth0 -j MASQUERADE
Всем все открыто, все работает. Нужно например определить доступ к конкретному сайту и порту(в частности 2280) через nat.

Делаю

-A POSTROUTING -p tcp -o eth0 --dport 2280 -j MASQUERADE
Не работает:\

eth0 - внешний eth1 - внутрений

Как сообразить nat для конкретного сайта и порта? И еще пара вопросов.

iptables.up.rules

# Generated by iptables-save v1.4.12 on Wed Sep 18 17:32:08 2013
*mangle
:PREROUTING ACCEPT [176714:19324848]
:INPUT ACCEPT [80343:11617936]
:FORWARD ACCEPT [3538:239467]
:OUTPUT ACCEPT [10389:5428323]
:POSTROUTING ACCEPT [13761:5653532]
COMMIT
# Completed on Wed Sep 18 17:32:08 2013
# Generated by iptables-save v1.4.12 on Wed Sep 18 17:32:08 2013
*nat
:PREROUTING ACCEPT [278:26457]
:INPUT ACCEPT [75:9542]
:OUTPUT ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
#NAT для всех. Для динамического ip
#-A POSTROUTING -o eth0 -j MASQUERADE

#Маршрут для Albatross через NAT
#-A POSTROUTING -p tcp -o eth0 --dport 2280 -j MASQUERADE
#-A POSTROUTING -p tcp -o eth0 -d 212.45.16.145/32 --dport 2280 -j MASQUERADE

COMMIT
# Completed on Wed Sep 18 17:32:08 2013
# Generated by iptables-save v1.4.12 on Wed Sep 18 17:32:08 2013
*filter
:INPUT ACCEPT [80343:11617936]
:FORWARD ACCEPT [3538:239467]
:OUTPUT ACCEPT [10223:5414065]
COMMIT
# Completed on Wed Sep 18 17:32:08 2013



Последнее исправление: ulteo (всего исправлений: 1)

Что значит

сообразить nat для конкретного сайта и порта?

быть может вопрос должен звучать - как перенаправить пакеты приходящие на внешний интерфейс шлюза на указанный адрес и порт другого сервера?

vxzvxz ★★★
()
Ответ на: комментарий от vxzvxz

Нужно определить доступ к конкретному сайту и порту(в частности 2280). Думал подобное делается через nat.

ulteo
() автор топика

Вероятно, у вас корпоративный шлюз, и вы не хотите, чтобы люди через него в интернете страдали фигней, но кому-то одному что-то одно все-таки надо в интернете делать.

Выход тут скорее такой:

1. nat наружу надо делать всем.

2. Наружу по умолчанию никого никуда не пускать.

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

Третий пункт можно также реализовать средствами прокси-сервера, если позволяет тип трафика (для идентификации ползователя, которому нужно открыть доступ, использовать айпишник, либо авторизацию на прокси - так надежнее).

Если же требуется открыть доступ к конкретному ресурсу не для одного пользователя, а для всех, то можно просто обойтись настройками tcp-ip-фильтрации (iptables).

pianolender ★★★
()
Ответ на: комментарий от ulteo

Это с помощью правил для таблицы nat и делается, но для этого надо несколько условий:

1. написать правильно правило для таблицы nat.

2. написать правило для транзитных пакетов в таблице filter (forward)

3. разрешить передачу данных по уже установленным соединениям

4. указать серверу на который перенаправляете пакеты gateway, которым будет являться ваш шлюз

vxzvxz ★★★
()

NAT нужно делать для всех, а ограничивать всё в цепочке FORWARD. Разрешить что нужно, а политику поставить в DROP. При этом нужно смотреть, и разрешать всё, что действительно нужно, а не только один порт. Если, допустим, на компьютере в локальной сети прописаны google-DNS или сервера провайдера, то нужно и 53 порт udp разрешить.

mky ★★★★★
()
Ответ на: комментарий от ulteo

Если же вам нужно просто ограничить доступ к сайтам по url, порезать скорость или делать редирект с определенных сайтов на другие, то используйте для этих целей прокси - squid

vxzvxz ★★★
()
Ответ на: комментарий от vxzvxz

Если же вам нужно просто ограничить доступ к сайтам по url, порезать скорость или делать редирект с определенных сайтов на другие, то используйте для этих целей прокси - squid

Стоит squid+sams. sams вставляет свои acl и т.п имеет свой редирект, «конфликтует» с настройками squid. Без sams настраивал доступы, все работало как нужно. Здесь не мое решение.

Примерно ясно, поправте если не так 1. Разрешаю ощение между подсети

iptables -A FORWARD -i eth0 -o eth1 -s 192.168.0.0/24 -j ACCEPT
iptables -A FORWARD -i eth1 -o eth0 -d 192.168.0.0/24 -j ACCEPT
и для сайтов. Что то подобное?
iptables -A FORWARD -p tcp -o eth0 -d 212.45.16.145/32 --dport 2280 -j ACCEPT
2. Запрещаю все остальное
iptables -P FORWARD DROP
3. Включаю нат
iptables -A POSTROUTING -o eth0 -j MASQUERADE
Нужно что то еще?

И вопрос, важна ли иерархия? т.е. сначала разрешения потом запрещения, сначала forward потом INPUT?

ulteo
() автор топика
Ответ на: комментарий от ulteo

ну во-первых настроите прероутинг входящих пакетов на внешний интерфейс, это запись в таблице нат, именно она и будет преобразовывать адрес и порт в поступающих пакетах:

-A PREROUTING -i eth0 -p tcp -m tcp --dport 1258 -j DNAT --to-destination 192.168.0.1:1258

vxzvxz ★★★
()
Ответ на: комментарий от ulteo

затем добавьте правила для поддерживания установленных соединений:

-A FORWARD -d 192.168.0.0/24 -p tcp -m state --state RELATED,ESTABLISHED -j ACCEPT

-A FORWARD -d 192.168.0.0/24 -p udp -m state --state RELATED,ESTABLISHED -jACCEPT

vxzvxz ★★★
()
Ответ на: комментарий от vxzvxz

>212.45.16.145

адрес должен быть из вашей локальной подсети 192.168.0.0/24

Почему локальной подсети? Это же ip внешнего сайта к которому должен быть доступ.

А еще если на шлюзе есть squid то при правиле iptables -P FORWARD DROP, на свид надо делать редирект?

iptables -A PREROUTING -s 192.168.0.0/24 -i eth1 -p tcp -m multiport --dports 80,443 -j REDIRECT --to-ports 3128
ulteo
() автор топика
Ответ на: комментарий от vxzvxz

Пробую как советуте, не получается:\

Такой маршрут работает, доступ ко всему с 1 ip

iptables -A FORWARD -s 192.168.3.54/32 -o eth0 -j ACCEPT
но зделать доступ чисто к одному сайту не выходит:(

Вот скрипт

#/bin/bash

#iptables

# eth1 - локальная сеть, eth0 - инет

#Очищаем текущие правила
iptables -F
iptables -t nat -F
iptables -t filter -F
iptables -t mangle -F

echo O4istka

#Установим политики по умолчанию для трафика, не соответствующего ни одному из правил
#Запрет транзакций
iptables -P FORWARD DROP

echo Zpreti

#Правила 
#Разрешаем пакеты между  сетями
#Поддержка устоновленых соединений для наше сети
iptables -A FORWARD -d 192.168.0.0/16 -p tcp -m conntrack --ctstate RELATED,ESTABLISHED,DNAT -j ACCEPT
iptables -A FORWARD -d 192.168.0.0/16 -p udp -m conntrack --ctstate RELATED,ESTABLISHED,DNAT -j ACCEPT
#Разрешаем транзакции для конкретных усеров, сатов
#iptables -A FORWARD -s 192.168.3.54/32 -o eth0 -j ACCEPT

iptables -A FORWARD -p tcp -o eth0 -d 212.45.16.145/32 --dport 2280 -j ACCEPT

echo Pravila

#NATим всех
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

#Перенаправляем
iptables -t nat -A PREROUTING -i eth0 -p tcp -m tcp --dport 2280 -j DNAT --to-destination 192.168.3.54:2280

echo ipt zapisan

ulteo
() автор топика
Ответ на: комментарий от pianolender

Блин уже весь мозг сломал:\ , пробовал по разному. Самый лучший результат: Разрешаю формардинг для ip, работает все для этого ip.

iptables -A FORWARD -s 192.168.3.54/32 -o eth0 -j ACCEPT
Потом делаю так.
iptables -A FORWARD -p tcp --dport 2280 -s 192.168.3.54/32 -o eth0 -d albatrossvmc.marsat.ru  -j ACCEPT
Работает только нужный сайт, все как надо, через 5 минут работать перестает. Весь мозг сломал. Поделитесь опытом, что это может быть?

ulteo
() автор топика
Ответ на: комментарий от ulteo

через 5 минут работать перестает

Смотреть логи апача на стороне сайта, смотреть счетчики iptables на машине с фильтром - попадают ли пакеты в нужные правила.

-d albatrossvmc.marsat.ru

Все-таки урлы лучше сквидом фильтровать..

pianolender ★★★
()
Ответ на: комментарий от pianolender

Все-таки урлы лучше сквидом фильтровать..

Я в курсе... Это костыль, от безысходности:\

На стороне сайта не посмотреть, не наше. Смотрел по tcpdump на шлюзе, пк посылает пакеты на dns, похоже не получает ответы. Открыть форвардинг по 53 порту?

смотреть счетчики iptables на машине с фильтром

Каким образом? log?

ulteo
() автор топика
Ответ на: комментарий от ulteo

Открыть форвардинг по 53 порту?

У вас свой днс в конторе, или он посылает вовне? Если свой - то форвардинг непричем (если он только не в другой сети), если внешний - конечно, нужно открыть порт.

Ваще уж что-что, а днс обычно открыт для всех. Что, конечно, позволяет устанавливать туннели и гонять через них произвольный трафик, но это уже другой вопрос..

Каким образом? log?

watch -n 1 iptables -vnL

рядом с каждым правилом - счетчики заматченных пакетов.

pianolender ★★★
()
Ответ на: комментарий от ulteo

Тсталось понять, откуда брались 5 минут. ttl кеша какого-нибудь?

pianolender ★★★
()
Ответ на: комментарий от TOXA

Да ладно, у нормальных посонов ipmi есть с удаленной консолью :)

А ещё если так сделать, и какое-нибудь правило закосячит (например, вместо ip там fqdn кто-нибудь напишет), то до -j drop дело не дойдет или дойдет не сразу - имеем дыру.

С другой стороны, действительно, есть риск отстрелить ногу.

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

pianolender ★★★
()
Ответ на: комментарий от pianolender

Да ладно, у нормальных посонов ipmi есть с удаленной консолью :)

Не у всех...

А ещё если так сделать, и какое-нибудь правило закосячит (например, вместо ip там fqdn кто-нибудь напишет), то до -j drop дело не дойдет или дойдет не сразу - имеем дыру.

Вот отсюда поподробнее... Последнее правило DROP дает аналогичный эффект политике DROP, со всеми вытекающими. В это правило попадет каждый пакет, который не попал в другие правила. Единственная возможность накосячить тут появляется только в пользовательской цепочке, где не будет дефолтного правила

TOXA ★★
()
Ответ на: комментарий от TOXA

Вот отсюда поподробнее

имеется в виду, что если iptables наткнется на правило в цепочке и будет пытаться его применить, резольвнув fqdn, но по какой-то причине fqdn резольвиться не будет, то процесс растянется, и на это время (пока не дойдет до DROP) возникнет дырка.

pianolender ★★★
()
Ответ на: комментарий от pianolender

Я так понимаю он синхронно резолвит имя, а если так - тогда он тупо должен на это время класть на трафик и ждать ответа... Если же резолв асинхронный - то стоит очередь попавших в это правило, а все что до него не дошло уходит куда надо. Ну и писать fqdn в правилах пакетного фильтра в системе, где нет кеша dns, то еще извращение...

TOXA ★★
()
Ответ на: комментарий от TOXA

Мне рассказывали про такую как раз ситуацию, но из описания я не могу вспомнить, какая из двух версий имела место. Надо, чтоли, эксперимент поставить..

pianolender ★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.