Этот может работать, но только если Вы предоставляете доступ к порту 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. После того как принять/отклонить решение было принято, инспекционные правила состояния делают остальных, таким образом, брандмауэр не должен продолжать проверять метки каждого пакета. Никакая причина потратить впустую циклы ЦП, и это поддерживает Вашу производительность сети на высоком уровне.
Некоторые вещи отметить:
DNAT
SYN
пакет. NAT с сохранением информации автоматически переведет все другие пакеты. Это делает вещи незначительно быстрее.Дух вопроса: безопасность с помощью мрака является резкой любовницей. Вы действительно не защищаете себя путем изменения порта MySQL, слушает на. Сканеры портов являются автоматизированными вещами, и они не возражают сканировать все порты в системе.:) Я рекомендовал бы любое использование ssh
с -L
опция туннелировать в безопасным способом, или, если Вы хотите стать необычными, VPN. Но иногда, жизнь дает Вам лимоны, и необходимо сделать лимонад с netfilter (который является, вероятно, одной из нескольких вещей, которые Вы не можете сделать с ним),
В моих системах Соляриса, даже xpg4 версия grep
не включает -o
опция.
Но если Вам установят пакет SUNWggrp, то Вы найдете GNU egrep доступным как /usr/sfw/bin/gegrep
.