
使用recent
モジュールでiptables
、src IP アドレスがリスト内に存在するかどうかを確認し、存在する場合は別のリストに追加するにはどうすればよいですか?
実装しようとしている港湾訪問iptables
このモジュール( )と一緒に使用しますrecent
。
そこで、送信元 IP アドレスをあるリストから別のリストにシフトして最終リストに進め、送信元 IP がマシンにアクセスできるようにすることで、TCP パケットが特定の順序で到着したかどうかを検出したいと思います。
私の質問は、基本的に、パケットの宛先ポートが正しい場合、およびパケットの現在のステップ (リスト) が正しい場合に、src ip を次のステップ (リスト) に追加する方法を 1 つのルールですべて説明することです。次のようになります。
1:
# we'd like to accept the already authenticated packets quickly, hence the first rule
iptables -A KNOCKING -m recent --rcheck --seconds 60 --reap --name knockfinal -j ACCEPT
2:
# src ip is not authenticated, let's verify the first knock
# if the first port knock was correct (port 1111), add the src ip to the 'knock1' list
iptables -A KNOCKING -p tcp --dport 1111 -m recent --name knock1 --set -j DROP
3:
# now, here is the issue...
# how do we both check if the src ip is already in the 'knock1' list
# plus the second port knock was correct (port 2222), and add the src ip to 'knock2' list
# ideally, we would write something like this
iptables -A KNOCKING -m recent --rcheck --seconds 10 --reap --name knock1 -p tcp --dport 2222 -m recent --name knock2 --set -j DROP
iptables を使用してポートノッキングを設定するためのさまざまなアプローチを読みましたが、私にとってこれが最も簡単なものに思えたので、このアプローチを使用してポートノッキングを実行できるかどうかを確認または否定したいと思います。
答え1
結局のところ、私が上に投稿した行は、まさにそのように書くべきものでした :)iptables
このような「複雑な」ルールを処理できると期待するのは、あまりにも悲観的すぎたようです。
簡単なポートノッキング構成のための私の設定は次のとおりです。
# set default policy for INPUT chain to DROP
iptables -P INPUT DROP
# accept all local traffic
iptables -A INPUT -i lo -j ACCEPT
# accept all the already-established connections
iptables -A INPUT -p tcp -m state --state RELATED,ESTABLISHED -m multiport --sports 25,80,443,465,587 -j ACCEPT
# add more of your own rules here...
# at the end, redirect all the packets into the KNOCKING chain
# this makes it easy to quickly enable/disable KNOCKING chain, if need be
iptables -A INPUT -j KNOCKING
# if the src ip is already authenticated, accept it
iptables -A KNOCKING -m recent --rcheck --seconds 60 --reap --name knockfinal -j ACCEPT
# if the packet is not authenticated and the first port knock is correct
# add the src ip into the 'knock1' list
iptables -A KNOCKING -p tcp -m tcp --dport 1111 -m recent --set --name knock1 -j DROP
# if the src ip is already in the 'knock1' list (with the expiry time of 10 seconds)
# and the 2nd port knock is correct, add the src ip to the 'knock2' list
iptables -A KNOCKING -p tcp -m recent --rcheck --seconds 10 --reap --name knock1 -m tcp --dport 2222 -m recent --set --name knock2 -j DROP
# if the src ip is already in the 'knock2' list (with the expiry time of 10 seconds)
# and the 3rd port knock is correct, add the src ip to the 'knock3' list
iptables -A KNOCKING -p tcp -m recent --rcheck --seconds 10 --reap --name knock2 -m tcp --dport 3333 -m recent --set --name knock3 -j DROP
# if the src ip is already in the 'knock3' list (with the expiry time of 10 seconds)
# and the 4th port knock is correct, add the src ip to the 'knockfinal' list
iptables -A KNOCKING -p tcp -m recent --rcheck --seconds 10 --reap --name knock3 -m tcp --dport 4444 -m recent --set --name knockfinal -j DROP
# otherwise, we don't do anything and the default INPUT policy will drop the packet
これは私がこれまで見た中で最も短い iptables のポートノッキング ルールセットだと思います...