একটি প্রক্রিয়া নেটওয়ার্ক অ্যাক্সেস ব্লক?


74

একক প্রক্রিয়ার (আউটগোয়িং) নেটওয়ার্ক অ্যাক্সেসকে আটকাতে কি সম্ভব?


6
আপনি কীভাবে প্রক্রিয়াটি সনাক্ত করতে চান? পিআইডি, নাম, পথ?
মার্কো

1
আপনি কোন অ্যাক্সেস ব্লক করতে চান? কিছু প্রোগ্রাম localhostতাদের কাজগুলি করতে (একই মেশিনে) মাধ্যমে নেটওয়ার্ক অ্যাক্সেস ব্যবহার করে ।
ভোনব্র্যান্ড

প্রক্রিয়াটি যদি সহযোগিতা করে থাকে তবে LD_PRELOAD বা নেটওয়ার্ক অ্যাক্সেস প্রতিরোধের অনুরূপও দেখুন ।
গিলস

উত্তর:


78

লিনাক্স ২.6.২৪+ (২.6.২৯ অবধি পরীক্ষামূলক হিসাবে বিবেচিত) এর সাহায্যে আপনি এর জন্য নেটওয়ার্ক নেমস্পেস ব্যবহার করতে পারেন। সরঞ্জামটির CONFIG_NET_NS=yসাহায্যে আপনার কার্নেল ( ) এবং ইউজার-লিনাক্সে আপনাকে 'নেটওয়ার্ক নেমস্পেস' সক্ষম করতে হবে unshare

তারপরে, নেটওয়ার্ক অ্যাক্সেস ছাড়াই একটি প্রক্রিয়া শুরু করা যেমন সহজ:

unshare -n program ...

এটি প্রক্রিয়াটির জন্য একটি ফাঁকা নেটওয়ার্ক নেমস্পেস তৈরি করে। এটি কোনও লুপব্যাক সহ কোনও নেটওয়ার্ক ইন্টারফেস সহ চালিত হয় । নীচের উদাহরণে আমরা বর্তমান কার্যকর ব্যবহারকারী এবং গোষ্ঠী আইডিগুলি সুপারভাইজারগুলিতে ম্যাপ করার পরে কেবল প্রোগ্রামটি চালাতে যুক্ত করব - (সুডো এড়ানো):

$ unshare -r -n ping 127.0.0.1
connect: Network is unreachable

আপনার অ্যাপ্লিকেশনটির যদি নেটওয়ার্ক ইন্টারফেসের প্রয়োজন হয় তবে আপনি একটি নতুন সেট আপ করতে পারেন:

$ unshare -n -- sh -c 'ip link set dev lo up; ping 127.0.0.1'
PING 127.0.0.1 (127.0.0.1) 56(84) bytes of data.
64 bytes from 127.0.0.1: icmp_seq=1 ttl=32 time=0.066 ms

দ্রষ্টব্য যে এটি একটি নতুন, স্থানীয় লুপব্যাক তৈরি করবে । এটি হ'ল, প্রসারিত প্রক্রিয়া হোস্টের খোলা পোর্টগুলিতে অ্যাক্সেস করতে সক্ষম হবে না 127.0.0.1


আপনার যদি নেমস্পেসের ভিতরে মূল নেটওয়ার্কিং অ্যাক্সেসের প্রয়োজন হয় তবে আপনি nsenterঅন্য নেমস্পেসে প্রবেশ করতে পারেন ।

নিম্নলিখিত উদাহরণটি pingনেটওয়ার্ক নেমস্পেসের সাথে চালিত যা পিআইডি 1 দ্বারা ব্যবহৃত হয় (এটি এর মাধ্যমে নির্দিষ্ট করা আছে -t 1):

$ nsenter -n -t 1 -- ping -c4 example.com
PING example.com (93.184.216.119) 56(84) bytes of data.
64 bytes from 93.184.216.119: icmp_seq=1 ttl=50 time=134 ms
64 bytes from 93.184.216.119: icmp_seq=2 ttl=50 time=134 ms
64 bytes from 93.184.216.119: icmp_seq=3 ttl=50 time=134 ms
64 bytes from 93.184.216.119: icmp_seq=4 ttl=50 time=139 ms

--- example.com ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3004ms
rtt min/avg/max/mdev = 134.621/136.028/139.848/2.252 ms

4
unshare -nrootসুযোগসুবিধা ছাড়াই "অপারেশন অনুমোদিত নয়" নিক্ষেপ করছে বলে মনে হচ্ছে, এর থেকে আমি কী অনুভব করছি?
টক্কর

1
হতে পারে একটি নির্বোধ প্রশ্ন ... এই নেমস্পেসটি কি অংশীদারিবিহীন অ্যাপ্লিকেশনটির চাইল্ড প্রসেস / কল প্রসেসের ক্ষেত্রেও প্রযোজ্য?
বোনানজা

3
হ্যাঁ. নাম স্থানটি স্যুইচ করার পরে তৈরি হওয়া সমস্ত শিশু এটির উত্তরাধিকার সূত্রে প্রাপ্ত।
মিশা গার্নি

2
আমি এমন কোনও প্রোগ্রামের মতো দেখতে চাই যা আমি ভাগ করতে চাই না উদাহরণস্বরূপ sudo unshare -nমূল অংশের উত্তরাধিকারী with আমার যেমন শেয়ারহীনকে কল করার জন্য সুডো দরকার তাই আমি ভাবছি যে আমি কীভাবে নিশ্চিত করতে পারি যে ডাকা প্রোগ্রামটির মূল অধিকার নেই।
বোনানজা

3
কোনও ব্যবহারকারীকে প্রক্রিয়া সীমাবদ্ধ করার জন্য একটি লাইনার। মাত্র দু'বার সুডো: sudo unshare -n sudo -u dude bash -c 'echo Hello, my name is $USER'@ থারস্মোনার
জাকুব বোচেনস্কি

21

লিনাক্সে নেটওয়ার্ক নেমস্পেসস নামে একটি বৈশিষ্ট্য রয়েছে যা আপনাকে একই মেশিনে মূলত একাধিক নেটওয়ার্ক স্ট্যাক রাখতে দেয় এবং এটি চালানোর সময় একটি প্রোগ্রামে একটি বরাদ্দ দেয়। এটি সাধারণত ধারকগুলির জন্য ব্যবহৃত বৈশিষ্ট্য, তবে আপনি যা চান তা পূরণ করতে আপনি এটি ব্যবহার করতে পারেন।

ip netnsSubcommands এটি পরিচালনা। কোনও কিছুর অ্যাক্সেস ছাড়াই একটি নতুন নেটওয়ার্ক নেমস্পেস তৈরি করা সহজ, এটি একটি নতুন নেমস্পেসের ডিফল্ট অবস্থা:

root@host:~# ip netns add jail

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

root@host:~# ip netns exec jail /bin/bash
root@host:~# ip addr add 127.0.0.1/8 dev lo
root@host:~# ip link set dev lo up
root@host:~# exit

এখন আপনি যখন কোনও নেটওয়ার্ক ছাড়াই আপনার কমান্ডটি চালাতে চান, আপনি কেবল সেই কারাগারে এটি চালাবেন:

root@host:~# ip netns exec jail su user -c 'ping  8.8.8.8'
connect: Network is unreachable

নেটওয়ার্কটি পছন্দসই, অ্যাক্সেসযোগ্য। (আপনি পৃথক নেটওয়ার্ক স্ট্যাকের iptablesবিধিগুলি অন্তর্ভুক্ত করার কারণে আপনি সমস্ত ধরণের আকর্ষণীয় কাজ করতে পারেন )


যদিও আমি sudo ipআইপি কমান্ডগুলি কার্যকর করার প্রয়োজন ছিল , একবার আমি su someuserব্যাশে পরেছিলাম, কেবলমাত্র 'সামুসার' ব্যবহারকারীর জন্য একটি অনিরাপদ শেল পেতে আমি মৃত্যুদন্ড কার্যকর করেছি ।
ঋষি

11

আপনি iptables ব্যবহার করতে পারেন এবং সেই প্রক্রিয়াটিকে একটি গ্রুপে স্থানান্তর করতে পারেন:

mkdir /sys/fs/cgroup/net_cls/block
echo 42 > /sys/fs/cgroup/net_cls/block/net_cls.classid

iptables -A OUTPUT -m cgroup --cgroup 42 -j DROP

echo [pid] > /sys/fs/cgroup/net_cls/block/tasks

1
যে কাজগুলির মধ্যে থেকে
পিড

@ পি কে এম কে ফিরে নেটওয়ার্কিং সক্ষম করতে, আপনাকে কেবল [পিডি] প্রতিধ্বনি করতে হবে /sys/fs/cgroup/net_cls/tasks(পথে কোনও 'ব্লক' নয়)
দুঃখ

10

হ্যাঁ, কাস্টমাইজড অ্যাপারমোর প্রোফাইল সহ, যেমন

/usr/bin/curl {
    ...

    # block ipv4 acces
    deny network inet,
    # ipv6 
    deny network inet6,
    # raw socket
    deny network raw,

}

তবে সেই পদ্ধতিতে আপনাকে অ্যাক্সেসের জন্য অনুমোদিত ফাইলগুলির একটি তালিকা তৈরি করতে হবে, পুরো পদ্ধতিটি কিছুটা জটিল হতে পারে। এবং সহায়তা দস্তাবেজটি এখানে দেখুন


7

আপনি ফায়ারজেল স্যান্ডবক্স ব্যবহার করতে পারেন (সেকম্পম্প বৈশিষ্ট্য সহ কার্নেলগুলিতে কাজ করা উচিত)।

এটি ব্যবহার করতে ঠিক না

firejail --noprofile --net=none <path to executable>

--noprofileডিফল্ট স্যান্ডবক্স --net=noneঅক্ষম করে নেটওয়ার্কিং অক্ষম করে

আমি বিশ্বাস করি যে বেশিরভাগ ডিস্ট্রো ইতিমধ্যে প্যাকেজ সরবরাহ করে তবে তারা ফায়ারজেল না করে কার্যত বিল্ড টুলচেইন এবং নেমস্পেস / সেকম্পম্প সক্ষম সক্ষম কার্নেল ব্যতীত অন্য কোনও নির্ভরতা নেই।

ফায়ার জেলের আরও কয়েকটি দুর্দান্ত বৈশিষ্ট্য রয়েছে যা firejail --helpনেটওয়ার্কিংয়ের সাথে দেখানো যেতে পারে (যেমন কেবল লুপব্যাক ইন্টারফেস সরবরাহ করা বা আইপি / ডিএনএস ইত্যাদি ব্লক করা) তবে এটি কাজ করা উচিত। এছাড়াও, এটি doesn't require root


5

আপনি একা iptables দিয়ে এটি করতে পারবেন না। এই বৈশিষ্ট্যটি সংক্ষেপে উপস্থিত ছিল , তবে নির্ভরযোগ্যভাবে কাজ করা যায়নি এবং তা পরিত্যক্ত হয়েছিল।

আপনি যদি ডেডিকেটেড ইউজার আইডি হিসাবে প্রক্রিয়াটি চালাতে পারেন তবে iptables ownerমডিউলটি দিয়ে এটি করতে পারেন :

iptables -A OUTPUT -m owner --uid-owner 1234 -j DROP

Iptables এর উদাহরণগুলি দেখুন : কনট্র্যাক এবং মালিকের সাথে বহির্গামী ট্র্যাফিকের মিল matching কেবল এক্সওয়াই অ্যাপ্লিকেশন / ব্যবহারকারীর অনুমতি দেওয়ার জন্য অদ্ভুত ফোঁটা , আইপটিবল / পিএফ নিয়ম নিয়ে কাজ করে?

আপনি যদি নিজের ধারকটিতে প্রক্রিয়াটি চালাতে পারেন তবে আপনি সেই ধারকটি স্বাধীনভাবে ফায়ারওয়াল করতে পারেন (এমনকি এটি নেটওয়ার্ক থেকে সম্পূর্ণ সংযোগ বিচ্ছিন্ন করে দিন)।

একটি সুরক্ষা মডিউল নেটওয়ার্কিং বৈশিষ্ট্যগুলিতে কোনও প্রক্রিয়াটির অ্যাক্সেস ফিল্টার করতে পারে। warl0ck এর উত্তর AppArmor এর সাথে একটি উদাহরণ দেয়।


3

সমাধান 1: ফায়ারওয়াল:

আমরা মত ফায়ারওয়াল ব্যবহার করতে পারে Douane বা Opensnitch কিন্তু যারা অ্যাপ্লিকেশন 100% দক্ষ বা বিকাশের প্রাথমিক পর্যায়ে নেই (বাগ ইত্যাদি 2019 এর হিসাবে অনেক আছে)

সমাধান 2: কার্নেল ম্যাক:

কার্নেল Macs- এর দ্বারা একটি ফায়ারওয়াল সবচেয়ে পরিচিত হিসাবে ব্যবহার করা যাবে Tomoyo , SELinux এবং Apparmor এই সমাধান সেরা এক যখন এটি স্থায়িত্ব এবং দক্ষতা (ফায়ারওয়াল সলিউশন) কিন্তু অধিকাংশ সময় এই একরকম জটিল সেটিং আসা।

সমাধান 3: ফায়ারজেল:

কোনও অ্যাপ্লিকেশনটির জন্য নেটওয়ার্ক অ্যাক্সেস ব্লক করতে ফায়ারজেল ব্যবহার করা যেতে পারে যার জন্য কোনও ব্যবহারকারী এটি থেকে উপকৃত হতে পারে মূলের প্রয়োজন হয় না

firejail --noprofile --net=none command-application

সমাধান 4: আনশেয়ার

আনশয়ারে নেটওয়ার্ক ছাড়াই আলাদা আলাদা নেমেসিসে অ্যাপ্লিকেশন শুরু করা যেতে পারে তবে এর জন্য রুট ফায়ারজেলের সমাধান প্রায় একই জিনিসটি করতে পারে তবে মূলের প্রয়োজন হয় না Un

unshare -r -n application-comand

সমাধান 5: প্রক্সিফাই:

একটি সমাধান হ'ল অ্যাপ্লিকেশনটি নাল / নকল প্রক্সিতে প্রক্সিফাই করা । আমরা tsocks বা প্রক্সিবাউন্ড ব্যবহার করতে পারেন । সেটআপ সম্পর্কে কিছু বিশদ এখানে

সমাধান 6: Iptables:

অন্য একটি সহজ সমাধান iptables হয়, এটি কোনও অ্যাপ্লিকেশনটিকে ব্লক করার জন্য সেটআপ করা যেতে পারে

  1. নতুন গ্রুপ তৈরি করুন, যাচাই করুন ; এই গোষ্ঠীতে প্রয়োজনীয় ব্যবহারকারীদের যুক্ত করুন:
    • সৃষ্টি: groupadd no-internet
    • বৈধতাকরণ করতে বলছি: grep no-internet /etc/group
    • ব্যবহারকারী যুক্ত করুন: useradd -g no-internet username

      দ্রষ্টব্য: আপনি যদি ইতিমধ্যে বিদ্যমান ব্যবহারকারীর সংশোধন করে থাকেন তবে আপনার চালানো উচিত: usermod -a -G no-internet userName চেক করুন:sudo groups userName

  2. আপনার পথে একটি স্ক্রিপ্ট তৈরি করুন এবং এটি সম্পাদনযোগ্য করুন:
    • সৃষ্টি: nano /home/username/.local/bin/no-internet
    • সম্পাদনযোগ্য: chmod 755 /home/username/.local/bin/no-internet
    • বিষয়বস্তু: #!/bin/bash
                    sg no-internet "$@"

  3. গোষ্ঠী নন-ইন্টারনেটের জন্য নেটওয়ার্ক ক্রিয়াকলাপ বাদ দেওয়ার জন্য আইপটবেবল বিধি যুক্ত করুন :


   ৪. এটি পরীক্ষা করে দেখুন, উদাহরণস্বরূপ ফায়ারফক্সে চালিয়ে:

  • no-internet "firefox"

   ৫. আপনি যদি একটি ব্যতিক্রম করতে চান এবং কোনও প্রোগ্রামকে স্থানীয় নেটওয়ার্ক অ্যাক্সেস করার অনুমতি দিতে চান :

  • iptables -A OUTPUT -m owner --gid-owner no-internet -d 192.168.1.0/24 -j ACCEPT
  • iptables -A OUTPUT -m owner --gid-owner no-internet -d 127.0.0.0/8 -j ACCEPT
  • iptables -A OUTPUT -m owner --gid-owner no-internet -j DROP

   6. এটি স্থায়ী করুন

   বুট-এ iptables নিয়ম প্রয়োগ করার একটি উপায় হ'ল নিয়মটি সিস্টেমড সহ একটি পরিষেবা হিসাবে যুক্ত করা

cat /usr/lib/systemd/system/nonet.service
[Unit]
Description=Nonet group iptable update
After=network.target
After=xsession.target
After=iptables.service
After=shorewall.service

[Service]
Type=oneshot
RemainAfterExit=true
StandardOutput=journal
ExecStart=/bin/bash /home/user/Scripts/Nonet.iptables.sh

1
এটি একটি গুরুতরভাবে দুর্দান্ত গাইড is ধন্যবাদ. যদিও, আমার জন্য, আমার নো-ইন্টারনেট কমান্ডটি কখনই প্যারামিটারটি পাস করেছে বলে মনে হয় না, তাই আমি sg no-internetআপাতত ব্যবহার করছি ।
জাচ ব্লুমকুইস্ট

@ জ্যাচ আমি আমার উত্তর আপডেট করেছি আপনি ফায়ার জাইলে আগ্রহী হতে পারেন;)
ইনটিকা

2

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


2

কিছু সিস্টেম কল ব্লক করতে আপনি সেকম্পম্প-বিপিএফ ব্যবহার করতে পারেন । উদাহরণস্বরূপ, সকেট এফডি তৈরি থেকে প্রক্রিয়াটি রোধ করার জন্য সিস্টেম কলটি ব্লকsocket করতে চাইতে পারে ।

আমি এই অ্যাপ্রোকার একটি উদাহরণ লিখেছি যা socketলাইবসেকম্প ব্যবহার করে কাজ করার জন্য সিস্টেম কলকে বাধা দেয় । সংক্ষিপ্তসারটি (ত্রুটি পরীক্ষা না করে):

scmp_filter_ctx ctx = seccomp_init(SCMP_ACT_ALLOW);
seccomp_arch_add(ctx, SCMP_ARCH_NATIVE);
seccomp_rule_add(ctx, SCMP_ACT_ERRNO(EACCES), SCMP_SYS(socket), 1, SCMP_CMP(0, SCMP_CMP_EQ, pf));
seccomp_load(ctx);
execvp(argv[1], argv+1);

এর জন্য মূল অধিকারের দরকার নেই।

একটি সম্পূর্ণ স্যান্ডবক্স তবে আরও জটিল তাই আপনার অসমর্থিত / দূষিত প্রোগ্রামগুলি ব্লক করার জন্য এই আন ক্রমটি ব্যবহার করা উচিত নয়।


আপনি কীভাবে এটি ব্যবহার করবেন তার একটি উদাহরণ দিতে পারেন? এটির কাজ করার জন্য কি মূল অধিকারগুলির প্রয়োজন?
বোনানজা

-4

আপনি "প্রক্সিচেইনস" নামে একটি কমান্ড লাইন প্রোগ্রাম ব্যবহার করতে পারেন এবং নিম্নলিখিত সম্ভাবনার একটি ব্যবহার করে দেখতে পারেন:

এটি ব্যবহার করুন যা এটি ব্যবহার করে ...

  • ... একটি প্রক্সি যার অস্তিত্ব নেই? (এটি "অবৈধ" প্রক্সি দিয়ে চালাবে কিনা জানি না)
  • ... একটি স্থানীয় প্রক্সি (যেমন "টিনিপ্রোক্সি", "স্কুইড", "প্রাইভোক্সি", ...) যা ইন্টারনেটে অ্যাক্সেস সীমাবদ্ধ করে? (কেবল এসিএল ব্যবহার করুন)

আমি নিজে এটি পরীক্ষা করে নিই তাই কাজ করে কিনা জানি না ...


অনিরীক্ষিত সমাধানগুলি পোস্ট করা সাধারণত ভাল ধারণা নয়।
16:32

অজানা প্রক্সি সহ প্রক্সিচেইনগুলি (লোকালহোস্ট: 1234 বা এর মতো) প্রকৃতপক্ষে একটি
দৃ approach়
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.