LINUX.ORG.RU
решено ФорумAdmin

[iptables][хочеться странного] default DROP, при запросе одного порта, открываеться второй


0

1

Вообщем, есть сервер
на нем закрыты все порты на INPUT кроме одного
предположим порт номер 1000 ОТКРЫТ
вот так нужно сделать чтобы при коннекте на 1000 порт, ОТКРЫВАЛСЯ 2000(к примеру) порт,
на обоих портах разный софт стоит...
реально ли?

★★

Легко.

iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -p tcp --dport 1000 -m recent --set -j ACCEPT
iptables -A INPUT -p tcp --dport 2000 -m recent --rcheck -j ACCEPT
iptables -P INPUT DROP

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

Re: [iptables][хочеться странного] default DROP, при запросе одного порта, открываеться второй

неплохо бы еще время жизни добавить --seconds

sdio ★★★★★ ()

Если бы в исходных данных были слова про таймаут, я бы, конечно, добавил :)

А так... будет жить и работать, пока не вытеснится более свежими записями. В зависимости от количества клиентов и значения ip_list_tot, это может быть и долго, и быстро. Но данное условие во вводных не конкретизировано.

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

так
и сколько времени даеться на УСТАНОВКУ подключения с 2000 портом?
нужно где то 20 секунд, и кол-во соединений == ОДНО


kam ★★ ()

Это называется «Port knocking». Правда обычно предполагается, что для открытия какого-то порта «стучатся» на закрытые порты, а не на открытые. Но не суть важно.

реально ли?

Вполне реально.

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

нужно где то 20 секунд, и кол-во соединений == ОДНО

Тогда одну из строчек нужно изменить так:

iptables -A INPUT -p tcp --dport 2000 -m recent --rcheck --seconds 20 --hitcount 1 -j ACCEPT 

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

вот есть такие правила

# Generated by iptables-save v1.4.2 on Mon Jan 25 09:59:20 2010
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [422925380:153803891990]
:BANANS - [0:0]
:LIMITS - [0:0]
:PLIMITS - [0:0]
-A INPUT -j BANANS 
-A INPUT -j LIMITS 
-A INPUT -j PLIMITS 
-A INPUT -p icmp -m icmp --icmp-type 8 -m length --length 86:65535 -j DROP 
-A FORWARD -j PLIMITS 

-A BANANS -s 78.25.3.230/32 -j BLOCK 
-A BANANS -s 93.185.17.86/32 -j BLOCK 
-A BANANS -s 93.81.27.60/32 -j BLOCK 
-A BANANS -s 92.243.167.9/32 -j BLOCK 
-A BANANS -s 92.39.79.124/32 -j BLOCK 

-A LIMITS -p tcp -m tcp --dport 1111 --tcp-flags FIN,SYN,RST,ACK SYN -m connlimit --connlimit-above 30 --connlimit-mask 32 -j REJECT --reject-with icmp-port-unreachable 
-A LIMITS -p tcp -m tcp --dport 2222 --tcp-flags FIN,SYN,RST,ACK SYN -m connlimit --connlimit-above 10 --connlimit-mask 32 -j REJECT --reject-with icmp-port-unreachable 
-A LIMITS -p tcp -m limit --limit 500/sec -m tcp --dport 232 -j ACCEPT 
-A LIMITS -p tcp -m limit --limit 15/sec -m tcp --dport 1111 -j ACCEPT 
-A LIMITS -p tcp -m limit --limit 5/sec -m tcp --dport 2222 -j ACCEPT 
-A LIMITS -p tcp -m length --length 256:65535 -m tcp --dport 2106 -j ACCEPT 
-A PLIMITS -i lo -j ACCEPT 
-A PLIMITS -d 127.0.0.0/8 -j REJECT --reject-with icmp-port-unreachable 
-A PLIMITS -m state --state INVALID -j DROP 
-A PLIMITS -p icmp -m icmp --icmp-type any -j ACCEPT 
-A PLIMITS -m state --state RELATED,ESTABLISHED -j ACCEPT 
-A PLIMITS -p tcp -m state --state NEW -m tcp --dport 232 -j ACCEPT 
-A PLIMITS -p tcp -m state --state NEW -m tcp --dport 1111 -j ACCEPT 
-A PLIMITS -p tcp -m state --state NEW -m tcp --dport 2222 -j ACCEPT 
-A PLIMITS -j REJECT --reject-with icmp-host-prohibited 
COMMIT
# Completed on Mon Jan 25 09:59:20 2010

как их правильно подправить, чтобы при запросе порта 1111, открывался 2222 и был ОТКРЫТ на новое соединение в течении 30 секунд... тоесть. если я обращаюсь к порту 1111, надо успеть в течении 30 секунд подключиться к 2222

Зарание спасибо!

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

туплю ужасно...не как не могу понять логики работы этого правила(recent)

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

как их правильно подправить, чтобы при запросе порта 1111, открывался 2222 и был ОТКРЫТ на новое соединение в течении 30 секунд... тоесть. если я обращаюсь к порту 1111, надо успеть в течении 30 секунд подключиться к 2222

Замени

-A PLIMITS -p tcp -m state --state NEW -m tcp --dport 1111 -j ACCEPT  
-A PLIMITS -p tcp -m state --state NEW -m tcp --dport 2222 -j ACCEPT  
на
-A PLIMITS -p tcp -m conntrack --ctstate NEW -m tcp --dport 1111 -m recent --set -j ACCEPT  
-A PLIMITS -p tcp -m conntrack --ctstate NEW -m tcp --dport 2222 -m recent --rcheck --seconds 30 -j ACCEPT

И не юзай state, он устарел.

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

>туплю ужасно...не как не могу понять логики работы этого правила(recent)

recent --set — запомнить адрес источника для данного пакета.
recent --rcheck — проверить, есть ли адрес источника данного пакета в списке запомненных. Опционально seconds задает максимальный «возраст» запомненной записи.

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

> Это называется «Port knocking».
спасибо, интересная штука.

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