iptables takma ips mysql bağlantılarına izin vermiyor?


10

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. :-)


1
Do .184 or .196 hostsistemci barındıran ayrıca diğer alt ek IP adresleri? Bir yaparsanız tcpdump -qn port 3306ve bu sistemlerden birinden bağlanmaya çalışırsanız ne görürsünüz? Beklediğiniz kaynak adresi görüyor musunuz?
Zoredache

1
Teşekkürler Zordache! Bu çözüldü. .251 ana bilgisayarının diğer alt ağdan atanmış IP'si yoktu. Diğer iki ana bilgisayar (.184 ve .196) yapar ve diğer alt ağdaki bir IP'ye bağlandıklarında, bu ana bilgisayarlardaki kaynak IP aynı alt ağdaki bir IP'ye geçer. Giden / kaynak IP'sinin her zaman atanan varsayılan IP olacağını düşünmüştüm. Ancak, tcpdump, kaynak IP'nin aynı alt ağdaki bir IP'ye her bağlandığında 209.xxx.xxx.xxx alt ağına değiştiğini açıkça gösterir. (Ancak, fiziksel Proxmox ana bilgisayarından tcpdump çalıştırmak zorunda kaldım.) Sen bir insansın. Teşekkürler!
Curtis

Yanıtlar:


8

.184 veya .196 ana bilgisayar istemci ana bilgisayarlarının diğer alt ağınızda ek IP adresleri var mı?

Bir yaparsanız tcpdump -qn port 3306ve bu sistemlerden birinden bağlanmaya çalışırsanız ne görürsünüz? Beklediğiniz kaynak adresi görüyor musunuz? Bu muhtemelen basit bir yönlendirme sorunudur.

Bir sistem rota kararını verirken rota tablosuna danışır. Rota tabloları her zaman belirli bir sırada danışılan bir listedir. Yerel ağlar için bağlantı yolları neredeyse her zaman en çok tercih edilen rotalardır ve ağ geçidi (yönlendirici) kullanan bir rotadan önce kullanılacaktır. Varsayılan ağ geçidi her zaman başka bir rota uygulanmadığında kullanılan yoldur. Belirli bir rotada srctanımlanmış bir rota varsa , o adres tercih edilir ve büyük olasılıkla o rota kullanılırken kullanılır.

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 

Dolayısıyla, çok bağlantılı bir sistem için bu örnek yol tablosu göz önüne alındığında, hedeflenen herhangi bir şey 10.2.13.0/24gelecek 10.2.13.1ve hedeflenen herhangi bir şey 10.2.4.0/23gelecektir 10.2.4.245.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.