- Шпаргалка по пробросу IP во внутреннюю сеть без моста и iptables в 4 команды
- Настройка правил iptables в Linux
- Введение
- Основы Iptables
- Пример настройки iptables
- Шаг 1 – Установка брандмауэра Iptables в Linux
- 1. Установка Iptables
- 2. Проверка текущего состояния Iptables
- Шаг 2 – Определение правил
- 1. Разрешение трафика на локальном узле
- 2. Разрешение подключений к портам HTTP, SSH и SSL
- 3. Фильтрация пакетов по источнику
- 4. Запрет всего остального трафика
- Удаление правил iptables
- Настройка NAT (MASQUERADE)
- Проброс портов
- Сохранение изменений в iptables
- Восстановление настроек
- Заключение
- ROUTE | IPTABLES и маршрутизация
- Re: ROUTE | IPTABLES и маршрутизация
- Re: ROUTE | IPTABLES и маршрутизация
- Re: ROUTE | IPTABLES и маршрутизация
- Re: ROUTE | IPTABLES и маршрутизация
- Re: ROUTE | IPTABLES и маршрутизация
- Re: ROUTE | IPTABLES и маршрутизация
- Re: ROUTE | IPTABLES и маршрутизация
- Re: ROUTE | IPTABLES и маршрутизация
- Re: ROUTE | IPTABLES и маршрутизация
- Re: ROUTE | IPTABLES и маршрутизация
- Re: ROUTE | IPTABLES и маршрутизация
- Re: ROUTE | IPTABLES и маршрутизация
- Re: ROUTE | IPTABLES и маршрутизация
- Re: ROUTE | IPTABLES и маршрутизация
- Re: ROUTE | IPTABLES и маршрутизация
- Re: ROUTE | IPTABLES и маршрутизация
- Re: ROUTE | IPTABLES и маршрутизация
- Re: ROUTE | IPTABLES и маршрутизация
- Re: ROUTE | IPTABLES и маршрутизация
- Re: ROUTE | IPTABLES и маршрутизация
- Re: ROUTE | IPTABLES и маршрутизация
Шпаргалка по пробросу IP во внутреннюю сеть без моста и iptables в 4 команды
В статье будет рассмотрена маршрутизация внешнего IP-адреса внутрь локальной без пробрасывания ethernet-шлюза и переписывания адресов в iptables. В итоге на сетевой карте внутреннего сервера будет один правильный внешний IP-адрес, внутренние IP-адреса будут отсутствовать.
Практика применения: например маршрутизация IP-адресов с сервера на виртуальные машины, без необходимости подключать их к ethernet-сети физического сервера.
При этом на сетевой интерфейс может быть назначена как сеть адресов, так и разрозненные адреса, у которых этот сервер указан просто как следующий узел маршрутизации (так например Hetzner раздает свои отказоустойчивые IP-адреса).
Исходное состояние
Сервер S1 — сервер во внутренней сети или виртуальный сервер, для которого нужно пробросить внешний IP-адрес, у него есть один сетевой интерфейс — eth0, включенный в brLAN.
iptables на обоих серверах выключен
Краткая шпаргалка по командам
Сервер S1 (внутренний)
На этом всё: для S1 внутренних IP-адресов назначать не нужно — пакеты сразу отправляются с публичного адреса.
Настройка клиента через конфиги
Как настроить через конфиги сервер пока не нашел, но в целом это меньшая проблема — один шлюз контролировать просто и настройка элементарная — просто для каждого адреса (сети адресов) вызывать команду направления трафика во внутреннюю сеть — это можно хоть просто скриптом сделать и включить в автозагрузку.
Преимущества перед iptables с пробросом на внутренний IP
Как избавиться от 192.168.0.1
P.S. в принципе адрес 192.168.0.1 тоже можно исключить и указывать вместо него любой IP-адрес сервера-шлюза, например его публичный IP, тогда трассировка пути будет смотреться красиво. При установках по умолчанию всё будет работать, но могут возникать ньюансы.
Например возможность отвечать по своим IP-адресам с любого интерфейса может иногда мешать и должна быть выключена. Или если сменится публичный IP-адрес шлюза (например виртуалка переехала на другой физический сервер) — нужно будет менять настройки внутреннего сервера. При использовании для шлюза отдельного, общего для всех подобных шлюзов адреса такой проблемы не возникает.
Источник
Настройка правил iptables в Linux
Введение
Iptables — это брандмауэр для Linux, используемый для мониторинга входящего и исходящего трафика и его фильтрации в соответствии с заданными пользователем правилами для исключения несанкционированного доступа к системе. При помощи Iptables можно разрешить на вашем сервере движение только определенного трафика. В данном руководстве мы рассмотрим использование Iptables для обеспечения безопасности веб-приложения.
Важно: В последних дистрибутивах RHEL/CentOS по умолчанию используется служба firewallD, уже установленная в системе. Если вы хотите использовать Iptables, сначала нужно ее отключить.
Для рассматриваемого примера используются VPS на Ubuntu 16.04 и локальная машина с SSH-клиентом
Основы Iptables
Все данные передаются по сети в виде пакетов. Ядро Linux предоставляет интерфейс для фильтрации пакетов входящего и исходящего трафика при помощи специальных таблиц. Iptables — это приложение командной строки и межсетевой экран для Linux, которым можно пользоваться для создания, поддержания работоспособности и проверки этих таблиц.
Можно создать несколько таблиц. В каждой таблице может содержаться несколько цепочек. Цепочка — это набор правил. Каждое правило определяет, что делать с пакетом, если он соответствует условиям. При соответствии пакета над ним выполняется целевое действие (TARGET). Это может быть проверка следующей цепочкой или один из следующих вариантов:
- ACCEPT: разрешить передачу пакета.
- DROP: запретить передачу пакета.
- RETURN: пропустить текущую цепочку и перейти к следующему правилу в цепочке, которая ее вызвала.
В данном руководстве мы будем работать с одной из таблиц по умолчанию, которая называется фильтром (filter). В таблице фильтра есть три цепочки (набора правил):
- INPUT – используется для контроля входящих пакетов. Можно разрешать или блокировать подключения по порту, протоколу или IP-адресу источника.
- FORWARD – используется для фильтрации пакетов, приходящих на сервер, но перенаправляемых куда-либо еще.
- OUTPUT – используется для фильтрации исходящих пакетов.
Пример настройки iptables
Давайте рассмотрим настройку iptables, на примере настройки доступа к web серверу.
Шаг 1 – Установка брандмауэра Iptables в Linux
1. Установка Iptables
Iptables предустановлен практически во всех дистрибутивах Linux, но если у вас его нет, в системах Ubuntu/Debian воспользуйтесь командами:
или в Centos/RedHat
2. Проверка текущего состояния Iptables
Эта команда позволит вам проверить состояние текущей конфигурации Iptables. Опция -L используется для выведения всех правил, а опция -v — для более подробной информации:
В рассматриваемом примере во всех трёх цепочках установлена политика по умолчанию ACCEPT. Ни в одной цепочке нет никаких правил. Давайте изменим цепочку INPUT для фильтрации входящего трафика.
Шаг 2 – Определение правил
Определение правила означает внесение его в список (цепочку). Вот пример команды Iptables с обычными опциями. Некоторые из них не являются обязательными.
Опция -A означает “append”, добавление правила в конец цепочки. Очень важным моментом является то, что правила в цепочке применяются последовательно, и если пакет удовлетворяет условиям одного из них, последующие применяться не будут. Это всегда нужно помнить при создании наборов правил. Таблица означает таблицу, в которой редактируются цепочки. По умолчанию это filter. Цепочка — имя цепочки, к которой мы добавляем правило. Интерфейс — сетевой интерфейс, для которого выполняется фильтрация трафика. Протокол указывает сетевой протокол, пакеты которого вы хотите фильтровать, источник — IP-адрес отправителя пакета, номер порта — порт на вашем сервере, для которого применяется правило. Эти и некоторые другие опции будут рассмотрены ниже при демонстрации соответствующих действий. Для более подробной информации о команде Iptables и ее опциях обратитесь к соответствующей man-странице.
1. Разрешение трафика на локальном узле
Первым делом нам нужно обязательно разрешить трафик через интерфейс loopback. Чтобы связь между приложениями и базами данных на сервере продолжалась в обычном режиме.
Опция -A используется для добавления в цепочку INPUT правила, разрешающего все соединения для интерфейса lo. Это обозначение для интерфейса loopback, он используется для всей связи на локальном узле, например, связи между базой данных и веб-приложением на одной машине.
2. Разрешение подключений к портам HTTP, SSH и SSL
Нам требуется, чтобы в обычном режиме работали порты HTTP (порт 80), https (порт 443), ssh (порт 22). Для этого нужно выполнить следующие команды. В них мы при помощи опции -p указали протокол, а при помощи опции —dport (destination port, порт на принимающей стороне, в данном случае это ваш сервер) соответствующий каждому протоколу порт:
Теперь все TCP-подключения с этими номерами портов будут разрешены. На самом деле для подключения по порту ssh лучше разрешить не со всех ip адресов, а только с определенных. Для защиты вашего сервера, как это сделать написано ниже
3. Фильтрация пакетов по источнику
Если вам нужно принимать или отклонять пакеты по IP-адресу или диапазону IP-адресов источника, можно указать их при помощи опции -s. Например, чтобы принимать пакеты с адреса 192.168.1.3:
вместо хоста также можно указать и полностью сеть, например для разрешения подключения по ssh только с локальной сети 192.168.1.0/24 пропишите правило
Отклонение команд с IP-адреса задаётся аналогичной командой с опцией DROP:
Если нужно отклонять или принимать пакеты с диапазона IP-адресов, вам потребуется воспользоваться модулем Iprange с опцией -m и при помощи параметра —src указать диапазон:
4. Запрет всего остального трафика
Важно: после определения правил обязательно нужно запретить остальной трафика, в целях исключения несанкционированного доступа к серверу через другие открытые порты.
Эта команда отклоняет весь трафик, кроме указанных выше портов. Теперь можно проверить свои правила командой:
Как мы видим для интерфейса loopback у нас разрешен любой трафик, по портам 80 и 443 можно подключиться с любого ip. А по порту 22 можно подключиться только с сети 192.168.1.0/24. Не забудьте сохранить настройки, иначе после перезагрузке вы потеряете все изменения. Как сохранить написано ниже.
Удаление правил iptables
Если нужно удалить все правила и прописать все заново с чистого листа, можно воспользоваться командой очистки (flush):
Она удаляет все существующие правила. Если вам нужно удалить конкретное правило, воспользуйтесь опцией -D. Сначала при помощи опции —line-numbers выведите пронумерованный список всех правил:
Для удаления правила нужно указать цепочку и номер в списке. В нашем случае это цепочка INPUT и номер 3.
Настройка NAT (MASQUERADE)
Большинство организаций получает от своих интернет-провайдеров ограниченное количество публично доступных IP-адресов, поэтому администратору требуется разделять доступ к Интернету, не выдавая каждому узлу сети публичный IP-адрес. Для доступа к внутренним и внешним сетевым службам узлы локальной сети используют внутренний (частный) IP-адрес. Граничные маршрутизаторы (межсетевые экраны) могут получать входящие соединения из Интернета и передавать их нужным узлам локальной сети и наоборот, направлять исходящие соединения узлов удаленным интернет-службам. Такое перенаправление сетевого трафика может быть опасным, особенно учитывая доступность современных средств взлома, осуществляющих подмену внутренних IP-адресов и таким образом маскирующих машину злоумышленника под узел вашей локальной сети. Чтобы этого не случилось, в Iptables существуют политики маршрутизации и перенаправления, которые можно применять для исключения злонамеренного использования сетевых ресурсов. Политика FORWARD позволяет администратору контролировать маршрутизацию пакетов в локальной сети. Например, чтобы разрешить перенаправление всей локальной сети, можно установить следующие правила (в примере предполагается, что внутренний IP-адрес брандмауэра/шлюза назначен на интерфейсе eth1):
Эти правила предоставляют системам за шлюзом доступ к внутренней сети. Шлюз направляет пакеты от узла локальной сети к узлу назначения и наоборот (опции -o и -i), передавая их через устройство eth1.
Важно: по умолчанию в большинстве дистрибутивов Linux перенаправление отключено. Чтобы его включить, нужно внести изменения в файл конфигурации /etc/sysctl.conf. Найдите там такую строчку net.ipv4.ip_forward = 0 и измените 0 на 1:
Разрешение перенаправления пакетов внутренним интерфейсом брандмауэра позволяет узлам локальной сети связываться друг с другом, но у них не будет доступа в Интернет. Чтобы обеспечить узлам локальной сети с частными IP-адресами возможность связи с внешними публичными сетями, нужно настроить на брандмауэре трансляцию сетевых адресов (NAT). Создадим правило:
В этом правиле используется таблица NAT, поэтому она указывается в явном виде (-t nat) и указана встроенная цепочка этой таблицы POSTROUTING для внешнего сетевого интерфейса eth0 (-o eth0). POSTROUTING позволяет изменять пакеты, когда они выходят из внешнего интерфейса шлюза. Целевое действие -j MASQUERADE заменяет (маскирует) частный IP-адрес узла внешним IP-адресом шлюза. Это называется IP-маскарадингом.
Проброс портов
Если в вашей внутренней сети есть сервер, который должен быть доступен извне, можно воспользоваться целевым действием -j DNAT цепочки PREROUTING в таблице NAT и указать IP-адрес и порт места назначения, на которые будут перенаправляться входящие пакеты, запрашивающие соединение с вашей внутренней службой. Например, если нужно перенаправлять входящие HTTP-запросы по порту 80 на выделенный HTTP-сервер Apache по адресу 172.31.0.23, выполните команду:
Данное правило определяет использование встроенной цепочки PREROUTING в таблице NAT для перенаправления входящих HTTP-запросов на порт 80 указанного IP-адреса 172.31.0.23. Такой способ трансляции сетевых адресов называется перенаправлением или пробросом портов.
Сохранение изменений в iptables
Созданные нами правила сохранены в оперативной памяти. Это означает, что при перезагрузке нам нужно будет заново из определить. Чтобы сохранить из после перезагрузки, нужно выполнить следующую команду:
Она сохраняет текущие правила в файл конфигурации системы, который используется для перенастройки таблиц во время перезагрузки. Эту команду нужно выполнять после каждого изменения правил. Для отключения брандмауэра просто очистите все правила и сохраните изменения:
Восстановление настроек
Если вы еще не сохраняли настройки, и хотите вернуться к первоначальным настройкам. Используйте iptables-restore.
Заключение
В данном руководстве мы рассмотрели основные моменты работы с Iptables: разрешение трафика только на определенных портах, фильтрацию пакетов по источнику, основы настройки трансляции сетевых адресов (NAT) и сохранение правил после перезагрузки. Однако, важно заметить, что iptables работает только с трафиком ipv4. Если ваш VPS поддерживает ipv6, нужно установить отдельные правила при помощи ip6tables.
Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.
Источник
ROUTE | IPTABLES и маршрутизация
У меня такой вопрос: Мой комп имеет два сетевых интерфейса, один подключен к домовой сети (интернет через локалку), ко второму я подключаю ноутбук. Оба они функционируют нормально, единственное но: ноутбуку доступны только ресурсы моего линукс-компа. Я хочу чтобы на ноутбуке можно было пользоваться интернетом. Я понимаю что для этого нужно использовать таблицу маршрутизации route и iptables, но у меня ничего не вышло. топология такая: internet-gw — 10.45.3.2 eth0 — 10.45.3.56 eth1 — 192.168.0.1 notebook — 192.168.0.10
помогите плиз с командой добавления маршрута.
Re: ROUTE | IPTABLES и маршрутизация
ну если у тебя авторизация через локалку в инет не через mac+ip а через какой-нить pppoe|vpn -тогда да банальный мост между интерфейсами
А если домашнюю сеть не идиоты держат (те авторизация mac+ip) тогда поднимай nat на машине и ходи через него
Re: ROUTE | IPTABLES и маршрутизация
Хм. да, через mac и/или ip. А с этого места поподробней. Я могу каким-то образом сделать маскарадинг с помощью iptables? если да то как?
Re: ROUTE | IPTABLES и маршрутизация
Re: ROUTE | IPTABLES и маршрутизация
Спасибо, у меня оно уже разпечатанное есть. Но я не админ — я юзер. ну хорошо добавил я команду
iptables -t nat -A POSTROUTING -p tcp -o eth0 -j SNAT —to-source 10.45.3.56
Но ничего не изменилось, кста, прошу заметить я хоть и юзер, но помоему применение SNAT в данном случае намного корректнее.
Re: ROUTE | IPTABLES и маршрутизация
>ptables -t nat -A POSTROUTING -p tcp -o eth0 -j SNAT —to-source 10.45.3.56
>Но ничего не изменилось
форвардинг включить забыл? 😉
>кста, прошу заметить я хоть и юзер, но помоему применение SNAT в данном случае намного корректнее.
Re: ROUTE | IPTABLES и маршрутизация
> форвардинг включить забыл? 😉 Хм. я обратил внимание, что в руководстве тоже пишется, что нужно включить форвардинг в ядре линукса (или где-то рядом =)). Но не написано, что для этого надо сделать.
А как это делается?
Re: ROUTE | IPTABLES и маршрутизация
если он включается командой
echo «1» > /proc/sys/net/ipv4/ip_forward
Re: ROUTE | IPTABLES и маршрутизация
>А если домашнюю сеть не идиоты держат (те авторизация mac+ip) тогда >поднимай nat на машине и ходи через него
а можно с этого места поподробнее,
т.е. по IP/MAC авторизуют НЕ идиоты,
а то что MAC и IP можно поменять одной командой,
это ничего?
Re: ROUTE | IPTABLES и маршрутизация
не волнуйся -ты никогда сеть держать не будешь ибо про port-security на коммутаторах не знаешь.
Re: ROUTE | IPTABLES и маршрутизация
>echo «1» > /proc/sys/net/ipv4/ip_forward
тогда дело в чём-то другом. что route -n говорит? запости сюда вывод ifconfig и route -n с твоего шлюза.
Re: ROUTE | IPTABLES и маршрутизация
>не волнуйся -ты никогда сеть держать не будешь ибо про port-security на коммутаторах не знаешь.
и много есть сейчас домашних сеток на умных свичах? ещё пару лет назад таковых практически нигде не было — что-то кардинально изменилось, и домашние сетки стали использовать свичи с привязками айпи-мак-порт?
Re: ROUTE | IPTABLES и маршрутизация
>и много есть сейчас домашних сеток на умных свичах?
Почто все сети>2000 юзеров только их и используют тк при таком количестве юзеров pppoe|vpn становятся слишком неудобными
Re: ROUTE | IPTABLES и маршрутизация
Не надо ограничиваться протоколом tcp:
iptables -t nat -A POSTROUTING -p all -s 192.168.0.10 -j SNAT —to-source 10.45.3.56
на ноуте default gw — этот роутер
ну и показать вывод на роутере iptables -L -n
Re: ROUTE | IPTABLES и маршрутизация
>Не надо ограничиваться протоколом tcp:
если на то пошло — то вообще нефик ограничиваться, а сразу
iptables -t nat -A POSTROUTING -o eth0 -j SNAT —to-source 10.45.3.56 да и всё 🙂
надо все настройки глянуть (ifconfig и route на шлюзе, и тоже самое на ноуте), тогда можно точно сказать было бы — в чём может быть проблема.
Re: ROUTE | IPTABLES и маршрутизация
вівод команд таков:
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
10.45.3.0 10.45.3.56 255.255.255.0 UG 0 0 0 eth0
10.45.3.0 0.0.0.0 255.255.255.0 U 10 0 0 eth0
192.168.0.0 0.0.0.0 255.255.255.0 U 10 0 0 eth1
127.0.0.0 0.0.0.0 255.0.0.0 U 0 0 0 lo
0.0.0.0 10.45.3.2 0.0.0.0 UG 10 0 0 eth0
[root@cluber akim]# ifconfig
eth0 Link encap:Ethernet HWaddr 00:11:3B:04:5E:78
inet addr:10.45.3.56 Bcast:10.45.2.255 Mask:255.255.255.0
inet6 addr: fe80::211:3bff:fe04:5e78/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:5184 errors:0 dropped:0 overruns:0 frame:0
TX packets:3242 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:2530305 (2.4 MiB) TX bytes:249698 (243.8 KiB)
Interrupt:18 Base address:0xcf00
eth1 Link encap:Ethernet HWaddr 00:0B:6A:C2:E6:BA
inet addr:192.168.0.1 Bcast:192.168.0.255 Mask:255.255.255.0
inet6 addr: fe80::20b:6aff:fec2:e6ba/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:52 errors:0 dropped:0 overruns:0 frame:0
TX packets:12 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:6927 (6.7 KiB) TX bytes:730 (730.0 b)
Interrupt:23 Base address:0xbc00
Re: ROUTE | IPTABLES и маршрутизация
>iptables -t nat -A POSTROUTING -o eth0 -j SNAT —to-source 10.45.3.56
Хорошая новость: после того как убрал -р -тср начал пинговаться мой интернет-шлюз, однако не более. В связи с этим вопрос: 1) Если пингуется с ноутбука мой основной шлюз — значит ли это, что все должно работать? 2) пакеты которые уходят с измененным соурсадресом они пакуются в эзернет фрейм заново? т.е. он имеет мак адрес моего eth0 интерфейса? 3) Может ли провайдер проверять например TTL пакета или еще-как-то делать выводы о наличии еще одного абонента?
Re: ROUTE | IPTABLES и маршрутизация
Господа! Здается мне здесь имеет место быть заблуждение, ибо:
1. Когда мы говорим о маршрутизации, то должны подразумевать передачу пакетов (трафика) адресату без изменений. Т.е. адресат пакета должен оставаться реальным IP.
2. Для осуществления этого как минимум Ваш провайдер должен знать Ваш адрес (один реальный) и знать, что через него необходимо передавать весь трафик предназначенный остальным. В Вашем случае к Вам приходит трафик Всех адресов, скажем так, напрямую, что в целом не смертельно.
3. То что делаете Вы — трансляция адресов (NAT). И клиент о своем реальном адресе догадывается по результатам действий в Интернете.
4. Для правильной организации роутинга: — подымаете у себя только один IP; — прописываете на клиентских ПК на сетевых интерфейсах их реальные IP. — прописываете у себя роутинг пакетов через необходимый интерфейс Вашего ПК. (Например с помощью команды route — чистая статика).
Re: ROUTE | IPTABLES и маршрутизация
Re: ROUTE | IPTABLES и маршрутизация
Интернет ллюз — этот тот роутер, к которому и подключается ноут ? 192.168.0.1 ? По адресу 192.168.0.1 он должен пинговаться и быть доступен независимо от этого правила. Если по адресу 10.45.3.56 — то это хорошо, но еще ничего не значит.
3) может, но это маловеронятно. TTL корректируется через iptables
А вообще, неплохо бы вывод iptables -L -n увидеть, как я просил выше
Re: ROUTE | IPTABLES и маршрутизация
имхо, грабли в маршрутах:
у тебя по-ходу отсуствует шлюз по-умолчанию :). на eth0 и на eth1 прописаны разные шлюзы — (eth0 — 10.45.3.56 шлюз для трафика с 10.45.3.0 — ета что такое? твой комп роутит трафик из сети прова в твою локалку? :))) наверное, хотел наоборот? 😉 только на eth0 маршрут должен быть такой: destination 0.0.0.0 gateway 10.45.3.2 :). и другие шлюзы тебе не нужны, на eth0 шлюз не нужно указывать вообще. то есть, тебе надо убрать маршрут destination 0.0.0.0 gateway 10.45.3.2 с eth1 и прописать его на eth0.
если никаких правил iptables кроме
iptables -t nat -A POSTROUTING -o eth0 -j SNAT —to-source 10.45.3.56
ты не задавал — должно заработать.
Re: ROUTE | IPTABLES и маршрутизация
ему не нужен бридж, ему нужен НАТ — это же очевидно по постановке вопроса.
Источник