solaris + соответствуют egrep для solaris

Этот может работать, но только если Вы предоставляете доступ к порту 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 (который является, вероятно, одной из нескольких вещей, которые Вы не можете сделать с ним),

1
16.11.2012, 20:39
1 ответ

В моих системах Соляриса, даже xpg4 версия grep не включает -o опция.

Но если Вам установят пакет SUNWggrp, то Вы найдете GNU egrep доступным как /usr/sfw/bin/gegrep.

3
27.01.2020, 23:29

Теги

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