В этой статье я приведу пример ограничения доступа к управлению Juniper MX204, с использованием брандмауэра (firewall).
Допустим сервисы SSH и Telnet активированы, создан пользователь и назначен IP адрес какому либо интерфейсу:
configure
set system services ssh
set system services telnet
show system services
set system login user ixnfo authentication plain-text-password
set system login user ixnfo class super-user
set interfaces fxp0 unit 0 family inet address 192.168.24.200/24
set routing-options static route 0.0.0.0/0 next-hop 192.168.24.1 no-readvertise
show routing-options
set interfaces lo0 unit 0 family inet address 172.17.0.1/21
set interfaces et-0/0/2 unit 500 family inet address 192.168.90.8/28
Теперь приступим к созданию списка разрешенных IP адресов, с которых можно будет подключиться к устройству по SSH или Telnet, например назовем его «manager-ip»:
set policy-options prefix-list manager-ip 192.168.24.0/24
set policy-options prefix-list manager-ip 10.0.5.1/32
show policy-options
edit policy-options
delete prefix-list manager-ip 10.0.5.1/32
show
exit
Теперь создадим в брандмауэре фильтр, например назовем его «limit-mgmt-access», в котором запретим всем подключение к tcp портам ssh и telnet, а разрешим только IP адресам указанным в списке manager-ip:
set firewall filter limit-mgmt-access term block_non_manager from source-address 0.0.0.0/0
set firewall filter limit-mgmt-access term block_non_manager from source-prefix-list manager-ip except
set firewall filter limit-mgmt-access term block_non_manager from protocol tcp
set firewall filter limit-mgmt-access term block_non_manager from destination-port ssh
set firewall filter limit-mgmt-access term block_non_manager from destination-port 2222
set firewall filter limit-mgmt-access term block_non_manager from destination-port telnet
set firewall filter limit-mgmt-access term block_non_manager from destination-port snmp
set firewall filter limit-mgmt-access term block_non_manager from destination-port dhcp
set firewall filter limit-mgmt-access term block_non_manager from destination-port bgp
set firewall filter limit-mgmt-access term block_non_manager then log
set firewall filter limit-mgmt-access term block_non_manager then discard
set firewall filter limit-mgmt-access term accept_everything_else then accept
Правило «then log» позволяет писать логи подключений для отладки и его можно не указывать или позже удалить.
Последнее правило обязательно укажем, оно разрешает весь остальной входящий трафик.
Если порт ssh не стандартный или нужно ограничить доступ к еще к каким-то службам, то перечислим номера портов, например «from destination-port 2222».
Посмотрим на созданный фильтр в брандмауэре:
run show firewall
Применим созданный фильтр на нужные интерфейсы с IP адресами (если указать фильтр на lo0, то он может повлиять и на другие интерфейсы):
set interfaces lo0 unit 0 family inet filter input limit-mgmt-access
set interfaces fxp0 unit 0 family inet filter input limit-mgmt-access
set interfaces et-0/0/2 unit 500 family inet filter input limit-mgmt-access
show interfaces
Выйдем в CLI и посмотрим логи брандмауэра:
exit
show firewall log
show firewall log detail
clear firewall log
Из CLI также можно подключаться по SSH к другим устройствам:
ssh user@10.0.5.254
exit
Приведу еще пример создания фильтра который разрешает трафик SSH и BGP для указанных сетей и блокирует весь остальной (хочу заметить, если на Juniper настроены DHCP, Radius, то их нужно тоже перечислить, иначе пользователям не будут выданы IP адреса и т.д.):
set firewall family inet filter protect-RE term ssh-term from source-address 172.15.0.5/28
set firewall family inet filter protect-RE term ssh-term from source-address 10.0.0.0/24
set firewall family inet filter protect-RE term ssh-term from protocol tcp
set firewall family inet filter protect-RE term ssh-term from destination-port 2222
set firewall family inet filter protect-RE term ssh-term then accept
set firewall family inet filter protect-RE term bgp-term from source-address 10.2.1.0/24
set firewall family inet filter protect-RE term bgp-term from protocol tcp
set firewall family inet filter protect-RE term bgp-term from destination-port bgp
set firewall family inet filter protect-RE term bgp-term then accept
set firewall family inet filter protect-RE term discard-rest-term then log
set firewall family inet filter protect-RE term discard-rest-term then syslog
set firewall family inet filter protect-RE term discard-rest-term then discard
set interfaces lo0 unit 0 family inet filter input protect-RE
Еще пример, разрешаем подключения на все порты к Juniper для указанных сетей и блокируем для остальных:
set firewall family inet filter protect-RE term allow-all from source-address 172.15.0.5/32
set firewall family inet filter protect-RE term allow-all from source-address 10.0.10.0/24
set firewall family inet filter protect-RE term allow-all from protocol tcp
set firewall family inet filter protect-RE term allow-all from destination-port 0-65535
set firewall family inet filter protect-RE term allow-all then accept
set firewall family inet filter protect-RE term discard-rest-term then log
set firewall family inet filter protect-RE term discard-rest-term then syslog
set firewall family inet filter protect-RE term discard-rest-term then discard
set interfaces lo0 unit 0 family inet filter input protect-RE
Чтобы убедиться что в фильтре перечислили все открытые порты, то можно из Linux выполнить сканирование портов, например:
nmap -p1-65535 192.168.55.55
Можно сделать несколько фильтров и потом указать их через «filter input-list».
Не рекомендую использовать reject вместо discard, так как с reject на RE будут генерироваться ответы на пакеты, что затратно для CPU.
Смотрите также мои статьи:
Настройка Juniper MX204
IPTables правила для DHCP