2010-11-30 18 views
18

यह संभव है के लिए एक "प्रक्रिया" द्वारा शुरू की यातायात की अनुमति के लिए में iptables का उपयोग करने, यानी प्रक्रिया नाम का उपयोग कर बनाने के? उदाहरण के लिए मैं पिंग कमांड द्वारा शुरू की गई सभी चीज़ों को अनुमति देना चाहता हूं।प्रति प्रक्रिया/सेवा iptables नियम

उत्तर

19

ऐसा लगता है कि मालिक iptables मॉड्यूल वह है जो आप चाहते हैं। पहले, जांच अगर यह आपके सिस्टम में उपलब्ध है:

iptables -m owner --help 

आप यहाँ और अधिक पढ़ सकते हैं: http://www.frozentux.net/iptables-tutorial/iptables-tutorial.html#OWNERMATCH

+5

स्वामी केवल आपको उस उपयोगकर्ता या समूह से मेल खाता है जो प्रक्रिया का मालिक है, न कि प्रक्रिया का नाम। (Cmd-owner ध्वज हटा दिया गया प्रतीत होता है)। –

+1

@MikeLundy: आपके सिस्टम से एक समूह जोड़ें (मैं 'का उपयोग अपने आप nonet'), तो इस तरह से अपनी उत्पादन श्रृंखला के लिए एक नियम जोड़ने:' -एक आउटपुट मी मालिक --gid मालिक नोनट -j अस्वीकार --reject- आईसीएमपी-नेट-पहुंच योग्य 'प्रोग्राम को चलाएं जिसके लिए आप पहले से जानते हैं कि आप एसजी ('sg nonet" your_prog your_args "') के साथ ब्लॉक करना चाहते हैं। – Bgs

+0

यदि यह समर्थित नहीं है, तो ['नियंत्रण समूह'] (https://www.kernel.org/doc/Documentation/cgroup-v1/net_cls.txt) समाधान हैं। सेटअप करना बहुत मुश्किल है लेकिन मानक कर्नेल समर्थन है। इसके लिए iptables 1.6 की आवश्यकता है जिसे मैन्युअल रूप से बनाया जा सकता है। मैं एक सीजी समूह में एप्लिकेशन को सेटअप और टैग करने के तरीके के साथ एक उत्तर पोस्ट करूंगा और आईपीटीबल्स इसे पहचान सकता हूं। – KrisWebDev

5
-m owner --pid-owner PID 

, देखें http://linuxpoison.blogspot.com/2010/11/how-to-limit-network-access-by-user.html और http://linux.die.net/man/8/iptables

ध्यान दें कि आप ipt_owner मॉड्यूल की जरूरत के रूप में - pid-owner xt_owner द्वारा समर्थित नहीं है।

उदाहरण के लिए

(यह सिर्फ एक सन्निकटन है)

#!/bin/bash 
[email protected] & 
iptables -m owner --pid-owner %1 -j REJECT 

वास्तविकता में, हालांकि, आप बेहतर --uid मालिक और --gid मालिक का उपयोग कर रहे हैं। सबसे पहले, - -पिड-स्वामी मानदंड केवल सटीक पिड से मेल खाता है, जिसका अर्थ है कि आपका प्रोग्राम आसानी से एक बच्चे की प्रक्रिया को जन्म दे सकता है जिसे इस नियम द्वारा अवरुद्ध नहीं किया जाएगा। (कम से कम मैंने अन्यथा नहीं पढ़ा है।) दूसरा, iptables (8) चेतावनी देता है कि - एसपीपी सिस्टम पर पाइप-मालिक टूटा हुआ है (जो आपके लिए लागू हो सकता है या नहीं, लेकिन किसी भी मामले में पोर्टेबिलिटी सीमित करता है)। तीसरा, ऊपर लिपि में दौड़ की स्थिति है, क्योंकि इसे अवरुद्ध करने से पहले प्रक्रिया शुरू हो गई है। (यदि प्रक्रिया शुरू होने से पहले प्रक्रिया की पिड प्राप्त करने का कोई तरीका है, तो मैंने इसके बारे में कभी नहीं सुना है।)

0

यदि प्रक्रिया शुरू होने से पहले प्रक्रिया की पिड प्राप्त करने का कोई तरीका है, तो मैंने कभी नहीं किया इसके बारे में सुना है।

आप एक आवरण जो कांटे पहले, तो नियम और अधिकारियों प्रक्रिया (कार्यक्रम आप चला रहे हैं फिर से कांटा नहीं है यह सोचते हैं) कहते हैं लिख सकता है के बाद से पीआईडी ​​कार्यकारी द्वारा बदला नहीं है (3) कहते हैं।

/* NOTE this contains zero error checking */ 
int main(int argc, char **argv) { 
    /* Eat argv[0] the name of the wrapper script */ 
    argv++; 
    argc--; 

    pid_t my_pid = getpid(); 

    char *iptables_cmd = NULL; 
    asprintf(&iptables_cmd, "/sbin/iptables -A INPUT -m owner --pid_owner %d -j ACCEPT", my_pid); 

    system(iptables_cmd); 

    execv(argv[0], argv); 
} 
संबंधित मुद्दे