Nie jesteś zalogowany.
Jeśli nie posiadasz konta, zarejestruj je już teraz! Pozwoli Ci ono w pełni korzystać z naszego serwisu. Spamerom dziękujemy!
Prosimy o pomoc dla małej Julki — przekaż 1% podatku na Fundacji Dzieciom zdazyć z Pomocą.
Więcej informacji na dug.net.pl/pomagamy/.
Witam, szukam odpowiednika w Linuxie mod_portacl znanego z mac we FreeBSD. Chcę móc określić, które porty może bindować dany użytkownik. Nie jest to wykonalne przez iptables (tak myślę), ponieważ dany port przez działającą aplikację będzie już zablokowany w socket, jedynie ruch nie będzie mógł opuścić serwera.
Ostatnio edytowany przez HaPe (2014-07-09 18:51:13)
Offline
Da się przez Selinuxa, albo Grsecurity.
Jak chcesz konfigurować system cały tydzień, to SElinux, jak cały dzień, to Grsecurity ACL. :D
Poza tym netiflter starcza w zupełności, w nim możesz każdemu użytkownikowi INPUT i OUTPUT potraktować osobno, a na serwerach zazwyczaj każdy demon sieciowy wisi z uprawnieniami innego użytkownika.
Do tego pojawił się support netfilter-cgroup, do wygodnego zarządzania procesami przez system Cgroup, ale support do Netfiltera w Cgroup na razie nie działa, także trzeba trochę poczekać.
Dodatkowo teraz jest migracja z iptables na nftables, stad się troszkę bajzlu zrobiło.
Narzędzi CI wystarczy na pewno, chociaż robi się to zupełnie inaczej, niż w w BSD.
Nie jest to wykonalne przez iptables (tak myślę), ponieważ dany port przez działającą aplikację będzie już zablokowany w socket
Nftables chyba przy blokadzie w ogóle blokuje bindowanie portu,
i da się to ustawić per/user.
EDIT:
W Grsecu poza ACL jest też prostsza opcja:
CONFIG_GRKERNSEC_SOCKET=y CONFIG_GRKERNSEC_SOCKET_ALL=y CONFIG_GRKERNSEC_SOCKET_ALL_GID=901 CONFIG_GRKERNSEC_SOCKET_CLIENT=y CONFIG_GRKERNSEC_SOCKET_CLIENT_GID=903 CONFIG_GRKERNSEC_SOCKET_SERVER=y CONFIG_GRKERNSEC_SOCKET_SERVER_GID=905
Zarządza się tym potem przez sysctl i grupy systemowe.
Sznurek:
http://en.wikibooks.org/wiki/Grsecurity/Appendix/Gr … kets_to_group
Do tego jest też Capabilities:
https://www.gentoo.org/proj/pl/hardened/capabilities.xml
Pozdro
;-)
Ostatnio edytowany przez Jacekalex (2014-07-09 08:03:45)
Offline
Dzięki za info, jak coś to jeszcze będę pytał.
Odnośnie acl w grsec, znam to (konfigurowalne w menuconfig), lecz tutaj nie jestem w stanie zdefiniować konkretnych portów.
A z iptables/nftables itd. zobaczę jak jest z tym bindowaniem, wpierw danemu userowi zablokuje dany port, a potem spróbuje na nim odpalić serwer www pythona.
Ostatnio edytowany przez HaPe (2014-07-09 13:31:23)
Offline
Jacekalex napisał(-a):
Do tego pojawił się support netfilter-cgroup, do wygodnego zarządzania procesami przez system Cgroup, ale support do Netfiltera w Cgroup na razie nie działa, także trzeba trochę poczekać.
Cgroup w iptables działa od grudnia 2013 roku. Wystarczyło skorzystać z git-a i gałęzi iptables - next-3.14. Z resztą w maju została połączona z główną.
https://git.netfilter.org/iptables/commit/?id=01dcf … e8f9996774d21
Offline
admetus napisał(-a):
Jacekalex napisał(-a):
Do tego pojawił się support netfilter-cgroup, do wygodnego zarządzania procesami przez system Cgroup, ale support do Netfiltera w Cgroup na razie nie działa, także trzeba trochę poczekać.
Cgroup w iptables działa od grudnia 2013 roku. Wystarczyło skorzystać z git-a i gałęzi iptables - next-3.14. Z resztą w maju została połączona z główną.
https://git.netfilter.org/iptables/commit/?id=01dcf … e8f9996774d21
To faktycznie bardzo dobra nowina, niestety, mam z nią taki problem, że git.netfilter.org mnie najwyraźniej nie lubi :D
* Fetching git://git.netfilter.org/iptables.git ... fatal: unable to connect to git.netfilter.org: git.netfilter.org[0: 150.214.142.167]: errno=Connection timed out git fetch git://git.netfilter.org/iptables.git +HEAD:refs/git-r3/HEAD fatal: unable to connect to git.netfilter.org: git.netfilter.org[0: 150.214.142.167]: errno=Connection timed out
Od co najmniej kwietnia mam podobny cyrk (próbowałem po zainstalowaniu jajka 3.14).
Pozdro
;-)
Ostatnio edytowany przez Jacekalex (2014-07-09 15:37:14)
Offline
Proponuję tak:
git clone git://git.netfilter.org/iptables.git
Nic mi nie wiadomo o żadnych blokadach ip jakie stosuje netfilter.org, ale możesz z konfigurować git-a, tak aby korzystał z proxy. Jeśli jakimś cudem trafiłeś na czarną listę. Jedna linijka w configu (gitproxy).
Adres ftp do codziennych wydań.
ftp://ftp.netfilter.org/pub/iptables/snapshot/
lub możesz pobrać ostatni snapshot z pomocą webowego interfejsu (cgit).
https://git.netfilter.org/iptables/
Offline
Ja też nie widzę żadnych blokad, ale coś gitowi nie pasuje, przy czym do innych źródeł muszę sobie naskrobać ebuilda.
Choć z drugiej strony iptables-1.4.21 mam normalnie dostępny, ale na jaju >3.13 za Chiny Ludowe się nie chciał skompilować, dlatego mam starszą wersję 1.4.20.
Ale WTOPA:
FF nie potrafił otworzyć
ftp.netfilter.org/pub/iptables/snapshot/
A ja po prostu zapomniałem, że mam ustawionego peerblocka.
host ftp.netfilter.org ftp.netfilter.org has address 150.214.142.167 ipset test peerblock 150.214.142.167 150.214.142.167 is in set peerblock.
Dzięki za ten adres ftp.
Pozdro
xD
Offline
Niestety, ale iptables nie blokuje bindowania portu, jedynie blokuje ruch.
Offline
Oczywiście, że nie blokuje bindowania portu, taką funkcjonalność zauważyłem w nftables - kiedy dałem drop na output ipv6 - ping nie mógł otworzyć socketu.
Z iptables i cgroup na razie porażka:
Skompilowany prosto z git, pokazuje wersję
iptables v1.4.21
A tymczasem:
iptables -m cgroup --help iptables v1.4.21: Couldn't load match `cgroup':No such file or directory Try `iptables -h' or 'iptables --help' for more information.
Także to jeszcze troszkę potrwa.
CONFIG_NETFILTER_XT_MATCH_CGROUP=y
w jaju włączony na 100%.
Jajo 3.15.4-grsec.
Ostatnio edytowany przez Jacekalex (2014-07-09 19:19:48)
Offline
A przypadkiem zapytania icmp nie są realizowane z uprawnieniami roota?
Offline
Próbowałem z roota, takie rzeczy zawsze sprawdzam w pierwszej kolejności.
Offline
Jacekalex napisał(-a):
Z iptables i cgroup na razie porażka:
Skompilowany prosto z git, pokazuje wersjęKod:
iptables v1.4.21A tymczasem:
Kod:
iptables -m cgroup --help iptables v1.4.21: Couldn't load match `cgroup':No such file or directory
Czy Ty jesteś poważny? Co te pliki robią w głównej gałęzi iptables?
https://git.netfilter.org/iptables/plain/extensions/libxt_cgroup.c
https://git.netfilter.org/iptables/plain/extensions/libxt_cgroup.man
Ciekaw jestem jakim to sposobem u mnie się znalazło? Może krasnoludki przyniosły?
Przypominam sklonowałem iptables z gita, przełączyłem się na branch 'next-3.14'. Wydałem polecenie ./configure --prefix=/opt/iptables-git && make && make install.
ls -l /opt/iptables-git/lib/iptables/libxt_cgroup.so -rwxr-xr-x 1 root root 7524 19-04-2014 00:17 /opt/iptables-git/lib/iptables/libxt_cgroup.so
/opt/iptables-git/bin/iptables -A OUTPUT -m cgroup --cgroup 1 -j DROP /opt/iptables-git/bin/iptables -L OUTPUT -n -v --line-numbers Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes) num pkts bytes target prot opt in out source destination 1 0 0 DROP all -- * * 0.0.0.0/0 0.0.0.0/0 cgroup 1 /opt/iptables-git/bin/iptables -D OUTPUT 1
Offline
Miałem tu iptables z git, w helpie było widać moduł cgroup, w regułach nie, a przy dodawaniu dowolnej reguły pluł się o konfig /etc/xttables/connlabel.conf
cannot open connlabel.conf, not registering 'connlabel' match: No such file or directory
Teraz też mam wersję z git, tylko jakichś starszy commit, bez cgroup, zainstalowany z tego ebuilda:
http://data.gpo.zugaina.org/srcshelton/net-firewall/iptables-nftables/
Nie pali się, jak zechcę, to połączenia wychodzące mogę obciąć grseciem, a z nową wersją ogniomurki poczekam, aż trafi pod strzechy, w Gentoo stabilna wersja w oficjalnym drzewku - to nie powinno potrwać długo, na razie to jest ebuild z prywatnego repozytorium.
Może też coś utrudnia grsec na poziomie kernela, albo wtyczki hardened/pax w gcc.
Zastanawiam się tylko, jaka jest różnica miedzy źródłami:
git://git.netfilter.org/iptables -tutaj cgroup jest, ale iptables u mnie wali błędem connlabel jak oszalały, przy dodawaniu kolejnych reguł.
git://git.netfilter.org/iptables.git tu jest jakiś commit bez łatki cgroup (instalacja z ebuilda ciągnie tą wersję).
Niby to samo repo, minimalna różnica w adresie, a ciągnie różne wersje?
Poczekam, aż Developerzy Gentoo wezmą sprawę na tapetę, może tam trzeba jakichś ekstra łatek.
W każdym razie dzięki za zaangażowanie.
EDIT:
Niezłe jaja, odświeżylem źródła z git, ponowna kompilacja ruszyło, ale z pewnymi oporami, sprawdzałem zmieniając parametr net_cls.classind, i nie działało, aż w końcu ruszyło dla FF, podejrzewam, że zmiany w ustawieniach cgroup są aktualizowane w jakimś interwale czasowym, nie od razu.
Tylko przy konfigurowaniu skryptem FW fajnie to wygląda:
~# mynetwork ************************* Ustawiam Firewalla *************************** cannot open connlabel.conf, not registering 'connlabel' match: Success cannot open connlabel.conf, not registering 'connlabel' match: Success cannot open connlabel.conf, not registering 'connlabel' match: Success cannot open connlabel.conf, not registering 'connlabel' match: Success cannot open connlabel.conf, not registering 'connlabel' match: Success cannot open connlabel.conf, not registering 'connlabel' match: Success cannot open connlabel.conf, not registering 'connlabel' match: Success cannot open connlabel.conf, not registering 'connlabel' match: Success cannot open connlabel.conf, not registering 'connlabel' match: Success cannot open connlabel.conf, not registering 'connlabel' match: Success cannot open connlabel.conf, not registering 'connlabel' match: Success cannot open connlabel.conf, not registering 'connlabel' match: Success cannot open connlabel.conf, not registering 'connlabel' match: Success cannot open connlabel.conf, not registering 'connlabel' match: Success cannot open connlabel.conf, not registering 'connlabel' match: Success cannot open connlabel.conf, not registering 'connlabel' match: Success cannot open connlabel.conf, not registering 'connlabel' match: Success cannot open connlabel.conf, not registering 'connlabel' match: Success cannot open connlabel.conf, not registering 'connlabel' match: Success cannot open connlabel.conf, not registering 'connlabel' match: Success cannot open connlabel.conf, not registering 'connlabel' match: Success cannot open connlabel.conf, not registering 'connlabel' match: Success cannot open connlabel.conf, not registering 'connlabel' match: Success cannot open connlabel.conf, not registering 'connlabel' match: Success cannot open connlabel.conf, not registering 'connlabel' match: Success cannot open connlabel.conf, not registering 'connlabel' match: Success cannot open connlabel.conf, not registering 'connlabel' match: Success cannot open connlabel.conf, not registering 'connlabel' match: Success cannot open connlabel.conf, not registering 'connlabel' match: Success cannot open connlabel.conf, not registering 'connlabel' match: Success cannot open connlabel.conf, not registering 'connlabel' match: Success cannot open connlabel.conf, not registering 'connlabel' match: Success cannot open connlabel.conf, not registering 'connlabel' match: Success cannot open connlabel.conf, not registering 'connlabel' match: Success cannot open connlabel.conf, not registering 'connlabel' match: Success cannot open connlabel.conf, not registering 'connlabel' match: Success cannot open connlabel.conf, not registering 'connlabel' match: Success cannot open connlabel.conf, not registering 'connlabel' match: Success cannot open connlabel.conf, not registering 'connlabel' match: Success cannot open connlabel.conf, not registering 'connlabel' match: Success cannot open connlabel.conf, not registering 'connlabel' match: Success cannot open connlabel.conf, not registering 'connlabel' match: Success cannot open connlabel.conf, not registering 'connlabel' match: Success cannot open connlabel.conf, not registering 'connlabel' match: Success cannot open connlabel.conf, not registering 'connlabel' match: Success cannot open connlabel.conf, not registering 'connlabel' match: Success cannot open connlabel.conf, not registering 'connlabel' match: Success cannot open connlabel.conf, not registering 'connlabel' match: Success cannot open connlabel.conf, not registering 'connlabel' match: Success cannot open connlabel.conf, not registering 'connlabel' match: Success cannot open connlabel.conf, not registering 'connlabel' match: Success cannot open connlabel.conf, not registering 'connlabel' match: Success cannot open connlabel.conf, not registering 'connlabel' match: Success cannot open connlabel.conf, not registering 'connlabel' match: Success cannot open connlabel.conf, not registering 'connlabel' match: Success cannot open connlabel.conf, not registering 'connlabel' match: Success cannot open connlabel.conf, not registering 'connlabel' match: Success cannot open connlabel.conf, not registering 'connlabel' match: Success cannot open connlabel.conf, not registering 'connlabel' match: Success cannot open connlabel.conf, not registering 'connlabel' match: Success cannot open connlabel.conf, not registering 'connlabel' match: Success cannot open connlabel.conf, not registering 'connlabel' match: Success cannot open connlabel.conf, not registering 'connlabel' match: Success cannot open connlabel.conf, not registering 'connlabel' match: Success cannot open connlabel.conf, not registering 'connlabel' match: Success cannot open connlabel.conf, not registering 'connlabel' match: Success cannot open connlabel.conf, not registering 'connlabel' match: Success cannot open connlabel.conf, not registering 'connlabel' match: Success cannot open connlabel.conf, not registering 'connlabel' match: Success cannot open connlabel.conf, not registering 'connlabel' match: Success cannot open connlabel.conf, not registering 'connlabel' match: Success cannot open connlabel.conf, not registering 'connlabel' match: Success cannot open connlabel.conf, not registering 'connlabel' match: Success cannot open connlabel.conf, not registering 'connlabel' match: Success cannot open connlabel.conf, not registering 'connlabel' match: Success cannot open connlabel.conf, not registering 'connlabel' match: Success cannot open connlabel.conf, not registering 'connlabel' match: Success cannot open connlabel.conf, not registering 'connlabel' match: Success cannot open connlabel.conf, not registering 'connlabel' match: Success cannot open connlabel.conf, not registering 'connlabel' match: Success cannot open connlabel.conf, not registering 'connlabel' match: Success cannot open connlabel.conf, not registering 'connlabel' match: Success cannot open connlabel.conf, not registering 'connlabel' match: Success cannot open connlabel.conf, not registering 'connlabel' match: Success cannot open connlabel.conf, not registering 'connlabel' match: Success cannot open connlabel.conf, not registering 'connlabel' match: Success cannot open connlabel.conf, not registering 'connlabel' match: Success cannot open connlabel.conf, not registering 'connlabel' match: Success cannot open connlabel.conf, not registering 'connlabel' match: Success cannot open connlabel.conf, not registering 'connlabel' match: Success cannot open connlabel.conf, not registering 'connlabel' match: Success cannot open connlabel.conf, not registering 'connlabel' match: Success cannot open connlabel.conf, not registering 'connlabel' match: Success cannot open connlabel.conf, not registering 'connlabel' match: Success cannot open connlabel.conf, not registering 'connlabel' match: Success ip6tables v1.4.21: The protocol family of set snort6 is IPv4, which is not applicable. Try `ip6tables -h' or 'ip6tables --help' for more information. ################# sieć gotowa! ################################ cannot open connlabel.conf, not registering 'connlabel' match: Success cannot open connlabel.conf, not registering 'connlabel' match: Success
Na stabilnym iptables-1.4.20 ten skrypt nie generuje ani śladu jakiegokolwiek błędu
Dzięki za pomoc. ;)
Ostatnio edytowany przez Jacekalex (2014-07-09 23:42:06)
Offline
HaPe napisał(-a):
Witam, szukam odpowiednika w Linuxie mod_portacl znanego z mac we FreeBSD. Chcę móc określić, które porty może bindować dany użytkownik. Nie jest to wykonalne przez iptables (tak myślę), ponieważ dany port przez działającą aplikację będzie już zablokowany w socket, jedynie ruch nie będzie mógł opuścić serwera.
widze, ze strasznie potrzebujesz tego rozwiazania. Dlaczego po prostu nie zainstalujesz freebsd ?
Offline
Bo wolę Linuxa ;)
Offline
Jak wolisz Linuxa, to zdecydowanie Grsec RBAC może regulować dostęp do portów, a jak chcesz pół roku kombinować z SElinuxem to też się da zrobić. Pół roku dlatego, że SElinuxem obowiązuje stara zasada - nie można być częściowo w ciąży.
JUż z trybem Targeted jest jazda ze znakowaniem systemu plików, profilami, blędami, itp.
W dodatku u mnie SElinux niektórych błędów nie logował w ogóle,
i musiałem się pierdolić w debugowanie programów.
Dlatego za SElinuxa się łapię tylko tam, gdzie jest domyślnie włączony i wstępnie skonfigurowany - np CentOS, wtedy jest to dosyć łatwe.
Ale jak go mam konfigurować od zera na dystrybucji, gdzie nie jest domyślnie włączony, a system nie jest przetestowany pod kątem SElinuxa przez Developerów danej dystrybucji to bardzo dziękuję za uwagę.
Jak W Tomoyo i Smack to zrobić nie wiem, jak chcesz w Apparmorze,
to musisz sobie napisać cały userspace do nowej wersji, bo tym się zajmują Developerzy Ubuntu. :D
Offline
Kolego wracajac do tematu, jest rozwiazanie na twoje pytanie. Taka mozliwosc ma TOMOYO. Wyglada byc bardzo obiecujacym projektem i latwym w uzyciu.
This directive allows the domain to perform network socket operations.
IPv4 and IPv6 addresses are both supported.
The syntax is summarised in the following table:
Directive
Function
network inet stream bind $ADDRESS $PORT
Bind TCP sockets to specified local IP address and port
network inet stream listen $ADDRESS $PORT
Listen TCP sockets at specified local IP address and port
network inet stream connect $ADDRESS $PORT
Connect TCP sockets to specified remote IP address and port
network inet dgram bind $ADDRESS $PORT
Bind UDP sockets to specified local IP address and port
network inet dgram send $ADDRESS $PORT
Send UDP packets to specified remote IP address and port
network inet raw bind $ADDRESS $PROTOCOL
Bind IP sockets for specified protocol to specified local IP address
network inet raw send $ADDRESS $PROTOCOL
Send IP packets for specified protocol to specified remote IP address
This example allows the domain to connect to port 80 on IP address 202.221.179.21:
network inet stream connect 202.221.179.21 80
http://tomoyo.sourceforge.jp/2.5/policy-specificati … yntax.html.en
Ostatnio edytowany przez bryn1u (2014-07-15 18:55:26)
Offline
Grsec RBAC w kontekście portów i połączeń ipv4 jest dużo łatwiejszy od TOMOYO.
Nie ma jeszcze w RBAC ipv6, czeka w kolejce TODO.
https://grsecurity.net/pipermail/grsecurity/2011-June/001085.html
Grsec rośnie pomalutku, aż do skutku. xD
Ostatnio edytowany przez Jacekalex (2014-07-15 19:29:44)
Offline
Jacekalex napisał(-a):
Grsec RBAC w kontekście portów i połączeń ipv4 jest dużo łatwiejszy od TOMOYO.
Nie ma jeszcze w RBAC ipv6, czeka w kolejce TODO.
https://grsecurity.net/pipermail/grsecurity/2011-June/001085.html
Grsec rośnie pomalutku, aż do skutku. xD
Przypadkowo sie natknalem na ta opcje jak czegos szukalem. Osobiscie wole, zeby takie rozwiazania byly w jednym patchu niz, zeby kazde rozwiozanie pochodzilo z innego zrodla a pozniej jest jeden wielki burdel w linuxie. Jestem jak najbardziej za rback'iem.
Offline