Zabezpieczenie routerów Juniper przed światem zewnętrznym Jacek Skowyra
Agenda Dostęp fizyczny Data Plane Control Plane Zarządzanie Filtry
Agenda
Dostęp fizyczny - zabezpieczenie konsoli Jedyny domyślny dostęp w nowym urządzeniu Wiszące sesje Odzyskiwanie hasła set system ports console log-out-on-disconnect set system ports console insecure set system root-authentication encrypted-password " set system ports console disable
Dostęp fizyczny - zabezpieczenie portu aux Domyślnie zablokowany Może być użyty jako dodatkowy port konsoli set system ports disable set system ports insecure
Dostęp fizyczny - zabezpieczenie portu diagnostycznego SCB, SSB, SFM, FEB Brak hasła set system diag-port-authentication plain-text-password set system pic-console-authentication plain-text-password
Craft terminal T320 LCD Display EX4200 Reset button J2350
Dostęp fizyczny - zabezpieczenie craft terminala Oglądanie statusu Przywracania konfiguracji domyślnej Włączanie/wyłączanie FPC/PIC set chassis craft-lockout set chassis config-button no-clear set chassis config-button no-rescue
Dostęp fizyczny - zabezpieczenie LCD Power, environment, version Halt, reboot, rescue-config, factory-default show chassis lcd-menu set chassis lcd-menu fpc 0 menu-item status-menu show-version disable set chassis lcd-menu fpc 0 maintance-menu disable
Rodzaje pakietów: Pakiety przełączane Pakiety nie wymagające obróbki przez RE Pakiety przełączane Router Routing Engine Interfejs wejściowy FIB Interfejs wyjściowy
Rodzaje pakietów: Pakiety skierowane do urządzenia Pakiety, których adresem docelowym jest urządzenie (zarządzanie, routing). Wymagają obsługi przez procesor Pakiety przełączane Pakiety skierowane do urządzenia Router Routing Engine Interfejs wejściowy FIB Interfejs wyjściowy
Rodzaje pakietów: Pakiety niestandardowe Pakiety IPv4, IPv6 posiadające ustawione opcje w nagłówku Pakiety z wygasającym TTL Pakiety przełączane Pakiety skierowane do urządzenia Pakiety niestandardowe Router Routing Engine DROP Interfejs wejściowy FIB Interfejs wyjściowy
Rodzaje pakietów: Pakiety inne niż IP PPP LCP, pakiety ISIS (CLNS), L2 keepalive Pakiety przełączane Pakiety skierowane do urządzenia Pakiety niestandardowe Pakiety inne niż IP Router Routing Engine DROP Interfejs wejściowy FIB Interfejs wyjściowy
Data plane Filtry firewall a urpf IP header
Data plane filtry firewall a Podstawowa metoda sprawdzania przesyłanych danych Filtry mogą być umieszczane na wejściu jak i na wyjściu interfejsu Każdy filtr składa się z jednego lub więcej segmentu Na końcu każdego filtra znajduje się domyślna akcja DENY
Data plane filtry firewall a filter filter-name { term term-name { from { match-conditions; then { action; nonterminating-actions; term implicit-rule { then discard; set interfaces ge-0/0/0 unit 0 family inet filter input filter-name
Data plane unicast RPF Filtrowanie pakietów wejściowych o nieprawidłowych adresach źródłowych Używa FIB a do sprawdzania adresów źródłowych dzięki czemu jest niezależny od zmian w routingu Możliwe dwa tryby pracy: strict oraz loose
Data plane unicast RPF urpf Strict Adres źródłowy musi być w tablicy routingu Adres źródłowy musi być osiągalny przez interfejs wskazany w tablicy routingu, jako interfejs przez który jest osiągalna najkrótsza ścieżka do danego adresu źródłowego Domyślny tryb set interface ge-0/0/0 unit 5 family inet rpf-check <fail-filter filter-name> urpf Loose Adres źródłowy musi być w tablicy routingu Adres źródłowy musi być osiągalny przez dowolny interfejs set interface ge-0/0/0 unit 5 family inet rpf-check <fail-filter filter name> mode loose
Data plane IP header options RFC 791 każde urządzenie obsługujące protokół IP, musi wspierać pole IP Option Wymaga obsługi przez procesor Zastosowanie dzisiaj RSVP IGMP 2, 3
Control plane Control plane (RE) odpowiada za procesowanie wielu różnych typów pakietów: pakiety routingowe pakiety z ustawionymi ip options pakiety L2 Control plane odpowiada także np. za obsługę CLI Każdy control plane ma skończoną ilość mocy procesora czy pamięci
Control plane ochrona Blokowanie niepotrzebnych usług Policing MD5
Control plane blokowanie niepotrzebnych usług IP Source Routing Umożliwia wysyłającemu pakiet ustawienie ścieżki po której ma się on poruszać (strict) lub określenie pojedyńczego routera, przez który pakiet musi przejść Od wersji junos 8.5 wyłączony standardowo set chassis no-source-route IP Directed Broadcast Umożliwia wysyłanie pakietu do adresu broadcast danej podsieci Wyłączony, można włączyć per interfejs Proxy ARP Router odpowiada na zapytania ARP w imieniu innych urządzeń Wyłączony, można włączyć per interfejs Default ARP Policer Junos posiada policer na pakiety ARP przesyłane do RE Dodatkowe ogracznienia dla arp ów mogą być wprowadzanie per interfejs
Control plane policing Blokowanie pakietów niepożądanych Pakiety pofragmentowane Pakiety z sieci o ograniczonym zaufaniu Zezwolenie na wymagane pakiety Protokoły routingu (ospf, bgp, isis) Serwisy (ssh, telnet) Zarządzanie (snmp, ntp, dns) Diagnostyka (icmp, traceroute) Ograniczenie pozostałych pakietów Rate limit ICMP, TCP, UDP
Control plane MD5, IPSec Oprócz statycznej definicji sąsiadów w poszczególnych protokołach, dodatkowa weryfikacja za pomocą hash MD5 Protokoły wykorzystujące MD5 NTP BGP ISIS OSPF RIP LDP OSPFv3 IPSec SA
Zarządzanie Zarządzanie użytkownikami Zdalny dostęp do routera SNMPv2, v3 Syslog NTP Niezabezpieczone usługi Zabezpieczone usługi
Zarządzanie użytkownikami Radius, Tacacs+ Lokalna baza użytkowników Klasy użytkowników
Radius set system radius-server 10.10.10.1 set system radius-server 10.10.10.1 secret $lk2#&sf set system radius-server 10.10.10.1 port 1812 (domyślny) set system radius-server 10.10.10.1 source-address 1.1.1.1 set system accounting events set system accounting destination radius server 10.10.10.1
Tacacs+ set system tacplus-server 10.10.10.1 set system tacplus-server 10.10.10.1 secret $lk2#&sf set system tacplus-server 10.10.10.1 port 49 (domyślny) set system tacplus-server 10.10.10.1 source-address 1.1.1.1 set system accounting events set system accounting destination tacplus server 10.10.10.1
Lokalna baza użytkowników Dwa typy kont: root, konto domyślne Konta użytkowników Konto root Domyślnie bez hasła Przywileje administratora Poza bazą użytkowników Konta użytkowników Każdy użytkownik musi być przypisany do klasy Różne poziomy użytkowników Przynajmniej jedno konto z pełnymi prawami w przypadku awarii
Lokalna baza użytkowników set system root-authentication plain-text-password set system login message set system login retry-options set system login password minimum-lenght set system login password change-type character-set Set system login password change-type set-transitions set system login password minimum-changes 3 set system login user test_1 class test_1 set system login user test_1 authentication plain-text-password
Klasy użytkowników role Przypisanie użytkownikom odpowiednich grup uprawnień Operatorzy Administratorzy View only Definiowanie dozwolonych/zabronionych komend set system login class test_1 permissions clear set system login class test_1 permissions interface-control set system login class test_1 permissions maintenance set system login class test_1 permissions view set system login class test_1 deny-commands.(start *) (request system software) (request chassis)
SNMP v2 Hasła (community) niezabezpieczone zalecane zarządzanie Out Of Band Domyślnie wyłączone, brak standardowych community Konfiguracja widoków dla grup użytkowników set snmp view inventory-only oid system include set snmp view community test view inventory-only set snmp view community test view authorization read-only set snmp view community test view clients 10.10.10.5/32
SNMP v3 Hasła (community) zabezpieczone szyfrowanie Wprowadzone pojęcie użytkownika Konfiguracja widoków dla grup użytkowników set snmp v3 usm local-engine user nms-user authentication-sha authenticationpassword $safsf& set snmp v3 usm local-engine user nms-user privacy-aes128 privacy-password $Y5wIm@4
Syslog Ustandaryzowany protokół, którego zadaniem jest logowanie lokalnie lub na zdalnym urządzeniu informacji z urządzenia set system syslog user * any emerygency set system syslog file message any info set system syslog file audit interactive-commands any set system syslog file processes deamon any set system syslog console any any set system syslog host 10.10.10.8 log-prefix hostname
NTP Network Time Protocol set system time-zone Europe/Warsaw set system ntp boot-server 10.10.10.33 set system ntp authentication-key 1 type md5 value asdf2 set system ntp trusted-key 1 set system ntp server 10.10.10.33 key 1 prefer set system ntp server 10.10.10.234 key 1 set system ntp source-address 1.1.1.1
Niezabezpieczone usługi Wszystkie usługi, których pakiety nie są zaszyfrowane Powinny być wyłączone delete system services rsh delete system services rlogin delete system services ftp delete system services finger delete system services telnet delete system services web-management http
Zabezpieczone usługi SSH set system services ssh protocol-version v2 set system services ssh root-login deny set system services ssh connection-limit 5 set system services ssh rate-limit 2 (na minutę) Web management set security certificates local cert load-key-file name.pem set system services web-management https local-certificate cert set system services web-management https interface ge-0/0/0.0
Adres domyślny dla usług Domyślnie dla każdej usługi generującej na routerze pakiety wysyłane na serwera, domyślnym adresem źródłowym jest adres interfejsu leżącego na ścieżce do serwera Dobrym zwyczajem jest ustawienie adresu źródłowego dla takich usług na adres Loopback set system default-address-selection
Filtry firewall Filtry mogą być dodane jako input lub output W przypadku interfejsu lo0 (RE) input oznacza ruch w kierunku RE, a output ruch wychodzący z RE W przypadku pozostałych interfejsów input oznacza ruch wchodzący do urządzenia na danym interfejsie, a output ruch opuszczający urządzenie na danym interfejsie Filtry firewall muszą mieć zdefiniowany protokół Filtr danego protokołu można przypisać tylko do interfejsu obsługującego dany protokół Przykładowe protokoły filtrów Ipv4 (family inet) Ipv6 (family inet6) Mpls (family mpls)
Filtry firewall Każdy filtr jest przeglądany od góry do dołu Jeżeli w pierwszym segmencie (term) nie zostanie dopasowane żadne wyrażenie, następny segment jest przeglądany Każdy filtr posiada domyślnie akcję DENY ANY w przypadku braku dopasowania
Filtry firewall [firewall family inet] ilter example-filter { term 1 { from { source-address 10.0.0.0/8; then { log; accept; term 2 { from { source-address 192.168.0.0/16; then { accept; term 3 { from { source-address 172.16.0.0/12; term 4 { from { source-address 200.200.0.0/24; then { log; Packet Does packet match term 1? No Does packet match term 2? No Does packet match term 3? No Does packet match term 4? No Discard packet Yes Yes Yes Yes Accept packet Accept packet Accept packet Accept packet Log packet Log packet Log packet
Filtry firewall [firewall family inet] filter example-filter { term 1 { from { protocol tcp; source-address 10.0.0.0/8; source-address 192.168.0.0/16; source-address 172.16.0.0/12; then { accept;
Filtry firewall [firewall family inet] filter example-filter { term 1 { from { protocol tcp; source-address 10.0.0.0/8; source-address 192.168.0.0/16; source-address 172.16.0.0/12; then { accept; Packet List of match conditions (source-address) Is the protocol tcp? Yes Does packet match SA 10.ʹ8? No Does packet match SA 192.168.ʹ16? No Yes Yes Discard packet Accept packet Accept packet No Does packet match SA 172.16.ʹ12? Yes Accept packet No Discard packet
Filtry firewall akcje accept terminating The packet is accepted. discard terminating The packet is discarded. reject message-type terminating The packet is rejected and the corresponding ICMP message is generated. routing-instance routing-instance terminating Routes the packet using the specified routing-instance. next term non-terminating Continues to the next term for evaluation. count counter-name non-terminating Counts the number of packets passing this term. A counter name is specific to the filter that uses it, so all interfaces that use the same filter increment the same counter. forwarding-class class-name non-terminating Classifies the packet to the specific forwarding class. log non-terminating Logs the packet s header information in memory on the packet forwarding engine (PFE). This is a Frist In First Out (FIFO buffer and is limited to about 400 entries. loss-priority priority non-terminating Sets the scheduling priority of the packet. policer policer-name non-terminating Applies rate limits to the traffic using the named policer. sample non-terminating Samples the traffic on the interface. Use this non-terminating action only when sampling is enabled. syslog non-terminating Records information in the system logging facility. This nonterminating action can be used with all actions except discard.
Filtry firewall liczniki Może być tylko jeden licznik na każdy filtr Jeżeli filtr jest użyty w kilku miejscach, to posiadają domyślnie jeden wspólny zagregowany licznik, interface-specific powoduje wyłącznie [firewall family inet] filter example-filter { term 1 { from { source-address 10.0.0.0/8; source-address 192.168.0.0/16; source-address 172.16.0.0/12; then { count rfc1918; accept;
Filtry firewall logowanie Logowanie działa line rate Tylko ok. 400 ostatnich wpisów jest przechowywanych w pamięci [firewall family inet] filter example-filter { term 1 { from { source-address 10.0.0.0/8; source-address 192.168.0.0/16; source-address 172.16.0.0/12; then { count rfc1918; accept; term 2 { then { log; discard;
Filtry firewall wiele filtrów w jednym kierunku W systemie junos istnieje możliwość użycia kilku filtrów w danym kierunku Każdy z filtrów jest przeglądany w kolejności występowania Jeżeli pakiet zostanie dopasowany wewnątrz danego filtra, następny filtr nie jest już przeglądany Domyślna akcja DENY ANY występuje w ostatnim filtrze
Filtry firewall wiele filtrów w jednym kierunku Packet First filter Additional filters Term Term Match Match Term Term Match Match Term Term Match Match Discard
Filtry firewall wiele filtrów w jednym kierunku interfaces { lo0 { unit 0 { family inet { filter { input-list [ accept-web accept-ssh discard-all ]; address 127.0.0.1/32;
Policing rate-limiting Policery działają wspólnie z filtrami aby ograniczyć, zmienić oznaczenia ruchu dopasowanego do filtrów Każdy policer składa się z następujących elementów: Nazwa Parametr przekroczenia wartości (if-exceeding) Akcja firewall { policer policer-name { filter-specific; if-exceeding { bandwidth-limit bps; bandwidth-percent number; burst-size-limit bytes; then { policer-action;
Policing Token bucket Bucket-size (burst-size-limit) Constant-rate token replenishment (bandwidth-limit) Bursty arrivals Enough tokens? Yes Accept packet and subtract packet size from bucket No Policer-action (discard, forwarding-class or loss-priority)
Policing Bandwidth-limit ustawiamy ile bitów jest dozwolonych w ciągu jednej sekundy, dozwolone wartości to także k,m,g Z uwagi na charakterystykę algorytmu token-bucket ilość akceptowanych pakietów w ciągu sekundy może być nieznacznie większa od bandwidth-limit Burst-size-limit definiuje jak duży jest bucket, a co za tym idzie jakie są możliwe przekroczenia limitów
Policing filter specific lub term specific Domyślnie junos tworzy jeden policer na każdy segment (term) Jeżeli filtr firewall posiada wiecej niż jeden segment gdzie akcją jest wykonanie policera, to dla każdego segmentu będzie oddzielny policer Słowo kluczowe filter-specific w konfiguracji policera powoduje utworzenie jednego policer na cały filtr firewall, wszystkie segmenty dzielą wtedy wspólnie dany policer
Policing firewall { family inet { filter limit-ssh { term 1 { from { protocol tcp; port ssh; then { policer 10m; accept; policer 10m { filter-specific; if-exceeding { bandwidth-limit 10m; burst-size-limit 625k; then discard;
Dziękuję za uwagę
DODATKI Przykładowy filtr Control Plane
FILTR Control Plane filter protect-re { term synflood-protect { from { source-prefix-list { bgp-neighbors; mgmt-nets; protocol tcp; tcp-flags "(syn &!ack) fin rst"; then { policer limit-100k; accept; term allow-bgp { from { prefix-list { bgp-neighbors; protocol tcp; destination-port bgp; then accept;
term allow-ospf { from { source-prefix-list { ipv4-interfaces; destination-prefix-list { ospf-all-routers; ipv4-interfaces; protocol ospf; then accept; term allow-ssh { from { prefix-list { mgmt-nets; protocol tcp; destination-port ssh; then { policer limit-10m; accept;
term allow-snmp { from { prefix-list { snmp-servers; protocol udp; destination-port 161; then { policer limit-1m; accept; term allow-ntp { from { prefix-list { ntp-servers; localhost; protocol udp; destination-port ntp; then { policer limit-32k; accept;
term allow-radius { from { prefix-list { radius-servers; protocol udp; source-port [ 1812 1813 1645 ]; then { policer limit-32k; accept; term icmp-frags { from { is-fragment; protocol icmp; then { syslog; discard;
term allow-icmp { from { protocol icmp; icmp-type [ echo-request echo-reply unreachable time-exceeded ]; then { policer limit-1m; accept; term allow-traceroute { from { protocol udp; destination-port 33434-33523; then { policer limit-1m; accept; term tcp-established { from { protocol tcp; source-port [ ssh bgp ]; tcp-established; then { policer limit-10m; accept;
term default-deny { then { log; syslog; discard;