Брандмауэр на сервере SSH отклоняет подключение моего клиента (без включенного брандмауэра все работает нормально)

Брандмауэр на сервере SSH отклоняет подключение моего клиента (без включенного брандмауэра все работает нормально)

У меня есть SSH-сервер, к которому я хотел бы подключиться со своего Android-устройства.

Я создал ключи SSH и все работает отлично. Мой мобильный телефон подключается к моему серверу через SSH. Никаких проблем.

Проблема начинается, когда я включаю свой iptablesбрандмауэр. В этот момент мой брандмауэр отклоняет соединения, исходящие от моего Android.

На моем Android я использую Termux. Когда я в Termux, я могу найти свой публичный IP-адрес с помощью

curl -4 icanhazip.com

Там написано, что мой публичный IP для моего Android — x.x.121.3. Я запутал адрес здесь, но в фактической iptablesконфигурации он точен. Вот конфигурация:

Chain INPUT (policy DROP 7530 packets, 338K bytes)
 pkts bytes target     prot opt in     out     source               destination         
    3   180 ACCEPT     tcp  --  *      *       x.x.161.85           0.0.0.0/0            tcp dpt:22 state NEW
    1    60 ACCEPT     tcp  --  *      *       x.x.134.54           0.0.0.0/0            tcp dpt:22 state NEW
    0     0 ACCEPT     tcp  --  *      *       x.x.121.3            0.0.0.0/0            tcp dpt:22 state NEW
    0     0 ACCEPT     tcp  --  *      *       x.x.136.182          0.0.0.0/0            tcp dpt:22 state NEW
  857 4470K ACCEPT     all  --  *      *       0.0.0.0/0            0.0.0.0/0            state RELATED,ESTABLISHED
   12   986 ACCEPT     all  --  lo     *       0.0.0.0/0            0.0.0.0/0           

Chain FORWARD (policy DROP 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         

Chain OUTPUT (policy DROP 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         
  650 81372 ACCEPT     all  --  *      *       0.0.0.0/0            0.0.0.0/0            state NEW,RELATED,ESTABLISHED
    0     0 ACCEPT     all  --  *      lo      0.0.0.0/0            0.0.0.0/0           
    0     0 ACCEPT     icmp --  *      *       0.0.0.0/0            0.0.0.0/0

Что я делаю не так? Как разрешить SSH-подключения с моего мобильного телефона?

решение1

curl -4 icanhazip.comиспользует HTTP и порт 80 для извлечения данных. Вы можете убедиться в этом, запустив curl -v -4 icanhazip.com.

Возможно, ваш интернет-провайдер манипулирует трафиком, поэтому любое подключение, которое вы устанавливаете к порту 80, выходит в Интернет с другого IP-адреса, чем другие ваши соединения (включая SSH к порту 22).

Например, они могут направлять HTTP от многих своих клиентов через один прокси-сервер, чтобы воспользоваться кэшем и сократить передачу данных по ссылке за пределами прокси-сервера. Прокси-сервер почти прозрачен: он не требует настройки с вашей стороны, и вы «чувствуете», что прокси-сервера нет; но он выполняет HTTP-запросы от имени многих клиентов, используя свой отдельный IP-адрес. По сути, все клиенты кажутся HTTP-серверам исходящими с этого одного IP-адреса.

Что бы ни произошло на самом деле, вероятно, адрес, curlкоторый вы дали, не является исходным адресом, который используют ваши SSH-соединения. Адрес, который вы разрешили в брандмауэре, не является правильным.

К счастью, вы можете отключить брандмауэр и успешно подключиться. Используйте этот факт, чтобы узнать правильный IP-адрес:

  1. Временно отключите брандмауэр.
  2. Подключитесь с мобильного телефона.
  3. В полученном сеансе оболочки запустите echo "$SSH_CONNECTION".
  4. Первый IP-адрес — это тот, с которого, по мнению сервера, вы подключаетесь.
  5. Если echo …ничего не печатает, проверьте логи на сервере для фактического IP клиента. В моем Debian некоторые полезные команды:

    sudo tail /var/log/auth.log
    journalctl _SYSTEMD_UNIT=ssh.service | tail
    

    Или используйте какой-нибудь инструмент ( lsof, ss, …), чтобы увидеть установленные соединения и связанные с ними адреса; соединение SSH, которое вы используете, должно быть там. Я не буду здесь подробно останавливаться на том, как сузить список и фактически найти это единственное соединение.

После того, как вы обнаружите правильный адрес, перенастройте брандмауэр, чтобы разрешить исходящий с него SSH-трафик.

Связанный контент