লিনাক্স iptables দিয়ে, বহির্মুখী সংযোগের সূচনা করে এমন প্রক্রিয়া / কমান্ডের নাম লগ করা সম্ভব?


27

আমি লিনাক্স ডেস্কটপে আউটবাউন্ড সংযোগের প্রক্রিয়াগুলি ট্র্যাক করে রাখতে চাই। আমি যে সেরাটির সাথে আসতে পারি তা হ'ল:

iptables -A OUTPUT -m state --state NEW -j LOG --log-uid

এটি সংযোগের সূচনা করে এমন uid / gid লগ করে, তবে প্রক্রিয়া / কমান্ডের নাম বা এমনকি পিড নয়। যদি আমি কেবল পিডটি পেতে পারি, লগ লিখার সময় আমি সম্ভবত একটি স্ক্রিপ্ট চাবুক যা প্রসেসের নামটি টানতে পারে, তবে মনে হয় এটি সম্ভবও নয়।

আদর্শভাবে আমি প্রসেসগুলি লগ করতে চাই যা আগত সংযোগগুলিও গ্রহণ করে।

লিনাক্স বাক্সে iptables [বা অন্য কিছু] দিয়ে কীভাবে এটি সম্ভব হতে পারে এমন কোনও ধারণা?


আমি বিশ্বাস করি (পুরোপুরি নিশ্চিত নয়) এই প্রশ্নের উত্তর সার্ভারফল্টে দেওয়া হয়েছিল, এটি দেখুন।
নিক্সার

ব্যক্তিগতভাবে, আমি এই কাজের জন্য সিসডিগ ব্যবহার করব
চার্লস ডাফি

উত্তর:


7

আপনি / প্রোগ্রাম / নেট / টিসিপি নজরদারি করার জন্য একটি প্রোগ্রাম লিখতে পারেন, যার আউটপুট এইরকম দেখাচ্ছে:

obi-wan ~ # cat /proc/net/tcp
  sl  local_address rem_address   st tx_queue rx_queue tr tm->when retrnsmt   uid  timeout inode
   0: 00000000:0050 00000000:0000 0A 00000000:00000000 00:00000000 00000000     0        0 4847458 1 e6060560 300 0 0 2 -1
   1: 00000000:04D2 00000000:0000 0A 00000000:00000000 00:00000000 00000000     0        0 4847477 1 f2e64da0 300 0 0 2 -1
   2: 00000000:0016 00000000:0000 0A 00000000:00000000 00:00000000 00000000     0        0 7109 1 f2e65ac0 300 0 0 2 -1
   3: 0100007F:177A 00000000:0000 0A 00000000:00000000 00:00000000 00000000  1000        0 4864457 1 d2726540 300 0 0 2 -1
   4: 00000000:01BB 00000000:0000 0A 00000000:00000000 00:00000000 00000000     0        0 4847462 1 e60609c0 300 0 0 2 -1
   5: 6B00A8C0:0016 30F4B5CA:C3AB 01 00000044:00000000 01:00000031 00000000     0        0 4982752 3 f2e64940 55 4 0 2 -1
   6: 0100007F:B143 0100007F:BC5E 01 00000000:00000000 00:00000000 00000000  1000        0 2130283 1 d59cce40 21 4 1 2 -1
   7: 0100007F:BC5E 0100007F:B143 01 00000000:00000000 00:00000000 00000000  1000        0 2130285 1 d59cd2a0 21 4 0 2 -1
   8: 6B00A8C0:0016 3276C35B:8E11 01 00000000:00000000 02:000ADAB1 00000000     0        0 4982629 2 d2727260 40 4 8 2 2
   9: 6B00A8C0:0016 6500A8C0:DD5D 01 00000538:00000000 01:00000029 00000000     0        0 4864416 5 e6061b40 42 12 27 3 -1

তারপরে আপনি খোলা বন্দরগুলি ইনোডগুলিতে সম্পর্কিত করতে পারেন, যা প্রতিটি প্রক্রিয়ার জন্য তালিকাভুক্ত ফাইল বর্ণনাকারীদের রিডলিংক করে প্রক্রিয়া এবং ফাইল বর্ণনাকারীদের সাথে সম্পর্কিত হতে পারে:

obi-wan ~ # readlink /proc/28850/fd/3
socket:[4847458]

এখানে দেখুন যে ইনোড 4847458 উপরের তালিকার প্রথম টিসিপি সকেটের সাথে মিলে যায়। নেটস্প্যাট-ট্যাপনের আউটপুট এটি আমার জন্য যাচাই করে (এবং এটি 0x50 == 80 স্মরণ করুন):

obi-wan ~ # netstat -tapn
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN     28850/cherokee-work

যখন মনিটর প্রোগ্রামটি / প্রোক / নেট / টিসিপি-র পরিবর্তনের বিষয়টি লক্ষ্য করে, তখন ডেটা পার্স করে এবং পরিবর্তনটি নতুন খোলা সকেট কিনা তা নির্ধারণ করে। তারপরে আপনি ম্যাচের ইনোডটি সন্ধান করতে প্রতিটিটিতে রিডলিংক করে / প্রোকে তালিকাভুক্ত প্রতিটি প্রক্রিয়ার জন্য সমস্ত ফাইল বর্ণনাকারী গণনা করতে পারেন। একবার আপনি এটি সন্ধান করার পরে, আপনার নিজস্ব পিড রয়েছে, যা থেকে আপনি যা কিছু পেতে পারেন তা পেতে পারেন, বিশেষত যদি আপনার অ্যাকাউন্টিং প্রক্রিয়া থাকে।

যদি আপনার তাত্ক্ষণিকভাবে আপনার বিজ্ঞপ্তির প্রয়োজন না হয় তবে আপনার মনিটর প্রোগ্রামটি ধীর পোল (সম্ভবত 50 মিমি বা 100 মিমি বা এমনকি 1000 মিমি অবধি) ব্যবহার করতে পারে।


2
একটি বিকল্প সরবরাহ করার জন্য ধন্যবাদ! তবে প্রত্যেকবার প্রতিটি ওপেন ফাইল বিবরণকারীকে পোলিং করা এবং জিজ্ঞাসা করা খুব জোরালো নয় এবং এটি অত্যন্ত অদক্ষ। আমি এখনও আশা করছি যে কেউ এর থেকে ভাল সমাধান পাবেন, বা স্পষ্ট করে বলবেন যে এটি আর কোনও iptables এর অংশ নয় এবং কেন - সিএমডি-মালিককে অনুপযুক্ত বলে মনে করা হচ্ছে।
nealmcb

কার্নেল তার / প্রাকের লেআউটটি পরিবর্তন না করে বা নেটস্প্যাট এবং রিডলিংক বা পিএস পরিবর্তন (সম্ভাব্য) না হওয়া পর্যন্ত আমি বলতে পারি এটি বেশ শক্তিশালী। আপনি কী ধরনের দক্ষতার সমস্যা (গুলি) নিয়ে উদ্বিগ্ন? আপনি যদি তাত্ক্ষণিক প্রক্রিয়াজাতকরণ চান, আপনাকে iptables সহ ব্যবহারের জন্য একটি কার্নেল মডিউল লিখতে হবে।
বেন কলিন্স

যদি আমি প্রত্যাখাত সংযোগগুলিতে লগ করছি তবে সকেটটি তাত্ক্ষণিকভাবে কার্নেল দ্বারা ধ্বংস হয়ে যায়, সুতরাং এটি / প্রোকে আমার দেখার খুব কম সুযোগ রয়েছে। সংযোগের সময় শেষ হতে পারে কেবলমাত্র REJECT কে DROP এ পরিবর্তন করুন ...
Marki555

এটি অতি-ছোট সময় উইন্ডোর কারণে এই দৃশ্যে সহায়তা করে না, তবে পার্সিং / প্রোকিংয়ের ভঙ্গুরতা হিসাবে, কেউ কেবল "lsof -F -i" ব্যবহার করতে পারে এবং নেটওয়ার্কের একটি দুর্দান্ত বিমূর্ত ডাম্প পেতে পারে ডেটা। এটি ফিল্টারও করা যায় (কেবলমাত্র একটি নির্দিষ্ট পোর্টে বলুন), এবং ইতিমধ্যে আপনার জন্য ফাইলের নাম / পিড / ব্যবহারকারী ম্যাপিংয়ের কাজটিও করেছেন।
dannysauer

9

আপনি মালিকের ম্যাচ মডিউলটি চান, যা কেবলমাত্র আউটপুট চেইনে কাজ করে (এবং সম্ভবত PREROUTING ...?)। দস্তাবেজগুলি পড়ুন, তবে এটি এর মতো কিছু কাজ করবে:

iptables --append OUTPUT -m owner --cmd-owner "$app" \
--jump LOG --log-level DEBUG --log-prefix "OUTPUT $app packet died: "

1
একটি iptables লগ কমান্ড এইভাবে একটি ভেরিয়েবল সেট এবং ইন্টারপোলেট করতে পারে? এটি আমার পক্ষে কাজ করবে বলে মনে হয় না। এছাড়াও, দেখে মনে হচ্ছে - সিএমডি-মালিক বিকল্পটি কার্নেল> = 2.6.15-এ সরানো হয়েছে। এটি দুর্ভাগ্যজনক, কারণ এটি দরকারী বিকল্প হিসাবে মনে হচ্ছে।

4
হ্যাঁ, - সিএমডি-মালিককে সরানো হয়েছে: "
অনুপযুক্ত

1
@ গুয়েটলি তথ্যের জন্য ধন্যবাদ। সেখানে এ আরো সুনির্দিষ্ট হয় permalink.gmane.org/... যা পরিবর্তণের আরো কোট: "[Netfilter]: IPT মধ্যে সরান tasklist_lock অপব্যবহার {, 6} মালিক; চেরা আউট করুন cmd / সিদ / PID মিলে যেহেতু তার unfixable ভাঙ্গা এবং বাধা হয়ে দাঁড়ায় টাস্কলিস্ট_লকে লক করার উপায় the " তবে আমি আরও কিছু পটভূমি বা আরও ভাল বিকল্প চাই।
nealmcb

5

Iptables বা লগিংয়ের সাথে কিছুই করার নেই; তবে এখানে একটি "শীর্ষ" ইন্টারফেসের মতো রয়েছে যা / প্রো / ডিরেক্টরিটি পোল করে এবং প্রোগ্রাম / পিড প্রতি ব্যান্ডউইদথ প্রদর্শন করে:

http://sourceforge.net/projects/nethogs

"নেট হগস একটি ছোট 'নেট টপ' টুল। বেশিরভাগ সরঞ্জামের মতো প্রোটোকল বা প্রতি সাবনেট ট্র্যাফিক ভেঙে ফেলার পরিবর্তে এটি প্রক্রিয়া অনুসারে ব্যান্ডউইথকে দলবদ্ধ করে দেয়। নেট হগস লোড হওয়ার জন্য কোনও বিশেষ কার্নেল মডিউল নির্ভর করে না।"


আমি দেখেছি নেটফাগগুলি অবিশ্বাস্য পরিসংখ্যান দেয়, তবে উপরে 2 (+ নেটটপ) এটি ভাল করে।
তোবু

1

আমি যেমন একটি অনুরূপ প্রশ্নের সন্ধান করছি, স্কাইপকে গতি-সীমাবদ্ধ করার চেষ্টা করছিলাম, আমি খুঁজে পেয়েছি

$ netstat -p | grep <mycmdname>

পোর্ট নম্বরটি পিড / সেন্টিমিটারের সাথে সংযুক্ত করার একটি ভাল উপায়, এখন পিড-মালিক / সেন্টিমিটার-মালিক সরাসরি আইপটেবলগুলিতে সমর্থিত নয়; তারপরে আপনাকে ফলাফলটি বিশ্লেষণ করতে হবে, তারপরে পোর্ট অনুসারে iptables নিয়ম যুক্ত করতে হবে; স্বাভাবিকভাবে আপনার পরে সিস্টেম শাটডাউন / পুনঃসূচনা ইত্যাদির পরে কিছু ক্লিনআপ কোডের প্রয়োজন হবে; পোর্ট নম্বর / গুলি ক্লিনআপের সময় রেফারেন্সের জন্য কোনও ফাইলে সংরক্ষণ করুন

আসলে বন্দর নম্বর প্রশ্নের একটি উত্তরের উত্তর

$ sudo netstat -p | grep "tcp.*<mycmdname>" | sed -r "s/.*<MYCOMPUTER>:([0-9]+).*/\1/"`

আপনার প্রয়োজন অনুসারে আপনার গ্রেপ টিসিপি উপাদান সামঞ্জস্য করতে হতে পারে

তারপরে আমার উদ্দেশ্যগুলির জন্য, পোর্ট সংখ্যা অনুযায়ী টিসি ইউ 32 ফিল্টার যুক্ত করা সহজ ছিল, পোর্ট সংখ্যার সাথে মিল রেখে iptables এন্ট্রিগুলি

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.