Egészen egyszerűnek tűnő dolgokba gabalyodok bele olykor, most is ez történt. Otthoni gép, ismerősnek adnék oda néhány dolgot. Legyen mondjuk vsftpd, ehhez sem értek, de Fedorában ez a default. Van egy LEDE router-em, így eléggé szabadon konfigurálható a környezet.Amikor NAT mögé kell átirányítást csinálni, ebből a leírásból indultam el. Van benne ugyan elírás, de attól még látszik a lényeg. Szerencsére a pasv_addr_resolve=YES
megadásával van lehetőség névfeloldás alkalmazására is.
Két problémám van jelenleg ezzel. Egy távoli gépre ssh-ztam, s onnan próbáltam ftp-zni magamhoz, ez lett a szomorú eredmény:
ftp hostneve.changeip.org
Connected to hostneve.changeip.org (1.2.3.4).
220 Welcome to hostneve FTP service.
Name (hostneve.changeip.org:locsemege): felhasznalo
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> ls
227 Entering Passive Mode (0,0,0,0,125,44).
ftp: connect: Connection refused
ftp> bye
221 Goodbye.
A másik gondom meg az, hogy a gép indulásakor nem indult el azonnal a vsftpd, manuálisan kellett felhergelnem, pedig a gép bekapcsolásakor már volt internet elérés, dinamikus dns, hiszen azt a router intézi.
journalctl -b -u vsftpd
-- Logs begin at Tue 2014-04-01 03:10:02 CEST, end at Sun 2017-05-07 12:31:35 CEST. --
May 07 11:42:07 hostneve systemd[1]: Starting Vsftpd ftp daemon...
May 07 11:42:07 hostneve systemd[1]: vsftpd.service: Control process exited, code=exited status=2
May 07 11:42:07 hostneve systemd[1]: Failed to start Vsftpd ftp daemon.
May 07 11:42:07 hostneve systemd[1]: vsftpd.service: Unit entered failed state.
May 07 11:42:07 hostneve systemd[1]: vsftpd.service: Failed with result 'exit-code'.
May 07 11:46:16 hostneve systemd[1]: Starting Vsftpd ftp daemon...
May 07 11:46:16 hostneve systemd[1]: Started Vsftpd ftp daemon.
May 07 11:53:12 hostneve vsftpd[17734]: pam_userdb(vsftpd_virtual:auth): user 'felhasznalo' granted access
Az is egy probléma, hogy saját magamtól nem tudok ftp-zni, pontosabban szólva a login még megy, de az ls
parancs után kapok egy
425 Security: Bad IP connecting.
üzenetet. Neten néztem, erre lenne workaround, de biztonsági okokból ellenjavallt, ha jól láttam.
Merre érdemes szimatolni a hiba után?
- 1550 megtekintés
Hozzászólások
Annyit tennék hozzá kiegészítésként, hogy localhost-ra ftp-zve működik az ls parancs.
Szerk.: Az authentikációt pedig nagyjából így oldottam meg.
tr '[:lower:]' '[:upper:]' <<<locsemege
LOCSEMEGE
- A hozzászóláshoz be kell jelentkezni
Az ftp ravasz állat. Nem elég neki a 21-es port (parancs csatorna), hanem kell neki egy másik is (adat csatorma)!
Az ls azon fekszik el, hogy a lista eredménye is az adat csatin sunnyogna át, csak éppen az adatcsati kihúzása nem sikerül. (Erre kapod a connection refused hibát.)
Megoldási lehetőségek:
a) maradsz a normál aktív módnál, kiengeded ftp szerver kapcsolatait a 20-as (ftp-data) portról - és piszokul szurkolsz, hogy a túloldalon ez működni fog. (Ha NAT mögött van, akkor minimum a jól belőtt ftp_conntrack modul, ami az ottani tűzfalon kell.)
b) átállsz passzív módra, ekkor az adat kapcsolatot is a kliens húzza ki - de ekkor az ehhez tartozó random portot is be kell tolnod. Ha nincs a te tűzfaladon jól belőtt ftp_conntrack, akkor fapadosan a következő megoldás javasolható: az ftp szerveren beállítod, hogy mely portok közül válogathat, mint passzív port, ezt a tartományt a lehető legkisebbre veszed (mondjuk 10 port), ezt a tartományt pedig gondolkodás nélkül belököd az ftp szervernek. Itt az sem utolsó, ha a szervernek meg lehet mondani valami "alias IP"-t, hogy "te kliens, ezen az IP-n fogsz látni", mert ha a protokollban a belső hálózati címet tolja át, hogy "ide csatlakozz vissza", az szintén nem lesz szerencsés.
Ez alapvetően elméleti útmutatás volt, a konkrét vsftp-s- és LEDE router konkrét konfigot neked kell ezek fényében csekkolnod.
- A hozzászóláshoz be kell jelentkezni
Nagy vonalakban ilyesmit csinálok épp. Ami számomra új, hogy kellenek ezek a modulok - bár már a neten találtam rá utalást -, egyelőre az nem világos, hogy magán a szerveren, vagy a szerver és a külvilág közötti natolós dobozkán kell ezt összerugdalnom. Ráadásul megcsináltam, hogy a 32000-32127-ig lévő tartományt beengedem. Vagy csak azt hiszem, hogy beengedem. De szerintem igen, én hiszek benne. Mindeközben az ftp szervert beszorítottam ebbe a tartományba.
tr '[:lower:]' '[:upper:]' <<<locsemege
LOCSEMEGE
- A hozzászóláshoz be kell jelentkezni
Beengedni kevés - továbbítani is kell. ;-)
A "problémát" az okozza, hogy a tűzfal NAT-ol, azaz csereberéli az IP címeket (sőt, portokat is (de igazából kell is neki)). Az ftp-conntrack modul értelmezi-, elemzi- és módosítja a parancscsatorna tartalmát, majd figyel a módosításoknak megfelelően. pl. amikor az adatkapcsolat paraméterei átsunnyognak a parancs csatornán, hogy "erre az IP-re, arra a portra csatlakozz az adatcsatorna kihúzásához", akkor a tűzfal az IP-t lecseréli a saját külső IP-jére, a portot egy saját szabad portjára - és megjegyzi, hogy ha az általa mondott IP:port párosra csomag jön, akkor azt úgy tolja be az ftp szervernek, hogy közben visszaállítja az eredetileg kért IP:port párost, így az ftp szerver igazából nem fogja tudni, hogy a csomag eredetileg nem hozzá lett címezve.
Conntrack hiányában marad az, hogy az ftp szerver által választható portokat kell lekorlátozni, de ha erre a portra csomag jön, akkor azt nem elég "beengedni", hanem "be is kell forwardolni".
iptables szinten:
- nem kell a filter tábla INPUT láncán beengedni, az OUTPUT láncán meg kiengedni (mert nem helyben lesz feldolgozva)
HANEM
- a filter tábla FORWARD láncán kell átengedni a forgalmat mindkét irányban, valamint
- a nat tábla PREOUTING láncán az erre a porttartományra érkező csomagokat továbbítani kell az ftp szerver felé
Elméletileg a 21-es parancs csatorna működéséhez is ezek a lépések voltak szükségesek...
Szóval a conntercknak a tűzfalon kell működnie - ott kell a connection tracking, hogy mit hova hogy csereberélt.
Hogy betoldónak-e a portok, azt viszont az ftp szerveren egy mezei tcpdump el tudja árulni.
- A hozzászóláshoz be kell jelentkezni
Elméletileg értem, gyakorlatilag meg nincs benne akkora rutinom, hogy belátható idő alatt megtaláljam a hibát, pedig közel vagyok a célhoz, érzem. Egyfelől localhost-ról megy - tudom, nem nagy cucc, mert a loop device-t nem szokás tűzfalazni -, másfelől távolról a login még megvan. Egyébként a LEDE router-en ezt csináltam:
config redirect
option target 'DNAT'
option src 'wan'
option dest 'lan'
option proto 'tcp'
option src_dport '21'
option dest_ip '192.168.0.12'
option dest_port '21'
option name 'ftp hostneve'
config redirect
option target 'DNAT'
option src 'wan'
option dest 'lan'
option proto 'tcp'
option src_dport '32000:32127'
option dest_ip '192.168.0.12'
option name 'ftp-passive hostneve'
tr '[:lower:]' '[:upper:]' <<<locsemege
LOCSEMEGE
- A hozzászóláshoz be kell jelentkezni
Szerintem az ftp_contrack modul nincs betöltve a tűzfalon. Zs szépen elmagyarázta, hogy miért kell. Szerintem ne kínlódj vele tovább, ssh-val jöjjön akinek kellenek a fájlok és használja az sftp-t vagy az scp-t. Ha windowsról jön használhatja a winscp programot és total commander jellegű felületen tud másolni.
- A hozzászóláshoz be kell jelentkezni
Már csak azt nem tudom, melyik modult kell beletennem a telepítő image-be, valamint ez betöltődik-e magától, vagy bele kell írnom egy modprobe-ot az rc.local-ba, netán van-e elegánsabb megoldás.
tr '[:lower:]' '[:upper:]' <<<locsemege
LOCSEMEGE
- A hozzászóláshoz be kell jelentkezni
Kell az alap conntrack és az adott protokollt ismerő conntarck_ftp. A fentebbi listában conntrack_ftp-t nem látok...
Másfelől viszont vagy conntarck, vagy statikusan betolod a passzív portokat - a kettő együtt fölösleges.
A mutatott tűzfal konfiguráció szerintem jó - azon viszont az adat kapcsolat kihúzása pofára eshet, hogy a kontrol csatornán az ftp szerver a saját, belső hálós IP címét adja meg a kliensnek. Tehát amit még érdemes lehet megnézni, hogy a vsftp-nek van-e olyan opciója, amellyel megmondható, hogy milyen IP címet küldjön a kliensnek passzív kapcsolat esetén.
- A hozzászóláshoz be kell jelentkezni
Na, ezért nem értem, mi a problémája, mert a vsftpd konfigjában meg lehet adni a külső címet, ráadásul névfeloldással együtt. Hasonlóképpen a port intervallum is megadható:
port_enable=YES
pasv_enable=YES
pasv_addr_resolve=YES
pasv_address=hostneve.changeip.org
pasv_min_port=32000
pasv_max_port=32127
tr '[:lower:]' '[:upper:]' <<<locsemege
LOCSEMEGE
- A hozzászóláshoz be kell jelentkezni
Igaz ugyan, hogy statikus konfigurációval már működik, de jó volna megcsinálni szebben. Abban tudsz segíteni, hogy mit kell tennem ahhoz, hogy az nf_conntrack_ftp modul megfeleően tegye a dolgát? Az lsmod alapján be van már töltve, gondolom, az iptables szabályokkal lehetne elmesélni neki, hogy a 21-es porton felsőbb rétegekben megbeszélt portcímet továbbítsa wan felől lan felé az adott lokális IP címre.
tr '[:lower:]' '[:upper:]' <<<locsemege
LOCSEMEGE
- A hozzászóláshoz be kell jelentkezni
Az iptables-nek van egy state modulja. Ez ott lehet játékos, hogy tudsz ilyet mondani: -m state --state ESTABLISHED,RELATED illetve NEW,ESTABLISHED,RELATED.
A kulcsszó a RELATED opció - ez azt mondja meg, hogy az eredeti kapcsolat ha újabb kapcsolatokat indít, akkor azokra is vonatkozzon ez a szabály.
Az ESTABLISHED esetén a már létező kapcsolatokra érvényes a szabály, NEW esetén csak az új kapcsolatokra, tehát arra a FORWARD láncra, amelyik a 21-es portot engedi befelé az ftp szerverhez, kell a NEW,ESTABLISHED,RELATED opció, a másik FORWARD szabály, amely a válaszokat engedi ki, elegendő, ha csak ESTABLISHED,RELATED paraméterrel fut.
- A hozzászóláshoz be kell jelentkezni
Tudom, hogy iszonyú megoldás, de nem atomtitkokról van szó, tehát inkább csak az a cél, hogy minden jött-ment ne nézzen bele a file-okba. Szóval workaround lehetne, ha egy http szervert indítanék, generálnék egy random karakterhalmaz alkönyvtárat, s a felette levőre pedig nem lenne r, csak x jog, így csak az tudja, melyik alkönyvtárban van a tartalom, akivel megosztom az elérési utat.
tr '[:lower:]' '[:upper:]' <<<locsemege
LOCSEMEGE
- A hozzászóláshoz be kell jelentkezni
Ha már váltasz és inkább http, akkor igazából ide bekonfigurálni némi authentikációt szintén nem pilóta vizsgás feladat...
Persze a könyvtárnév beállításaival trükközni sem túl bonyolult... :-)
- A hozzászóláshoz be kell jelentkezni
Úgy néz ki, tényleg a címmel van a baj. Ha engedem a
pasv_promiscuous=YES
opciót, akkor megy saját gépről. Távolról nem volt lehetőségem kipróbálni. Viszont ezt így nem szeretném, jó volna, ha a címek ellenőrzésével is menne ez. Wireshark nem segített.
Szerk.: egy távoli gépről kipróbáltam, onnan még ez sem segít.
tr '[:lower:]' '[:upper:]' <<<locsemege
LOCSEMEGE
- A hozzászóláshoz be kell jelentkezni
Egy cseppet ez is gyanús nekem:
type=AVC msg=audit(1494187583.427:543): avc: denied { write } for pid=17497 comm="vsftpd" name="felhasznalo" dev="dm-1" ino=11141125 scontext=system_u:system_r:ftpd_t:s0-s0:c0.c1023 tcontext=unconfined_u:object_r:public_content_t:s0 tclass=dir permissive=0
tr '[:lower:]' '[:upper:]' <<<locsemege
LOCSEMEGE
- A hozzászóláshoz be kell jelentkezni
Az körvonalazódik, hogy ez lesz a megoldás:
listen_ipv6=NO
listen=YES
Szerk.: Ez volt a megoldás. Működik. :)
tr '[:lower:]' '[:upper:]' <<<locsemege
LOCSEMEGE
- A hozzászóláshoz be kell jelentkezni
A bevezetőben írtam:
A másik gondom meg az, hogy a gép indulásakor nem indult el azonnal a vsftpd, manuálisan kellett felhergelnem, pedig a gép bekapcsolásakor már volt internet elérés, dinamikus dns, hiszen azt a router intézi.
Az alábbit alkottam némi segítséggel. Létrehoztam egy /usr/local/lib/systemd/system/vsftpd.service.d/config_vsftpd.conf
file-t az alábbi tartalommal:
[Service]
RestartSec=10
Restart=on-failure
Ugyan fogalmam sincs, hogy az elején mitől hasal el - szerintem valmi függőség, talán tűzfal, de lehet, hogy a PAM-hoz kell valami -, de 10 másodperccel később már gond nélkül elindul:
journalctl -b -u vsftpd
-- Logs begin at Tue 2014-04-01 03:10:02 CEST, end at Mon 2017-05-08 12:09:30 CEST. --
May 08 11:59:30 hostneve systemd[1]: Starting Vsftpd ftp daemon...
May 08 11:59:31 hostneve systemd[1]: vsftpd.service: Control process exited, code=exited status=2
May 08 11:59:31 hostneve systemd[1]: Failed to start Vsftpd ftp daemon.
May 08 11:59:31 hostneve systemd[1]: vsftpd.service: Unit entered failed state.
May 08 11:59:31 hostneve systemd[1]: vsftpd.service: Failed with result 'exit-code'.
May 08 11:59:41 hostneve systemd[1]: vsftpd.service: Service hold-off time over, scheduling restart.
May 08 11:59:41 hostneve systemd[1]: Stopped Vsftpd ftp daemon.
May 08 11:59:41 hostneve systemd[1]: Starting Vsftpd ftp daemon...
May 08 11:59:41 hostneve systemd[1]: Started Vsftpd ftp daemon.
Szóval ne szidjátok a systemd-t, jó az! :)
tr '[:lower:]' '[:upper:]' <<<locsemege
LOCSEMEGE
- A hozzászóláshoz be kell jelentkezni
Az volt mar, hogy mire kell az FTP, amit mondjuk egy egyszeru scp vagy esetleg egy full extras sftp nem tud?
- A hozzászóláshoz be kell jelentkezni
Fogalmam sincs, hogy a másik félnek milyen oprendszere és kliense van. Viszont legrosszabb esetben a böngésző használható ftp kliensnek.
tr '[:lower:]' '[:upper:]' <<<locsemege
LOCSEMEGE
- A hozzászóláshoz be kell jelentkezni
Milyen oprendszerre nincs ssh kliens? Csak ugy tunodom, te tudod, mivel sz*patod magad :)
- A hozzászóláshoz be kell jelentkezni
szerintem itt nem magát szopatja, valahol úgy ragaszkodnak az "FTP"hez mint egy falat kenyérhez... FTP elérés van ?
Slusszpoénnak még beállítani se tudnak egy totalcmd-ben adott esetben. Sajnos. :)
- A hozzászóláshoz be kell jelentkezni
A feladat annyi, hogy ismerősnek adnék oda file-okat.
tr '[:lower:]' '[:upper:]' <<<locsemege
LOCSEMEGE
- A hozzászóláshoz be kell jelentkezni
http + basic auth + +Indexes ? Ha csak letölteni akar. Bár tény, az nem lesz olyan szépen "megnyitható" vagy tallózható, vagy F5-el másolható.
ps.: esetleg googledrive, onedrive megosztás?
- A hozzászóláshoz be kell jelentkezni
Már elkészült, működik, innentől kezdve pontosan 0 perc munka van vele. ;)
Szerk.: felhőt nem szeretem, minek tegyek egy idegen gépére bármit is.
tr '[:lower:]' '[:upper:]' <<<locsemege
LOCSEMEGE
- A hozzászóláshoz be kell jelentkezni
Tudom, hogy van, de egy parancssortól vélhetően megrémülő partnerről van szó, akit szeretnék megkímélni attól, hogy billentyűket kelljen nyomkodnia egymás után úgy, hogy abból valami értelmes parancs képződjék. :)
De már megy az ftp szerver a gépemen authentikációval, elhasalás esetén automatikus újraindulással együtt, s biztosítja a passzív elérést. Még az nf_conntrack_ftp modul használata, illetve a megfelelő iptables szabályok, vagy még inkább a LEDE konfig érdekelne ehhez, de ez már csak szépészet. Egy statikus port tartománnyal megy már magától.
tr '[:lower:]' '[:upper:]' <<<locsemege
LOCSEMEGE
- A hozzászóláshoz be kell jelentkezni