ইন স্ট্যানফোর্ড এর মেশিন লার্নিং কোর্সের অ্যান্ড্রু এনজি আইটি মধ্যে এমএল প্রয়োগের উল্লেখ করেছে। কিছুক্ষণ পরে যখন আমি আমাদের সাইটে মাঝারি আকারের (প্রায় 20 কে বট) ডিডোস পেয়েছি তখন আমি সাধারণ নিউরাল নেটওয়ার্ক শ্রেণিবদ্ধ ব্যবহার করে এর বিরুদ্ধে লড়াই করার সিদ্ধান্ত নিয়েছি।
আমি প্রায় 30 মিনিটের মধ্যে এই অজগর স্ক্রিপ্টটি লিখেছি:
https://github.com/SaveTheRbtz/junk/tree/master/neural_networks_vs_ddos
এটি ব্যবহার করে pyBrain এবং 3 লাগে nginx ইনপুট হিসাবে লগ, তাদের দুটি নিউরাল নেটওয়ার্ক প্রশিক্ষণ:
- ভাল প্রশ্নের সাথে
- খারাপ লোকের সাথে
শ্রেণিবদ্ধকরণের জন্য একটি লগ
খারাপ প্রশ্ন থেকে ..
0.0.0.0 - - [20/Dec/2011:20:00:08 +0400] "POST /forum/index.php HTTP/1.1" 503 107 "http://www.mozilla-europe.org/" "-"
...এবং ভাল...
0.0.0.0 - - [20/Dec/2011:15:00:03 +0400] "GET /forum/rss.php?topic=347425 HTTP/1.0" 200 1685 "-" "Mozilla/5.0 (Windows; U; Windows NT 5.1; pl; rv:1.9) Gecko/2008052906 Firefox/3.0"
... এটি একটি অভিধান তৈরি করে:
['__UA___OS_U', '__UA_EMPTY', '__REQ___METHOD_POST', '__REQ___HTTP_VER_HTTP/1.0',
'__REQ___URL___NETLOC_', '__REQ___URL___PATH_/forum/rss.php', '__REQ___URL___PATH_/forum/index.php',
'__REQ___URL___SCHEME_', '__REQ___HTTP_VER_HTTP/1.1', '__UA___VER_Firefox/3.0',
'__REFER___NETLOC_www.mozilla-europe.org', '__UA___OS_Windows', '__UA___BASE_Mozilla/5.0',
'__CODE_503', '__UA___OS_pl', '__REFER___PATH_/', '__REFER___SCHEME_http', '__NO_REFER__',
'__REQ___METHOD_GET', '__UA___OS_Windows NT 5.1', '__UA___OS_rv:1.9',
'__REQ___URL___QS_topic', '__UA___VER_Gecko/2008052906']
প্রতিটি এন্ট্রি যা আমরা আমাদের নেটওয়ার্ককে / এন্ট্রি দিয়ে প্রশিক্ষিত করি যা আমাদের শ্রেণিবদ্ধ করা প্রয়োজন ...
0.0.0.0 - - [20/Dec/2011:20:00:01 +0400] "GET /forum/viewtopic.php?t=425550 HTTP/1.1" 502 107 "-" "BTWebClient/3000(25824)"
... বৈশিষ্ট্য-ভেক্টরে রূপান্তরিত হয়:
[False, False, False, False, True, False, False, True, True, False, False, False, False, False, False, False, False, True, True, False, False, False, False]
এই সমস্ত কিছুর পরেও ডেটাসেটকে প্রশিক্ষণ এবং পরীক্ষার সেটে বিভক্ত করার মানক পথ রয়েছে, নিউরাল নেটওয়ার্কগুলি প্রশিক্ষণ দেওয়া এবং সেরাটি নির্বাচন করা। এই প্রক্রিয়াটির পরে (এটি ডেটাসেটের আকারের উপর নির্ভর করে বেশ দীর্ঘ সময় নিতে পারে) আমরা শেষ পর্যন্ত প্রশিক্ষিত নেটওয়ার্ক ব্যবহার করে লগগুলিকে শ্রেণিবদ্ধ করতে পারি।
তবে এই পদ্ধতির সাথে এখানে বেশ কয়েকটি সমস্যা রয়েছে:
- তদারকি করা মেশিন লার্নিং সেই ধরণের সমস্যার জন্য ভুল ভুল, কারণ বটগুলি সনাক্ত করার জন্য প্রথমে আমাকে বটগুলি সনাক্ত করতে হবে এবং সেই ডেটা দিয়ে নিউরাল নেটওয়ার্ক প্রশিক্ষণ দেওয়া উচিত।
- আমি ক্লায়েন্টের আচরণ কোনও অ্যাকাউন্টে নিই না। প্রতিটি ব্যবহারকারীর জন্য পৃষ্ঠা গ্রাফ থেকে পৃষ্ঠা রূপান্তর বিবেচনা করা ভাল।
- আমি ক্লায়েন্টদের লোকেশন কোনও অ্যাকাউন্টে নিই না। নেটওয়ার্কে থাকা একটি কম্পিউটার যদি কিছু ভাইরাস দ্বারা সংক্রামিত হয় তবে সেই নেটওয়ার্কের অন্যান্য কম্পিউটারগুলি সংক্রামিত হওয়ার আরও সম্ভাবনা রয়েছে।
- আমি কোনও অ্যাকাউন্টে কোনও ভূ-অবস্থান সংক্রান্ত ডেটা নিই না। অবশ্যই আপনি যদি রাশিয়ায় সাইট চালাচ্ছেন তবে ব্রাজিলের ক্লায়েন্টদের খুব কম সম্ভাবনা রয়েছে।
- আমি জানি না যে এই জাতীয় সমস্যা সমাধানের জন্য নিউরাল নেটওয়ার্ক এবং শ্রেণিবদ্ধকরণ ব্যবহার করার সঠিক উপায় ছিল কিনা। হতে পারে আমি কিছু অনিয়ম সনাক্তকরণ সিস্টেমের সাথে আরও ভাল ছিলাম।
- এমএল পদ্ধতিটি "অনলাইন" (বা তথাকথিত "স্ট্রিমিং") হওয়ার পরে এটি আরও ভাল so
সুতরাং এখানে প্রশ্নগুলি রয়েছে:
আপনি যদি কেবল ডিডোএস আক্রমণ থেকে রক্ষা করার একই সমস্যার মুখোমুখি হন তবে কেবলমাত্র বর্তমান ওয়েবসারভার লগ (যা ভাল ক্লায়েন্ট এবং বটগুলি নিয়ে থাকে) এবং historicalতিহাসিক ডেটা (আগের দিন / সপ্তাহ / মাসের লগস) দেওয়া হয়েছে বেশিরভাগ ভাল ক্লায়েন্টদের সাথে)?
আপনি কোন মেশিন লার্নিং পদ্ধতির পছন্দ করবেন।
আপনি কোন অ্যালগরিদম ব্যবহার করবেন?