Freesco, NND, CDN, EOS http://forum.freesco.pl/ |
|
Weryfikacja pomysłu zabezpieczania sieci very long topic ! http://forum.freesco.pl/viewtopic.php?f=24&t=14728 |
Strona 1 z 1 |
Autor: | MarkosX [ czwartek, 8 lutego 2007, 14:36 ] |
Tytuł: | Weryfikacja pomysłu zabezpieczania sieci very long topic ! |
Przeglądając dział „Propozycje – NND” na forum trafiłem na topic „logowanie userow” , poczytałem i doszedłem do wniosku, że „to” się da zrobić. Czy się dało? – to się jeszcze okaże ![]() Chciałbym, abyście zweryfikowali, ocenili, przeanalizowali pomysł zabezpieczenia sieci, a w sumie netu. To co za chwilę napiszę będzie zawierało w sobie opis pomysłu, trochę HOWTO i po części trochę FAQ. Pomysł składa się z: -skryptu -kluczowych elementów docelowych: netstat (NIE netstat-nat), iptables -klienta SSH -paru modyfikacji/konfiguracji na serwerze -paru zależności Skrypt: Tworzy nowy łańcuch o nazwie SECURE w tablicy filter, w łańcuchu FORWARD (łańcuch w łańcuchu ? – jakoś tak ![]() Zadaniem skryptu jest sprawdzanie userów aktywnych (netstat –n), połączonych poprzez klienta ssh i blokowanie ich taką regułką: Zależności: Skrypt sprawdza np. co 1 minute (odpalany z crona), czy user jest aktywny, jeśli jest to nic nie robi, jeśli nie jest, to blokuje mu wszystkie porty oprócz portu niezbędnego do połączenia z daemonem sshd. Skrypt wystawie i opisze publicznie, po ew. przychylnej weryfikacji całego pomysłu. Klient SSH: Program o nazwie Bitvise Tunnelier (o absurdalnej, lecz niegroźnej ikonce w tray). Darmowy tylko dla indywidualnego użytku (w naszym przypadku każdy user używałby programu indywidualnie, czyli zgodnie z licencją ![]() Zadaniem klienta jest połączenie się z serwerem automatycznie przy starcie systemu operacyjnego (windows), zalogowanie się automtycznie i w razie utraty połączenia, wznowienie go (reconnect) po określonej przez nas liczbie sekund (w moim przypadku 28sekund, aby zmieścić się 2x w minucie, gdy skrypt wykonywany jest co 1 minute) Mówiąc krótko w gre wchodzi tylko i wyłącznie pełna automatyka. No oki, więc czas to wszystko zebrać do kupy, czyli: „No dobra, ale jak to działa ?” Idea begin: User nieaktywny jest zablokowany przez skrypt np. iptables -t filter -A SECURE -s 192.168.0.10 -p tcp --dport ! 22 -j DROP Jest zablokowany ponieważ netstat –n nie pokazał połączenia nawiązanego o stanie ESTABLISHED dla usera o IP: 192.168.0.10, na porcie 22 (ssh). User włącza kompa, uruchamia się program Bitvise Tunnelier automatycznie łączy się z serwerem poprzez login i hasło (każdy user ma swoje konto na serwerze) i w tym momencie odblokowuje sobie Internet poprzez regułke: /usr/bin/sudo /usr/sbin/iptables -t filter -D SECURE -s 192.168.0.10 -p tcp --dport ! 22 -j DROP. Po wyłączeniu kompa/wylogowaniu się z serwera, w momencie odpalenia skryptu IP: 192.168.0.10 ponownie zostaje zablokowane. W wypadku odpalania skryptu co minute, staje się to w przedziale 1-59sekund. I właśnie tyle też sekund miałby ew. wardriver na wbicie się do sieci i nacieszenie się netem ![]() „Wszystko ok., ale przecież user ma dostęp do shella no i do iptables na prawach roota poprzez sudo !?” User praktycznie nie ma dostępu do shella. Po koleji: Dodajemy grupę o nazwie secure: groupadd secure. Edytujemy plik sudoers, dopisujemy w nim: %secure ALL=NOPASSWD:/usr/sbin/iptables czyli wszyscy, którzy należą do grupy secure mają dostęp poprzez sudo do iptables na prawach roota. Dodajemy usera: useradd Login – heniu grupa – secure shell hasło – xxx. Jako shell podajemy /katalog/domowy_usera/rbash (rbash – nazwa pliku, może być jakakolwiek), np. /home/secure/heniu/rbash. W katalogu domowym usera tworzymy plik o nazwie rbash (chmod 755), edytujemy i wpisujemy: #!/bin/sh /usr/bin/sudo /usr/sbin/iptables -t filter -D SECURE -s 192.168.0.10 -p tcp --dport ! 22 -j DROP exit User tylko odblokowuje sobie net po czym konsola się zamyka (mgnienie okienka konsoli). Zestaw dla usera: 3 pliki: autostart.reg (wpis do rejestru) – plik który, user musiałby uruchomić, aby program odpalał się automatycznie przy starcie systemu. Plik jest potrzebny, ponieważ program niestety nie ma zaimplementowanej opcji autostartu więc używając komendy –loginOnStartup w rejestrze uruchomi się automagicznie. Tunnelier-Inst.exe (4.12mb) – instalka programu, program zajmuje ok. 15mb po zainstalowaniu, czyli 16mb wolnego miejsca na jakiejś partycji. Program u mnie pożera średnio ok. 12xx Kilobajtów pamięci. profile.tlp – profil usera, czyli wszystkie ustawienia programu wraz z (UWAGA) zakodowanym hasłem do konta na serwerze. Więc nawet user nie zna hasła do konta, bo po co ![]() „Czemu jakiś Bitvise Tunnelier, a nie powszechnie używany Putty ?” Wszystko oczywiście zaczęło się od putty, kombinacji była masa, wraz z kluczami prywatnymi (RSA, DSA), publicznymi, agentami, generatorami kluczy kończąc na próbie użycia opcji „Remote command”. (nawet znalazłem w necie PuttyTray, putty, które na starcie schodzi do traya ![]() Krótko: Putty nie, bo putty nie ma opcji reconnecta, czyli automatycznego wznawiania połączenia po padzie. Wyobraźmy sobie sytuacje, że user w nocy ściąga coś tam. Następuje chwilowy zanik napięcia w pomieszczeniu gdzie jest serwer (nie mamy ups-a), serwer się restartuje, lub sami restartujemy serwer, a putty u usera już się nie łączy z serwerem, więc skrypt blokuje usera = porażka. Jak pisałem wcześniej, tylko pełna automatyka wchodzi w gre. Póki co opcja „reconnect” w putty jest na stronie domowej putty w podstronie wishlist (czyli w liście życzeń) i to w dziale „fun” – nie wiem czemu J (pewnie dlatego, że putty nie zostało stworzone do spełniania potrzeb moich chorych pomysłów ![]() „Dlaczego akurat SSH ?” Dlatego, że połączenie jest szyfrowane. „Dlaczego nie netstat-nat ?” Dlatego nie, bo netstat-nat kłamie, a dokładnie przekłamuje (czasami). Czasem gdy sprawdzam poprzez „neststat-nat –n –L” czy połączenie jest nawiązane, mimo tego że jest, netstat-nat nic nie pokazuje. Chyba nie muszę tłumaczyć co się stanie, gdy pomimo połączenia netstat-nat nic nie pokaże, w momencie odpalenia się skryptu. Tak bynajmniej wynika z przeprowadzonych przeze mnie testów. Natomiast netstat jest nieugięty w tej kwestii. (Na wykorzystanie netstata nakierował mnie –MW- dzięki Mariusz ![]() |
Autor: | MarkosX [ czwartek, 8 lutego 2007, 14:37 ] |
Tytuł: | |
„Czy to działa ?” W tej chwili, w mojej sieci, na dwóch kompach w LAN-ie (na kablach) i w fazie ciągłych testów, zmian, poprawek. „Co mnie LAN interesuje, tu przecież chodzi o WLAN i wardriver-ów wbijających się do sieci (podmieniających: IP, MAC-a. WEP-a i Bóg wie co jeszcze!) i kradnących net! Więc, czy to będzie działać w WLAN-ie, wiadomo, że w WLAN-ie czasem zrywa się połączenie, nawet parę pingów pod rząd może się zerwać – czy wtedy SSH nie zerwie połączenia?” W tej kwestii należy w pliku sshd_config (/etc/ssh/) dobrać odpowiednie ustawienia. Interesują nas w sumie 3. TCPkeepalive yes ClientAliveInterval 2 #ClientAliveCountMax 1 (do testów) (takie mam ustawiania w tej chwili, w pliku sshd_config) W tym miejscu akurat nie wszystko jest dla mnie jasne. Mianowicie: TCPkeepalive yes – utrzymuj/sprawdzaj aktywne połączenia. ClientAliveInterval 2 – z moich testów wynika, że po pomnożeniu wartości 2 przez 4 uzyskujemy 8s po których w razie nagłego zerwania połączenia (reset kompa usera, zanik prądu, zerwanie połączenia radiowego itp.) serwer zamieni stan połaczęnia: z ESTABLISHED na FIN_WAIT1 - w przypadku użycia netstat z ESTABLISHED na CLOSE w przypadku użycia netstat-nat. #ClientAliveCountMax 1 – tutaj nie wiem, czy jest to “zamiennik” dla TCPkeepalive, który jest w przeciwieństwie do TCPkeepalive jest „not spoofable” – nie skanowalny przez sniffery ?, zapraszam mądrzejszych do manuala openssh jest tam ładnie ta opcja opisana po angielskiemu ![]() Pytania: „1. Mam 100 userów podpiętych do serwera, czy skrypt podczas sprawdzania aktywnych userów i ew. ich blokowania nie obciąży mi za mocno serwera ? 2. Czy SSH zniesie powiedzmy 60 nawiązanych połączeń naraz ? 3. Czy mając 100 userów będę musiał dodać 100 kont na serwerze, utworzyć 100 plików jako shell (sic!) ? 4. Czy netstat bezproblemowo wyświetli np. 60 połączeń nawiązanych za każdym wywołaniem skryptu przez crona ? 5. Czy mając 100 userów i dodawaniu i odejmowaniu na zmianę regułek do iptables, iptables się nie zawiesi/przestanie prawidłowo funkcjonować itp. ? 6. Czy mając 100 userów podpiętych do serwera wszystko będzie działać ok. ? 7. Jak to wszystko się ma do dhcp ? 8. No ok., ale chce zablokować klientowi neta, bo nie płaci, da się to zrobić ? 9. Czy ten klient SSH działa pod win 98SE/ME ?” 1. To zależy jak masz mocną maszynę (szybkiego proca), co ile byłby wykonywany skrypt, no i przede wszystkim od ilości userów. 2. Nie wiem. 3. Niestety tak (też mi się to nie podoba). Nie znalazłem do tej pory innej metody zabezpieczenia serwera (shella) przed userami i jednocześnie zabezpieczenia sieci. (Może chroot – nie sprawdzałem jeszcze tego). 4. Nie wiem. 5. Nie wiem. 6. Nie wiem, aby odpowiedzieć na to pytanie trzeba by po prostu przeprowadzić test na tych przykładowych 100 userach ![]() 7. Nie mam pojęcia, nigdy nie używałem DHCP. 8. Musi się dać J Po prostu usuwasz jego IP ze skryptu i masz wolną rękę. 9. Nie wiem, nie sprawdzałem ,ale powinien działać. No i to by było chyba na tyle ![]() Na zakończenie chciałbym jeszcze napisać, że pomysł na początku wyglądał inaczej, tzn. powiedziałbym, że ewoluował z czasem. Czasem w wyniku przemyśleń, czasem przypadkiem (metoda prób i błędów połączona z kombinacjami alpejskimi). Na początku chciałem wszystko zrobić poprzez stronę html (cgi), tzn. user się loguje na stronie (certyfikat, SSL, czyli połączenie szyfrowane tak jak w przypadku banków on-line itd.) i odblokowuje sobie tym samym neta, ale to był nie wypał totalny, szybko porzuciłem ten zamysł, aby zająć się SSH (na co też mnie naprowadził nieświadomie –MW-) Przez długi czas trzymałem się koncepcji takiej, że skrypt miał sam blokować i odblokowywać userów, ale wtedy jeśli skrypt byłby wykonywany np. co 1 minutę, wtedy user po włączeniu kompa musiałby czekać na moment przeładowania się skryptu, aby uzyskać dostęp do netu, czyli przedział od 1 do 59 sekund (w zależności jakby trafił) – nie podobało mi się to i userom pewnie też by się nie podobało. I tak właśnie doszedłem do tego momentu, choć jeszcze sam nie jestem pewien, czy moja praca nie poszła na marne..jeśli nawet, to chociaż próbowałem coś stworzyć. MarkosX |
Autor: | -MW- [ niedziela, 11 marca 2007, 03:04 ] |
Tytuł: | |
duzo pytan i odpowiedzi ale nie widze najwazniejszego - po co to wszystko? ![]() |
Autor: | qbaf [ niedziela, 11 marca 2007, 10:34 ] |
Tytuł: | |
-MW- pisze: duzo pytan i odpowiedzi ale nie widze najwazniejszego - po co to wszystko? Twisted Evil MarkosX pisze: tu przecież chodzi o WLAN i wardriver-ów wbijających się do sieci (podmieniających: IP, MAC-a. WEP-a i Bóg wie co jeszcze!) i kradnących net! MarkosX ![]() |
Autor: | p0w0 [ niedziela, 11 marca 2007, 13:48 ] |
Tytuł: | |
Dużo z tym roboty, a są inne (wg. mnie lepsze) rozwiązania (np. pppoe). Kolejna rzecz, to czy da się to odpalić pod linuxem? Nie wszyscy używają systemów M$. |
Autor: | Maciek [ niedziela, 11 marca 2007, 15:19 ] |
Tytuł: | |
nie przeczytałem całego wątku zbyt dokładnie, musze to jeszcze przeanalizować. Odniosę się tylko do ostatniej wypowiedzi - czemu nie pppoe? Otóż sam nie mam z tym doświadczeń, ale znam sytuację - sieć radiowa na osiedlu, około 200 klientów, następuje przerwa w dostawie prądu, po chwili napięcie wraca, klienci logują się ponownie i na serwerze wisi koło dwustu martwych interfejsów pppoe*. To jest niewątpliwie argument przeciw. |
Autor: | pectosol [ niedziela, 11 marca 2007, 20:47 ] |
Tytuł: | |
MarkosX pisze: „Co mnie LAN interesuje, tu przecież chodzi o WLAN i wardriver-ów wbijających się do sieci (podmieniających: IP, MAC-a. WEP-a i Bóg wie co jeszcze!) i kradnących net!
Proponuję WPA2/AES i kontrola po MACu + przeglądanie logów. Łamanie takich kluczy jest trudne i czasochonne przez co odpuszczają sobie takie sieci domorośli wardriverzy. I to wystarczy zwłaszcza że większość sieci nie jest wcale zabezpieczona. A jeśli już masz ochote na coś więcej to może zainteresuj się radiusem... po co wymyślać jeszcze raz koło? |
Autor: | Maciek [ niedziela, 11 marca 2007, 21:08 ] |
Tytuł: | |
pectosol pisze: A jeśli już masz ochote na coś więcej to może zainteresuj się radiusem... po co wymyślać jeszcze raz koło?
Czy wiesz co piszesz? Sam radius jest wyłącznie serwerem uwierzytelniania i bez czegoś jeszcze jest bezużyteczny. |
Autor: | Albercik [ niedziela, 11 marca 2007, 21:52 ] |
Tytuł: | |
Maciek pisze: nie przeczytałem całego wątku zbyt dokładnie, musze to jeszcze przeanalizować. Odniosę się tylko do ostatniej wypowiedzi - czemu nie pppoe?
Otóż sam nie mam z tym doświadczeń, ale znam sytuację - sieć radiowa na osiedlu, około 200 klientów, następuje przerwa w dostawie prądu, po chwili napięcie wraca, klienci logują się ponownie i na serwerze wisi koło dwustu martwych interfejsów pppoe*. To jest niewątpliwie argument przeciw. Maćku, skąd to wyssałeś? Chyba z palca , bo nie znam takiej sytuacji , bo coś takiego nie istnieje, a przypomnę , że byłem jednym z pionierów z pppoe na NND i po dziś dzień tego używam na każdym z serwerów. To idealne rozwiązanie, działające doskonale. Nie rozgłaszajcie mitów, nie macie doświadczenia ? Zapytajcie!!!! Jedyne, czego brakuje, to jakiś sensowny panel do administracji pppoe - nie ważne czy poprzez konsolę ssh, www czy jakikolwiek moduł, ale właśnie tego brakuje . Edycja tych samych plików za każdym razem powoli może zacząć drażnić . |
Autor: | luki_nowy [ niedziela, 11 marca 2007, 23:26 ] |
Tytuł: | |
moze cos wymodzisz albercik co ![]() ![]() ![]() |
Autor: | Albercik [ poniedziałek, 12 marca 2007, 00:09 ] |
Tytuł: | |
luki_nowy pisze: moze cos wymodzisz albercik co
![]() ![]() ![]() Wybacz, ale nie spotkałem się z takimi problemami. To ustawiasz w pppoe-server-options - kiedyś już wypociłem spory opis. |
Autor: | czerwo [ niedziela, 18 marca 2007, 09:54 ] |
Tytuł: | |
Przeczytalem wsio. Da sie to zrobic. Na kleintach ktorzy maja linuxa tez by to dzialalo. Autoryzacja przez klucze a nie przez haslo i bedzie wsio bujac. Nie podoba mi sie uzycie netstata. IMO ciagnac logi z dhcp albo w ogole inaczej zalatwic sprawe ;] Pare rzeczy mi sie nei podoba ale pomysl warty uwagi. |
Autor: | 2jarek [ piątek, 11 maja 2007, 21:46 ] |
Tytuł: | |
Dopiero zauważyłem skrobie coś podobnego w wersji ekstremalnie uproszczonej wg mnie najprostsze i najlepsze jest logowanie po http można przekierować niezalogowanego na stronke z telefonem do admina i migiem dostanie hasło nawet jak zapomniał zgubił itp nie musi być to super bezpieczne nie dajmy sie zwariować. |
Strona 1 z 1 | Strefa czasowa UTC+2godz. |
Powered by phpBB® Forum Software © phpBB Group https://www.phpbb.com/ |