Вопрос в общем-то не столько по iptables сколько про понимание архитектуры работы сети, маршрутизации наверно.
Задача сводится к тому что бы у клиентов из внешней сети была возможность делать запросы к серверу в локальной сети и получать ответы, при этом локальную сеть от внешней защищает фаервол.
есть канал с выходом в интернет,
на конце с нашей стороны есть cisco провайдера его IP например: 212.155.155.57
Пингуется из внешней сети.
За циско идет фаервол. Провайдер сказал что компьютер на котором будет располагаться серверная часть должен иметь такие настройки:
ip: 212.155.155.58
Subnetmask: 255.255.255.252
Gateway: 212.155.155.57
DNS1: 212.20.150.220
DNS2: 212.20.150.221
Если компьютер с этими параметрами прицепить сразу за циско(в обход фаервола), то он тоже пингуется(212.155.155.58), за фаерволом нет.
Какие правила требуется добавить в iptables фаервола для того что бы он смог принимать пакеты которые предназначены для этого сервера и выпускать с него тоже.
Дополнительная информация: Базовые настройки iptables:
У нас на все input стоит Drop(Отбрасывать), и указано что принимать (короче как у большинства).
На Output наоборот Принимать все кроме чего-то.
Я так понимаю нужно какими-то правилами засветить этот адрес в инете, что бы к нему могли подключаться клиенты.
// Тему переместил(а) Dmitry Shurupov из форума «Железо в UNIX/Linux-системах».
Последние комментарии
- OlegL, 17 декабря 2023 года в 15:00 → Перекличка 21
- REDkiy, 8 июня 2023 года в 9:09 → Как «замокать» файл для юниттеста в Python? 2
- fhunter, 29 ноября 2022 года в 2:09 → Проблема с NO_PUBKEY: как получить GPG-ключ и добавить его в базу apt? 6
- Иванн, 9 апреля 2022 года в 8:31 → Ассоциация РАСПО провела первое учредительное собрание 1
- Kiri11.ADV1, 7 марта 2021 года в 12:01 → Логи catalina.out в TomCat 9 в формате JSON 1
По твоей задаче больше инетерсуют правила в цепочке FORWARD (таблица *filter) и цепочках POSTROUTING/PREROUTING (таблица *nat).
«Этот» адрес засвечен в Интернет и без твоей попощи ;). Тебе надо лишь на своем «фаерволе» задать правила в iptables для проброса соединений на определенный порт «этого» IP-адреса во внутренню сеть до трбуемого ресурса. Для решения данной задачи достаточно правил:
где
$EXT_IP — внешний IP-адрес «фаервола» (в твоём случае: 212.155.155.58);
$INT_IP — IP-адрес внутреннего ресурса (к которому требуется организовать доступ);
$EXT_PORT — значение порта, на который будут обращаться пользователи из Интернет;
$INT_PORT — значение порта, который слушает внутренний ресурс и накоторый будут перенаправляться запросы из Интернет;
$EXT_IFACE — имя внешнего сетевого интерфейса (тот, на котором задан IP-адрес 212.155.155.58).
P.S. Причём здесь «Железо»?
Спасибо большое, пробую..
Внешний ip фаервола у меня кажеться другой? Я его здесь не показывал?
А куда мне? Это может только щас стало уверенности больше что все дело в фаерволе, думалось что вся нарисованная мной схема нереальная.
Ээээ… Ну, это я тебя так значит понял, что внешним адресом фаервола у тебя будет 212.155.155.58… Разве не?
нет, это компьютер в локальной сети который должен получать пакеты из вне..
А как потом проверить что он видимый: telnet ip port?
ping-ом получиться?
Стоп!
Тогда расшифруй вот эту фразу:
«Если компьютер с этими параметрами прицепить сразу за циско(в обход фаервола), он тоже пингуется(212.155.155.58), за фаерволом нет.»
Желательно с более внятным описанием схемы и расстановкой IP-адресов (кто где и как стоит).
Есть у меня смутное сомнение, что ты сервер с адресом 212.155.155.58 просто ставишь за какой-то мифичесикй фаервол, с непонятно какими адресами…
nat?
IP адрес этого фаервола есть. Пингую фаервол из дома через инет. Побаиваюсь сообщать ip. Поэтому пусть будет фаервол: 194.194.252.50(внешний IP) и у него же 192.168.42.1(внутрений IP).
Итак: идут пакеты из инета к нам в локальную сеть, по порядку они должны пройти от клиента:
-> cisco(212.155.155.57)->фаервол(194.194.252.50)->компьютер с серверной частью программы(212.155.155.58). Порт по которому прога работает 1024.
Ну и понятно так как клиент делает запрос к базе сервера, то и в обратную сторону должны ходить пакеты ответов.
Я пробовал:-> cisco(212.155.155.57)->компьютер с серверной частью программы(212.155.155.58). Если так то 212.155.155.58 виден в инете(пингуется).
Если компьютер с этими параметрами(его ip 212.155.155.58) прицепить сразу за циско(в обход фаервола), то компьютер пингуется, если расположить за фаерволом не пингуется. Ну эта проверка как подтверждение того что адрес «засвечен» в интернете.
«С помощью NAT решаются следующие задачи:
во-первых, становится возможным использовать один ip-адрес для доступа в Интернет с нескольких компьютеров.
Во-вторых, NAT позволяет скрыть внутреннюю структуру корпоративной сети».
Возможно nat. Только мне нужно наоборот не скрывать внутреннюю структуру корпоративной сети, а показать один компьютер в ней.
Действительно Nat этим занимается: Публикация локальных ресурсов во внешней IP-сети.
Дык, дай своему серверу IP-адрес, принадлежащий той же подсети, что и внутренний адрес фаервола (192.168.42.*). Не забудь указать в качестве гейтвея для твоего сервера внутренний адрес фаервола.
После этого задавай правила для iptables в соответствии с примером, который я тебе дал в своём первом ответе в этой теме.
1) Оказывается в моем случае необязательно серверу иметь те ip и пр. которые сообщил провайдер?
2) Как все таки проверить потом что это работает?
3) Пока думаю, но все таки вопрос тоже не ясен — клиентская часть программы должна настраиваться на поиск в инете чего? ip адреса фаервола и порта:(194.194.252.50:1024)?
На cisco, access листы установщики пока не настраивали, не может быть такого что она будет «разговаривать» только с 212.155.155.58?
Ничего не понимаю уже..Пользователи из локальной сети настроены на прокси 192.168.42.1 — берут инета оттуда(это же и фаервол). Для клиентов, линию новую протянули для их проги. В swich перед фаерволом воткнуты эти две линии сейчас.(расшифровываю старая(cisco-194.194.252.30) и новая(cisco-212.155.155.57). И кажеться мне что если шлюз указать 192.168.42.1 то пакеты будут выходить через старого провайдера?
У тебя сервер обязательно должен откликаться при обращении на IP-адрес, который дал провайдер. Как ты это организуешь — дело твоё: можешь сервер напрямую в цискцу включить, а можешь с NAT заморочиться.
Неужели совсем нет мыслей по этому поводу?
Да.
Может.
Ну, сделай фаерволу внешний адрес 212.155.155.58, и будут все ходить через нового провайдера =).
Если telnet-ом пинговать порт на фаерволе, он разве ответит если на этом порту непосредствено на фаерволе не висит ничего? Он ведь перенаправляет на тот же порт на сервер в локалку, если на порт принят пакет.. а пинг как сработает?
Надо что бы все как ходили так и ходили в инет. А пакеты программы только через нового провайдера..
При тех правилах iptables, которые я привел в качестве примера, да, telnet’ом можно попробовать проверить. А пинг (который icmp echo request) тоже сработает, но для этого нужны уже другие правила.
Интересный ты =). У тебя правила игры меняются чуть ли не в каждом сообщении ;).
Если тебе надо чтобы сервер обязательно откликался на новый адрес (212.155.155.58), а клиенты ходили в интернет со старым адресом, и при этом все через один фаервол, то у твоего фаервола должно быть два внешних адреса. Реализовать это можно, наприер, подняв на его внешнем интерфейсе алиас с новым адресом или вставив ещё один физический интерфейс.
Если заморачиваться с алиасом, то в моём примере немного изменится правило для цепочки PREROUTING (там надо будет явно указать адрес назначения '-d 212.155.155.58\′ и убрать упоминание об имени внешнего интерфейса $EXT_IFACE) и цепочке POSTORUTING (убрать упоминание об имени внешнего интерфейса $EXT_IFACE).
извини, оказывается я смотрел на кусочек картины, а этот кусочек зависит от всей композиции.. :).
Просто не понимал где заканчивается программные возможности, в общем-то они и не заканчиваются — читаю про алиас..
Через webmin на нашем шлюзе я нашел «Добавление сетевого интерфейса», там они имеются штук 10 называются «Виртуальные». Могу я туда добавить нужный мне?
У нас 2 старых провайдера оказалось, идущих через этот шлюз: один оказывается не интернет а платежная система всемирная, ip связанный с этой платежной системой в списках webmin обозначен как виртуальный. Эврика! или нет?
Тут я пас. Вебмин видел один раз в жизни, поэтому понятия не имею, как в нём именуются алиасы (хотя, по логике вещей, «Виртуальные» очень похоже, что и есть алиасы).
Вернулся к вопросу. Начал пробовать создавать Виртуальный ip-адресс(алиас), там требуется указать широковещательный адрес, его обычно спрашивают у провайдера или у кого? Надеюсь, что он обычно не нужен :).
Обычно он вычисляется автоматически утилитой настройки адреса. Если у тебя такая глупая утилита настройки, то широковещательный адрес можно посчитать самому. Ну, а если самому сосчитать не получается, то (hint) в Интернете полно всякого рода «ip-калькуляторов», в том числе и онлайн (например, http://www.subnet-calculator.com/).
Все таки не понял я про проверку соединения.
Пингую фаервол: telnet 212.155.155.58 1024, окошко как бы ожидает ответа, секунд 7, потом исчезает. Если любой другой порт который у меня я точно знаю закрыт таким способом пинговать, то окошко явно исчезает, то есть как бы не пытается даже.
Просканировал nmap фаервол 212.155.155.58: Открытые порты в отчете светло-зеленым отмечены, 1024 тоже появился темно зеленым отмечен, вот что сканер про него сказал: 1024/tcp filtered kdm. Через HiperTerminal пытался проверить — че-то тишина. Skype вроде вешаю на этот порт на сервере skype не может подключиться к инету..Просто реальную прогу которая нужна придут ставить внедренцы..как бы проверить что все работает?
1) Каким ответ должен быть при обращении телнетом на 1024-ой порт?
2) Не мешало бы показать настройки сетевых интерфейсов и итоговые правила iptables на фаерволе.
Хочеться, что бы был любым, лишь бы стало ясно что сигнал дошел до конечной цели (сервера за фаерволом). Как это организовать?
Просто сомневаюсь что я все правильно проверяю.
Может стоит выяснить, как проверять и каким должен быть ответ, у тех людей, которые ставили задачу?
Уф, честно сказать я в этом деле новичек-самоучка..процессов которые происходят при пингах особо не понимаю..могу понять это только в сравнении с другим открытым портом..вот если на порту висит sendmail на фаерволе то на telnet ьудет ответ: «Я Sendmail, слушаю вас?». А вот с этим 1024, пересылаемый порт, мне не понятно. По идее на нем как бы тоже должна висеть программа, только на самом деле она висит не на самом фаерволе а на сервере за ним. И ответы должны быть такими как будто на этом порту слушает программа непосредственно на фаерволе, так?
Иногда начальство знает чего хочет, плохо знает как это реализовать, и задача ставиться мне вообще-то реальна и простая, а знаний нет..
Да, так. Только дело усугубляется тем, что ты не знаешь, чего программа должна отвечать. Я, вот, тоже не знаю.
Да программа то может быть пока любой, только я не знаю что можно развернуть что бы она этот порт слушала..и какой-нибудь ответ давала на пинги..потом просто повесят на порт нужную прогу.
Все таки не понимаю как прокси влияет на эту ситуацию. Прокси висит на порту 3128. Теоретически если правила прописаны правильно на фаерволе, снутри по порту 1024, с машины сервера, я смогу в инет выходить?
Аааа… фирштейн =). Ну, если развернуть что-нибудь левое, то я бы воспользовался netcat. Если с этой штукой не знаком и знакомиться нет желания, то можно IIS поднять (на сервере же винда?) и заставить его слушать нужный тебе порт.
Прокси никак не влияет.
Правила, которые ты задаешь iptables для доступа извне к 1024-му порут сервера, никак не влияют на выход в инет ни с самого сервера, ни с какой-либо другой машины в сети.
Спасибо, тебе линуксоид, за терпение особое. Сделал ты мне канал похоже :))!
Вот приехал домой, попробовал, и в ответ долгожданые каракули:
220 Microsoft FTP Service. А с работы не хотела пинговаться.
Не пойму я, вот как это представлял сегодня на работе — почему считал что вполне могу пинговать и с работы, считал, что мои пинги (telnet 212.155.155.58 1024) с работы уходили в инет по старому каналу, из инета опять находили мой ип нового канала(212.155.155.58) и почему-то FTP не отвечал. Признаться грешил на правила.
Теперь бы еще:
1) убедиться до конца что сетевые пакеты, а лучше прямо файлы, качаются туда и выходят обратно. Какой наиболее простой вариант проверки этого? Этот FTP из IIS это как раз то что нужно для такой проверки?
2) понять что за дыру я в сеть прорубил, как ей могут воспользоваться злоумышленники, что можно сделать для защиты? Что по этому поводу рекомендуете почитать?
3) И можно детский вопрос. Какая схема быстрее будет работать и насколько:
a) 2 канала от провайдера -> в один swich -> связаные одним кабелем!! -> с одной сетевой картой (с двумя ip-адресами)
или
b) 2 канала -> 2 сетевые карты
Наверно не стоит устанавливать еще одну сетевую карту?
Просто боюсь что в пункте а) «один кабель», может оказаться узким местом которое делает 1 прямо выделенный для клиентов канал, несколько бессмысленым, так как кабель от свича до сервера может быть забит трафикам второго канала..
Еще пингуется (telnet 212.155.155.58 1024) с самого этого сервела за фаерволом, сам себя как бы..
Да, FTP-сервер из состава IIS вполне подойдет.
Вышеприведёнными правилами iptables, обеспечивающими доступ извне к внутреннему серверу, ты прорубил дыру только к конкретному сервису на конкретной машине. Соответственно, защищаться надо от потенциальных ошибок в безопасности на этом самом сервисе (ну там, свести к минимуму вероятность возниконвения баг, проводить периодическое изучение системных логов данного сервиса… В общем, тут тебе его разработчик должен рассказывать, как вести теперь себя с этим его сервисом).
Сомневаюсь, что «кабель от свича до сервера может быть забит трафиком второго канала», поскольку врядли какой-либо из провайдеров дает тебе канал хотябы 50 Мбит/с (да и сетевой интерфейс на сервере, поди, гигабитный?).
Но в плане администрирования лично мне было бы удобнее иметь два физических интерфейса.
fly4life, привет!
Прошло 2 года, проброс порта, который тогда получилось реализовать работал отлично.
Но уже неделю не могу разобраться с такой проблемой, что 3 клиента из 70-ти не могут подключиться к сервису.
Изменилось только то, что на новом канале, который приобретался для этого сервиса, маршрутизатор передалали в bridge — ip-шник который для меня является шлюзом провайдер забрал к себе.
После этого через неделю начались непонятки: пока не пропингуешь с сервера(фаервола) адрес шлюза, нет доступа из вне к сервису… как будто маршрутизатор засыпает, приходиться держать пинг постояно..
Через месяц возникла эта проблема — 3 клиента не могут достучаться.
Подробнее описал здесь:
www.opennet.ru/cgi-bin/openforum/vsluhboard.cgi?az=list&forum=vsluhforumID1&dir_topic=106
Большая просьба подсказать..
Привет!
Ты посмотри, что у тебя tcpdump говорит в части ответов этим клиентам. Судя по твоей таблице маршрутизации, на форуме Опеннета правильно говорят, что «ответы клиентам уходят с другого интерфейса» (iprovider1). Есть вероятность, что у твоих трех проблемных клиентов такие ответы режет их файерволл (т.е. их FW ждет ответы от ipprovider1, а получает от ipprovider2 и благополучно их дропит).
Пардон, опечатка. Должно было быть так: «т.е. их FW ждет ответы от ipprovider2, а получает от ipprovider1 и благополучно их дропит».
1) При старой конфигурации, настройки которые приводил выше, и после выполнения скрипта(ниже) вижу одно и тоже используя для “захвата” сетевые интерфейсы: eth1 и eth1:9. Почему вижу пинг провайдера “через” eth1, логичней бы было видеть его “через” eth1:9, на него же прописан адрес ipprovaider2?
(догадываюсь, что интерфейс физически один и тот же, но не понимаю принцип работы команды tcpdump и алиаса, не понимаю определение для опции –i в tcpdump — опция которая указывается какой интерфейс будет использоваться для “захвата пакетов” — http://ru.wikipedia.org/wiki/Tcpdump)
Понимаю что использовать раздельные сетевые карты было бы правильнее, все-таки алиасом можно обойтись, что бы разделять каналы?
# tcpdump -i eth1 host ipprov2.58 -n
12:05:55.754064 IP ip_client > ipprov2.58: ICMP echo request, id 7817, seq 18617, length 40
12:05:55.754098 IP ipprov2.58 > ip_client: ICMP echo reply, id 7817, seq 18617, length 40
# tcpdump -i eth1:9 host ipprov2.58 –n
12:09:52.253181 IP ip_client > ipprov2.58: ICMP echo request, id 7817, seq 24506, length 40
12:09:52.253214 IP ipprov2.58 > ip_client: ICMP echo reply, id 7817, seq 24506, length 40
2) После выполнения сего скрипта, УРА! провайдер который не мог меня пропинговать смог это сделать.
______________________________________
#!/bin/bash
#
echo «101 T1» >> /etc/iproute2/rt_tables
echo «102 T2» >> /etc/iproute2/rt_tables
#interface na provaydera
IF1=eth1
IF2=eth1:9
#
IP1=ipprov1.66
IP2= ipprov2.58
#
P1=gwprov1.65
P2= gwprov2.57
#
P1_NET=netprov1.64/26
P2_NET= netprov2.56/30
#
PC=192.168.42.251
#
ip route add $P1_NET dev $IF1 src $IP1 table T1
ip route add default via $P1 table T1
#
ip route add $P2_NET dev $IF2 src $IP2 table T2
ip route add default via $P2 table T2
#
ip route add $P1_NET dev $IF1 src $IP1
ip route add $P2_NET dev $IF2 src $IP2
ip route add default via $P1 metric 10
#
ip rule add from $IP1 table T1
ip rule add from $IP2 table T2
ip rule add fwmark 2 table T2
___________________________________
стало так:
root# ip ru sh
0: from all lookup local
32763: from all fwmark 0×2 lookup T2
32764: from ipprov2.58 lookup T2
32765: from ipprov1.66 lookup T1
32766: from all lookup main
32767: from all lookup default
root# ip ro sh
192.168.over.50 via 192.168.over.17 dev eth1 metric 10
natprov2.56/30 dev eth1 proto kernel scope link src ipprov2.58
192.168. over.16/28 dev eth1 proto kernel scope link src 192.168. over.18
natprov1.64/26 dev eth1 proto kernel scope link src ipprov1.66
192.168.42.0/24 dev eth0 proto kernel scope link src 192.168.42.1
127.0.0.0/8 dev lo scope link
default via gwprov1.65 dev eth1 metric 10
3)
root@libra:/distr/11.02.2011/REZERV# ip route list table T1
natprov1.64/26 dev eth1 scope link src ipprov1.66
default via gwprov1.65 dev eth1
root@libra:/distr/11.02.2011/REZERV# ip route list table T2
natprov2.56/30 dev eth1 scope link src ipprov2.58
default via gwprov2.57 dev eth1
После выполнения скрипта, в T2 все таки не записалось eth1:9, но зато указано через какой шлюз отправлять определившись по src, то есть по идее это работает правильно? т.е. пакеты уйдут по тому каналу по которому пришли.
4) Но проброса порта не получилось, по этим правилам:
$IPTABLES -t nat -A PREROUTING -i eth1 -d $GLOBAL_IP_PRIM -p tcp --dport 1028 -j DNAT --to-destination $PC
$IPTABLES -t nat -A PREROUTING -i eth1:9 -d $GLOBAL_IP_SEC -p tcp --dport 1028 -j DNAT --to-destination $PC
$IPTABLES -t mangle -N CT
$IPTABLES -t mangle -A CT -i eth1 -p tcp --dport 1028 -j CONNMARK --set-mark 1
$IPTABLES -t mangle -A CT -i eth1:9 -p tcp --dport 1028 -j CONNMARK --set-mark 2
$IPTABLES -t mangle -A PREROUTING -i $LOCAL_ETH -m state --state ESTABLISHED -j CONNMARK --restore-mark
$IPTABLES -t mangle -A FORWARD -i eth1 -m state --state NEW -j CT
$IPTABLES -t mangle -A FORWARD -i eth1:9 -m state --state NEW -j CT
_
Не подходит CONNMARK для таких вещей eth1:9, он будет считать его как eth1, правильно?
Все таки необходимо использовать другой компьютер с фаерволом или дополнительную физическую карту, с алиасом сетевой не получится?