«Что угодно делают, лишь бы не писать ACL» (c)
Junos не позволяет сменить номер ssh порта стандартными средствами, однако есть возможность сделать DNAT с любого порта на адрес lo0:22 например. В данной статье мы попробуем это сделать средствами OS. Все это использовать в продакшене не желательно!
Junos базируется на базе FreeBSD, поэтому мы попробуем поискать sshd «на удачу»:
1 2 3 4 5 6 7 |
user@> start shell user root root@% grep -r ssh /etc/*.conf /etc/inetd.conf:ssh stream tcp/rt=shared nowait/75/150 root /usr/sbin/sshd sshd -i -f /var/etc/sshd_conf /etc/inetd.conf:ssh stream tcp6/rt=shared nowait/75/150 root /usr/sbin/sshd sshd -i -f /var/etc/sshd_conf root@% ps x | grep inetd 3182 ?? I 0:00.01 /usr/sbin/inetd -N -w |
Видно что sshd стартует из inetd, используя TCP Wrappers. В качестве номера порта для сервиса, inetd использует его имя, которое указано в /etc/services :
1 2 3 |
root@% grep ssh /etc/services ssh 22/tcp #Secure Shell Login ssh 22/udp #Secure Shell Login |
Попробуем его сменить:
1 |
root@% sed -i.bak 's/ 22\/tcp/ 2222\/tcp/' /etc/services |
И перечитаем конфигурацию inetd:
1 |
root@% kill -HUP `cat /var/run/inetd.pid` |
Можно также выполнить « deactivate system services ssh » c « commit confirmed 1 «, или другого сервиса, например telnet.
Эту операцию можно выполнять удаленно, текущая сессия не потеряется, главное не забыть добавить разрешающий порт в правило фаервола, после перезапуска:
1 2 3 4 |
root@% netstat -anl | grep 22 tcp6 0 0 *.2222 *.* LISTEN tcp4 0 0 *.2222 *.* LISTEN tcp4 0 0 172.31.30.5.22 172.31.30.6.53920 ESTABLISHED |
Пробуем подкючится по новому порту:
1 2 3 4 |
# ssh 172.31.30.5 -p 2222 Password: --- JUNOS 14.1R1.10 built 2014-06-07 09:37:07 UTC root@% |
Можно просто добавить в «автозапуск» еще один sshd, с нужным портом:
1 |
root@% echo '/usr/sbin/sshd -p 2222' >> /etc/rc.local |
Далее запустить вручную:
1 2 3 |
root@% /usr/sbin/sshd -p 2222 root@% ps x | grep sshd 2297 ?? Is 0:00.00 /usr/sbin/sshd -p 2222 |
Пробуем отключить стандартный sshd:
1 2 3 4 5 6 7 8 |
root# deactivate system services ssh root# commit # ssh 172.31.30.5 -p 22 ssh: connect to host 172.31.30.5 port 22: Connection refused # ssh 172.31.30.5 -p 2222 Password: |
Упоминание о ssh пропало в inetd:
1 2 |
root@% grep ssh /etc/inetd.conf root@% |
Т.к файл /etc/services может перезаписываться при обновлении, повесим флаг запрещающий это делать (не повторять в продакшене):
1 2 3 |
root@% chflags schg,sunlnk /etc/services root@% ls -lo /etc/services -rw-r--r-- 1 930 929 schg,sunlnk 76715 Sep 5 09:51 /etc/services |
Сбросить все флаги:
1 |
root@% chflags 0 /etc/services |
При использовании фильтров « destination-port ssh » останется номером 22, это нужно учитывать.
1 2 3 4 |
set firewall filter rp-ssh term ssh from source-address 0.0.0.0/0 set firewall filter rp-ssh term ssh from destination-port ssh set firewall filter rp-ssh term ssh from destination-port 2222 set firewall filter rp-ssh term ssh then accept |