iptables, как перенаправить порт от обратной петли?

Для перевода то, что Вы записали непосредственно в specfile макросы:

%if 0%{?fedora} == 4
BuildPrereq >= apr0.9
%endif 
%if 0%{?fedora} == 10
BuildPrereq >= apr2.0
%endif

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

Если Вы хотите поддерживать версии мягкой фетровой шляпы между fc4 и f10 или позже, можно использовать> = и <= также. Если Вы заботитесь о RHEL, существует a %{rhel} это оценивает как 4 для RHEL4 и 5 для RHEL5.

6
08.02.2012, 21:21
2 ответа

Этот может работать, но только если Вы предоставляете доступ к порту 3306 с внешней стороны: (но это не работает),

iptables -t nat -A PREROUTING -p tcp --dport 34306 --syn -j DNAT --to :3306

Что Вы в конечном счете хотите сделать, хотя: (но это не работает ни один),

iptables -t nat -A PREROUTING -p tcp --dport 34306 --syn -j DNAT --to 127.0.0.1:3306

Таким образом, Вы хотите, чтобы пакеты портировали 34306 во внешнем интерфейсе, который будет перенаправлен к 127.0.0.1, порт 3306. И это работало бы, за исключением того, что, после того как место назначения переписывается к 127.0.0.1, пакет становится марсианским Пакетом (входящий с внешней стороны с местом назначения 127.0.0.1). Марсианские пакеты обычно отфильтровываются и siletly и Вы действительно, действительно хотят это.

Существует более окольное решение, включающее метки брандмауэра. Теория: когда пакет прибывает, призывая к порту, 34306/tcp в Вашем внешнем интерфейсе, мы просто отмечаем его как приемлемый, затем переписываем его, чтобы казаться, что он прибыл из 3306/tcp. Трафик к 3306/tcp с меткой позволяется. Весь другой трафик к 3306/tcp отклоняется (или явно или неявно через политику по умолчанию). Код:

IFACE=eth0 # or whatever
HIPORT=34306
REALPORT=3306
MARK=42 # not-so-random random number
iptables -t mangle -A PREROUTING -p tcp -i $IFACE --dport $HIPORT -j MARK --set-mark $MARK
iptables -t nat -A PREROUTING -p tcp --dport $HIPORT --syn -j DNAT --to :$REALPORT
iptables -A INPUT -p tcp -m mark --mark $MARK -j ACCEPT
iptables -A INPUT -p tcp --dport $REALPORT -j DROP # explicitly dropping

Последнее правило состоит в том, где можно действовать на запрещенные пакеты. Мне нравится регистрировать все отброшенные пакеты, таким образом, мое падение цепочек до последних двух правил, которые являются a -j LOG и -j DROP. Таким образом в моем случае, мне не был бы нужен он, но Ваш собственный пробег будет, конечно, варьироваться.

Я просто протестировал это, и это работает над моей установкой. Это более окольно, чем ожидалось, но такова жизнь с netfilter.

При использовании фильтрации с сохранением информации добавить --syn к правилу 3 (-m mark в INPUT цепочка) и палка это перед Вашими инспекционными правилами состояния. Если Вы явно отбрасываете/отклоняете пакеты с правилом 4, и Вы делаете брандмауэринг с сохранением информации, необходимо добавить --syn к этому также. Это - крошечный более сложный бит (восемью целыми байтами), но проверка метки управляет, только относятся к SYN (первый) пакет каждого соединения TCP. После того как принять/отклонить решение было принято, инспекционные правила состояния делают остальных, таким образом, брандмауэр не должен продолжать проверять метки каждого пакета. Никакая причина потратить впустую циклы ЦП, и это поддерживает Вашу производительность сети на высоком уровне.

Некоторые вещи отметить:

  1. Ваш вопрос упоминает порт 33060, но Ваш код использует порт 34306. Я использовал последнего.
  2. Удостоверьтесь, что MySQL на самом деле слушает 127.0.0.1:3306. Это может использовать сокет домена Unix для местных связей, не Интернет-домен (TCP/IP) сокет, и это не объединяется в сеть.
  3. Вы только должны DNAT SYN пакет. NAT с сохранением информации автоматически переведет все другие пакеты. Это делает вещи незначительно быстрее.
  4. Вы не должны указать-s 0/0 явно, просто пропустить источник полностью.

Дух вопроса: безопасность с помощью мрака является резкой любовницей. Вы действительно не защищаете себя путем изменения порта MySQL, слушает на. Сканеры портов являются автоматизированными вещами, и они не возражают сканировать все порты в системе.:) Я рекомендовал бы любое использование ssh с -L опция туннелировать в безопасным способом, или, если Вы хотите стать необычными, VPN. Но иногда, жизнь дает Вам лимоны, и необходимо сделать лимонад с netfilter (который является, вероятно, одной из нескольких вещей, которые Вы не можете сделать с ним),

5
27.01.2020, 20:29
  • 1
    Спасибо Alexios однако порт все еще фильтровано. Возможно, потому что политика по умолчанию состоит в том, чтобы отбросить пакеты; 1-это - просто опечатка в сообщении. 2-это слушает согласно выводу netstat. 3-Здорово. 4-хорошо. О последнем комментарии. Я - большой поклонник ssh привязки однако, я вынужден пойти с iptables перенаправлением как меньшее зло. Это - требование :-( –  eproyectos 08.02.2012, 20:54
  • 2
    Ваши работы правила, только если я позволяю ВХОД обоим портам 3306 и 34306, и я заставляю mysql слушать eth0. Если я отбрасываю соединения с eth0:3306 34 306 работ остановок перенаправления (таким образом, я предполагаю, что то правило не перенаправляет к петлевому интерфейсу) –  eproyectos 08.02.2012, 21:09
  • 3
    О, конечно. Это - марсианские пакеты. У меня есть лучший ответ, и я скоро обновлю это. –  Alexios 08.02.2012, 22:23
  • 4
    Спасибо Alexios для Вашего превосходного ответа. Это дает мне много идей сделать далее играющий :-) –  eproyectos 09.02.2012, 18:42

Просто посмотрите на инструменты как nmap, полагайте, что злодеи, управляющие ботнетами, имеют неограниченное время и машины под рукой, и оценивают, сколько времени "скрываются, MySQL в (легко отгадываемом) порте" купит Вас.

0
27.01.2020, 20:29

Теги

Похожие вопросы