LINUX.ORG.RU
ФорумAdmin

iptables avto ban + плюс еще вопрос


0

2

Всем привет!

Не так давно перешел с PF на iptables (без причин просто палитика парти у всех своя). Есть два вопроса которые на PF я решал без проблем. Помогите, как сделать следующие на iptables:

1) Нужно оганичить число пакетов на внешний интерфейс по порту udp 23998. Примерно так: если больше 15 в секонду то ip в пожизненный бан.

2) Может глупый вопрос, но просто немного не пойму логику.

$IPTABLES -P INPUT DROP
$IPTABLES -P OUTPUT ACCEPT
$IPTABLES -P FORWARD ACCEPT
.....
тут какие то правила
.....
и все остальное блокирую
$IPTABLES -P INPUT -j DROP

в итоге на самом компе не работает исходящий трафик. Как сделать, так что бы политики блокировки из вне работали и исходящий трафик с внешнего интерфейса не дропался. Заранее спасибо


>тут какие то правила

Какие правила? Может у вас там «$IPTABLES -А OUTPUT -j DROP». Лучше покажите «iptables-save» и убедитесь с помощью tcpdump, что нет именно исходящих пакетов.

mky ★★★★★
()

А по первому вопросу, ИМХО, recent + hashlimit. А если «пожизненный» подразумевает сохранение при перезагрузке сервера, то, наверное, скрипт для сохранения/восстановления таблицы через /proc/net/xt_recent/*.

mky ★★★★★
()
Ответ на: комментарий от mky

$ iptables -L
Chain INPUT (policy DROP)
target prot opt source destination
ACCEPT tcp — anywhere anywhere tcp dpt:ssh
ACCEPT tcp — anywhere anywhere tcp dpt:http limit: avg 3/sec burst 3 DROP all — anywhere anywhere

Chain FORWARD (policy DROP)
target prot opt source destination

Chain OUTPUT (policy DROP)
target prot opt source destination

$ снаружи доступно ssh, http. а с самого сервера никуда не поким портам не пускает.

osipen
() автор топика
Ответ на: комментарий от osipen

ну дык у тебя stateless фаервал, смотри в сторону

iptables -A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT

Вот смотри, если у тебя всего одно правило разрешающее только коннект к 22 порту, то, предположим ты коннектишься к лору, ну там проверить допустим (или устанавливаешь пакет)

nc 217.76.32.61 80

то посмотри tcpdump'ом как отработается 3-way handshake без правила, которое я написал выше.

В случае отсутствия вышеуказанного правила, тебе надо было бы добавить

iptables -A INPUT -p tcp --sport 80 -s 217.76.32.61 -j ACCEPT

Идея ясна?

anton_jugatsu ★★★★
()
Ответ на: комментарий от osipen

с самого сервера никуда не поким портам не пускает[.quote]
естественно, что оно не будет работать.
пакет уходит с сервера, ответ от хоста блокируется ветке input.

попробуйте так:

что касаемо ветки input в filter, то настраиваю ее немного иначе.
изначально политика на ветку accept, если надо ограничить доступ к портам, то

iptables -j ACCEPT -A INPUT -s sourceIP_1 -p tcp/udp/etc --dport XX
iptables -j ACCEPT -A INPUT -s sourceIP_2 -p tcp/udp/etc --dport XX
...
iptables -j ACCEPT -A INPUT -s sourceIP_N -p tcp/udp/etc --dport XX
iptables -j REJECT -p tcp/udp/etc --dport XX

и так далее для нужных портов.


нат есть на сервере?

truetrue
()
Ответ на: комментарий от osipen

>Chain OUTPUT (policy DROP)

(policy DROP)


что непонятного? сервер не может отправлять пакеты

Pinkbyte ★★★★★
()
Ответ на: комментарий от osipen

костыль:
может knockd поможет реализовать добавление правила в iptables при, условии обращения от хоста более 15 раз за указанный период времени на определенную последовательность портов.
в вашем случае последовательность портов 23998:udp 23998:udp и так 15 раз :)

truetrue
()
Ответ на: комментарий от truetrue

Так то понятно. Ведь было бы очень удобно с досерами бороться. В google предлагают кустарные методы, скрестить netstat + iptables (скрипт). Просто уверен точно должно быть более красивое решение на этот счет. Логика примерно такоя перешагнул парог лимитов добавился в таблицу блоков.

osipen
() автор топика
Ответ на: комментарий от osipen

вот как оно работает на PF

# Создаем таблицу для брутфорсеров
table <bruteforcers> persist
# Блокируем всех, кто в нее попадает
block in quick from <bruteforcers>
# Помещаем в таблицу bruteforcers всех, кто инициирует более двух соединений на
22-ой порт в минуту
pass in on $ext_if inet proto tcp to $outif \
port 22 flags S/SA keep state \
(max-src-conn-rate 60/2, overload <bruteforcers> flush)

osipen
() автор топика
Ответ на: комментарий от UserUnknown

получается средствами iptables это решить нельзя без костылей?

osipen
() автор топика
Ответ на: комментарий от osipen

google: iptables recent hashlimit --- даёт вменяемые ответы.

# Создаем таблицу для брутфорсеров

Создаём цепочку для брутфорсеров
iptables -N brtchain

# Блокируем всех, кто в нее попадает

Заносим src-адреса попадющих в неё пакетов в список и уничтожаем пакет:
iptables -A bruteforcers -m recent --name brtlist --set -j DROP

Блокируем всех, кто попал в список:
iptables -I INPUT -m recent --name brtlist --rcheck -j DROP

# Помещаем в таблицу bruteforcers всех, кто инициирует более двух соединений на 22-ой порт в минуту

Проверяем по хешу с именем brthash частоту возникровения новых соединений на 22 порт и отправляем «лишнее» в цепочку brtchain:
iptables -m state --state NEW -p tcp --dport 22 -m hashlimit --hashlimit-name brthash --hashlimit-mode srcip --hashlimit-above 2/min -j brtchain

P.S. Ещё вам нужно погуглить относительно ip_list_tot так как по умолчанию в списке только 100 ip-адресов.

P.P.S. Не знаю, можно ли "-m recent --name antibrute --rcheck -j DROP" засунуть в таблицу raw, чтобы не нагружать лишними записями conntrack.

mky ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.