Portál AbcLinuxu, 12. května 2025 06:00

Dotaz: Forward MySQL portu

12.7.2009 10:37 Ondrej
Forward MySQL portu
Přečteno: 287×
Odpovědět | Admin

Mám webserver se dvěma veřejnými IP adresami, kde mi běhá mysql na localhostu. Potřeboval bych ale forwardovat z localhostu na jednu z těch dvou IP adres port 3306 ale nějak mi to nejde.

Ty dvě IP adresy mi přichází jednou síťovkou do BR0 a BR0:1 zkusil jsem tedy vyplodit:

iptables -A FORWARD -p tcp -m tcp --dport 3306 -j ACCEPT

iptables -t nat -A PREROUTING -d 127.0.0.1 -i lo -p tcp -m tcp --dport 3306 -j DNAT --to-destination <verejna IP>:3306

což tedy nejde nejsem v iptables sběhlý tak nevím jak diagnostikovat chybu případně jak to řešit.

Ideálně bych chtěl tento port povolit jen pro dvě veřejné IP adresy ale to už bych asi chtěl moc takže to ošetřím pomocí vymezení přítupu uživatelů MySQL

Děkuji za reakce

Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

H0ax avatar 12.7.2009 11:08 H0ax | skóre: 36 | blog: Odnikud_nikam
Rozbalit Rozbalit vše Re: Forward MySQL portu
Odpovědět | | Sbalit | Link | Blokovat | Admin
proc v iptables? v my.cnf najdi bind-address a tam mu reknes kde ma naslouchat
uid=0(root) gid=0(root) skupiny=0(root)
12.7.2009 11:12 Ondrej
Rozbalit Rozbalit vše Re: Forward MySQL portu

to ale nemohu, protoze na localhostu je zavislych hodne nastaveni

H0ax avatar 12.7.2009 11:14 H0ax | skóre: 36 | blog: Odnikud_nikam
Rozbalit Rozbalit vše Re: Forward MySQL portu
proc ne? dyt to muze sedet na localhostu i dalsich adresach najednou. Nevidim jediny duvod proc by to neslo.
uid=0(root) gid=0(root) skupiny=0(root)
12.7.2009 13:10 Ondrej
Rozbalit Rozbalit vše Re: Forward MySQL portu

No to nevím že by to šlo. Pokud to jde tak jak ? když tam zadám dvě IP oddělené mezerami tak tam nic nejede na verejne IP se mi sluzba neprojevi a zustava dale jen na localhostu. Nebo se to dela jinak ?

12.7.2009 13:19 Filip Jirsák | skóre: 68 | blog: Fa & Bi
Rozbalit Rozbalit vše Re: Forward MySQL portu
Vypadá to, že MySQL umí poslouchat buď na jedné IP adrese nebo na všech: bind-address. Pak ji nastavte, ať naslouchá na všech a k těm, na kterých naslouchat nemá, zakažte přístup na firewallu.
H0ax avatar 12.7.2009 13:56 H0ax | skóre: 36 | blog: Odnikud_nikam
Rozbalit Rozbalit vše Re: Forward MySQL portu
presne tak
+1
uid=0(root) gid=0(root) skupiny=0(root)
12.7.2009 11:27 Filip Jirsák | skóre: 68 | blog: Fa & Bi
Rozbalit Rozbalit vše Re: Forward MySQL portu
Odpovědět | | Sbalit | Link | Blokovat | Admin
Jak už bylo zmíněno, prostě nastavte MySQL, ať naslouchá na té veřejné IP adrese a zároveň na localhostu.

Pokud byste chtěl dělat ten forward, potřebujete jej pravděpodobně přesně opačně – z veřejné IP adresy na localhost (předpokládám, že chcete docílit toho, aby při připojení zvenku na onu IP adresu jste se připojil na MySQL). To by pak bylo
iptables -t nat -A PREROUTING -d <verejna IP> -p tcp -m tcp --dport 3306 -j DNAT --to-destination 127.0.0.1:3306
Přístup na příslušný port z venčí nepovolujete v řetězci FORWARD, ale v INPUT. Pokud chcete povolit přístup jen dvěma IP adresám, můžete to udělat např. takhle:
iptables -A INPUT -p tcp -m tcp --dport 3306 -s <jedna_povolena_IP> -j ACCEPT
iptables -A INPUT -p tcp -m tcp --dport 3306 -s <druha_povolena_IP> -j ACCEPT
iptables -A INPUT -p tcp -m tcp --dport 3306 -j DROP
Případně efektivnější by bylo vytvořit si na to speciální řetězec, kam pošlete vše na port tcp/3306, a tam už budete testovat jen zdrojovou IP adresu. Koncepčně lepší je na firewallu tohle neřešit a vyřešit to až přístupovými právy v MySQL (přístupová práva pak může přidělovat jen administrátor databáze a nepotřebuje k tomu součinnost administrátora firewallu), ale otázka je, zda můžete síťovému a autentizačnímu modulu MySQL věřit tolik, že je necháte volně dostupné z internetu – jestli třeba ustojí DoS útok apod. Já osobně bych tomu u databází asi moc nevěřil a raději bych přeci jen provoz blokoval už na firewallu.
12.7.2009 13:49 Ondrej
Rozbalit Rozbalit vše Re: Forward MySQL portu

Tak bohuzel zkusil jsem to a nefunguje. Jak bych mel zjistit az kam se spojeni dostalo ? nekde prece musi byt problem.

12.7.2009 14:15 Filip Jirsák | skóre: 68 | blog: Fa & Bi
Rozbalit Rozbalit vše Re: Forward MySQL portu
Zkuste tcpdump na rozhraní s veřejnou IP adresou, ať je vidět, zda tam pakety vůbec dorazí:
tcpdump -ni eth0 'port 3306'
kde místo eth0 dejte jméno síťového rozhraní s veřejnou IP adresou, na kterou se připojujete.

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.