| Siec TCP/IP || Otoczenie Sieciowe || Poczta || Usnet || FTP || Konto Shellowe || Czat || IRC || Serwer PROXY |

Otoczenie sieciowe - Sieć SMB

utworzono: 10/04/2004 :: modyfikacja: 24/02/2007
autor: Marcin Moczkowski :: glappo (at) banita (dot) pl

Firewall czyli ściana ogniowa - Linux

W Linuksie wraz z systemem otrzymujemy wbudowany firewall czyli tzw. ścianę ogniową. Ma ona za zadanie chronić nasz komputer przed niepowołanym dostępem z sieci. Zależnie od wersji Linuksa czyli jądra systemu (kernel) mamy różne narzędzia do filtrowania pakietów. Kolejne wersje charakteryzują się większą funkcjonalnością ale nowsze kernele obsługują też starsze narzędzia chociaż w trybie podstawowym w celu ułatwienia migracji. I tak najpopularniejsze obecnie filtry pakietów czyli firewalle to oparte na Linux kernel 2.0 narzędzie ipfw, oparte na Linux kernel 2.2 narzędzie ipchains oraz oparte na Linux kernel 2.4 (obecne też w 2.6) narzędzie iptables. Różnią się one już m.in. w filozofii podejścia do problemu filtrowania pakietów (czyli np. jak pakiet wędruje przez filtry i łańcuchy). Oczywiście iptables posiada większe możliwości konfiguracji, a są one naprawdę potężne gdyż narzędzie iptables jest zaliczane do jednego z najlepszych obecnie istniejących firewalli. Żeby zacząć zabawę firewallem musisz posiadać uprawnienia superużytkownika w danym systemie i tak też jest w Linuksie. Czyli najczęściej musisz być zalogowany jako użytkownik root na danej maszynie. Poniżej została opisana konfiguracja firewalla opartego o iptables do współpracy z Sambą i generalnie siecią smb czyli otoczeniem sieciowym.

Konfiguracja iptables w trybie tekstowym

W systemie Linux zawsze wszystko można zrobić w trybie tekstowym czyli konsoli. Tak tez można ustawić reguły iptables. Aby używać iptables potrzebujesz uprawnień superuzytkownika czyli root oraz dystrybucji Linux z jądrem co najmniej 2.4 Do prawidłowego działania w otoczeniu sieciowym czyli sieci SMB twój system musi mieć otwarte poniższe porty:

  • port: 137, protokół: UDP, opis: NETBIOS Name Service (137:udp)
  • port: 138, protokół: UDP, opis: NETBIOS Datagram Service (138:udp)
  • port: 139, protokół: TCP, opis: NETBIOS session service (139:udp)

    opcjonalnie (nie wymagane w wielu sieciach):

  • port: 445, protokół: TCP, opis: Distributed File System (445:tcp) odpowiedzialny za DFS - Rozproszony system plików oraz SMB poprzez TCP/IP bez NetBIOS. Zalecane jest jego dodanie gdy używamy Samby 3.0.

Poniżej przedstawiono reguły firewalla bazujące na iptables pozwalające działać bez problemu Sambie. Oczywiście jeśli nasz firewall jest bardziej skomplikowany należy owe reguły wkomponować w niego.

iptables -F
iptables -F INPUT
iptables -P INPUT DROP
iptables -A INPUT -i lo -j ACCEPT

# zezwalamy na już nawiązane połączenia
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

iptables -A INPUT -s 192.168.1.0/24 -p udp --dport 137 -m state --state NEW -j ACCEPT
iptables -A INPUT -s 192.168.1.0/24 -p udp --dport 138 -m state --state NEW -j ACCEPT
iptables -A INPUT -s 192.168.1.0/24 -p tcp --dport 139 -m state --state NEW -j ACCEPT
iptables -A INPUT -s 192.168.1.0/24 -p tcp --dport 445 -m state --state NEW -j ACCEPT

Gdzie 192.168.1.0/24 to adresy używane w naszej sieci LAN, bo dla niej udostępniamy Sambę. I potem tylko już /etc/init.d/iptables start oraz /sbin/chkconfig --level 345 iptables on.

Konfiguracja iptables w trybie tekstowym - Linux Redhat/Fedora

W Linux Redhat w wersji 7.1/7.2/7.3, 8.0, 9 istnieje narzędzie lokkit do konfiguracji w trybie graficznym i tekstowym (konsola) firewalla opartego o iptables. Lokkit służy do naprawdę podstawowej konfiguracji iptables wystarczającej dla komputerów domowych i małych serwerów. Bardziej zaawansowana konfiguracja iptables powinna się odbywać za pomocą innych narzędzi i skryptów powłoki bash. Żeby rozpocząć konfiguracje należy w konsoli wydać komendę lokkit mając uprawnienia użytkownika root. Pojawi nam się okno jak niżej czyli Firewall Configuration, masz do wyboru trzy poziomy czyli Security Lavel

  • High - Poziom wysoki, firewall blokuje na praktycznie żaden ruch poza zapytaniami DNS oraz DHCP. Usługi takie jak np. IRC, ICQ, nie będą działały chyba, że przekierujesz je poprzez Proxy.

  • Medium - Poziom średni, firewall blokuje ruch przychodzący do wszystkich usług nasłuchująch poniżej portu 1023. Powyżej tego portu ruch będzie przepuszczany, jest to zreguły ruch użytkowników czyli np. IRC, ICQ i inne tego typu aplikacje.

  • No firewall - Firewall jest wyłączony czyli jest zezwolenie na jakikolwiek ruch, niezalecane dla komputerów bezpośrednio podłączonych do Internetu czyli posiadających rzeczywisty adres IP oraz podłączonych do "niezaufanych" sieci LAN.

Polecam zaznaczyć Security Lavel na Medium, czyli średni poziom na komputerach domowych.

Następnie wybieramy Customize czyli będziemy dostosowywać nasz ogniomurek, teraz ujrzymy ekran jak poniżej.

Trusted Devices to "zaufane" interfejsy sieciowe czyli podłączone do sieci którym ufamy. Dokładnie znaczy to tyle że na tych kartach sieciowych nie będzie działał firewall czyli będzie zezwolenie na jakikolwiek ruch tam panujący. W naszym przykładzie nie ufamy nikomu ;-).

Allow incoming to zezwolenie na ruch na danych portach, czyli wpuszczenie ruchu do określonych usług jakie oferuje nasza maszyna. Lokkit posiada zdefiniowane parę podstawowych usług, ale Samby tam nie ma, której porty należy dodać wykorzystując Other ports.  Do prawidłowego działania w otoczeniu sieciowym czyli sieci SMB twój system musi mieć otwarte poniższe porty:

  • port: 137, protokół: UDP, opis: NETBIOS Name Service (137:udp)
  • port: 138, protokół: UDP, opis: NETBIOS Datagram Service (138:udp)
  • port: 139, protokół: TCP, opis: NETBIOS session service (139:udp)

    opcjonalnie (nie wymagane w wielu sieciach):

  • port: 445, protokół: TCP, opis: Distributed File System (445:tcp) odpowiedzialny za DFS - Rozproszony system plików oraz SMB poprzez TCP/IP bez NetBIOS. Zalecane jest jego dodanie gdy używamy Samby 3.0.

Po zatwierdzeniu wszystkich zmian regułki iptables zostaną zapisane w pliku /etc/sysconfig/iptables i możesz uruchomić firewall na iptables wydając komendę:

/etc/init.d/iptables start

Należy teraz jeszcze upewnić się że iptables będzie startować wraz z Linuksem, w tym celu wydaj komendę

/sbin/chkconfig --level 345 iptables on

W Linux Fedora Core 1, lokiit został przemianowany na redhat-config-securitylevel i przy okazji jeszcze bardziej uproszczony. Mianowicie nie ma już poziomów High (Wysoki) i Medium (Średni), został on zastąpiony przez jeden poziom czyli po prostu włączenie firewalla (poziom Enabled z Fedora odpowiada w przybliżeniu poziomowi Medium z Redhat) co też należy uczynić.

Po wybraniu  Customize, będziemy dostosowywać nasz ogniomurek podobnie jak w Linux Redhat i tu pozostało praktycznie bez zmian. Czyli musimy dodać w Other ports 137:udp 138:udp 139:tcp i ewentualnie dla Samby 3.0 445:tcp.

I potem tylko już /etc/init.d/iptables start oraz /sbin/chkconfig --level 345 iptables on.

Konfiguracja iptables w trybie graficznym - Linux Redhat/Fedora

W Linux Redhat w wersji 8.0, 9 oraz Fedora Core 1 istnieje narzędzie do konfiguracji firewall w trybie graficznym o nazwie Security Level Configuration Tool. Narzędzie to jest dostępne poprzez wybranie w Główym Menu (Main Menu) => System Settings => Security Level lub po prostu wpisaniu komendy redhat-config-securitylevel w oknie terminala (wiersz poleceń).

Powyższe okno Security Level Configuration Tool pochodzi z Linux Redhat 8.0 i jak widać możesz wybrać poziomy analogicznie do narzędzi z wiersza poleceń czyli High, Medium (zalecane) i No Firewall. Następnie zaznacz Customize i  w Other ports wpisz 137:udp 138:udp 139:tcp i ewentualnie dla Samby 3.0 445:tcp.

Niestety w Linux Redhat 9 oraz Fedora Core 1 zlikwidowano pole Other ports uniemożliwiając w prosty sposób własną konfiguracje firewalla opartego na iptables w trybie graficznym. Na szczęście opcja Other ports wróciła wraz z nowym wydaniem Fedora Core 2 i oby tak zostało jak widać na obrazku poniżej. W Fedora Core 1 zlikwidowano poziomy High i Medium zastępując je jedną opcją Enable Firewall.

Powyższe okno Security Level Configuration Tool pochodzi z Linux Fedora core 2 i jak widać możesz wybrać poziomy analogicznie do narzędzi z wiersza poleceń czyli tylko Enable Firewall (zalecane) i No Firewall. Następnie zaznacz Customize i  w Other ports wpisz 137:udp 138:udp 139:tcp i ewentualnie dla Samby 3.0 445:tcp.

W Gnome w Redhat jest jeszcze dostępne narzędzie do podstawowej konfiguracji firewall o nazwie znanej w trybu tekstowego czyli Gnome Lokiit. Działa one jako kreator prowadzący użytkownika za rączkę, który odpowiada na kolejne pytania o poziom bezpieczeństwa (analogicznie do już opisanych) ale niestety nie ma możliwości dodania własnych portów. GNOME Lokkit, włączasz poprzez  Główe Menu (Main Menu)=> System Tools => More System Tools => Lokkit.

Oczywiście brak opcji dodania własnych portów można zrekompensować dodając poniższe linie do pliku /etc/sysconfig/iptables:

-A RH-Lokkit-0-50-INPUT -p udp -m udp -s 192.168.1.0/24 --dport 137 -j ACCEPT
-A RH-Lokkit-0-50-INPUT -p udp -m udp -s 192.168.1.0/24 --dport 138 -j ACCEPT
-A RH-Lokkit-0-50-INPUT -p tcp -m tcp -s 192.168.1.0/24 --dport 139 --syn -j ACCEPT
-A RH-Lokkit-0-50-INPUT -p tcp -m tcp -s 192.168.1.0/24 --dport 445 --syn -j ACCEPT

Gdzie 192.168.1.0/24 to adresy używane w naszej sieci LAN, bo dla niej udostępniamy Sambę. I potem tylko już /etc/init.d/iptables start oraz /sbin/chkconfig --level 345 iptables on.

Konfiguracja iptables w trybie graficznym za pomocą FireStarter

W systemie Linux istnieje szeroka gama programów do graficznej konfiguracji firewalla na iptables. Często wręcz co dystrybucja do jakieś nowe narzędzie, posiadające większe lub mniejsze możliwości ale z reguły pozwalające na bardzo podstawową konfiguracje. Dlatego też powstał program FireStarter do konfiguracji firewalla w prosty przystępny dla każdego sposób. W końcu nie każdy musi się znać na pisaniu reguł iptables, a chce ustawić owe reguły w trybie graficznym w prosty sposób nie mając zbyt o nich pojęcia. FireStarter jest pisany standardowo dla środowiska graficznego Gnome ale działa też w KDE i jest dostępny dla większości popularnych dystrybucji, do pobrania ze strony domowej programu www.fs-security.com. Poniższy opis powstał na bazie FireStarter w wersji 0.9x.

Po zainstalowaniu osadza się ikonka koło zegarka, skąd możesz wywołać program, jak na obrazku poniżej, gdzie zobaczysz tzw. "Trafienia" czyli co FireStarter zablokował.

No ale żeby coś zablokował trzeba go skonfigurować , więc przejdź do Preferencji i wylądujesz wpierw w zakładce "Ogólne" gdzie warto zaznaczyć żeby zapora była włączana podczas startu programu jak na obrazku poniżej.

Następnie jest zakładka "Filtry" pozwalająca odfiltrować różne informacje z początkowego widoku trafień, takie jak zduplikowane trafienia oraz nie przeznaczone dla tego komputera. Dalsza zakładka to "Urządzenie zewnętrzne" gdzie wybierasz którym urządzeniem jesteś podłączony do sieci zewnętrznej czyli z reguły Internetu. Najczęściej będzie to urządzenie eth0. Dalej mamy "Współdzielenie połączenia" czyli możliwość skonfigurowania w prosty sposób tzw. NAT, przydatne jak masz jakoś siec za twoim komputerem.

Zakładka "Usługi" pozwala nam włączyć wyjątki w naszym firewallu, żeby z zewnątrz był dostęp do określonych usług na naszej maszynie. Zaznaczamy opcje "Włączony dostęp publiczny do następujących usług" i wybieramy poniżej opcje "Samba/Netbios", ewentualnie jeszcze jakoś inną jeśli jest potrzebna jak na obrazku poniżej.

W zakładce "Filtrowanie ICMP" polecam zaznaczyć "Włączone filtrowanie ICMP związane z następującymi pakietami" i niżej zaznaczyć wszystko poza "Echo" co odrzuci wszystko poza zwykłym działaniem polecenia ping.

Dalej w zakładce "Rodzaj usługi" możesz ustawić poprzez filtrowanie ToS przepriorytetowanie usług sieciowych w celu uzyskania jak największej przepustowości, niezawodności lub opóźnienia. No i na koniec warto czasem zajrzeć do zakładki "Zaawansowane" gdzie możemy włączyć opcje eksperymentalne firewalla oraz ustawić sposób odrzucania pakietów. Masz do wyboru dwie możliwości odrzucania pakietów: "Zabranianie" czyli tzw. DROP, odrzucenie bez poinformowania źródła oraz "Odrzucanie" czyli REJCET, odrzucanie z poinformowaniem źródła.

SELinux

W Fedora Core 2 pierwszy raz wprowadzono w popularnej dystrybucji Linuksa rozszerzenie zwane SELinux, domyślnie wyłączone. SELinux jest  skrótem od Security Enhanced Linux rozszerzenia systemu Linux opartego o architekturę Mandatory Access Control (MAC) czyli obowiązkowej listy dostępu. Mandatory Access Control (MAC) jest uzupełnieniem ale w pewnym sensie i przeciwieństwem standardowego Discretionary Access Control (DAC), które bazuje tylko na identyfikatorze użytkownika i prawach dostępu do plików. MAC oznacza, że jądro, sprawdzając czy ktoś ma prawo uruchomić proces sprawdza politykę bezpieczeństwa zawartą w danej polisie. Owa polityka może definiować praktycznie dowolny aspekt dowolnych uruchamianych programów.

Od wersji Fedora Core 3, SELinux jest domyślnie uruchamiane zaraz po instalacji systemu. Nowością od wersji 3 jest istnienie dwóch rodzajów polis. Domyślną polisą bezpieczeństwa staje się polisa określona jako targeted policy czyli  polisa "docelowa". Polisa ta stosuje politykę restrykcji SELinux tylko do części działających procesów i demonów głownie sieciowych czyli: named, httpd, dhcpd, portmap, squid, nscd, syslogd, snmpd , ntpd, smbd, nmb. Pozostałe procesy działają w domenie unconfined_t, w której stosowany jest standardowy tryb kontroli dostępu systemów Unix czyli DAC (discretionary access controls). Drugą z dostępnych polis jest strict policy czyli polisa "ścisła"', czyli bardziej restrykcyjna, w której wszystkie procesy bez wyjątku poddane są zasadom MAC określonym przez architekturę SELinux.

Konfiguracja SELinux w Fedora Core znajduje się w katalogu /etc/selinux. Podstawowe ustawienia są zdefiniowane w pliku /etc/selinux/config. Zawiera on następujące opcje:

# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
#       enforcing - SELinux security policy is enforced.
#       permissive - SELinux prints warnings instead of enforcing.
#       disabled - SELinux is fully disabled.
SELINUX=enforcing
# SELINUXTYPE= type of policy in use. Possible values are:
#       targeted - Only targeted network daemons are protected.
#       strict - Full SELinux protection.
SELINUXTYPE=targeted

Opcje SELINUX możemy ustawić jako włączoną (enforcing), wyłączoną ale logującą naruszenia polityki bezpieczeństwa (permissive) oraz wyłączoną (disabled). Opcje typu polityki czyli SELINUXTYPE jak widać można ustawić na omówione już targeted lub strict.

W tym wypadku interesuje nas działanie pakietu Samba i wchodzących w jego skład demonów nmbd, smbd oraz winbind w kontekście SELInux. Na obrazku powyżej pokazano ustawienia SELinux w narzędziu graficznym Security Level Configuration Tool, (system-config-securitylevel w Menu >> Administracja >> Poziom bezpieczeństwa) dotyczące właśnie Samby w Fedora Core 4. Jak widać do wybory mamy opcje:

  • Pozwól Sambie na współdzielenie folderów domowych (samba_enable_home_dirs)

  • Pozwól użytkownikom z folderami domowymi CIFS na logowanie się (use_samba_home_dirs)

  • Wyłącz ochronę SELinux dla demona nmbd (nmbd_disable_trans)

  • Wyłącz ochronę SELinux dla demona smbd (smbd_disable_trans)

  • Wyłącz ochronę SELinux dla demona winbind (winbind_disable_trans)

W nawiasach zostały podane opcje tak jak one są podawane w pliku /etc/selinux/targeted/booleans.local gdzie się je definiuje.

Jeśli chcemy udostępnić jakiś katalog w katalogu /home opisane w dziale Udostępnianie plików i drukarek - opis dla Samba/Unix, należy poza skonfigurowaniem Samby w  tym celu ustawić SELiunux żeby nam na to pozwolił. Dlatego ustaw w narzędziu graficznym Security Level Configuration Tool w zakładce SELinux politykę dla Samby "Pozwól Sambie na współdzielenie folderów domowych". Możesz też po prostu wpisać poniższą opcję w pliku /etc/selinux/targeted/booleans.local, co odnieście ten sam efekt:

samba_enable_home_dirs=1

Możesz też włączyć udostępnianie folderów domowych poprzez wpisanie w terminalu następującej komendy:

setsebool -P samba_enable_home_dirs 1

Aby udostępnić poprzez Sambę dowolny katalog inny niż domowy, należy poprzez SELinux utworzyć odpowiedni kontekst. Dla przykładu aby móc udostępnić poprzez Sambę katalog /jakiś/katalog, wydaj poprzez terminal następującą komendę:

chcon -R -h -t samba_share_t /jakiś/katalog

Jeśli chcesz aby owe ustawienia obowiązywały permanentnie czyli nie tylko do restartu systemu dodaj ów kontekst do pliku:

/etc/selinux/targeted/contexts/files/file_contexts.local
w postaci wpisu:
/jakiś/katalog(/.*)?    system_u:object_r:samba_share_t

Natomiast jeśli do danego katalogu mają mieć dostęp różne demony (np. Apache, FTP, rsync)a nie tylko Samba możesz ustawić kontekst publiczny dla danego katalogu poprzez public_content_t (odczyt) oraz public_content_rw_t (zapis). Jeśli zapis ma mieć określony demon np. Samba, wtedy użyj kontekstu w stylu allow_DEMON_anon_write, czyli tak:

setsebool -P allow_smbd_anon_write=1

Jeśli chcemy udostępnić drukarkę PDF opisaną w dziale Drukarka plików PDF w Samba/Unix, należy oczywiście skonfigurować Samby oraz w  tym celu ustawić SELiunux żeby nam pozwolił korzystać z tej drukarki. Dlatego ustaw w narzędziu graficznym Security Level Configuration Tool w zakładce SELinux politykę dla Samby "Wyłącz ochronę SELinux dla demona smbd". Możesz też po prostu wpisać poniższą opcję w pliku /etc/selinux/targeted/booleans.local, co odnieście ten sam efekt:

smbd_disable_trans=1

Oczywiście zamiast wyłączać SELinux dla demona smbd możesz utworzyć odpowiedni kontekst dla drukarki PDF, na postawie opisanego powyżej przykładu.

Teraz garść adresów internetowych na temat SELinux:

Zabezpieczenia sieciowe Samby

Sama Samba posiada możliwość ustawienia zabezpieczeń przed niepowołanym dostępem z obcych sieci definiowanych zarówno poprzez adresy IP jak i interfejsy sieciowe. Służą do tego trzy kluczowe opcje sekcji [global] pliku smb.conf, które pokazano i skrótowo opisano poniżej.

[global]
# opcje sieciowe
interfaces = 192.168.1.1 127.0.0.1
hosts allow = 192.168.1.
bind interfaces only = yes
<< deklaracja sekcji ustawień globalnych

<< interfejsy sieciowe na których nadaje Samba
<< zezwolenie tylko dla kompów z tymi adresami
<< na reszcie interfejsów Samba nawet się nie rozgłasza

W opcji interfaces możesz podać interfejsy sieciowe na których Samba ma działać Jest to szczególnie przydatne jeśli posiadamy system z wieloma interfejsami sieciowymi, a Sambę chcemy uruchomić tylko np. jednym z nich. W  interfaces możesz podać zarówno adres Ip twojego interfejsu na którym ma Samba działać jak i jego symbol typu eth0.

Opcja hosts allow służy do podania listy komputerów które będą mogły korzystać z udziałów Samby. Można podać niepełne adresy IP.

Ostatnia opcja bind interfaces only, jeśli zostanie włączona udziały i listy przeglądania będą udostępnione tylko na interfejsach wymienionych w opcji interfaces. Dlatego należy do opcji interfaces dodać adres IP 127.0.0.1, aby lokalnie można było wykonywać pewne komendy dla Samby typu smbpasswd do zmiany hasła lub smbstatus do zarządzania udostępnieniami.

Uwagi na koniec

Firewall w Linuksie bazuje na narzędziu  ipfw (Linux kernel 2.0), narzędzie ipchains (Linux kernel 2.2)  oraz oparte na iptables (Linux kernel 2.4 oraz też w 2.6). To co przeczytałeś powyżej to tylko standardowe narzędzia konfiguracji firewalla w dystrybucjach Linux Redhat oraz Fedora Core. Właściwie każda popularna dystrybucja ma swój pakiet narzędzi czyli też jakiś graficzny konfigurator firewalla. Dodatkowo opisany został przyjemny w użyciu Firestarter, ale nie jest on jedynym choćby żeby wymienić jeszcze Guarddog. Jeśli potrzebujesz zaawansowanej konfiguracji będziesz musiał popisać trochę regułek w Terminalu lub użyć "budowlańca" regułek Firewall Builder. Tyle magii na temat Firewalli, teraz garść adresów internetowych:


Drukuj Dokument