Iptables: REDIRECT, его ограничения и области применения

Thank you for reading this post, don't forget to subscribe!

Iptables и REDIRECT

Дей­ствие REDIRECT пред­на­зна­че­но для пере­на­прав­ле­ния паке­тов с одно­го набо­ра пор­тов на дру­гой внут­ри одной систе­мы, не выхо­дя за пре­де­лы хоста.

Рабо­та­ет REDIRECT толь­ко в цепоч­ках PREROUTING и OUTPUT таб­ли­цы nat. Таким обра­зом, область при­ме­не­ния сво­дит­ся толь­ко к пере­на­прав­ле­нию с одно­го пор­та на дру­гой. Чаще все­го это исполь­зу­ет­ся для про­зрач­но­го прок­си, когда кли­ент из локаль­ной сети кон­нек­тит­ся на 80 порт, а шлюз реди­рек­тит паке­ты на локаль­ный порт прокси:

Кейс

Допу­стим, надо сме­нить порт при­ло­же­ния толь­ко пере­на­прав­ле­ни­ем при помо­щи iptables, не тро­гая настро­ек демо­на. Пусть новый порт будет 5555, а порт при­ло­же­ния 22. Таким обра­зом, надо сде­лать реди­рект с пор­та 5555 на 22.

REDIRECT и удаленный клиент

Пер­вый шаг оче­ви­ден и будет таким же, что и в при­ме­ре выше:

Одна­ко, пра­ви­ло будет рабо­тать толь­ко для внеш­них кли­ен­тов и толь­ко при откры­том пор­те приложения.

REDIRECT и локальный клиент

Преды­ду­щее пра­ви­ло для само­го хоста с iptables не сра­бо­та­ет, т.к. паке­ты с localhost не попа­да­ют в таб­ли­цу nat. Что­бы кейс сра­бо­тал на локаль­ной машине — надо доба­вить реди­рект в цепоч­ку OUTPUT таб­ли­цы nat:

Теперь локаль­ный кли­ент тоже может под­клю­чить­ся по 5555 порту.

REDIRECT и закрытый порт

Смысл кей­са в том, что­бы исполь­зо­вать левый порт, а порт при­ло­же­ния дер­жать закры­тым, но если выпол­нить DROP пра­ви­ло в INPUT цепоч­ке по 22 пор­ту, то 5555 тоже пере­ста­нет отве­чать. Соб­ствен­но, хит­рость в том, что­бы открыть порт при­ло­же­ния в INPUT цепоч­ке, а дро­пать его в mangle:

Полный набор правил

Реди­рект с сете­вым и локаль­ным досту­пом при закры­том пор­те приложения: