вопрос по iptables: -m limit

исходя из security handbook, немного подредактировал правило для ssh:

# $IPTABLES -A allow-ssh-traffic-in -m limit --limit 1/second -p tcp --tcp-flags ALL SYN --dport ssh -j LOG --log-prefix "SYN ok:"
  $IPTABLES -A allow-ssh-traffic-in -m limit --limit 1/second -p tcp --tcp-flags ALL RST --dport ssh -j ACCEPT
  $IPTABLES -A allow-ssh-traffic-in -m limit --limit 1/second -p tcp --tcp-flags ALL FIN --dport ssh -j ACCEPT
  $IPTABLES -A allow-ssh-traffic-in -m limit --limit 1/second -p tcp --tcp-flags ALL SYN --dport ssh -j ACCEPT
  $IPTABLES -A allow-ssh-traffic-in -p tcp --tcp-flags RST,FIN,SYN NONE --dport ssh -j ACCEPT
  $IPTABLES -A allow-ssh-traffic-in -p tcp --dport ssh -j LOG --log-prefix "Bad SSH traffic:"
  $IPTABLES -A allow-ssh-traffic-in -p tcp --dport ssh -j DROP

однако работает это так, будто правил с -m limit --limit 1/second нет. То есть ssh-сессию установить не удается, вместо этого вижу 3 шт:

xxxx kernel: Bad SSH traffic:IN=eth0 OUT= MAC=xxxx SRC=xxx DST=xxx LEN=48 TOS=0x00 PREC=0x00 TTL=120 ID=12030 DF PROTO=TCP SPT=14949 DPT=22 WINDOW=8192 RES=0x00 SYN URGP=0

раскомментировав 1ю строчку, "SYN ok:" в логе не получаю. В общем как-то совсем все это непонятно.

А какая конечная цель?

А какая конечная цель?

Working on Gentoo Linux for Asus P535 and Qtopia :-)

как пишет автор - for

как пишет автор - for preventing SYN floods. Не сколько это в данном случае гиперактуально, сколько любопытно - почему вроде бы очевидные правила не работают.
Ах да, забыл указать что это воткнуто в INPUT.

Делается вот так :)

Делается вот так :) С помощью кукисов
CONFIG_SYN_COOKIES

$ sysctl net.ipv4.tcp_syncookies=1

Working on Gentoo Linux for Asus P535 and Qtopia :-)

кукисы.. угу, спасибо,

кукисы.. угу, спасибо, воткну. но с лимитами все же хотелось бы разобраться.

УМВР

Beelzebubbie написал(а):
однако работает это так, будто правил с -m limit --limit 1/second нет. То есть ssh-сессию установить не удается, вместо этого вижу 3 шт:

Есть мнение, что запрашиваемая тобой функциональность пакетного фильтра не соответствует конфигурации твоего ядра.
Повтори прохождение квеста конфигурирования ядра.

:wq
--
Live free or die

прогулялся по ядру,

прогулялся по ядру, погуглил.. решительно ничего подозрительного не обнаружил.
Вот выборка из конфига: zcat /proc/config.gz | grep -E '(_NETFILTER|_NF_)'

А работает это так в твоем

А работает это так в твоем случае:
залогирует скорость интерактивного соединения по ssh и разрешит его если пакет пришел через секунду или больше секунды от предыдущего пакета и флаги у пакета непонятно какие (см ниже). Честно говоря бестолково все составлено поскольку после применения такой кострукции логично сразу делать DROP, а у тебя опять разрешающие правила.

>однако работает это так, будто правил с -m limit --limit 1/second нет.

Я одного не могу понять- у какого гения ты взял это правило? Объясню почему:
Я не уверен что конструкция --tcp-flags ALL SYN должна работать, поскольку она означает все флаги сброшены !ВКЛЮЧАЯ! SYN и установлен флаг SYN. То есть наблюдаем противоречие.

taho написал(а): Я одного не

taho написал(а):
Я одного не могу понять- у какого гения ты взял это правило? Объясню почему:
Я не уверен что конструкция --tcp-flags ALL SYN должна работать, поскольку она означает все флаги сброшены !ВКЛЮЧАЯ! SYN и установлен флаг SYN. То есть наблюдаем противоречие.

Почему вы решили, что флаги сброшены?
--tcp-flags

Критерий позволяет контролировать флаги TCP пакета. В качестве дополнительных
параметров указывают список интересующих флагов и через пробел список флагов,
значения которых должны быть равны 1. Так же можно использовать ключевые слова
ALL — все, NONE — ни одного.

Символ ! инвертирует значение параметра.

Я Gentoo & Funtoo

man iptables:

man iptables:
--tcp-flags [!] mask comp
Match when the TCP flags are as specified. The first argument is the flags which we should examine, written as a comma-
separated list, and the second argument is a comma-separated list of flags which must be set. Flags are: SYN ACK FIN
RST URG PSH ALL NONE. Hence the command
iptables -A FORWARD -p tcp --tcp-flags SYN,ACK,FIN,RST SYN
will only match packets with the SYN flag set, and the ACK, FIN and RST flags unset.

каюсь понял свою ошибку кострукция ALL SYN даст что установлен из всех флагов только SYN то есть первый пакет в соединении.

А где разрешения для RELATED,

А где разрешения для RELATED, ESTABLISHED соединений?

$IPTABLES -A allow-ssh-traffic-in -p tcp --tcp-flags RST,FIN,SYN NONE --dport ssh -j ACCEPT

Это не совсем то

так у него просто часть, и

так у него просто часть, и скорее всего этот кусок определен в INPUT. А OUTPUT у него просто POLICY ACCEPT, без правил.

Не, OUTPUT это OUTPUT, но

Не, OUTPUT это OUTPUT, но всё-таки надо и INPUT RELATED/ESTABLISHED пропускать. Кстати, в оригинальном документе именно так и было. А ТС зачем-то решил заменить проверку состояний проверками флагов. Конечно, можно и так, но не стоит забывать, что пакеты, например, бывают фрагментированными. Ну и я когда-то сталкивался с неоднозначностью трактовок

Настройки просмотра комментариев

Выберите нужный метод показа комментариев и нажмите "Сохранить установки".