MySQL hizmetleri sunan bir sunucuda oldukça basit bir iptables güvenlik duvarı var, ancak iptables bana çok tutarsız sonuçlar veriyor gibi görünüyor.
Koddaki varsayılan politika aşağıdaki gibidir:
iptables -P INPUT DROP
Daha sonra MySQL'i aşağıdaki kurallarla herkese açık hale getirebilirim:
iptables -A INPUT -p tcp --dport 3306 -j ACCEPT
Bu kural uygulandığında, herhangi bir kaynak IP'den sunucudaki herhangi bir hedef IP'ye sorunsuz bir şekilde MySQL'e bağlanabilirim. Ancak, yukarıdaki satırı aşağıdaki ile değiştirerek yalnızca üç IP'ye erişimi kısıtlamaya çalıştığımda sorunla karşılaşıyorum (xxx = maskeli octect):
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
Yukarıdaki kurallar uygulandıktan sonra aşağıdakiler gerçekleşir:
Ben yapabilirsiniz 's varsayılan IP adresini kullanarak gayet sürece MySQL sunucusuna bağlanma am 0,184, 0,196 ve 0,251 konaklardan MySQL sunucusuna bağlanmak veya varsayılan IP adresi ile aynı alt ağda bir IP diğer adı.
Ben aciz gayet IP Ben 0,184 veya 0,196 ana geliyorum zaman sunucunun varsayılan IP farklı bir alt ağdan sunucuya atanır adlar, ancak 0,251 eser kullanarak MySQL bağlanmak için. .184 veya .196 ana bilgisayarlarından, bir telnet girişimi kilitleniyor ...
# telnet 209.xxx.xxx.22 3306 Trying 209.xxx.xxx.22...
.251 satırını kaldırırsam (.196 son kuralı ekleyerek), .196 ana bilgisayar yine de IP takma adları kullanarak MySQL'e bağlanamaz (bu nedenle tutarsız davranışa neden olan kuralların sırası değildir). Biliyorum, bu özel test aptalca oldu, çünkü bu üç kuralın hangi sırayla eklendiği önemli değil, ama birinin sorabileceğini düşündüm.
"Genel" kuralına geri dönersem, tüm ana bilgisayarlar varsayılan veya diğer adlarla IP'leri (alt ağlardan birinde) kullanarak MySQL sunucusuna bağlanabilir:
iptables -A INPUT -p tcp --dport 3306 -j ACCEPT
Sunucu bir CentOS 5.4 OpenVZ / Proxmox kapsayıcısında (2.6.32-4-pve) çalışıyor.
Ve sorun kurallarını iptables betiği bağlamında görmeyi tercih ederseniz, işte burada (xxx = maskeli octect):
# 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
Herhangi bir fikir? Şimdiden teşekkürler. :-)
.184 or .196 hosts
istemci barındıran ayrıca diğer alt ek IP adresleri? Bir yaparsanıztcpdump -qn port 3306
ve bu sistemlerden birinden bağlanmaya çalışırsanız ne görürsünüz? Beklediğiniz kaynak adresi görüyor musunuz?