iptables अलसी के ips को mysql कनेक्शन की अनुमति नहीं दे रहा है?


10

मेरे पास MySQL सेवाएं प्रदान करने वाले सर्वर पर काफी सरल iptables फ़ायरवॉल है, लेकिन iptables मुझे बहुत ही असंगत परिणाम दे रहा है।

स्क्रिप्ट पर डिफ़ॉल्ट नीति निम्नानुसार है:

iptables -P INPUT DROP

फिर मैं निम्नलिखित नियम से MySQL को सार्वजनिक कर सकता हूं:

iptables -A INPUT -p tcp --dport 3306 -j ACCEPT

जगह में इस नियम के साथ, मैं किसी समस्या के बिना सर्वर पर किसी भी स्रोत आईपी से किसी भी स्रोत आईपी से MySQL से कनेक्ट कर सकता हूं। हालाँकि, जब मैं निम्नलिखित के साथ उपरोक्त पंक्ति को प्रतिस्थापित करके सिर्फ तीन आईपी तक पहुंच को प्रतिबंधित करने का प्रयास करता हूं, तो मैं परेशानी में पड़ जाता हूं (xxx = नकाबपोश)

iptables -A INPUT -p tcp --dport 3306 -m state --state NEW -s 208.XXX.XXX.184 -j ACCEPT 
iptables -A INPUT -p tcp --dport 3306 -m state --state NEW -s 208.XXX.XXX.196 -j ACCEPT 
iptables -A INPUT -p tcp --dport 3306 -m state --state NEW -s 208.XXX.XXX.251 -j ACCEPT 

एक बार उपरोक्त नियम लागू होने के बाद, निम्नलिखित होते हैं:

  • मैं .184, .196 और .251 होस्ट्स से MySQL सर्वर से कनेक्ट कर सकता हूँ , जब तक कि यह डिफ़ॉल्ट IP एड्रेस या डिफ़ॉल्ट आईपी एड्रेस के समान सबनेट में IP उपनाम का उपयोग करके MySQL सर्वर से कनेक्ट होने तक ठीक ठीक होस्ट करता है ।

  • जब मैं .184 या .196 मेजबानों से आ रहा हूं, तो मैं सर्वर के डिफ़ॉल्ट आईपी की तुलना में एक अलग सबनेट से सर्वर को सौंपे गए आईपी एलियास का उपयोग करके MySQL से कनेक्ट करने में असमर्थ हूं, लेकिन .251 ठीक काम करता है। .184 या .196 मेजबानों से, एक टेलनेट प्रयास अभी लटका हुआ है ...

    # telnet 209.xxx.xxx.22 3306
    Trying 209.xxx.xxx.22...
    
  • यदि मैं .251 लाइन (अंतिम नियम जोड़ा गया .196) को हटाता हूं, तो .196 होस्ट अभी भी आईपी उपनामों का उपयोग करके MySQL से कनेक्ट नहीं हो सकता है (इसलिए यह नियमों का क्रम नहीं है जो असंगत व्यवहार का कारण बन रहा है)। मुझे पता है, यह विशेष परीक्षण मूर्खतापूर्ण था क्योंकि इससे कोई फर्क नहीं पड़ता कि इन तीन नियमों को किस क्रम में जोड़ा जाता है, लेकिन मुझे लगा कि कोई व्यक्ति पूछ सकता है।

  • यदि मैं "सार्वजनिक" नियम पर वापस लौटता हूं, तो सभी होस्ट्स डिफ़ॉल्ट या अलियास किए गए आईपी (या तो सबनेट में) का उपयोग करके MySQL सर्वर से जुड़ सकते हैं:

    iptables -A INPUT -p tcp --dport 3306 -j ACCEPT
    

सर्वर एक CentOS 5.4 OpenVZ / Proxmox कंटेनर (2.6.32-4-pve) में चल रहा है।

और, अगर आप iptables स्क्रिप्ट के संदर्भ में समस्या के नियमों को देखना पसंद करते हैं, तो यह यहाँ है (xxx = नकाबपोश ऑक्टाकोर):

# Flush old rules, old custom tables
/sbin/iptables --flush
/sbin/iptables --delete-chain

# Set default policies for all three default chains
/sbin/iptables -P INPUT DROP
/sbin/iptables -P FORWARD DROP
/sbin/iptables -P OUTPUT ACCEPT

# Enable free use of loopback interfaces
/sbin/iptables -A INPUT -i lo -j ACCEPT
/sbin/iptables -A OUTPUT -o lo -j ACCEPT

# All TCP sessions should begin with SYN
/sbin/iptables -A INPUT -p tcp ! --syn -m state --state NEW -j DROP

# Accept inbound TCP packets (Do this *before* adding the 'blocked' chain)
/sbin/iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

# Allow the server's own IP to connect to itself
/sbin/iptables -A INPUT -i eth0 -s 208.xxx.xxx.178 -j ACCEPT

# Add the 'blocked' chain *after* we've accepted established/related connections
#   so we remain efficient and only evaluate new/inbound connections
/sbin/iptables -N BLOCKED
/sbin/iptables -A INPUT -j BLOCKED

# Accept inbound ICMP messages
/sbin/iptables -A INPUT -p ICMP --icmp-type 8 -j ACCEPT
/sbin/iptables -A INPUT -p ICMP --icmp-type 11 -j ACCEPT

# ssh (private)
/sbin/iptables -A INPUT -p tcp --dport 22 -m state --state NEW -s xxx.xxx.xxx.xxx -j ACCEPT          

# ftp (private)
/sbin/iptables -A INPUT -p tcp --dport 21 -m state --state NEW -s xxx.xxx.xxx.xxx -j ACCEPT          

# www (public)
/sbin/iptables -A INPUT -p tcp --dport 80 -j ACCEPT                                
/sbin/iptables -A INPUT -p tcp --dport 443 -j ACCEPT                               

# smtp (public)
/sbin/iptables -A INPUT -p tcp --dport 25 -j ACCEPT                                
/sbin/iptables -A INPUT -p tcp --dport 2525 -j ACCEPT                              

# pop (public)
/sbin/iptables -A INPUT -p tcp --dport 110 -j ACCEPT                               

# mysql (private)
/sbin/iptables -A INPUT -p tcp --dport 3306 -m state --state NEW -s 208.xxx.xxx.184 -j ACCEPT 
/sbin/iptables -A INPUT -p tcp --dport 3306 -m state --state NEW -s 208.xxx.xxx.196 -j ACCEPT 
/sbin/iptables -A INPUT -p tcp --dport 3306 -m state --state NEW -s 208.xxx.xxx.251 -j ACCEPT 

कोई विचार? अग्रिम में धन्यवाद। :-)


1
क्या .184 or .196 hostsक्लाइंट होस्ट आपके अन्य सबनेट में अतिरिक्त आईपी पते हैं? यदि आप एक tcpdump -qn port 3306प्रयास करते हैं और उन प्रणालियों में से एक से जुड़ते हैं जो आप देखते हैं? क्या आपको वह स्रोत पता दिखाई देता है जिसकी आप अपेक्षा करते हैं?
Zoredache

1
धन्यवाद, Zordache! इससे हल हो गया। .251 होस्ट के पास अन्य सबनेट से कोई IP असाइन नहीं किया गया है। अन्य दो होस्ट करते हैं (.184 और .196), और इसलिए जब वे दूसरे सबनेट पर एक आईपी से जुड़ते हैं, तो उन मेजबान पर स्रोत आईपी उसी सबनेट में एक आईपी पर स्विच करता है। मैंने सोचा था कि निवर्तमान / स्रोत आईपी हमेशा एक निर्धारित डिफ़ॉल्ट होगा। लेकिन, tcpdump स्पष्ट रूप से दिखाता है कि स्रोत IP 209.xxx.xxx.xxx सबनेट में तब भी बदलता है जब भी वह उसी सबनेट में किसी IP से कनेक्ट होता है। (हालांकि, शारीरिक प्रॉक्सॉक्स होस्ट से tcpdump चलाना था।) आप एक प्रतिभाशाली हैं। धन्यवाद!
कर्टिस

जवाबों:


8

क्या .184 या .196 होस्ट क्लाइंट होस्ट आपके अन्य सबनेट में अतिरिक्त आईपी पते हैं?

यदि आप एक tcpdump -qn port 3306प्रयास करते हैं और उन प्रणालियों में से एक से जुड़ते हैं जो आप देखते हैं? क्या आपको वह स्रोत पता दिखाई देता है जिसकी आप अपेक्षा करते हैं? यह शायद एक सरल मार्ग है।

जब कोई सिस्टम रूट का निर्णय ले रहा होता है, तो वह रूट टेबल को सुरक्षित कर लेता है। रूट टेबल एक सूची है जिसे हमेशा एक विशिष्ट क्रम में परामर्श दिया जाता है। स्थानीय नेटवर्क के लिए लिंक मार्ग लगभग हमेशा सबसे पसंदीदा मार्ग हैं, और इसका उपयोग एक मार्ग से पहले किया जाएगा जो गेटवे (राउटर) का उपयोग करता है। डिफ़ॉल्ट गेटवे हमेशा वह मार्ग होता है जिसका उपयोग तब किया जाता है जब कोई अन्य मार्ग लागू नहीं होगा। यदि किसी दिए गए मार्ग में srcपरिभाषित मार्ग है , तो उस पते को प्राथमिकता दी जाएगी और उस मार्ग का उपयोग किए जाने पर सबसे अधिक संभावना है।

10.2.13.0/24 dev eth1  proto kernel  scope link  src 10.2.13.1 
10.2.4.0/23 dev eth0  proto kernel  scope link  src 10.2.4.245 
default via 10.2.4.1 dev eth0 

तो इस उदाहरण के लिए एक मल्टी-होम सिस्टम के लिए रूट टेबल दिया गया है, जिसके लिए कुछ भी नियत 10.2.13.0/24होगा 10.2.13.1, और जो कुछ भी 10.2.4.0/23होगा उसके लिए नियत होगा 10.2.4.245

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