В настоящее время я пытаюсь настроить ufw на Ubuntu 12.04, но, насколько я понимаю, он ведет себя странно. Я попытался разрешить только некоторые службы на удаленной машине, отрицая все остальное. Я подумал - в любом случае, я мог ошибиться - что отказ от всего по умолчанию, а затем разрешение некоторых служб послужит моей цели, поэтому я выполнил следующие команды
ufw allow ssh
ufw default deny incoming
ufw default deny outgoing
Насколько я понимаю, последняя команда будет блокировать только каждое соединение, которое я пытаюсь установить с удаленного компьютера на какой-либо другой компьютер, но это привело к тому, что все соединения, которые я пытаюсь установить с удаленным компьютером, в конечном итоге были отклонены. Я почти уверен, что это поведение вызвано этой командой, а не запретом на вход. Для меня это довольно противоречиво. Я бы посоветовал, если бы я явно разрешил ssh, я смог бы установить соединение с удаленным компьютером независимо от настроек по умолчанию. Более того, кажется довольно странным, что блокировка исходящих соединений нарушает работу моего ssh.
Буду очень признателен, если кто-нибудь сможет мне это объяснить.
Предположим, у вас есть SSH на вашем serverA на порту 22. serverB пытается подключиться к нему. Он отправляет пакет из случайного порта в net.ipv4.ip_local_port_range (например, 3252) на порт serverA 22. serverB:3252 -> ufw incoming allow 22 -> serverA:22
Таким образом, на serverA соединение разрешено, потому что разрешены входящие соединения на 22-м порте, но когда ваш ssh-сервер отвечает, он отправляет ответный пакет с 22-го порта на serverB 3252-порт и исходящие соединения из-за ufw default deny outgoing
заблокированы.
serverB:3252 <- ufw outgoing default deny <- serverA:22
Таким образом, вы должны добавить разрешающее правило в исходящей цепочке либо для пакетов с исходным портом 22, либо с портом назначения в пределах local_port_range - обычно 32768-61000, но может отличаться, поэтому лучше используйте базовую фильтрацию исходного порта.