ポートスキャナから保護するには?

ポートスキャナから保護するには?

nmap私の機械の監視を完全に防ぐことはできますか?ポートスキャンを介してすべての着信接続を削除すると、iptables「フィルタリング済み」が返されます。nmapがどのポートが存在するかをまったく見ることができない場合は、より良いでしょう。。可能ですか?

次の解決策が機能しないようです。

http://sharadchhetri.com/2013/06/15/how-to-protect-from-port-scanning-and-smurf-attack-in-linux-server-by-iptables/

https://dangertux.wordpress.com/2011/09/18/defeating-port-scans-using-iptables/

http://prithak.blogspot.de/2011/12/blocking-nmap-scans-with-pf-and.html

nmapが自分のデバイスを見るのを防ぐことができない場合は、nmapが自分のIPを完全にスキャンするのに長い時間がかかるように速度を制限できますか?

答え1

速度制限に達すると、nmapはスキャン待ち時間を増やすので、単純な速度制限では十分ではありません。 iptablesの最良の用途は次のとおりです。

まず、IPset リストを作成します。

ipset create port_scanners hash:ip family inet hashsize 32768 maxelem 65536 timeout 600
ipset create scanned_ports hash:ip,port family inet hashsize 32768 maxelem 65536 timeout 60

と iptables ルール

iptables -A INPUT -m state --state INVALID -j DROP
iptables -A INPUT -m state --state NEW -m set ! --match-set scanned_ports src,dst -m hashlimit --hashlimit-above 1/hour --hashlimit-burst 5 --hashlimit-mode srcip --hashlimit-name portscan --hashlimit-htable-expire 10000 -j SET --add-set port_scanners src --exist
iptables -A INPUT -m state --state NEW -m set --match-set port_scanners src -j DROP
iptables -A INPUT -m state --state NEW -j SET --add-set scanned_ports src,dst

動作原理:

ここでは、スキャンされたポートをScand_Portsセットに保存し、hashlimitルールに従ってのみ新しいスキャンポートを計算します。スキャナが5つの異なるポートにパケットを送信する場合(--hashlimit-burst 5を参照)、これはおそらくスキャナである可能性が高いため、port_scannersセットに追加します。

port_scannersのタイムアウトはスキャナーのブロック時間です(この例では10分)。攻撃者が10秒間スキャンを停止するまで最初から(--existを参照)計算されます(--hashlimit-htable-expire 10000を参照)。

これらのパラメータを自分に最適な値に設定できます。

誰かがIPをなりすましで「スキャン」してブロックできることに注意してください。ブロックタイムアウトを長く設定しないことをお勧めします。

次に追加:

ホワイトリストを追加するには、ホワイトリストを作成してください。

ipset create whitelisted hash:net

廃棄ルールを変更してみてください。

iptables -A INPUT -m state --state NEW -m set --match-set port_scanners src -m set ! --match-set whitelisted src -j DROP

答え2

SSHなどのサービスを有効にしたい場合は、Nmapがそれを見つけることができます。一般に、ポート検索は脅威を与えません。どのサービスが実行されているのかわからない攻撃者にセキュリティに頼ってはいけません。 SSHに標準以外のポートを使用すると、主にデフォルトのポート22で自動化された無差別代入攻撃が行われるため、ログノイズを減らすのに役立ちます。

セキュリティの観点から見ると、主な目的は理解/予測、防止、検出、対応、および回復です。ポートスキャンがこれらにどのように関連するかは次のとおりです。

知って/予測する:保有している資産と攻撃者が狙う資産が何であるかを理解します。露出を確認するには、自分でポートをスキャンしてください。ポートスキャンができることとできないことを理解してください。魔法のハッカー妖精ではありません。

防ぐ:露出してはいけないポート/サービスへのアクセスをファイアウォールを使用してブロックします。既知のIPアドレスへのアクセスを制限します。機密データとサーバーをネットワーク境界に移動し、VPNまたはその他のアクセス制御を介してアクセスを制御します。速度制限は予防ではなく遅延だけです。

発覚:ポートスキャン、無差別代入攻撃、その他の攻撃の兆候のログを監視します。一般的な背景ノイズが何であるか、実際に脅威を与えるものが何であるかを学びます。侵害の兆候に関する警告を設定します。

答える:セキュリティ侵害に対処するための計画を策定します。脅威に対処するために、fall2banなどの自動防御を設定してください。速度制限は応答になるかもしれませんが、実際に何を停止しますか?

また覆う:回復計画を策定します。定期的にバックアップを実行し、バックアップから復元をテストします。

答え3

以下は、「フィルタリングされた」状態に関するnmapのドキュメントに記載されています。

状態は、オープン、フィルタリング、クローズ、またはフィルタリングされていない可能性があります。オープンタイプは、ターゲットシステムのアプリケーションがそのポートの接続/パケットを受信して​​いることを意味します。フィルタリングされたことは、ファイアウォール、フィルタ、またはその他のネットワーク障害がポートをブロックして、Nmapがポートが開いているか閉じているかを確認できないことを意味します。閉じたポートにはアプリケーションのリスニングはありませんが、いつでも開くことができます。ポートがNmapのプローブに応答すると、フィルタリングされていないと分類されますが、Nmapはポートが開いているか閉じているかを確認できません。 Nmapは、2つの状態のいずれがポートを記述しているかを判断できない場合、open | filteredとclose | filtered状態の組み合わせを報告します。

これは、「ダウン」(つまり、ポートに接続できますがリッスンしているサーバーはありません)に対する通常の動作のように見えますが、チェックしているサーバーが完全に静かであるため、nmapの「フィルタリング」診断によって識別される(最終的には接続タイムアウト)よりREJECTもiptables操作に近いです。 、そうすぐに終了する代わりに。 )DROPDROPREJECT

REJECTそのため、代わりに試して、DROPスキャン結果が必要に応じて表示されることを確認することをお勧めします。

答え4

@ibrahimが提供した答えはとても良いですが、iptables最新のシステムには使用されなくなりましたnftables

iptablesしたがって、彼のコードをnftables次のように変換する方法がわからない場合は、以下の説明を含む完全でテスト済みのソリューションがあります。

メモ:この例はでのみ機能しますIPv4が、TCP潜在的な攻撃者は、またはなどの他のプロトコルを使用してUDP攻撃する可能性があるため、IPv6これを説明するにはここでいくつかの追加作業を実行する必要があります。

ファイル:attacker.nft
スクリプトの実行:sudo nft -f ./attacker.nft

#!/usr/sbin/nft -f

#
# IPv4 port scanning and information gathering detection
#
add table filter_4

# Sees all incoming packets, before any routing decision has been made
# Packets may be addressed to the local or remote systems
add chain filter_4 prerouting_4 {
    # -175 = After conntrack and before mangle
    type filter hook prerouting priority -175; policy accept;
}

# Port scanning detection chain
add chain filter_4 attacker_4 {
    comment "IPv4 port scanning detection chain"
}

# Prerouting filter
add rule filter_4 prerouting_4 jump attacker_4

# IPv4 attack count
add counter filter_4 attacker_count_4 {
    comment "Count of attacks over IPv4"
}

# A record of current attackers on cooldown
# NOTE: Do not set too high timeout because the attacker might as well spoof it's IP
add set filter_4 port_scanners_4 {
    flags dynamic
    type ipv4_addr
    timeout 10m
    size 256
    comment "IP of the attacker performing port scan"
}

# A record of source IP and local ports being accessed
add set filter_4 scanned_ports_4 {
    type ipv4_addr . inet_service
    flags dynamic
    timeout 1m
    size 256
    comment "Potential attacker IP and local port accessed"
}

# Detect port scanning and record attackers IP
# meter: iptables equivalent is hashlimit
# portscan: meter name
# timeout: After how many seconds do meter entries expire
# limit rate over: Match if the rate is above amount
# burst: Maximum initial number of packets to match: this number gets recharged by one every time the limit specified above is not reached, up to this number
# the default is 5, if the entry expires, the burst value is reset too
add rule filter_4 attacker_4 ct state new ip saddr . tcp dport != @scanned_ports_4 meter portscan { ip saddr timeout 10s limit rate over 1/hour burst 5 packets } update @port_scanners_4 { ip saddr }

# Drop packets originating from attacker's IP
add rule filter_4 attacker_4 ct state new ip saddr == @port_scanners_4 log flags all prefix "drop attacker_4 TCP port scanner: " counter name attacker_count_4 drop

# Keep a record of potential attacker IP and local port being probed
add rule filter_4 attacker_4 ct state new update @scanned_ports_4 { ip saddr . tcp dport }

関連情報