. Я изо всех сил пытаюсь понять, что именно делает этот набор правил iptables.
Порт 22 получает пакет И порт 2222 также получает его копию? Или пакет перенаправляется на порт 2222, пропуская порт 22? Может кто-нибудь объяснить мне, что делает этот набор правил в деталях? заранее спасибо!
echo 1 > /proc/sys/net/ipv4/ip_forward
iptables -P FORWARD ACCEPT
iptables -A INPUT -p tcp --dport 2222 -j ACCEPT
iptables -t nat -A PREROUTING -p tcp --dport 22 -j REDIRECT --to-ports 2222
№Только локальный процесс, прослушивающий порт 2222
, получит пакет. Если он ответит, произойдет обратная трансляция, и исходящий пакет response
будет отправлен через порт 22
.
Четвертое правило заставит любыевстретившиеся пакеты, предназначенные для порта 22
, перенаправлять на ваш локальный порт 2222
, даже если они не предназначались. быть для этой машины. Поскольку у вас нет других критериев соответствия, это будет так для всех, кроме соединений, исходящих с этой машины.
По сути, это перехватывает любой сквозной трафик SSH. Если кто-то настроит эту систему в качестве своего шлюза и попытается подключиться к любой службе SSH за пределами локальной сети, вместо этого он подключится к вашей службе, работающей на порту 2222
. Если они уже установили доверие (имеют реальный ключ сервера в файле known_hosts
или он правильно опубликован с помощью DNSSEC), их попытка будет отклонена их клиентом с надлежащим предупреждением о продолжающемся манипулировании. атака посередине (на что, по сути, и похоже это правило).
Пожалуйста, обратитесь к диаграмме потока пакетов Netfilter.
Кстати, вам не нужновключать переадресацию ip в этом случае, потому что пакет не нужно пересылать (даже если его нужно пересылать, если не было правило REDIRECT
). А с цепочкой FORWARD
ничего делать не нужно, потому что она не проходима. Таким образом, первая и вторая команды избыточны.После таблицы nat
пакет перенаправляется на локальную машину; когда принимается решение о маршрутизации, пакет отправляется в цепочку INPUT
. Здесь вы можете управлять этим пакетом, и пакет уже будет переведен на порт 2222
, поэтому правило в вашей третьей команде верное.