Обмежте доступ SSH до конкретних клієнтів за IP-адресою


22

Як ми дозволяємо певному набору приватних IP-адрес входити через вхід SSH (пара ключів RSA) в Linux Server?


3
Правила брандмауера - це звичайний спосіб дії
Раман Сайлопал

2
брандмауер або /etc/hosts.allow, якщо ssh компілювати w / TCP обгортки або / etc / ssh / sshd_config правила файлу.
Rui F Ribeiro

більш ніж один спосіб зробити, зверніться до linux.die.net/man/5/sshd_config , який пояснює все в/etc/ssh/sshd_config
рон

Відповіді:


42

Ви можете обмежити, які хости можуть підключатися, налаштовуючи обгортки TCP  або фільтруючи мережевий трафік (брандмауер) за допомогою iptables . Якщо ви хочете використовувати різні методи аутентифікації залежно від IP-адреси клієнта, налаштуйте натомість демон SSH (варіант 3).

Варіант 1: Фільтрування за допомогою IPTABLES

Правила iptables оцінюються в порядку, до першого відповідності.

Наприклад, дозволити трафік з мережі 192.168.0.0/24 і в іншому випадку скинути трафік (до порту 22). DROPПравила не потрібно , якщо ваша політика Iptables по замовчуванням налаштована на DROP.

iptables -A INPUT -p tcp --dport 22 --source 192.168.0.0/24 -j ACCEPT
iptables -A INPUT -p tcp --dport 22 -j DROP

Ви можете додати більше правил до правила скидання, щоб відповідати більшості мереж / хостів. Якщо у вас багато мереж або адрес хостів, слід використовувати модуль ipset . Також є модуль iprange, який дозволяє використовувати будь-який довільний діапазон IP-адрес.

Iptables не зберігаються під час перезавантаження. Потрібно налаштувати якийсь механізм відновлення iptables під час завантаження.

iptablesзастосовуються лише до трафіку IPv4. Системи, які мають ssh прослуховування IPv6, адресують необхідну конфігурацію ip6tables.

Варіант 2: Використання обгортки TCP

Ви також можете налаштувати, які хости можуть підключатися, використовуючи обгортки TCP. З TCP обгортками, крім IP-адрес, ви можете також використовувати імена хостів у правилах.

За замовчуванням відхилити всі хости.

/etc/hosts.deny:

sshd : ALL

Потім список дозволених хостів у hosts.allow. Наприклад, дозволити мережу 192.168.0.0/24 та localhost .

/etc/hosts.allow:

sshd : 192.168.0.0/24
sshd : 127.0.0.1
sshd : [::1]

Варіант 3: Конфігурація демона SSH

Ви можете налаштувати ssh daemon в sshd_config для використання різних методів аутентифікації залежно від адреси клієнта / імені хоста. Якщо ви хочете лише заблокувати підключення інших хостів, натомість слід використовувати iptables або TCP обгортки.

Спочатку видаліть методи аутентифікації за замовчуванням:

PasswordAuthentication no
PubkeyAuthentication no

Потім додайте потрібні методи аутентифікації після Match Addressв кінці файлу. Розміщення Matchв кінці файлу важливо, оскільки всі конфігураційні лінії після нього розміщуються всередині умовного блоку до наступного Matchрядка. Наприклад:

Match Address 127.0.0.*
    PubkeyAuthentication yes

Інші клієнти все ще можуть підключитися, але реєстрація не вдасться, оскільки немає доступних методів аутентифікації.

Аргументи відповідності та дозволені параметри умовної конфігурації задокументовані на головній сторінці sshd_config . Шаблони відповідності задокументовані на чоловічій сторінці ssh_config .


Що щодо додавання директиви ListenAddress в / etc / ssh / sshd_config?
ієронім

Це можливо в конкретних ситуаціях (наприклад, прослуховування приватної адреси мережі), залежно від конфігурації мережі та хостів, які ви хочете дозволити.
sebasth

2
Крім того, sshd_config може встановлювати фільтрацію за директивою AlowUsers, а також, щоб дозволити фільтри також можна встановити "від IP або підмережі".
tonioc

@tonioc Відмінне рішення для мого використання. Розгорніть цю пропозицію у відповідь.
simlev

якщо у вас є NIC з 4 портами, кожен з яких переходить в іншу мережу, то за замовчуванням #ListenAddress ::в /etc/ssh/sshd_configсервер повідомляє SSH-сервер приймати вхід з будь-якої з цих мереж. В іншому випадку зробіть, ListenAddress <ip address>де <ip address>знаходиться той порт NIC, який ви хочете дозволити. Мій eth0є 192.168.3.4тому ListenAddress 192.168.3.4призводить до SSH тільки працюють в мережі 192.168.3.4 , яка знаходиться на eth0; і eth1 eth2 eth3 заперечується.
ron

5

Ось додаткова конфігурація демона SSH для розширення попередньої відповіді:

  • Додати фільтрацію користувача за допомогою AllowUsersпараметра у sshd_configфайлі:

    AllowUsers johndoe@192.168.1.* admin2@192.168.1.* otherid1 otherid2
    

    Це дозволяє johndoe та admin2 лише з 192.168.1.*адрес та otherid1 , otherid2 з будь-якого місця.

  • Обмежте ключ ssh або ключ на основі набору адрес у .ssh/authorized_keysфайлі домашнього каталогу певного користувача:

    from="192.168.1.*,192.168.2.*" ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABA...etc...mnMo7n1DD useralias
    

    У цьому прикладі відкритий ключ для useralias буде ефективним лише з вказаних адрес.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.