Неожиданное поведение совпадения в sshd_config

Я пытаюсь настроить следующие ограничения в моем sshd_config :

  1. Пользователи с локальными IP-адресами не имеют ограничений
  2. Пользователи с нелокальными IP-адресами, входящие в группу sftp , могут использовать sftp в chroot-тюрьме
  3. Пользователи с нелокальными IP-адресами, которые не входят в группу sftp , не могут ничего делать.

Вот что я придумал:

 Match Address 10.0.0.0/24,172.16.0.0/20,192.168.0.0/16 X11Forwarding yes Match Address *,!10.0.0.0/24,!172.16.0.0/20,!192.168.0.0/16 Group sftp X11Forwarding no AllowTcpForwarding no ChrootDirectory %h ForceCommand internal-sftp Match Address *,!10.0.0.0/24,!172.16.0.0/20,!192.168.0.0/16 Group *,!sftp X11Forwarding no AllowTcpForwarding no ForceCommand /sbin/nologin 

Проблема: когда я пытаюсь войти с внутреннего адреса, как пользователь, не являющийся sftp, я получаю отклонение; Третий Матч начался.

Согласно man-странице sshd_config , соответствие выполняется только в том случае, если все его предложения выполнены, но в моем случае первое предложение не выполняется (я прихожу с машины с адресом 172.16.0.0/20 IP), только второй – это (я не в группе sftp).

Неправильная sshd_config страница sshd_config ? Можно ли делать то, что я пытаюсь сделать?

UPDATE: по предложению @ steve я запускал sshd в режиме отладки и получил следующее:

 debug1: userauth-request for user root service ssh-connection method none debug1: attempt 0 failures 0 debug1: connection from 172.19.187.49 matched 'Address *,!10.0.0.0/24,!172.16.0.0/20,!192.168.0.0/16' at line 144 debug1: user root does not match group list sftp at line 144 debug1: connection from 172.19.187.49 matched 'Address *,!10.0.0.0/24,!172.16.0.0/20,!192.168.0.0/16' at line 150 debug1: user root matched group list *,!sftp at line 150 debug1: PAM: initializing for "root" 

Предложения без внутреннего адресата сопоставляются; также первый Матч не упоминается в журнале отладки, что кажется странным.

ОБНОВИТЬ:

Как отметил @Gilles, мои спецификации адресов, как показано выше, неверны. То, что я должен был использовать, было 10.0.0.0/8, а не 10.0.0.0/24 и 172.16.0.0/12, а не 172.16.0.0/20. Я подсчитывал бит маски от 32 вместо 0. Yikes.

С исправленными адресами конфигурация работает. Спасибо Жилю и Уриэлю!

(Я также изменил / sbin / nologin в последней строке на / bin / false, первый из них приводит к странному сообщению об ошибке из sftp: Received message too long 1416128883 )

Ваши сетевые карты неверны. Если вы хотите включить частные сети, вы должны использовать:

 10.0.0.0/8,172.16.0.0/12,192.168.0.0/16 

Вероятно, поэтому вы не соответствуете, а не ошибке ssh .

Я отвечал на подобный вопрос на Superuser.com , но после ответов я не уверен, правильно ли это.

Короче говоря, я считаю, что в настоящее время это невозможно, и даже openssh-7.0 отсутствует, но эти ошибки не были исправлены, поэтому нам придется убеждать вверх по течению.

Также есть альтернативный ответ с положительной обратной связью, но я думаю, что так вы пытаетесь достичь своих результатов. Я не пробовал, но похоже, что это связано только с группами. В противном случае матч *,!something не имеет смысла.

Чтобы не обвинять вас в этом направлении, и не принося никакой конструктивной обратной связи, я могу порекомендовать вам запустить две отдельные службы sshd на разных портах. Один из них должен был бы использовать AllowGroup sftp и force sftp . Другой ответит только на запросы вашей внутренней сети.