Všem čtenářkám a čtenářům AbcLinuxu krásné Vánoce.
Byla vydána nová verze 7.0 linuxové distribuce Parrot OS (Wikipedie). S kódovým názvem Echo. Jedná se o linuxovou distribuci založenou na Debianu a zaměřenou na penetrační testování, digitální forenzní analýzu, reverzní inženýrství, hacking, anonymitu nebo kryptografii. Přehled novinek v příspěvku na blogu.
Vývojáři postmarketOS vydali verzi 25.12 tohoto před osmi lety představeného operačního systému pro chytré telefony vycházejícího z optimalizovaného a nakonfigurovaného Alpine Linuxu s vlastními balíčky. Přehled novinek v příspěvku na blogu. Na výběr jsou 4 uživatelská rozhraní: GNOME Shell on Mobile, KDE Plasma Mobile, Phosh a Sxmo.
Byla vydána nová verze 0.41.0 multimediálního přehrávače mpv (Wikipedie) vycházejícího z přehrávačů MPlayer a mplayer2. Přehled novinek, změn a oprav na GitHubu. Požadován je FFmpeg 6.1 nebo novější a také libplacebo 6.338.2 nebo novější.
Byla vydána nová verze 5.5 (novinky) skriptovacího jazyka Lua (Wikipedie). Po pěti a půl letech od vydání verze 5.4.
Byla vydána nová verze 5.4.0 programu na úpravu digitálních fotografií darktable (Wikipedie). Z novinek lze vypíchnout vylepšenou podporu Waylandu. Nejnovější darktable by měl na Waylandu fungovat stejně dobře jako na X11.
Byla vydána beta verze Linux Mintu 22.3 s kódovým jménem Zena. Podrobnosti v přehledu novinek a poznámkách k vydání. Vypíchnout lze, že nástroj Systémová hlášení (System Reports) získal mnoho nových funkcí a byl přejmenován na Informace o systému (System Information). Linux Mint 22.3 bude podporován do roku 2029.
GNU Project Debugger aneb GDB byl vydán ve verzi 17.1. Podrobný přehled novinek v souboru NEWS.
Josef Průša oznámil zveřejnění kompletních CAD souborů rámů tiskáren Prusa CORE One a CORE One L. Nejsou vydány pod obecnou veřejnou licenci GNU ani Creative Commons ale pod novou licencí OCL neboli Open Community License. Ta nepovoluje prodávat kompletní tiskárny či remixy založené na těchto zdrojích.
Nový CEO Mozilla Corporation Anthony Enzor-DeMeo tento týden prohlásil, že by se Firefox měl vyvinout v moderní AI prohlížeč. Po bouřlivých diskusích na redditu ujistil, že v nastavení Firefoxu bude existovat volba pro zakázání všech AI funkcí.
Já vím, že už se to mnohokrát řešilo. Vím, jak to funguje, a proto jsem v koncích. Potřebuju zprovoznit pasivní FTP na můj stroj. A iptables samozřejmě nepovolí datové spojení.
Kernel 2.6.24 (TuxOnIce, Gentoo) byl zkompilován s parametry:
CONFIG_NF_CONNTRACK_ENABLED=y
CONFIG_NF_CONNTRACK=y
# CONFIG_NF_CONNTRACK_MARK is not set
# CONFIG_NF_CONNTRACK_EVENTS is not set
# CONFIG_NF_CONNTRACK_AMANDA is not set
CONFIG_NF_CONNTRACK_FTP=y
# CONFIG_NF_CONNTRACK_SANE is not set
# CONFIG_NF_CONNTRACK_TFTP is not set
CONFIG_NETFILTER_XT_MATCH_CONNTRACK=y
CONFIG_NF_CONNTRACK_IPV4=y
# CONFIG_NF_CONNTRACK_PROC_COMPAT is not set
CONFIG_IP_NF_IPTABLES=y
A iptables samozřejmě obsahují tento řádek:
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
Nemáte někdo nápad, proč datové pasivní FTP spojení přes firewall neprojde?
CONFIG_NF_CONNTRACK_FTP=y
modprobe ip_nat_ftp
modprobe ip_conntrack_ftp
Pak ti pujde aktivni i pasivni spojeni.... Pouze FTP, ne FTPs (FTP over SSL)
modprobe mi samozřejmě nepomůže - nemám ty moduly, když je to v jádře. Spíš mě překvapuje modul ip_nat_ftp. Co přesně tenhle modul dělá? Která volba způsobí, že se zkompiluje? Stroj běží na veřejné IP, ale nepřijde mi to podstatné.
Myslíte si, že bych měl zakompilovat do kernelu i podporu pro NAT? Nechápu, proč by to s tím mělo souviset...
Brzdí to samozřejmě iptables - jakmile je vypnu, vše funguje.
Když zkusím připojení z telnetu, tak vše funguje dle očekávání - přihlásím se, pošlu PASV paket, na ten mi přijde odpověd, ale iptables neotevřou port pro ono datové spojení. Přitom server poslouchá - v netstat jde otevřený port vidět.
/proc/net/nf_conntrack* neboo tak přibližně, jestli tam není něco vidět.
Ha! Tady doslo ke zmene! V souboru /proc/net/nf_conntrack se nahle objevilo nekolik radku zhruba tehle podoby:
ipv4 2 tcp 6 431912 ESTABLISHED src=my.beauty.ip.addr dst=86.49.93.28 sport=46541 dport=6667 packets=118 bytes=7137 src=86.49.93.28 dst=and.a.gain.ip sport=6667 dport=46541 packets=114 bytes=13148 [ASSURED] use=1
U vsech radku je napsano ESTABLISHED, jen u dvou je TIME_WAIT. Ja jsem si rikal, ze ESTABLISHED mi asi funguje, kdyz muzu vesele brouzdat po webu... Jinak bootuju spravny kernel.
Diky... Ano, ESTABLISHED spojeni na port 21 v souboru nf_conntrack je. Prikazove spojeni funguje naprosto bez problemu.
Zapnout logovani je urcite dobry napad - pokud pridam pravidlo, ktere zaloguje a zahodi vsechny spojeni na port >1024. Ted mam samozrejme vsechno zahazovane implicitnim pravidlem. Nevite nekdo, jak toto logovani zapnout?
Jen se bojim, ze v pripadnem logu uvidim presne to, co se da cekat - iptables zakazaly spojeni, protoze jim nedoslo, ze se jedna o RELATED spojeni, ale mysli si, ze je NEW.
Vsiml jsem si ale, ze v iptables existuji krome match state (RELATED, ESTABLISHED) jeste match conntrack (RELATED, ESTABLISHED). Nevite nekdo, jaky je mezi nimi rozdil? Pro jistotu uvedu cely radek iptables:
iptables -A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
# ftpd chain -N S_FTP -F S_FTP -A S_FTP -p tcp -m state --state NEW -m tcp --dport 21 -j ACCEPT # ftpd (passive) -A S_FTP -p tcp -m state --state ESTABLISHED,RELATED -m multiport --dports 49152:49162 -j ACCEPT ------------- # ftpd -A INPUT -p tcp -m state --state NEW -m tcp --dport 21 -j S_FTP # ftpd (passive, data) #-A INPUT -p tcp -m state --state NEW -m multiport -m multiport --sports 1024: --dports 49152:49162 -j S_FTP -A INPUT -p tcp -m state --state ESTABLISHED,RELATED -m multiport --dports 49152:49162 -j S_FTP # ftp (pasive, data) -A INPUT -p tcp -m state --state ESTABLISHED -m tcp --sport 1024: --dport 1024: -j ACCEPT ----------------- # ftpd (active, data) -A OUTPUT -p tcp -m state --state ESTABLISHED,RELATED -m tcp --sport 20 --dport 1024: -j ACCEPT # ftp -A OUTPUT -p tcp -m state --state NEW -m tcp --dport 21 -j ACCEPT # ftp (active, data) -A OUTPUT -p tcp -m state --state ESTABLISHED,RELATED -m tcp --dport 20 -j ACCEPT # ftp (passive, data) -A OUTPUT -p tcp -m state --state ESTABLISHED,RELATED --sport 1024: --dport 1024: -j ACCEPT -----------------#ftpd jsou pravidla týkající se serveru, #ftp týkající se klienta. Filtruji i output, ale to se dá vyhodit. Pokud chcete nějakou informaci lognout, tak před to pravidlo napíšete dané pravidlo ještě jednou, pričemž místo
-j ACCEPT_OR_SOdáte
-j LOG -m limit --limit 1/minute --limit-burst 1 --log-level debug --log-prefix "iptables: ftp: wtf "a následovat bude to pravidlo. Pozor, délka textu prefixu je omezená (asi 16 znaků nebo tak nějak, už nevím). Pokud si pak dáte tail -f /var/log/messages tak se vám objeví informace že nějaký paket dorazil v iptables až "tam" (jen jeden paket za minutu, ale to lze změnit), případně pokud je těch logů více, tak se vám objeví v pořadí v jakém paket lezl... To zakomentované pravidlo (tedy NEW místo RELATED/ESTABLISHED) mi tuším fungovalo právě pro pasivní spojení ještě než jsem tam dal právě conntracking.
# LOG -A INPUT -m limit --limit 5/minute --limit-burst 5 -j LOG --log-level debug --log-prefix "iptables: undefined input: " -A FORWARD -m limit --limit 5/minute --limit-burst 5 -j LOG --log-level debug --log-prefix "iptables: undefined forward: " -A OUTPUT -m limit --limit 5/minute --limit-burst 5 -j LOG --log-level debug --log-prefix "iptables: undefined output: " # input #-A INPUT -j REJECT --reject-with icmp-port-unreachable #-A INPUT -j DROP # output -A OUTPUT -j ACCEPT #-A OUTPUT -j DROPPřičemž neznámý output explicitně povoluji, neznámý input po lognutí neřeším, protože mám na začátku default policy jako DROP...
modprobe capability
iptables -A INPUT -i ${WAN} -p tcp --dport 21 -j ACCEPT
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT je obecnější než třeba -A INPUT -m state --state RELATED,ESTABLISHED -m multiport --sports 1024: --dports 65500:65535 -j ACCEPT a než otevření portů bez vazby na conntrack je přecejen lepší ten conntrack rozchodit, on se hodí i pro další nastavení v iptables...
Prikazove spojeni samozrejme projdeNeviděl bych to jako samozřejmost. Zvlášť pokud se někde vyskytuje NAT. Pokud nejde conntrack (nebo je conntrack tabulka prázdná), nebude celkem logicky fungovat nic, co na conntracku závisí. Ještě se docela hodí nechat iptables pakety nejen zahazovat ale i logovat, tím se přijde na další případné probémy (a případné hyby v iptables). Ještě je dobré vidět výstup z firewall skriptu s příkazama iptables, jestli některý neselhal. Případně použít přepínač -L.
NAT se nade mnou nevyskytuje, dokonce mam verejnou IP.
Prikazove spojeni zkratka projde - ve firewallu je povoleny port 21, a kdyby neproslo, tak uz bych se sel asi obesit...
Prave me zarazilo, jaktoze mi funguje detekce ESTABLISHED spojeni (muzu brouzdat po webu), kdyz soubor /proc/net/nf_conntrack byl prazdny. Podival jsem se tam znovu, a, jak uz jsem psal drive, ted je v nem nekolik ESTABLISHED spojeni.
Netusite, kde bych mohl zapnout logovani paketu v iptables? Porad premyslim jeste nad volbou CONFIG_NETFILTER_NETLINK_LOG v kernelu, kterou mam zatim vypnutou.
iptables -L vypisou presne ta pravidla, ktera bych cekal - tedy povoleny port 21 a RELATED i ESTABLISHED spojeni.
Jenom taková poznámka. Kdysi jsem kompiloval jádro a dal nějakou "věc" přímo do jádra a ona překvapivě nefungovala. Jako modul fungovala v pohodě.
Přeju hodně štěstí.
Tak, problém je snad vyřešen.
Samozřejmě byl problém v conntrack - nevěděl jsem, co musím do kernelu zakompilovat, aby fungoval. Jedná se primárně o moduly nf(ip)_conntrack_ftp a nf_nat_ftp. Protože modul nf_conntrack_ftp sleduje spojení implicitně jen na portu 21, je nutné jej zkompilovat jako modul a do /etc/modules.conf(či snad jako parametr jádra) mu předat jako parametr port, na kterém FTP server běží.
Modul nf_nat_ftp asi potřeba není.
Díky všem za reakce.
Tiskni
Sdílej: