私はsnortのスキーマを使用して、自分のプログラムに関連する情報を抽出しようとしています。私はIPs.Theクエリの特定のセットのための指定期間内に起こったアラートを抽出するために、次のクエリを使用し は私が指定した時間後に発生するアラートを(取得する必要がありますMySQLは 'WHERE'節の複数の範囲に参加します
select event.sid,event.cid,event.signature,event.timestamp,iphdr.ip_proto,iphdr.ip_src,iphdr.ip_dst from
event join iphdr
where event.sid=iphdr.sid and event.cid=iphdr.cid and iphdr.ip_dst >= inet_aton('x.x.x.1') and iphdr.ip_dst <= inet_aton('x.x.x.255')
or iphdr.ip_dst >= inet_aton('x.x.y.1') and iphdr.ip_dst <= inet_aton('x.x.y.255')
and event.timestamp > "2011-05-06 00:00:00" order by timestamp
のようなものです
1組のIP(192.168.1.0/24など)のためのクエリの実行(つまり、192.168.1.1と192.168.1.0との間)および192.168.1.255)は高速で簡単です
WHERE句に複数の範囲があると問題が発生します。例えば。 192.168.1.1から192.168.1.255の間、または10.21.18.1から10.21.18.255の間のIP。このような場合には
上記のクエリで与えられるよう、MySQLのクエリの実行が(私は30分のためにそれを実行して、MySQLのデーモンを殺すために持っていた)私はそれがあると確信していますを実行するのに長い時間がかかりますまたは問題を引き起こしているが、それを修正する方法がわからない部分。
イベントテーブルとiphdrテーブルの両方には、すべて150,000行
私のプログラムでは、ユーザーはアラートを表示する複数のサブネットを指定できるため、WHERE句の範囲の数に関係なくシームレスに実行するクエリが必要です。
あなたはISD、CID、ip_dstとタイムスタンプ列のインデックスを持っていますか?両方のテーブルの –
(sid、cid)のみが主キーです。インデックスはありません(少なくとも、Snortのスキーマのドキュメントからできることはありません) – RedBaron