একটি লিনাক্স সিস্টেমে আইপি সংযোগের মাধ্যমে প্রদত্ত বন্দরের জন্য বর্তমান টিসিপি সংযোগগুলি তালিকাভুক্ত করার জন্য প্রচুর পদ্ধতি রয়েছে তবে: আমি কীভাবে সময়কালের জন্য সোর্স আইপি প্রতি বন্দরে মোট সংযোগের সংখ্যা গণনা করতে পারি?
একটি লিনাক্স সিস্টেমে আইপি সংযোগের মাধ্যমে প্রদত্ত বন্দরের জন্য বর্তমান টিসিপি সংযোগগুলি তালিকাভুক্ত করার জন্য প্রচুর পদ্ধতি রয়েছে তবে: আমি কীভাবে সময়কালের জন্য সোর্স আইপি প্রতি বন্দরে মোট সংযোগের সংখ্যা গণনা করতে পারি?
উত্তর:
আইপটিবলগুলি চালু করুন এবং LOG
আগত সংযোগগুলির জন্য এটি সেট করুন । উদাহরণ বিধি:
-A INPUT --state NEW -p tcp --dport 4711 -j LOG
(যেখানে 4711 হ'ল পোর্টটি আপনি ট্র্যাক করতে চান)।
তারপরে আপনার যে পছন্দ মতো স্ক্রিপ্টের মাধ্যমে ফলাফলটি লগটি চালাবেন সেগুলি আপনার জন্য সারাংশ করতে পারে।
-m state
iptables-1.4.7-4.el6.i686 ব্যবহার করার সময় প্রয়োজন বলে মনে হচ্ছে।
আপনি সমস্ত এসওয়াইএন (এসি কে ছাড়াই) প্যাকেট লগ করতে tcpdump ব্যবহার করতে পারেন:
tcpdump "dst port 4711 and tcp[tcpflags] & (tcp-syn|tcp-ack) == tcp-syn"
বা সমস্ত SYN + ACK প্যাকেট লগ ইন করুন (প্রতিষ্ঠিত সংযোগগুলি):
tcpdump "src port 4711 and tcp[tcpflags] & (tcp-syn|tcp-ack) == (tcp-syn|tcp-ack)"
এবং তারপরে এটিকে একত্রিত করে wc -l
সমস্ত লাইন গণনা করুন
আপনার নির্দিষ্ট সময়কালের পরিমাপের জন্য একটি উপায়ও প্রয়োজন (আপনার ক্রোন থাকতে পারে এটি নিয়মিত বিরতিতে কেবল একটি সাইন ইন পাঠাতে পারে, tcpdump বাইট এবং প্যাকেটগুলি গণনা করবে তবে কেবল লগের সময় হবে)
আপডেট: বলার দরকার নেই, tcpdump এর ম্যান পেজটি দেখুন এবং কয়েকটি বিকল্প যেমন: -i
(কেবলমাত্র একটি ইন্টারফেস শুনুন), -p
(প্রম্পিসিয়াস মোড অক্ষম করুন; কম আক্রমণাত্মক) বা কিছু আউটপুট বিকল্প ব্যবহার করার বিষয়ে বিবেচনা করুন necessary Tcpdump এর রুট অনুমতি প্রয়োজন এবং আপনার বস এটি পছন্দ করতে পারে না কারণ এটি হ্যাকার সরঞ্জামের মতো। অন্যদিকে, এটি চালানোর জন্য আপনার সিস্টেমে কোনও কিছুই স্পর্শ করার দরকার নেই ( iptables LOG
সমাধানের বিপরীতে )
ফিল্টার মধ্যে ছোট src / dsk পার্থক্য মন্তব্য করুন। আপনি SYN + + সেটি হল ACK প্যাকেট ধরা এবং সংযোগ গণনা করতে চান তাহলে করতে একটি সার্ভারের পোর্ট 4711 এ আপনি কি SRC প্রয়োজন। যদি আপনি একই ফলাফলের জন্য এসওয়াইএন + এসি প্যাকেটগুলি ধরে থাকেন তবে আপনার প্রয়োজন ডিএসটি। আপনি যদি সার্ভারে নিজেই সংযোগগুলি গণনা করেন তবে আপনাকে সর্বদা বিপরীতটি ব্যবহার করতে হবে।
Tcp_connections.stp উদাহরণ দ্বারা অনুপ্রাণিত স্ক্রিপ্ট :
#!/usr/bin/env stap
# To monitor another TCP port run:
# stap -G port=80 tcp_connections.stp
# or
# ./tcp_connections.stp -G port=80
global port = 22
global connections
function report() {
foreach (addr in connections) {
printf("%s: %d\n", addr, @count(connections[addr]))
}
}
probe end {
printf("\n=== Summary ===\n")
report()
}
probe kernel.function("tcp_accept").return?,
kernel.function("inet_csk_accept").return? {
sock = $return
if (sock != 0) {
local_port = inet_get_local_port(sock)
if (local_port == port) {
remote_addr = inet_get_ip_source(sock)
connections[remote_addr] <<< 1
printf("%s New connection from %s\n", ctime(gettimeofday_s()), remote_addr)
}
}
}
আউটপুট:
[root@bubu ~]# ./tcp_connections.stp -G port=80
Mon Mar 17 04:13:03 2014 New connection from 192.168.122.1
Mon Mar 17 04:13:04 2014 New connection from 192.168.122.1
Mon Mar 17 04:13:08 2014 New connection from 192.168.122.4
^C
=== Summary ===
192.168.122.1: 2
192.168.122.4: 1
হয় স্ট্রেসের অধীনে প্রোগ্রামটি শুরু করুন:
strace -r -f -e trace=accept -o /tmp/strace ${PROGRAM} ${ARGS}
বা ইতিমধ্যে চলমান প্রোগ্রামটি ট্রেস করুন:
strace -r -f -e trace=accept -o /tmp/strace -p ${PID_OF_PROGRAM}
-r
অতিরিক্ত কর্মক্ষমতা বিশ্লেষণের জন্য পরবর্তী সময়ে প্রয়োজন হলে প্রতিটি সিস্টেমে প্রবেশের সময় আপেক্ষিক টাইমস্ট্যাম্প প্রিন্ট করে। -f
শিশু প্রক্রিয়াগুলি সনাক্ত করে এবং এটির প্রয়োজন নাও হতে পারে।
আউটপুটটি এরকম কিছু দেখাচ্ছে:
999 0.000000 accept(3, {sa_family=AF_INET, sin_port=htons(34702), sin_addr=inet_addr("192.168.122.4")}, [16]) = 5
999 0.008079 --- SIGCHLD (Child exited) @ 0 (0) ---
999 1.029846 accept(3, {sa_family=AF_INET, sin_port=htons(34703), sin_addr=inet_addr("192.168.122.4")}, [16]) = 5
999 0.008276 --- SIGCHLD (Child exited) @ 0 (0) ---
999 3.580122 accept(3, {sa_family=AF_INET, sin_port=htons(50114), sin_addr=inet_addr("192.168.122.1")}, [16]) = 5
এবং এর সাথে ফিল্টার করা যেতে পারে:
# gawk 'match($0, /^([0-9]+)[[:space:]]+([0-9.]+)[[:space:]]+accept\(.*htons\(([^)]+)\),.*inet_addr\("([^"]+)"\).*[[:space:]]+=[[:space:]]+([1-9][0-9]*)/, m) {connections[m[4]]++} END {for (addr in connections) printf("%s: %d\n", addr, connections[addr]); }' /tmp/strace
192.168.122.4: 3
192.168.122.1: 2
একেওয়ান ওয়ান-লাইনারের সংক্ষিপ্ত ব্যাখ্যা: m[1]
পিআইডি, m[2]
টাইমস্ট্যাম্প, m[3]
এটি দূরবর্তী বন্দর এবং m[4]
দূরবর্তী ঠিকানা।
সুবিধা এই সমাধান যদি সার্ভার একই ব্যবহারকারীর অধীনে রান যে রুট প্রয়োজন হয় না হয়। অসুবিধা যে সব সংযোগ গণনা করা হয় কোন ফিল্টারিং, তাই যদি আবেদন একাধিক পোর্ট শোনে এটা কাজ করবে না।
probe::netfilter.ip.local_in
?
আপনি যদি না বলেন তবে আপনার সিস্টেম অতীতের সংযোগগুলির সংখ্যা মনে রাখবে না, সুতরাং আপনি যদি এই গণনাটি করার জন্য কিছু না সেট করেন তবে কোনও ইন্টারফেসের মাধ্যমে মোট ট্র্যাফিকের জন্য আপনার মতো কাউন্টারগুলি খুঁজে পাওয়ার আশা করবেন না।
এছাড়াও, সাধারণভাবে, জেসেক লাকোমিয়েকের পরামর্শ অনুসারে, ভোটদানের মাধ্যমে আপনি নির্ভরযোগ্যভাবে এই গণনাটি করতে পারবেন না, কারণ কিছু সংযোগ আপনার ভোটগ্রহণের সময়ের চেয়ে দ্রুত শুরু হবে এবং শেষ হবে। এই ধরণের পদ্ধতির কিছু পরিস্থিতিতে গ্রহণযোগ্য হতে পারে যেখানে আপনি নিশ্চিত যে সংযোগের জন্য তৈরি সময় যথেষ্ট দীর্ঘ হবে তবে আমি এটি পছন্দ করার পক্ষে ভাল কারণগুলি ভাবতে পারি না।
জেনি ডি এবং ড্যানিয়েল অল্ডারের পরামর্শ অনুসারে, সংযুক্তি সংযুক্ত হওয়ার জন্য আপনার বিকল্পগুলি হ'ল মূলত ফায়ারওয়াল ভিত্তিক কাউন্টার এবং প্যাকেট-ক্যাপচার ভিত্তিক কাউন্টারগুলি। উভয়ই ভালভাবে কাজ করবে, যদিও আপনার সিস্টেমটি সিপিইউতে বাধা থাকলে আপনি প্যাকেট ভিত্তিক পদ্ধতির ব্যবহার করে কিছু সংযোগ গণনা করতে ব্যর্থ হতে পারেন এবং এটি গণনা করার জন্য আরও সিস্টেমের সংস্থান গ্রহণ করার সম্ভাবনা রয়েছে। অন্যদিকে, প্যাকেট ক্যাপচার ভিত্তিক পদ্ধতি অ্যাড-হক তদন্তের জন্য সেট আপ করা সহজ এবং নিরাপদ হতে পারে।
সমাধানের আরও একটি সাধারণ শ্রেণি রয়েছে যা নেটফ্লো। এটি সেটআপ করতে আরও জড়িত, তবে এটি সঠিকভাবে করা গেলে এটি বিশেষভাবে দক্ষ এবং আপনি যদি বড় মাপের কাজ চালাচ্ছেন বা চলমান পর্যবেক্ষণ করছেন তবে আমি এই দিকটি দেখব। কাঁচা ডেটা ক্যাপচার আপনার ফায়ারওয়ালে (যেমন fprobe-ulo) বা libpcap ব্যবহার করা যেতে পারে যা ধীর (যেমন fprobeg)। ক্যাপচার সিস্টেমটি নেটওয়ার্কের মাধ্যমে প্রবাহের ডেটা একজন সংগ্রাহকের কাছে প্রেরণ করে (উদাঃ এনএফডাম্প), এবং তারপরে সেই তথ্য বিশ্লেষণের জন্য আপনার কাছে বিভিন্ন সরঞ্জাম রয়েছে (যেমন এনএফসেন)।
কিছু রাউটার (বিশেষত সিসকো গিয়ার) নেটফ্লো ক্যাপচারের সাথে আসে এবং এটি তৃতীয় পক্ষের ফার্মওয়্যারের মাধ্যমে অন্য রাউটারগুলিতেও কনফিগার করা যায়, অথবা অবশ্যই আপনি এটি আপনার লিনাক্স সিস্টেমে চালাতে পারেন। আপনি যদি চান, অনেক সংগ্রহ পয়েন্টগুলি তাদের প্রবাহের ডেটা একক সংগ্রাহকের কাছে ফরোয়ার্ড করতে পারে। আপনি নিখরচায় সফ্টওয়্যার বিকল্পগুলি খুঁজে পেতে পারেন যেমন: http://www.networkuptime.com/tools/netflow/ , এবং আরও অনেক বাণিজ্যিক অফার রয়েছে।
নেটফ্লো শিল্প স্কেল ব্যবহারের জন্য ডিজাইন করা হয়েছে, তবে আমি শেয়ার হাউসে আমার হোম নেটওয়ার্কের ব্যবহারের তথ্য সংগ্রহের জন্য এটি খুব কার্যকরী বলে মনে করেছি যাতে ট্র্যাফিকের ব্যবহার প্রত্যাশার চেয়ে বেশি হলে আমি কে বা কী দায়বদ্ধ তা সনাক্ত করতে পারি।
রিমোট সার্ভারে ফায়ারওয়াল সংক্রান্ত বিধিগুলির সাথে আপনি যে কোনও সময় গোলযোগ করছেন সতর্কতা অবলম্বন করুন এবং সাধারণভাবে আমি সরাসরি iptables কমান্ড দেওয়ার চেয়ে আপনার ফায়ারওয়ালটি কনফিগার করার জন্য একটি ভাল ফ্রন্ট এন্ড সন্ধান করার পরামর্শ দেব। (আমি ফার্ম পছন্দ করি তবে অনেকগুলি ভাল আছে)।
অন্য একটি বিষয় যা ভাবতে হবে - কখনও কখনও আপনি একেবারে নেটওয়ার্ক লেয়ারে এটি করতে চান না। কখনও কখনও স্ট্রেন বা অনুরূপ ডেমন প্রসেসির সিস্টেম কলগুলি পর্যবেক্ষণ করা উপযুক্ত। এটি সিপিইউ নিবিড়, এবং ডেমন প্রক্রিয়াটি ধীর করার জন্য সতর্ক থাকুন, তবে কিছু পরিস্থিতিতে এটি একই সময়ে আপনার অন্য কোন তথ্য সংগ্রহ করার দরকার হয় তার উপর নির্ভর করে উপযুক্ত হতে পারে, অথবা যদি আপনাকে একটি একক কাঁটাচানা শিশুকে আলাদা করার প্রয়োজন হয় তবে ডেমন এর
এখন পর্যন্ত যে সমাধানটি আমার পক্ষে সবচেয়ে ভাল কাজ করেছে তা হ'ল প্রতি 20 সেকেন্ডের মধ্যে / proc / নেট / ip_conntrack এর বিষয়বস্তু ধরে রাখা, উপযুক্ত টাইমস্ট্যাম্পযুক্ত ফাইলের নামযুক্ত কোনও ফাইলটিতে লগইন করা এবং ফিল্টারিং স্ক্রিপ্টগুলির যে কোনওটিতে ইনপুট হিসাবে ব্যবহার করা বা এমনকি oneliners যখন প্রয়োজন। আপনার সময় বাঁচাতে আপনি আমার স্ক্রিপ্টটি ব্যবহার করতে পারেন। আমি প্রতি মিনিটে স্ক্রিপ্টটি চালিত হয়েছে তা নিশ্চিত করতে ক্রন্টব এন্ট্রিগুলি ব্যবহার করি (এটি বর্তমান কনফিগারেশনে 60 সেকেন্ড স্থায়ী হয়, এটি নির্দ্বিধায় মুক্ত মনে করুন :-)
cat conn_minute.sh
#!/bin/bash
function save_log {
LOG_DIR=/mnt/logs/ip_conntrack/`date +%Y%m%d`
TEMP_FILE=$LOG_DIR/`date +%Y%m%d_%H%M%S`.gz
LOG_FILE=$LOG_DIR/`date +%Y%m%d_%H`.tar
if [ ! -d $LOG_DIR ]
then
mkdir $LOG_DIR
fi
gzip -c /proc/net/ip_conntrack > $TEMP_FILE
if [ -f $LOG_FILE ]; then
tar -rf $LOG_FILE $TEMP_FILE 2> /dev/null
else
tar -cf $LOG_FILE $TEMP_FILE 2> /dev/null
fi
rm $TEMP_FILE
}
function log_minute {
i=1;
LOOP_COUNTER=3
LOOP_TIME=20
while [ $i -le $LOOP_COUNTER ]; do
save_log
i=$[i+1]
sleep $LOOP_TIME
done
}
log_minute
আপনি LOOP_COUNTER এবং LOOP_TIME সেই অনুযায়ী পরিবর্তন করে ip_conntrack এর সামগ্রীটি কতবার ডাম্প করতে চান তা আপনি সামঞ্জস্য করতে পারেন। সুতরাং প্রতি 5 সেকেন্ডে এটি পেতে, এটি হবে: LOOP_COUNTER = 12, LOOP_TIME = 5। LOG_DIR বলতে বোঝায় যে লগগুলি সেভ করা হবে।
এরপরে আপনি আপনার আগ্রহী এমন বিড়ালগুলির জন্য zcat ব্যবহার করতে পারেন এবং আপনার আগ্রহের উত্স আইপি / পোর্টগুলি ফিল্টার করতে গ্রেপ ব্যবহার করতে পারেন (বা কেবল zgrep ব্যবহার করুন)। grep -c
আপনি পরে যা যা গণনা করা হবে। আপনি ব্যবহার করতে পারেন grep src=1.2.3.4 | grep dport=63793 | sort | uniq | wc -l
।
/proc/net/ip_conntrack
? জেনি ডি এর উত্তর থেকে আমার কাছে নিয়ম নেই । আমি বৈজ্ঞানিক লিনাক্স 6 ব্যবহার করছি
# lsmod | grep -i conn nf_conntrack_ipv4 9833 3 iptable_nat,nf_nat nf_conntrack 46391 3 iptable_nat,nf_nat,nf_conntrack_ipv4 nf_defrag_ipv4 1139 1 nf_conntrack_ipv4
# CONFIG_NF_CONNTRACK_PROC_COMPAT is not set
। nf_conntrack_ipv4
কার্নেল মডিউলটি সন্নিবেশ করা কোনও লাভ হয়নি।
নিজের দ্বারা লগ লিখুন:
$> nohup netstat -c | grep -E "xxx|xxxx" >> netstat_log 2>&1 &
নোহব এই প্রক্রিয়াটিকে পটভূমিতে স্থানান্তরিত করবে, যাতে এটি আপনার লগঅফ থেকে বাঁচতে পারে
নেটস্যাট্যাট-সি নিয়মিত নির্বাচিত তথ্য প্রতি সেকেন্ডে, অবিচ্ছিন্নভাবে, চিরকালের জন্য মুদ্রণ করবে
গ্রেপ-ই "এক্সএক্সএক্সএক্সএক্সএক্সএক্সএক্সএক্সএক্স" আপনার পছন্দসই সামগ্রী যেমন বন্দরের মতো এবং গ্রহণ করবে grab
>> নেটস্যাট_লগ ... এটি "./netstat_log" এ লিখবেন (আপনার পছন্দসই লগফিলটি এখানে ব্যবহার করুন)
আউটপুটটি একটি | wc -l
জোড় গণনা (ডাব্লুসি) এর লাইনগুলি (-l) এ পাইপ করা হচ্ছে ।
একটু দেখো
। এগুলি সবাই কিছুটা বাসি তবে অন্যদের আরও ভাল কাজ করার জন্য স্ক্রিপ্টগুলি লেখাই বিরক্তিকর। কিছু আপনাকে সুন্দর ছবি দেয়, কেউ ফরেনসিক বিশ্লেষণে আরও বিশেষীকরণ করে এবং খারাপ লোকদের স্ক্রু করে তোলে, কিছু (আইপলগ) কেবল সত্যই সাধারণ কাউন্টার যা ডিবিগুলিতে লগ করে, কারও কাছে চকচকে সামনের অংশ থাকে আপনি আপনার বসকে দেখাতে পারেন।
লিনাক্সে একটি নিখরচায় নেটফ্লো সামঞ্জস্যপূর্ণ স্ট্যাক প্রয়োগ করার জন্য পুরো গুচ্ছ সরঞ্জামগুলিও রয়েছে। এবং আশেপাশে সমর্থন বিক্রয় করার চেষ্টা করছেন লোকেদের একটি গোছা। (আমি কোনও বাণিজ্যিক পণ্যের সুপারিশ করতে যাচ্ছি না ...) আপনি যা চাইছেন তা এর মধ্যে কয়েকটি যা সক্ষম তার চেয়ে অনেক সহজ।
আইএমএইচও (ফ্রি | নেট | ওপেন) বিএসডি বছরের পর বছর ধরে ধরণের বিশ্লেষণের চেয়ে অনেক বেশি এগিয়ে ছিল। একটি পিফসেনস ফায়ারওয়াল আপনাকে কমপক্ষে বাক্সের বাইরে 7 টি বিকল্প দেবে।