[Vyřešeno] Virtual FTP server

Mám pronajatý malý virtuální stroj, na kterém běží Fedora 15. Rád bych ho využil i jako FTP server. Část na wiki, věnovanou nastavení ftp, jsem sice viděl, ale moudrý z toho zrovna nejsem.

Předně mi není jasné (ani v případě různých návodů na ssh tunneling), jestli je nutná veřejná IP adresa, nebo to lze udělat jinak.

Pokud by někdo tuhle lahůdku věděl, budu rád.

Často mne totiž napadlo, že bych pro vzdálenou správu počítače rodičů používal X forwarding. Zatím bohužel musím stále spoléhat na naprosto pohodlný TeamViewer. Bez veřejné IP mi je ale přece doménové jméno počítače k ničemu, není-liž pravda?

Na první pohled tu motám jabka s hruškama, ale souvisí to, ne že ne :slight_smile:

Uf, to je komplikovaný. Chápu dobře, že dotaz je JEN o veřejné IP, je jedno jaká služba už tam běží, že? :slight_smile:

Takže: pokud se chceš na počítač dostat z jiné než vnitřní sítě (za NATem), pak potřebuješ veřejnou IP. Howgh.

Respektive ano, tunelování funguje, ale stejně se musíš z neveřejné IP dotunelovat … někam … na veřejnou. Stejně tak funguje i TeamViewer, který vytvoří tunel z neveřejného počítače na vlastní server a Ty se přes tento jejich server dostaneš ke vzdálené ploše.

Pokud máš malý virtuální stroj pronajatý, pak by měl být i s veřejnou IP, ne? Pro sebe si dávám úkol sepsat na wiki info o vsftpd, což je imho co do konfigurace jednodušší a co do robustnosti útlejší než proftpd. Aspoň bude na výběr.

Díky, ano, tak jsem to myslel. Je pravda, ze VP stroj má fixní adresu, takže bude patrně pevná. S tím TeamViewerem jsem si to taky tak nějak myslel, i když pořád nechápu, jak se z jejich serveru dostanu na stroj, který tu veřejnou stejně nemá :slight_smile:

Ano, ten návod se bude hodit! Díky

Dostanes se tam tak, ze nejdrive stroj, ktery nema verejnou IP adresu kontaktuje server, ktery verejnou IP ma, to same udelas ty ze sveho a server vam spojeni zprostredkuje. Jinak to totiz nejde. Iniciovat spojeni za NATem (network address translation) totiz muze jen ten kdo je za tim NATem. Z venku to normalne nejde (fakticky to jde, ale je to rekneme technika pruniku NATem a nikoli standardni zpusob pripojeni).

Mno, tak jsem zkoušel kde co, rád bych používal vsftpd (na CentOS 6).

Podle tohohle návodu:
http://www.server-world.info/en/note?os=CentOS_6&p=ftp&f=1

jsem sice službu rozběhnul, ale zvenčí se mi nedaří a nedaří na to připojit. Nemusí se ještě nějak speciálně upravit iptables? (To jsem zkusil taky, ale zatím se nevede.)

Podle tohohle návodu se to zdá být hračka:


…leč v iptables žádné podobné (a podle fór typické) RH pasáže nemám :frowning:

Rád bych prostě přístup ne-anonymous, jako user, hezky do /home nebo ještě lépe do přímo zvoleného adresáře.

Ten návod by se hodil :wink:

A nemyslete si, že na to přijdu!

Sypu si popel na hlavu, už jsem si založil účet na wiki, ale ještě nenašel čas tam něco sepsat :slight_smile:

S nedostupností začnu od začátku:

  • je server jinak dostupný (ping, jiné služby)?
  • fakt vsftpd běží? (service vsftpd status)
  • naslouchá, kde má? (netstat -nlp | grep vsftpd)
  • jede SELinux? Nepíše se něco do audit logu?
  • (konečně FW) zkus poslat výpisy:
  • iptables -L -v
  • cat /etc/sysconfig/iptables
  • cat /etc/sysconfig/iptables-config

Uf, víc mě zatím nenapadá…

Takže:

  1. ano, je
  2. ano, běží
  3. tcp 0 0 0.0.0.0:21 0.0.0.0:* LISTEN 9150/vsftpd
  4. selinux jede, v auditlogu žádná položka týkající se vsftpd není
  • iptables -L -v
    Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
    pkts bytes target prot opt in out source destination
    139K 207M ACCEPT all – any any anywhere anywhere state RELATED,ESTABLISHED
    21 1200 ACCEPT icmp – any any anywhere anywhere
    3 180 ACCEPT all – lo any anywhere anywhere
    0 0 ACCEPT tcp – any any anywhere anywhere state NEW tcp dpt:ssh
    4558 289K REJECT all – any any anywhere anywhere reject-with icmp-host-prohibited

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
0 0 REJECT all – any any anywhere anywhere reject-with icmp-host-prohibited

Chain OUTPUT (policy ACCEPT 71882 packets, 3908K bytes)
pkts bytes target prot opt in out source destination

  • cat /etc/sysconfig/iptables
    *filter
    :INPUT ACCEPT [0:0]
    :FORWARD ACCEPT [0:0]
    :OUTPUT ACCEPT [0:0]
    -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
    -A INPUT -p icmp -j ACCEPT
    -A INPUT -i lo -j ACCEPT
    -A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT
    -A INPUT -j REJECT --reject-with icmp-host-prohibited
    -A FORWARD -j REJECT --reject-with icmp-host-prohibited
    COMMIT

  • cat /etc/sysconfig/iptables-config

Load additional iptables modules (nat helpers)

Default: -none-

Space separated list of nat helpers (e.g. ‘ip_nat_ftp ip_nat_irc’), which

are loaded after the firewall rules are applied. Options for the helpers are

stored in /etc/modprobe.conf.

IPTABLES_MODULES=""

Unload modules on restart and stop

Value: yes|no, default: yes

This option has to be ‘yes’ to get to a sane state for a firewall

restart or stop. Only set to ‘no’ if there are problems unloading netfilter

modules.

IPTABLES_MODULES_UNLOAD=“yes”

Save current firewall rules on stop.

Value: yes|no, default: no

Saves all firewall rules to /etc/sysconfig/iptables if firewall gets stopped

(e.g. on system shutdown).

IPTABLES_SAVE_ON_STOP=“no”

Save current firewall rules on restart.

Value: yes|no, default: no

Saves all firewall rules to /etc/sysconfig/iptables if firewall gets

restarted.

IPTABLES_SAVE_ON_RESTART=“no”

Save (and restore) rule and chain counter.

Value: yes|no, default: no

Save counters for rules and chains to /etc/sysconfig/iptables if

‘service iptables save’ is called or on stop or restart if SAVE_ON_STOP or

SAVE_ON_RESTART is enabled.

IPTABLES_SAVE_COUNTER=“no”

Numeric status output

Value: yes|no, default: yes

Print IP addresses and port numbers in numeric format in the status output.

IPTABLES_STATUS_NUMERIC=“yes”

Verbose status output

Value: yes|no, default: yes

Print info about the number of packets and bytes plus the “input-” and

“outputdevice” in the status output.

IPTABLES_STATUS_VERBOSE=“no”

Status output with numbered lines

Value: yes|no, default: yes

Print a counter/number for every rule in the status output.

IPTABLES_STATUS_LINENUMBERS=“yes”

:slight_smile: Mno, zkouším to rozchodit na tomtéž místě, kde mi pure-ftpd před pár dny běhalo v debianu normálně a v pohodě, tudíž to musí být nastavením, ne tím, že bych si něco blbě myslel o tom serveru :slight_smile: Nevýhoda všech tutoriálů na webu je ta, že každý začíná s trochu jiným výchozím stavem systému, takže se to často liší v banalitě, ale to tady asi nemusím psát. Pozn.: zkoušeno na naprosto čerstvé instalaci CentOS 6.
Díky

Do /etc/sysconfig/iptables, hned za řádek "-A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT " doplň:


-A INPUT -m state --state NEW -m tcp -p tcp --dport 20 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 21 -j ACCEPT

a restartuj iptables. Tím si otevřeš potřebné porty (pro aktivní režim). Teď máš povolené jen SSH a ping.

Nezabralo tak úplně podle potřeb, zdá se ale, že to už bude věc dalšího softu, kterým se připojuju. Přihlásím se tam pomocí PuTTy. Pomocí Free Commandera ale ne (i když mám nastavený login a vše by mělo šlapat). No, zkusím ještě jiného klienta a třeba to bude stačit. Takže v podstatě vyřešeno, díky moc.

Duvod je v tom ze puzivas pasivni nebo aktivni rezim FTP. V jednom z rezimu se puzivaji pro pripojeni jeste jine porty, ovsem nahodne. Z toho duvodu taky ten rezim FTP uz temer nikdo nepodporuje.

Sice jsem četl o tom, že FTP není až tak bezpečné a že se od něj ustupuje, hodila by se ale nějaká jednoduchá alternativa. I když od čeho přesně se ustupuje, od FTP obecně? Vždyť to stejně budou pořád všichni používat min. pro zrcadla, ne?

Jinak jsem ještě nestačil dodat, že nakonec byl problém skutečně v SELinuxu, stačilo použít

setsebool ftp_home_dir on

a už to všechno jelo jako víno. Když jsem psal, že v putty server vidím, nedošlo mi, že se s ní připojuju na port 22, ne 21 :slight_smile:

To je klíčová informace, podobně jako nutnost přidat do /etc/sysconfig/iptables-config

IPTABLES_MODULES=“ip_conntrack_ftp”

Z návodů mi přišel vhod nejvíc tenhle: http://www.cyberciti.biz/tips/rhel-fedora-centos-vsftpd-installation.html

V souvislosti s tím jsem taky našel velmi pěkně sepsaný česky (ten výše uvedené neobsahuje, jako většina ostatních návodů), ale je docela obšírný včetně použití SSL: http://www.tachec.org/howto/vsftpd/introduction/

Jsem si říkal, jak se z putty připojuje na ftp :slight_smile: Super, že se nakonec vyřešilo.

Lepší (a bezpečnějš) než FTP je SFTP (přenos souborů přes SSH).
Ten režim, o kterém píše covex, je pasivní - a je pravda, že se nepoužívá nějak moc, ale pořád dobře slouží uživatelům za FW nebo NAT.

Aby to nebylo tak jednoduché, ještě jsem přišel na jeden menší problém se SELinuxem. Na webu jsem našel, že někdo používá volbu:

setsebool ftp_home_dir=1

Samotný troubleshooter SELinuxu mi doporučuje:

setsebool -P ftp_home_dir 1

Jediné, co mi funguje, je

setsebool ftp_home_dir on
setsebool ftp_home_dir 1

Když použiju volbu -P, příkaz zůstane viset, dokud ho neukončím (a pravidlo se nezmění). Dělám něco blbě, nebo funguje blbě SELinux? :smiley:

Mno :slight_smile: a když už jsme u těch úspěchů, fakt rád bych věděl, jak nastavit, aby fungovalo, anon_root… Ať tam dám cokoliv, pořád mě to hází do /var/ftp a hotovo. Rád bych měl třeba adresář /home/FTP_public a v tom ať je root pro anonyma. Jak se zdá, něco mi asi chybí a anon_root=/home/FTP_public prostě nefachá.

“man setsebool” ti vysvetli volbu -P. To viseni nebude viseni, ale regenerace pravidle u SELinux coz bohuzel trva DOST dlouho.

Aha, to mě nenapadlo, že to trvá tak dlouho. Naštěstí by -P mohlo znamenat Permanent nebo tak, se to nabízí :slight_smile:

Zatím to vypadá, že to pomohlo. Stejně tak jaksi najednou chodí i chroot tam, kam chci. Nevím, jestli to může být tím, že se hlásím z jiného stroje. Ještě to vyzkouším z toho původního a případně dám vědět (doufám, že už ne :slight_smile: )

Díky moc oběma

P. S. Ještě mi to nedá, abych nezanechal poznámku k SELinuxu. Pěkně to může zamotat hlavu. Jako letitý uživatel Ubuntu/Debianu se s ním setkávám po malých krůčcích. Zatím vím jen to, že je to setsakra komplexní a proto to může taky dost často zlobit (naše závity). Po zprovoznění jsem si všiml, že v pohodě procházím na FTP adresářovou strukturu, ale ne a ne vidět soubory. Našel jsem proto na webu spásný příkaz restorecon -RF /xyz/xyz, pomohlo to.

Ano selinux je hydra. Nemam ho moc rad. Jakmile chces delat neco na co vychozi pravidla nemysly, je to velmi bolestive. Dan Walsh sice resi chyby/upravy pomerne rychle, ale presto treba do dnes nefunguje poradne se Selinuxem Munin a jine ne zrovna bezne aplikace. Navic at si rika kdo chce co chce, obcas dokonce ani nejsou zadne hlasky v audit.log a okoli. Proste neco nefunguje a neexistuje k tomu dohledatelny duvod. Dalsi prusvih je, ze kdyz prepnes do permissive modu, je v logu casto enormni pocet hlasek, od kazdeho prdu neco, pritom to muze, ale taky nemusi mit jeden duvod. A pokud bych mel pokracovat, tak restorecon je taky dilo. Clovek pracne dokope neco aby to fungovalo, zapomene to zafixovat v pravidlech, nebo toho udela jen cast, protoze zkousi vsechno mozne, a po case to najednou prestane fungovat. Duvod? Restorecond obnovil pravidla z vychozi politiky.

Kapitola sama pro sebe je i generovani pravidel pomozi audit2allow, ktere je casto doporucovane. Ne jen ze to trva priserne dlouho (i kdyz na to byl nejaky zlepsovak v F15), ale navic tim clovek muze vytvorit pravidla, jejichz smysl je velmi obtizne pochopit a mnohdy mohou znamenat bezpecnostni riziko.

Nevim jak funguje AppArmor v Ubuntu, ale selinux snad opravdu jen tam kde to je nezbytne. Rozhodne ne na pocitac, kde clovek kazdou chvili s necim experimentuje, nebo ho potrebuje vyrazne ohnout.

SELinux asi nemá být primárně určen k tomu, aby byl nasazován na počítačích, kde je třeba něco “ohýbat”. To, že ho tvůrci Fedory cpou na desktop běžných Frantů uživatelů je dáno tím, že Fedora je platforma RedHatu pro pokusy na živých dobrovolnících a ne komunitní distro. Pro servery je naopak SELinux naprosto bezkonkurenční a chrání systém jak před útoky, tak před nedovzdělanými administrátory. Je to náročná milenka, panovačná, neposlušná a záhadná - ale úžasná.