मेरे पास 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
कोई विचार? अग्रिम में धन्यवाद। :-)
.184 or .196 hosts
क्लाइंट होस्ट आपके अन्य सबनेट में अतिरिक्त आईपी पते हैं? यदि आप एकtcpdump -qn port 3306
प्रयास करते हैं और उन प्रणालियों में से एक से जुड़ते हैं जो आप देखते हैं? क्या आपको वह स्रोत पता दिखाई देता है जिसकी आप अपेक्षा करते हैं?