Приведу пример блокировки SMTP порта 25 TCP, чтобы пользователи не могли рассылать спам на сервера, то есть не могли выполнить исходящее соединение с портом назначения 25 TCP, вместо него они могут выполнить соединение на порты с авторизацией и шифрованием, например 465 или 587.
Приведу пример фильтра (сначала можно разрешить соединения кому-то, потом заблокировать остальным):
edit firewall family inet filter BLOCK-PORT-25
set interface-specific
set term ALLOW-PORT-25 from source-address 10.0.2.6/32
set term ALLOW-PORT-25 from protocol tcp
set term ALLOW-PORT-25 from destination-port 25
set term ALLOW-PORT-25 then accept
set term BLOCK-PORT-25 from source-address 10.0.2.0/24
set term BLOCK-PORT-25 from source-address x.x.x.128/25
set term BLOCK-PORT-25 from protocol tcp
set term BLOCK-PORT-25 from destination-port 25
set term BLOCK-PORT-25 then discard
set term ALLOW-OTHER then accept
Фильтр применить нужно на исходящем интерфейсе (WAN), который смотрит в интернет, и только для исходящего трафика:
set interfaces ge-0/0/0 unit 0 family inet filter output BLOCK-PORT-25
Например у меня много исходящих VLAN интерфейсов по которым балансируется трафик по BGP, и на которых уже есть фильтр (блокировал доступ к некоторым сетям в интернете), пример:
edit interfaces ae0
set unit 555 family inet filter output blacklist-ip-drop
set unit 556 family inet filter output blacklist-ip-drop
...
Можно конечно указать одновременно несколько фильтров, но если в первом фильтре в конце есть term ALLOW-OTHER then accept, то второй фильтр не будет работать:
set unit 555 family inet filter output-list [ blacklist-ip-drop BLOCK-PORT-25 ]
По этому я отредактировал существующий фильтр:
edit firewall family inet filter blacklist-ip-drop
Удалил последний term:
delete term other then accept
Добавил правила:
set term ALLOW-PORT-25 from source-address 10.0.2.6/32
set term ALLOW-PORT-25 from protocol tcp
set term ALLOW-PORT-25 from destination-port 25
set term ALLOW-PORT-25 then accept
set term BLOCK-PORT-25 from source-address 10.0.2.0/24
set term BLOCK-PORT-25 from source-address x.x.x.128/25
set term BLOCK-PORT-25 from protocol tcp
set term BLOCK-PORT-25 from destination-port 25
set term BLOCK-PORT-25 then discard
И обязательно снова добавил в конце term который разрешает весь остальной трафик (иначе без него перестанет работать интернет):
set term ALLOW-OTHER then accept
Замечу если фильтр используется после NAT, а на моем примере это так и есть, то нужно указать не серую сеть, а белую которая используется для NAT.
Применим временную конфигурацию и убедимся что все работает (confirmed 10 позволит автоматически отменить изменения через 10 минут на случай если неправильно написали фильтр и потеряли связь с устройством):
commit check
commit confirmed 10
Если все хорошо, то сохраним конфигурацию (нужно успеть до истечения 10 минут):
commit comment "apply filter BLOCK-PORT-25"
До и после применения фильтра можно протестировать соединение с портом 25 по telnet с любым почтовым сервером, например мне попался под руку smtp.google.com, соединение установилось и отобразилось:
220 mx.google.com ESMTP ... - gsmtp
После применения фильтра ничего не отобразилось)
Смотрите также мои статьи: