Здесь уже есть несоклько статей про настройку маршрутизаторов Juniper SRX (например, раз, два, три и т.д.). В этой я постараюсь консолидировать полезную информацию, дополнив ее некоторыми приятными мелочами.
Всех заинтересовавшихся прошу под кат.
В мои руки попал новенький Juniper SRX240B и все нижесказанное будет относиться к нему. А т.к. JunOS позиционируется как единая ОС для всей серии (как минимум), то… сами делайте выводы. Также я использую версию JunOS 12.1X46-D20.5 (самая последняя, на момент публикации поста):
Для начала поставим небольшой круг задач, которые будем решать:
Поехали…
Для настройки source NAT достаточно выполнить следующие команды:
Или в виде конфига:
При таком конфиге ВСЕ сети, которые будут сконфинурированы на внутренних интерфейсах роутера будут NAT'иться. Если нужно NAT'ить только некоторые, то вместо:
нужно написать (пример приведен для сети 172.16.1.0/27):
Теперь настроим наш SRX в качестве DHCP сервера. Предполагается, что интерфейсы уже сконфигурированы и нам нужно настроить DHCP сервер только для интерфейса vlan.0:
Или в виде конфига:
В данном случае мы устанавливаем время жизни lease'а в 6 часов (6 * 60 мин * 60 сек = 21600 сек); default gateway делаем 172.16.1.1; начинаем раздавать адреса с 172.16.1.2 и заканчиваем 172.16.1.30 (диапазон, в пределах которого будет работать DHCP сервер).
Эти опции будут действовать только для интерфейса vlan.0. В случае необходимости, его можно заменить на реальное имя интерфейса, например на ge-0/0/1.
Статистику по DHCP серверу можно посмотреть следующей командой:
Теперь перейдем к настройке DNS сервера. Начиная с версии Junos OS 12.1x44D10 поддерживается DNS proxy, давайте же его настроим:
Или в виде конфига:
Здесь мы настроили работу DNS сервера на интерфейсе vlan.0; создали A-запись для gw-jsrx240.HOME.local (само собой таких записей можно сделать несколько); и настроили DNS forwarders для всех остальных DNS запросов.
Если DNS сервер нужно включить для всех внутренних интерфейсов, то это можно сделать следующим образом (если VLAN'ов несколько, то и настройки нужно делать соответствующие):
Или в виде конфига:
Статистику по DNS запросам можно посмотреть следующим образом:
Записи в DNS cahce посмотреть вот так (без вывода самого кэша устройства, т.к. записей там очень много):
Очистить DNS cache вот так:
Теперь попробуем обезопасить наш SSH сервер (даже если он смотрит наружу) (вместо SSH_RSA_PUBLIC_KEY нужно вставить свой SSH RSA Public Key):
Или в виде конфига:
Пояснения:
Я предпочитаю оставлять root'у возможность входить по паролю, но только через console; остальным пользователям только по ключам с указанными выше ограничениями.
Или в виде конфига:
Не забываем сделать commit, иначе никакие изменения не вступят в силу:
Итоговый конфиг можно посмотреть ниже. Маршрутизатор обладает всеми необходимыми функциями за вполне уместные деньги.
Если будет выдан инвайт, опишу настройки PPPoE, Dynamic VPN, Site-to-Site VPN и т.д.
Всех заинтересовавшихся прошу под кат.
В мои руки попал новенький Juniper SRX240B и все нижесказанное будет относиться к нему. А т.к. JunOS позиционируется как единая ОС для всей серии (как минимум), то… сами делайте выводы. Также я использую версию JunOS 12.1X46-D20.5 (самая последняя, на момент публикации поста):
cartman@gw-jsrx240# run show version
Hostname: gw-jsrx240
Model: srx240b
JUNOS Software Release [12.1X46-D20.5]
Для начала поставим небольшой круг задач, которые будем решать:
- Source NAT
- DHCP Server
- DNS Server
- SSH Hardening
- IDP, Security Features
Поехали…
Source NAT
Для настройки source NAT достаточно выполнить следующие команды:
cartman@gw-jsrx240# show security nat | display set
set security nat source rule-set trust-to-untrust from zone trust
set security nat source rule-set trust-to-untrust to zone untrust
set security nat source rule-set trust-to-untrust rule source-nat-rule match source-address 0.0.0.0/0
set security nat source rule-set trust-to-untrust rule source-nat-rule then source-nat interface
Или в виде конфига:
cartman@gw-jsrx240# show security nat
source {
rule-set trust-to-untrust {
from zone trust;
to zone untrust;
rule source-nat-rule {
match {
source-address 0.0.0.0/0;
}
then {
source-nat {
interface;
}
}
}
}
}
При таком конфиге ВСЕ сети, которые будут сконфинурированы на внутренних интерфейсах роутера будут NAT'иться. Если нужно NAT'ить только некоторые, то вместо:
set security nat source rule-set trust-to-untrust rule source-nat-rule match source-address 0.0.0.0/0
нужно написать (пример приведен для сети 172.16.1.0/27):
set security nat source rule-set trust-to-untrust rule source-nat-rule match source-address 172.16.1.0/27
DHCP Server
Теперь настроим наш SRX в качестве DHCP сервера. Предполагается, что интерфейсы уже сконфигурированы и нам нужно настроить DHCP сервер только для интерфейса vlan.0:
cartman@gw-jsrx240# show system services dhcp | display set
set system services dhcp maximum-lease-time 21600
set system services dhcp default-lease-time 21600
set system services dhcp pool 172.16.1.0/27 address-range low 172.16.1.2
set system services dhcp pool 172.16.1.0/27 address-range high 172.16.1.30
set system services dhcp pool 172.16.1.0/27 router 172.16.1.1
set system services dhcp propagate-settings vlan.0
Или в виде конфига:
cartman@gw-jsrx240# show system services dhcp
maximum-lease-time 21600;
default-lease-time 21600;
pool 172.16.1.0/27 {
address-range low 172.16.1.2 high 172.16.1.30;
router {
172.16.1.1;
}
}
propagate-settings vlan.0;
В данном случае мы устанавливаем время жизни lease'а в 6 часов (6 * 60 мин * 60 сек = 21600 сек); default gateway делаем 172.16.1.1; начинаем раздавать адреса с 172.16.1.2 и заканчиваем 172.16.1.30 (диапазон, в пределах которого будет работать DHCP сервер).
Эти опции будут действовать только для интерфейса vlan.0. В случае необходимости, его можно заменить на реальное имя интерфейса, например на ge-0/0/1.
Статистику по DHCP серверу можно посмотреть следующей командой:
cartman@gw-jsrx240# run show system services dhcp statistics
Packets dropped:
Total 0
Messages received:
BOOTREQUEST 0
DHCPDECLINE 0
DHCPDISCOVER 0
DHCPINFORM 0
DHCPRELEASE 0
DHCPREQUEST 0
Messages sent:
BOOTREPLY 0
DHCPOFFER 0
DHCPACK 0
DHCPNAK 0
DNS Server
Теперь перейдем к настройке DNS сервера. Начиная с версии Junos OS 12.1x44D10 поддерживается DNS proxy, давайте же его настроим:
cartman@gw-jsrx240# show system services dns | display set
set system services dns forwarders 8.8.8.8
set system services dns forwarders 8.8.4.4
set system services dns dns-proxy interface vlan.0
set system services dns dns-proxy cache gw-jsrx240.HOME.local inet 172.16.1.1
Или в виде конфига:
cartman@gw-jsrx240# show system services dns
forwarders {
8.8.8.8;
8.8.4.4;
}
dns-proxy {
interface {
vlan.0;
}
cache {
gw-jsrx240.HOME.local inet 172.16.1.1;
}
}
Здесь мы настроили работу DNS сервера на интерфейсе vlan.0; создали A-запись для gw-jsrx240.HOME.local (само собой таких записей можно сделать несколько); и настроили DNS forwarders для всех остальных DNS запросов.
Если DNS сервер нужно включить для всех внутренних интерфейсов, то это можно сделать следующим образом (если VLAN'ов несколько, то и настройки нужно делать соответствующие):
cartman@gw-jsrx240# show system name-server | display set
set system name-server 172.16.1.1
Или в виде конфига:
cartman@gw-jsrx240# show system name-server
172.16.1.1;
Статистику по DNS запросам можно посмотреть следующим образом:
cartman@gw-jsrx240# run show system services dns-proxy statistics
DNS proxy statistics :
Status : enabled
IPV4 Queries received : 0
IPV6 Queries received : 0
Responses sent : 0
Queries forwarded : 0
Negative responses : 0
Positive responses : 0
Retry requests : 0
Pending requests : 0
Server failures : 0
Interfaces : vlan.0
Записи в DNS cahce посмотреть вот так (без вывода самого кэша устройства, т.к. записей там очень много):
cartman@gw-jsrx240# run show system services dns-proxy cache
Очистить DNS cache вот так:
cartman@gw-jsrx240# run clear system services dns-proxy cache
SSH Hardening
Теперь попробуем обезопасить наш SSH сервер (даже если он смотрит наружу) (вместо SSH_RSA_PUBLIC_KEY нужно вставить свой SSH RSA Public Key):
cartman@gw-jsrx240# show system services ssh | display set
set system services ssh root-login deny
set system services ssh protocol-version v2
set system services ssh connection-limit 5
set system services ssh rate-limit 5
cartman@gw-jsrx240# show system login | display set
set system login retry-options tries-before-disconnect 5
set system login retry-options backoff-threshold 1
set system login retry-options backoff-factor 10
set system login retry-options minimum-time 30
set system login user cartman full-name "FIRST_NAME LAST_NAME"
set system login user cartman uid 2000
set system login user cartman class super-user
set system login user cartman authentication ssh-rsa "SSH_RSA_PUBLIC_KEY"
Или в виде конфига:
cartman@gw-jsrx240# show system services ssh
root-login deny;
protocol-version v2;
connection-limit 5;
rate-limit 5;
cartman@gw-jsrx240# show system login
retry-options {
tries-before-disconnect 5;
backoff-threshold 1;
backoff-factor 10;
minimum-time 30;
}
user cartman {
full-name "FIRST_NAME LAST_NAME";
uid 2000;
class super-user;
authentication {
ssh-rsa "SSH_RSA_PUBLIC_KEY"; ## SECRET-DATA
}
}
Пояснения:
- root-login deny — запрещаем root'у подключаться по SSH
- protocol-version v2 — используем только версию протокола SSHv2
- connection-limit 5 — максимальное количество одновременных SSH подключений
- rate-limit 5 — максимальное количество SSH подключений в минуту
- tries-before-disconnect 5 — сколько раз будет разрешено попыток ввода пароля, после чего сессия будет разорвана
- backoff-threshold 1 — через ЭТО количество неправильных попыток ввода пароля будет включена задержка
- backoff-factor 10 — после достижения backoff-threshold пользователь будет заблокирован на 10 сек.
- minimum-time 30 — количество секунд, отведенное на ввод пароля, после чего сессия будет разорвана
Я предпочитаю оставлять root'у возможность входить по паролю, но только через console; остальным пользователям только по ключам с указанными выше ограничениями.
IDP, Security Features
cartman@gw-jsrx240# show security screen | display set
set security screen ids-option untrust-screen icmp ping-death
set security screen ids-option untrust-screen ip source-route-option
set security screen ids-option untrust-screen ip tear-drop
set security screen ids-option untrust-screen tcp syn-flood alarm-threshold 1024
set security screen ids-option untrust-screen tcp syn-flood attack-threshold 200
set security screen ids-option untrust-screen tcp syn-flood source-threshold 1024
set security screen ids-option untrust-screen tcp syn-flood destination-threshold 2048
set security screen ids-option untrust-screen tcp syn-flood timeout 20
set security screen ids-option untrust-screen tcp land
Или в виде конфига:
cartman@gw-jsrx240# show security screen
ids-option untrust-screen {
icmp {
ping-death;
}
ip {
source-route-option;
tear-drop;
}
tcp {
syn-flood {
alarm-threshold 1024;
attack-threshold 200;
source-threshold 1024;
destination-threshold 2048;
timeout 20;
}
land;
}
}
В самом конце...
Не забываем сделать commit, иначе никакие изменения не вступят в силу:
cartman@gw-jsrx240# commit check
configuration check succeeds
cartman@gw-jsrx240# commit
commit complete
Итого
Итоговый конфиг можно посмотреть ниже. Маршрутизатор обладает всеми необходимыми функциями за вполне уместные деньги.
cartman@gw-jsrx240# show
cartman@gw-jsrx240# show
## Last changed: 2014-07-12 20:15:48 MSK
version 12.1X46-D20.5;
system {
host-name gw-jsrx240;
domain-name HOME.local;
domain-search HOME.local;
time-zone Europe/Moscow;
authentication-order password;
root-authentication {
encrypted-password "$1$ENCRYPTED_PASSWORD"; ## SECRET-DATA
}
name-server {
172.16.1.1;
}
name-resolution {
no-resolve-on-input;
}
login {
retry-options {
tries-before-disconnect 5;
backoff-threshold 1;
backoff-factor 10;
minimum-time 30;
}
user cartman {
full-name «FIRST_NAME LAST_NAME»;
uid 2000;
class super-user;
authentication {
ssh-rsa «SSH_RSA_PUBLIC_KEY»; ## SECRET-DATA
}
}
}
services {
ssh {
root-login deny;
protocol-version v2;
connection-limit 5;
rate-limit 5;
}
dns {
forwarders {
8.8.8.8;
8.8.4.4;
}
dns-proxy {
interface {
vlan.0;
}
cache {
gw-jsrx240.HOME.local inet 172.16.1.1;
}
}
}
web-management {
https {
port 443;
system-generated-certificate;
interface vlan.0;
}
session {
idle-timeout 300;
session-limit 2;
}
}
dhcp {
maximum-lease-time 21600;
default-lease-time 21600;
pool 172.16.1.0/27 {
address-range low 172.16.1.2 high 172.16.1.30;
router {
172.16.1.1;
}
}
propagate-settings vlan.0;
}
}
syslog {
archive size 100k files 3;
user * {
any emergency;
}
file messages {
any critical;
authorization info;
}
file interactive-commands {
interactive-commands error;
}
}
max-configurations-on-flash 5;
max-configuration-rollbacks 5;
license {
autoupdate {
url ae1.juniper.net/junos/key_retrieval;
}
}
ntp {
server 0.pool.ntp.org prefer;
server 1.pool.ntp.org;
server 2.pool.ntp.org;
server 3.pool.ntp.org;
}
}
interfaces {
interface-range interfaces-trust {
member-range ge-0/0/1 to ge-0/0/15;
unit 0 {
family ethernet-switching {
vlan {
members vlan-trust;
}
}
}
}
ge-0/0/0 {
unit 0 {
family inet {
dhcp;
}
}
}
ge-0/0/1 {
unit 0 {
family ethernet-switching {
vlan {
members vlan-trust;
}
}
}
}
ge-0/0/2 {
unit 0 {
family ethernet-switching {
vlan {
members vlan-trust;
}
}
}
}
ge-0/0/3 {
unit 0 {
family ethernet-switching {
vlan {
members vlan-trust;
}
}
}
}
ge-0/0/4 {
unit 0 {
family ethernet-switching {
vlan {
members vlan-trust;
}
}
}
}
ge-0/0/5 {
unit 0 {
family ethernet-switching {
vlan {
members vlan-trust;
}
}
}
}
ge-0/0/6 {
unit 0 {
family ethernet-switching {
vlan {
members vlan-trust;
}
}
}
}
ge-0/0/7 {
unit 0 {
family ethernet-switching {
vlan {
members vlan-trust;
}
}
}
}
ge-0/0/8 {
unit 0 {
family ethernet-switching {
vlan {
members vlan-trust;
}
}
}
}
ge-0/0/9 {
unit 0 {
family ethernet-switching {
vlan {
members vlan-trust;
}
}
}
}
ge-0/0/10 {
unit 0 {
family ethernet-switching {
vlan {
members vlan-trust;
}
}
}
}
ge-0/0/11 {
unit 0 {
family ethernet-switching {
vlan {
members vlan-trust;
}
}
}
}
ge-0/0/12 {
unit 0 {
family ethernet-switching {
vlan {
members vlan-trust;
}
}
}
}
ge-0/0/13 {
unit 0 {
family ethernet-switching {
vlan {
members vlan-trust;
}
}
}
}
ge-0/0/14 {
unit 0 {
family ethernet-switching {
vlan {
members vlan-trust;
}
}
}
}
ge-0/0/15 {
unit 0 {
family ethernet-switching {
vlan {
members vlan-trust;
}
}
}
}
vlan {
unit 0 {
family inet {
address 172.16.1.1/27;
}
}
}
}
protocols {
stp;
}
security {
screen {
ids-option untrust-screen {
icmp {
ping-death;
}
ip {
source-route-option;
tear-drop;
}
tcp {
syn-flood {
alarm-threshold 1024;
attack-threshold 200;
source-threshold 1024;
destination-threshold 2048;
timeout 20;
}
land;
}
}
}
nat {
source {
rule-set trust-to-untrust {
from zone trust;
to zone untrust;
rule source-nat-rule {
match {
source-address 0.0.0.0/0;
}
then {
source-nat {
interface;
}
}
}
}
}
}
policies {
from-zone trust to-zone untrust {
policy trust-to-untrust {
match {
source-address any;
destination-address any;
application any;
}
then {
permit;
}
}
}
from-zone trust to-zone trust {
policy trust-to-trust {
match {
source-address any;
destination-address any;
application any;
}
then {
permit;
}
}
}
}
zones {
security-zone untrust {
screen untrust-screen;
interfaces {
ge-0/0/0.0 {
host-inbound-traffic {
system-services {
ping;
ssh;
dhcp;
}
}
}
}
}
security-zone trust {
host-inbound-traffic {
system-services {
all;
}
protocols {
all;
}
}
interfaces {
vlan.0;
}
}
}
}
vlans {
vlan-trust {
vlan-id 10;
l3-interface vlan.0;
}
}
## Last changed: 2014-07-12 20:15:48 MSK
version 12.1X46-D20.5;
system {
host-name gw-jsrx240;
domain-name HOME.local;
domain-search HOME.local;
time-zone Europe/Moscow;
authentication-order password;
root-authentication {
encrypted-password "$1$ENCRYPTED_PASSWORD"; ## SECRET-DATA
}
name-server {
172.16.1.1;
}
name-resolution {
no-resolve-on-input;
}
login {
retry-options {
tries-before-disconnect 5;
backoff-threshold 1;
backoff-factor 10;
minimum-time 30;
}
user cartman {
full-name «FIRST_NAME LAST_NAME»;
uid 2000;
class super-user;
authentication {
ssh-rsa «SSH_RSA_PUBLIC_KEY»; ## SECRET-DATA
}
}
}
services {
ssh {
root-login deny;
protocol-version v2;
connection-limit 5;
rate-limit 5;
}
dns {
forwarders {
8.8.8.8;
8.8.4.4;
}
dns-proxy {
interface {
vlan.0;
}
cache {
gw-jsrx240.HOME.local inet 172.16.1.1;
}
}
}
web-management {
https {
port 443;
system-generated-certificate;
interface vlan.0;
}
session {
idle-timeout 300;
session-limit 2;
}
}
dhcp {
maximum-lease-time 21600;
default-lease-time 21600;
pool 172.16.1.0/27 {
address-range low 172.16.1.2 high 172.16.1.30;
router {
172.16.1.1;
}
}
propagate-settings vlan.0;
}
}
syslog {
archive size 100k files 3;
user * {
any emergency;
}
file messages {
any critical;
authorization info;
}
file interactive-commands {
interactive-commands error;
}
}
max-configurations-on-flash 5;
max-configuration-rollbacks 5;
license {
autoupdate {
url ae1.juniper.net/junos/key_retrieval;
}
}
ntp {
server 0.pool.ntp.org prefer;
server 1.pool.ntp.org;
server 2.pool.ntp.org;
server 3.pool.ntp.org;
}
}
interfaces {
interface-range interfaces-trust {
member-range ge-0/0/1 to ge-0/0/15;
unit 0 {
family ethernet-switching {
vlan {
members vlan-trust;
}
}
}
}
ge-0/0/0 {
unit 0 {
family inet {
dhcp;
}
}
}
ge-0/0/1 {
unit 0 {
family ethernet-switching {
vlan {
members vlan-trust;
}
}
}
}
ge-0/0/2 {
unit 0 {
family ethernet-switching {
vlan {
members vlan-trust;
}
}
}
}
ge-0/0/3 {
unit 0 {
family ethernet-switching {
vlan {
members vlan-trust;
}
}
}
}
ge-0/0/4 {
unit 0 {
family ethernet-switching {
vlan {
members vlan-trust;
}
}
}
}
ge-0/0/5 {
unit 0 {
family ethernet-switching {
vlan {
members vlan-trust;
}
}
}
}
ge-0/0/6 {
unit 0 {
family ethernet-switching {
vlan {
members vlan-trust;
}
}
}
}
ge-0/0/7 {
unit 0 {
family ethernet-switching {
vlan {
members vlan-trust;
}
}
}
}
ge-0/0/8 {
unit 0 {
family ethernet-switching {
vlan {
members vlan-trust;
}
}
}
}
ge-0/0/9 {
unit 0 {
family ethernet-switching {
vlan {
members vlan-trust;
}
}
}
}
ge-0/0/10 {
unit 0 {
family ethernet-switching {
vlan {
members vlan-trust;
}
}
}
}
ge-0/0/11 {
unit 0 {
family ethernet-switching {
vlan {
members vlan-trust;
}
}
}
}
ge-0/0/12 {
unit 0 {
family ethernet-switching {
vlan {
members vlan-trust;
}
}
}
}
ge-0/0/13 {
unit 0 {
family ethernet-switching {
vlan {
members vlan-trust;
}
}
}
}
ge-0/0/14 {
unit 0 {
family ethernet-switching {
vlan {
members vlan-trust;
}
}
}
}
ge-0/0/15 {
unit 0 {
family ethernet-switching {
vlan {
members vlan-trust;
}
}
}
}
vlan {
unit 0 {
family inet {
address 172.16.1.1/27;
}
}
}
}
protocols {
stp;
}
security {
screen {
ids-option untrust-screen {
icmp {
ping-death;
}
ip {
source-route-option;
tear-drop;
}
tcp {
syn-flood {
alarm-threshold 1024;
attack-threshold 200;
source-threshold 1024;
destination-threshold 2048;
timeout 20;
}
land;
}
}
}
nat {
source {
rule-set trust-to-untrust {
from zone trust;
to zone untrust;
rule source-nat-rule {
match {
source-address 0.0.0.0/0;
}
then {
source-nat {
interface;
}
}
}
}
}
}
policies {
from-zone trust to-zone untrust {
policy trust-to-untrust {
match {
source-address any;
destination-address any;
application any;
}
then {
permit;
}
}
}
from-zone trust to-zone trust {
policy trust-to-trust {
match {
source-address any;
destination-address any;
application any;
}
then {
permit;
}
}
}
}
zones {
security-zone untrust {
screen untrust-screen;
interfaces {
ge-0/0/0.0 {
host-inbound-traffic {
system-services {
ping;
ssh;
dhcp;
}
}
}
}
}
security-zone trust {
host-inbound-traffic {
system-services {
all;
}
protocols {
all;
}
}
interfaces {
vlan.0;
}
}
}
}
vlans {
vlan-trust {
vlan-id 10;
l3-interface vlan.0;
}
}
Если будет выдан инвайт, опишу настройки PPPoE, Dynamic VPN, Site-to-Site VPN и т.д.