--}}
Новая тема
Вы не можете создавать новые темы.
Т.к. вы неавторизованы на сайте. Пожалуйста назовите себя или зарегистрируйтесь.
Список тем

iptables

9
12
С друзьями на NN.RU
В социальных сетях
Поделиться
Навеяно недавней темой про iptables и squid.
Вспомнил случаи, когда мне надо было дать доступ к ssh не на 22-й порт, а на 80-й или 443-й (тем людям, которые сидят за прокси, не пускающим никуда, кроме как на 80 и 443).
Так вот такая схема (именно 80->22) иногда срабатывает, иногда нет, Скорее всего из-за апача. Последние 2-3 раза было неохота разбираться, я вместо 80->22 делал редирект 443->22.
А щас заинтересовался.

[root@server root]# iptables -t nat -L PREROUTING -v -n
Chain PREROUTING (policy ACCEPT 42 packets, 5792 bytes)
pkts bytes target prot opt in out source destination
0 0 DNAT tcp -- eth1 * 0.0.0.0/0 _external_IP__ tcp dpt:4901 to:192.168.0.250:4899
2 96 REDIRECT tcp -- eth1 * 0.0.0.0/0 _external_IP__ tcp dpt:443 redir ports 22
0 0 DNAT tcp -- eth1 * 0.0.0.0/0 _external_IP__ tcp dpt:4902 to:192.168.0.178:4899
0 0 DNAT tcp -- eth1 * 0.0.0.0/0 _external_IP__ tcp dpt:4903 to:192.168.0.10:4899
0 0 DNAT tcp -- eth1 * 0.0.0.0/0 _external_IP__ tcp dpt:4904 to:192.168.0.45:4899
0 0 DNAT tcp -- eth1 * 0.0.0.0/0 _external_IP__ tcp dpt:4905 to:192.168.0.2:4899
0 0 DNAT tcp -- eth1 * 0.0.0.0/0 _external_IP__ tcp dpt:4906 to:192.168.0.3:4899
0 0 DNAT tcp -- eth1 * 0.0.0.0/0 _external_IP__ tcp dpt:4907 to:192.168.0.222:4899
[root@server root]# iptables -L INPUT -v -n
Chain INPUT (policy ACCEPT 886 packets, 74617 bytes)
pkts bytes target prot opt in out source destination
499 57601 ACCEPT all -- * * 0.0.0.0/0 _external_IP__ state RELATED,ESTABLISHED
10 10440 ACCEPT icmp -- * * 0.0.0.0/0 0.0.0.0/0
0 0 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:21
1021 153K ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:1521
3 144 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:22
225 10020 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:80
0 0 DROP tcp -- eth1 * 0.0.0.0/0 _external_IP__ tcp flags:0x16/0x02

Так вот если во втором правиле PREROUTING сделать
tcp dpt:80 redir ports 22
то на 80-м порту всё равно отвечает апач.
Апач сконфигурирован стандартно:

# Listen: Allows you to bind Apache to specific IP addresses and/or
# ports, in addition to the default. See also the <VirtualHost>
# directive.
#
# Change this to Listen on specific IP addresses as shown below to
# prevent Apache from glomming onto all bound IP addresses (0.0.0.0)
#
#Listen http://12.34.56.78:80
Listen 80


Где у меня ошибка? Не в ДНК, надеюсь? :)
Stinky
26.10.2006
Ох, плохо седня думалка работает... :)
Имхо, редиректы засунуть в таблицу mangle (не nat) цепочку PREROUTING
Stinky
26.10.2006
Мда... Пожалуй херню сморозил :)
NickU
26.10.2006
+1
http://www.opennet.ru/docs/RUS/iptables/#MANGLETABLE
-------------------------------------
3.2. Таблица Mangle

Еще раз напоминаю вам, что в этой таблице не следует производить любого рода фильтрацию, маскировку или преобразование адресов (DNAT, SNAT, MASQUERADE).
В этой таблице допускается выполнять только нижеперечисленные действия:

TOS

TTL

MARK

-------------------------------------
И действительно:

iptables -t mangle -A PREROUTING -p TCP -d *ext_ip* --destination-port 80 -j DNAT --to-destination *ext_ip*:22
iptables: Invalid argument
[root@server rc.d]# iptables -t mangle -A PREROUTING -p TCP -d *ext_ip* --destination-port 80 -j REDIRECT --to-port 22
iptables: Invalid argument
Idol
26.10.2006
что-то вроде:

iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-ports 22




p.s. http://www.opennet.ru/docs/RUS/iptables/#REDIRECTTARGET
Оно и есть (для 443 только):
2 96 REDIRECT tcp -- eth1 * 0.0.0.0/0 _external_IP__ tcp dpt:443 redir ports 22
Idol
26.10.2006
Я вот тут подумал,

в iptables правила работают по схеме приведенной в линке моем.
Но с учетом, того:
если какое-то правило для пакета сработало раньше, то соотвественно до вашего правила -t nat ... redirect может пакет и не дойти.

тут тока -j LOG поможет ...

смотреть все правила и думать надо :]
если какое-то правило для пакета сработало раньше

Это всё понятно, порядок я всегда соблюдаю чётко.
Не поверите, но после того как я вернул всё как было (из mangle правило вернул в nat) - заработало:

[root@server rc.d]# iptables -t nat -L PREROUTING -v -n
Chain PREROUTING (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
...
0 0 REDIRECT tcp -- eth1 * 0.0.0.0/0 *ext_ip* tcp dpt:80 redir ports 22
...


Со своей машины делаю telnet ext_ip 80

SSH-2.0-OpenSSH_3.5p1 (до этого апач на такой запрос выдавал страницу )

[root@server rc.d]# iptables -t nat -L PREROUTING -v -n
Chain PREROUTING (policy ACCEPT 3 packets, 204 bytes)
pkts bytes target prot opt in out source destination
...
2 96 REDIRECT tcp -- eth1 * 0.0.0.0/0 *ext_ip* tcp dpt:80 redir ports 22
...

Вощем, как время будет - продолжу копания.
Этот глюк сродни тому, который иногда замечал - хост доступен, пингуется, службы на нём отвечают, но NAT - нет. Службы на других машинах локальной сети за этим хостом-шлюзом недоступны. Причём SYN-паеты даже не проходят nat-PREROUTING (счётчики остаются нулевыми).
Причём с настройками никто ничего не делал. И так же (никто ничего не меняет) спустя некоторое время (несколько часов или суток - по-разному) NAT начинает работать.
Idol
26.10.2006
А может еще что-то в старых правилах осталось?

те вы не совсем корректно делаете перезапуск iptables -> и проблемми.

iptables -F
iptables -F -t nat
итд ?

------ это я уж так ... а то всякое бывает
В начале скрипта:

# reset the default policies in the filter table.
$IPTABLES -P INPUT ACCEPT
$IPTABLES -P OUTPUT ACCEPT
$IPTABLES -P FORWARD ACCEPT
# reset the default policies in the nat table.
$IPTABLES -t nat -P PREROUTING ACCEPT
$IPTABLES -t nat -P POSTROUTING ACCEPT
$IPTABLES -t nat -P OUTPUT ACCEPT
# reset the default policies in the mangle table.
$IPTABLES -t mangle -P PREROUTING ACCEPT
$IPTABLES -t mangle -P OUTPUT ACCEPT

# flush all the rules in the filter and nat tables.
$IPTABLES -t filter -F
$IPTABLES -t nat -F
$IPTABLES -t mangle -F
# erase all chains that's not default in filter and nat table.
$IPTABLES -t filter -X
$IPTABLES -t nat -X
$IPTABLES -t mangle -X
Тем, кто захочет помочь, сообщаю версии:

[root@server rc.d]# uname -s -r -v -i -o
Linux 2.4.20-8smp #1 SMP Thu Mar 13 17:45:54 EST 2003 i386 GNU/Linux
[root@server rc.d]# cat /etc/issue
Red Hat Linux release 9 (Shrike)
Kernel \r on an \m
[root@server rc.d]# iptables --version
iptables v1.2.7a
Новая тема
Вы не можете создавать новые темы.
Т.к. вы неавторизованы на сайте. Пожалуйста назовите себя или зарегистрируйтесь.
Список тем
Последние темы форумов
Форум Тема (Автор) Последний ответ Ответов
Сетевой фильтр APC Surge Arrest

Сетевой фильтр APC Surge Arrest для радиолюбителя.и не только Отправка в регионы после оплаты. ЦЕНА 3000 руб. В рабочем состоянии....
Цена: 3 000 руб.

Материнские платы на запчасти и не только

Материнские платы на запчасти и не только Материнские платы и другие комплектующие Отправка в регионы после оплаты. Транспортной...
Цена: 3 000 руб.

Принтер лазерный HEWLETT PACKARD HP-6L

Принтер лазерный HEWLETT PACKARD HP-6L Отправка в регионы после оплаты. 3штуки БУ. Внешний вид из магазина простояли на складе...
Цена: 4 500 руб.

Оперативная память Corsair XMS3 CMX8GX3M2A1600C9

Оперативная память Corsair XMS3 CMX8GX3M2A1600C9 Отправка в регионы после оплаты. Продаются сразу обе. Цена за обе 2000 руб....
Цена: 1 000 руб.