Iptables के साथ आने वाले सभी कनेक्शनों को अस्वीकार करें?


17

मैं आने वाले सभी कनेक्शनों को अस्वीकार करने और आउटगोइंग की अनुमति देने के लिए कुछ सरल iptables नियम बनाना चाहता हूं। मैं उसे कैसे कर सकता हूँ?

जवाबों:


27

रूट एक्सेस के साथ इसे आज़माएं:

# Set default chain policies
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT

# Accept on localhost
iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT

# Allow established sessions to receive traffic
iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT

ध्यान दें कि यह सभी चलने वाले कनेक्शनों को क्रूरता से काट देगा - इसमें एसएसएच कनेक्शन जैसी चीजें शामिल हैं जो आप सर्वर को प्रशासित करने के लिए उपयोग कर सकते हैं। यदि आपके पास स्थानीय कंसोल तक पहुंच है, तो केवल इसका उपयोग करें।

SSH के लिए अपवाद जोड़ने के लिए Miphix का उत्तर देखें।


2
जब मैं आपके शासन की पहली पंक्ति करता हूं, तो मुझे SSH
Holms

7
सवाल यह है कि "सभी आने वाले कनेक्शनों को अस्वीकार करें" और "एसएसएच को छोड़कर सभी आने वाले कनेक्शनों को अस्वीकार न करें" :)
योहन

मैंने पहले नियम के बारे में देर से @ ढोल की चेतावनी पढ़ी ...
डेनिसकोलडिन

ध्यान दें कि यह ipv6 ट्रैफ़िक पर कोई प्रभाव नहीं है। यदि आपने ipv6 सक्षम किया है, तो मेरा उत्तर नीचे पढ़ें।
भेल

13

यदि आप SSH के माध्यम से दूर से काम कर रहे हैं, तो आप -Iइसे जोड़ना चाह सकते हैं ( अन्य सभी नियमों से पहले इसे सम्मिलित करता है INPUT):

iptables -I INPUT -p tcp --dport 22 -j ACCEPT

यदि आपकी SSH सेवा दूसरे पोर्ट पर सुन रही है, तो आपको उस पोर्ट का उपयोग करना होगा 22

अन्यथा, आप गलती से पहुँच खो सकते हैं।


3

ध्यान रखें कि अन्य उत्तर IPv6 को कवर नहीं करते हैं! यदि आपका सिस्टम IPv6 ट्रैफ़िक स्वीकार करता है, तो ipv6 ट्रैफ़िक पर एक भी iptables नियम लागू नहीं होगा।

सीधे iptables / ip6tables का उपयोग करने के बजाय, मैं iptables का उपयोग करने की सलाह देता हूं-पुनर्स्थापित करें और सहेजें। ये उपकरण कई नियमों के साथ एक iptables कॉन्फ़िगरेशन निर्दिष्ट करने की अनुमति देते हैं और आसानी से इसे एक आदेश के साथ लोड करते हैं।

निम्नलिखित सामग्री के साथ एक फ़ाइल (मैंने इसे iptables.rules नाम दिया है) बनाएँ:

*filter

# drop forwarded traffic. you only need it of you are running a router
:FORWARD DROP [0:0]

# Accept all outgoing traffic
:OUTPUT ACCEPT [623107326:1392470726908]


# Block all incoming traffic, all protocols (tcp, udp, icmp, ...) everything.
# This is the base rule we can define exceptions from.
:INPUT DROP [11486:513044]

# do not block already running connections (important for outgoing)
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT

# do not block localhost
-A INPUT -i lo -j ACCEPT

# do not block icmp for ping and network diagnostics. Remove if you do not want this
# note that -p icmp has no effect on ipv6, so we need an extra ipv6 rule
-4 -A INPUT -p icmp -j ACCEPT
-6 -A INPUT -p ipv6-icmp -j ACCEPT

# allow some incoming ports for services that should be public available
-A INPUT -p tcp -m tcp --dport 22 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 80 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 443 -j ACCEPT

# commit changes
COMMIT

नोट यदि आपने विशिष्ट बंदरगाहों के लिए ICMP और यातायात को अनुमति देना चाहते हैं तो मैंने कुछ अतिरिक्त उदाहरण जोड़े हैं।

अब आप इसे इन आदेशों के साथ लोड कर सकते हैं:

iptables-restore < iptables.rules
ip6tables-restore < iptables.rules

अब आपके नियम ipv6 को भी कवर करते हैं और प्रबंधित करने में आसान होते हैं।

डेबियन उपयोगकर्ताओं को अतिरिक्त नोट: यदि आप अपने नियमों से संतुष्ट हैं, तो आप apt install iptables-persistentरिबूट के बाद नियमों को बहाल कर सकते हैं । शटडाउन पर नियम स्वतः सहेजे नहीं जाते हैं, इसलिए netfilter-persistent saveलगातार नियमों को अपडेट करने के लिए चलाएं ।


1

दोनों उत्तर किसी भी तरह से सही हैं, लेकिन वे मूल उत्तर के लिए पर्याप्त सटीक नहीं हैं। (क्षमा करें, मुझे टिप्पणी जोड़ने के लिए पर्याप्त प्रतिष्ठा नहीं मिली है, इसलिए पूरा उत्तर लिखना)।

मेरा मामला है कि मैं ओवरलोड अपाचे सर्वर से मिला, ओवर-फ्लोटिंग क्रोन जॉब्स, ओवर-यूज़िंग सीपीयू। थ्रेड्स सीमाएँ SQL डेटाबेस में संग्रहीत की गई थीं, लेकिन मैं इसके कनेक्शनों की सीमा से मिलता था। मैं स्थानीय होस्ट से आने वाले एपाचे कनेक्शन को सीमित करना चाहता था (यह हिस्सा वैकल्पिक है), लेकिन अन्य सभी कनेक्शन को संभव रखें। जिसमें वास्तव में स्थापित थे।

मैंने इसे आज्ञा के साथ किया

sudo iptables -I INPUT -p tcp --dport 80 -m state --state NEW -j REJECT

इसका अर्थ है: पोर्ट 80 पर आने वाले प्रत्येक tcp पैकेज के लिए, stateमॉड्यूल लोड करें, और यदि यह पहला पैकेज है (इनकमिंग कनेक्शन) इसे अस्वीकार करें। लोकलहोस्ट के लिए आप बस इस्तेमाल कर सकते हैं-s 127.0.0.0/8

और वास्तविक दुनिया के उपयोग के लिए, कुछ मामलों में आप राज्यों में 'INVALID' जोड़ सकते हैं NEW,INVALID, क्योंकि कोई भी आपके नियम को दरकिनार करते हुए "दुर्भावनापूर्ण" पैकेज भेज सकता है। और -j DROPअपने आउटबाउंड ट्रैफ़िक को बचाने के लिए भी बदलें (यह अस्वीकृति नहीं भेजेगा)

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.