Autor Zpráva
Ondřej Ryška
Profil
Zdravím,
docela dlouho jsem se snažil vzdáleně se připojit na moji databázi. Pořád mi to nešlo ale nakonec jsem to rozchodil, protože jsem našel že je třeba upravit iptable. O tom že nějaké iptable existuje a že je to firewall jsem se dozvěděl až teď tak o tom nic moc nevím. VPS mám zadarmo od známého, ten po mě jen požaduje, abych na serveru nenadělal díry. Tak bych se chtěl zeptat jestli otevření portu pomocí následujícího příkazu není nějak nebezpečné:

/sbin/iptables -A INPUT -i eth0 -p tcp --destination-port 3306 -j ACCEPT

Tento příkaz jsem našel a chápu ho tak, že otevřu tcp port 3306 pro jakýkolikv (z jakékoliv ip adresy) vzdálený přístup. Je to standardní bezpečné řešení? Ještě mě napadá použít

/sbin/iptables -A INPUT -i eth0 -s 192.168.1.0/24 -p tcp --destination-port 3306 -j ACCEPT

pro omezení na konrétní adresu, ale budu potřebovat přistupovat z různých adres. Chci se jen ujistit, jestli nedělám něco špatně.
DJ Miky
Profil
Povolit všem přístup k MySQL démonu nikdy nebude standardní ani bezpečné řešení. Pokud je to možné, povol jen přístup z určitých důvěryhodných IP adres (případně sítí), to se provádí tím druhým příkazem. Takto povolených IP adres může být více (zopakováním příkazu). Přístup z počítačů s dynamickými IP adresami může být vhodné řešit tunelovaným spojením přes důvěryhodný stroj s pevnou IP adresou (klíčová slova pro hledání: „ssh tunnel“, „ssh port forwarding“).

U pravidel v iptables nezapomeň nastavit/zkontrolovat jejich obnovu při restartu serveru. Dále může být vhodné omezit počet příchozích spojení za nějaké časové kvantum, třeba povolit maximálně 1 spojení za 1 sekundu (klíčová slova pro hledání: „iptables limit rate“, „iptables recent module“). Pomoci může i analyzátor logů typu DenyHosts, který hlídá logy a při překročení maximálního počtu pokusů o přihlášení (kvůli špatnému heslu) danou IP adresu na určitou dobu zablokuje.

Jinak ještě může být potřeba zapnout naslouchání MySQL na vnějších rozhraních, typicky kromě filtrování na firewallu bývá povoleno pouze naslouchání na lokální smyčce.
Ondřej Ryška
Profil
DJ Miky:
Pokud je to možné, povol jen přístup z určitých důvěryhodných IP adres (případně sítí), to se provádí tím druhým příkazem.

Já už jsem zadal první příkaz, tedy ten pro povolení přístupu z jakékoliv adresy. Překryje se tedy toto ne-bezpečné nastavení zadáním druhého příkazu pro konrétní adresu?

Jinak za ty další tipy díky, podívám se na ně.
DJ Miky
Profil
Ne, pravidla pro iptables se nijak nenahrazují ani neruší, aktuální seznam si můžeš vždy vypsat příkazem iptables -L. Pro odstranění konkrétního pravidla použiješ stejný zápis jako při přidávání, jen místo přepínače -A zadáš -D. Mimochodem, záleží i na pořadí pravidel, prochází se „odshora dolů“, od nejnižšího čísla po nejvyšší (tedy standardně od nejstaršího po nejnověji přidané, pokud pořadí ručně nezměníš).

Ještě dodatek – měl bys pak požádat někoho zkušeného a důvěryhodného o kontrolu výsledné konfigurace. Pokud se v administraci serveru neorientuješ, můžeš nevědomky vytvořit bezpečnostní díru, což se ti může vymstít.
Ondřej Ryška
Profil
Komplikace... Přenastavil jsem pravidla v iptables tak aby bylo vše ve výchozím nastavení, tedy abych se zvenku nemohl vůbec (z žádné adresy) připojit. I po zadání iptables -L nastavení vypadalo tak jak jsem chtěl, tedy žádný povolený přístup zvenku přes port 3306. Takže nastavení tabulky proběhlo asi v pořádku. Ale v NetBeans se mi pořád dařilo se připojit k databázi. Tak jsem si myslel, že bude třeba restartovat. Restartoval jsem mysql server - nepomohlo, apache - nepomohlo. Tak sem si řekl, že bude asi třeba restartovat celý systém který běží na Ubuntu. Na googlu jsem jako první příkaz pro restart našel reboot ,resp. sudo reboot. Tak jsem ho zbrkle zadal. Něco málo se mi vypsalo na konzoli a potom už jen vyskočil error, putty se sekla, winscp taky vypsalo chybu spojení. Prostě jsem svůj vps shodil protože se mu asi nepodařilo znovu nabootovat. Teď to pořeším se známým který má na starosti celý server kde mi můj malý vps běžel, snad to půjde nahodit.. Mimochodem neví někdo čím to je že reboot tohle způsobil, a jestli je pro správce problém takový systém znovu nahodit? Já tipuji že možná nebyl nalezen zavaděč grub. Jinak jak se podaří server zprovoznit tak se v tomhle threadu vrátím s problematikou iptables..
DJ Miky
Profil
Pokud se pořád šlo připojit zvenčí odkudkoliv, tak je zřejmě nastaveno automatické propouštění paketů, pokud je nějaké pravidlo nezakáže. Z výpisu iptables -L to poznáš podle hodnoty policy u vstupní fronty, např.:
Chain INPUT (policy ACCEPT)
Pokud je tam ACCEPT, pak se standardně propustí vše. Musel bys tedy nastavit pravidla pro propuštění paketů z důvěryhodných adres a za ně přidat pravidlo pro zahození všech ostatních paketů (obdoba prvního pravidla v prvním příspěvku, jen místo -j ACCEPT by bylo -j DROP). Ještě jednou upozorňuji, že na pořadí záleží, takže toto obecné pravidlo musí být na konci seznamu.

Co se týče nenabootování serveru, příčin může být milion. Nechal jsi serveru nějaký čas (desítky sekund, můžou to být i minuty) nabootovat znovu? Tzn. nezkoušel jsi se připojovat ihned po odklepnutí rebootu? Grub zní nepravděpodobně. Musel bys s ním vědomě něco provést, sám od sebe nezmizí. Navíc taky záleží na druhu virtualizace, u těch „lehčích“ (na úrovni operačního systému, např. OpenVZ) se ve virtuálním stroji se zavaděčem vůbec nepracuje.
Amunak
Profil
Ondřej Ryška:
Taky je možné, že sis resetoval iptables tak, že nepustí vůbec žádný packet, takže, server vypadá jako offline a nepřipojíš se k němu, i když ve skutečnosti jede.

To, že ti putty vyerroruje po rebootu je normální - pro ní to vypadá, jako kdyby se nečekaně přerušilo spojení. Mělo by pak po dostatečné době, až se stroj zresetuje, stačit kliknout pravým do okna putty a vybrat "restart session", ono tě to pak samo připojí.
Ondřej Ryška
Profil
Co se týče iptables - jelikož se nemohu připojit na server tak se teď na nastavení iptables nepodívám. Ale jak bude server v provozu, tak to zkontroluju a pokud bude povolené to automatické propouštění paketů, tak nastavím pravidlo pro propouštění paketů z konkrétní adresy a zahození paketů ostatních, tak jak píšeš.

Problém s nabootováním - po zadání příkazu reboot jsem serveru nějaký čas nechal. Ale je dost možné že jsem po delším čekání stiskl nějakou klávesu a to možná bude příčina nenabootování. Moje zbrklost prokletá.. Tím grubem to asi teda nebude, nepamatuji si totiž že bych s ním cokoliv dělal. Teď budu čekat na odpověď správce a pak skusím dořešit nastavení toho firewallu.

Amunak:
Taky je možné, že sis resetoval iptables tak, že nepustí vůbec žádný packet, takže, server vypadá jako offline a nepřipojíš se k němu, i když ve skutečnosti jede.
Díky, to mě nenapadlo, i to je možné. I když server nefunguje ani pozadání ip nebo bindované domény do url v prohlížeči. Počkám na verdikt správce.
Amunak
Profil
Ondřej Ryška:
Jestli jde o virtuální server, mělo by být možné do virtualizéru nainstalovat/povolit KVM, aby se dalo na stroj připojit vzdáleně když to nijak jinak nejde. Pak by takovéhle zásahy byly možné bez správce.
Ondřej Ryška
Profil
Takže problém s bootováním nebyl z mé strany. Správce nechal namoutované instalační cd a po rebootu se tedy chtěl systém instalovat místo nabootovat.

Iptables jsem nastavil tak jak poradil DJ Miky. Teď se jde přihlásit pouze z adresy která je v ACCEPT pravidle.

Výpis iptables vypadá takto:

Chain INPUT (policy ACCEPT)
target     prot opt source               destination
ACCEPT     tcp  --  111.111.111.111       anywhere             tcp dpt:mysql
DROP       tcp  --  anywhere             anywhere             tcp dpt:mysql

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination

Díky za pomoc.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: