Как настроить IPTables так, чтобы он только разрешить вход по SSH и запретить другой трафик в или вне?
Какие меры безопасности можно порекомендовать?
У меня есть сервер, который я верить был успешно перенесен с GoDaddy, и я верить больше не используется.
Но я хочу убедиться, потому что ... никогда не знаешь. :)
Обратите внимание, что это виртуальный выделенный сервер от GoDaddy ... Это означает отсутствие резервного копирования и практически никакой поддержки.
Вам просто нужно установить политику по умолчанию на DROP для цепочек INPUT и OUTPUT.
Чтобы разрешить SSH-вход, вам понадобятся следующие команды:
$ sudo iptables -P INPUT DROP
$ sudo iptables -P OUTPUT DROP
$ sudo iptables -A INPUT -i lo -j ACCEPT
$ sudo iptables -A INPUT -p tcp -m tcp --dport 22 -j ACCEPT
$ sudo iptables -A OUTPUT -o lo -j ACCEPT
$ sudo iptables -A OUTPUT -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT
Последние две команды разрешают кольцевой трафик, поскольку это требуется некоторым приложениям для правильной работы. Вы можете ограничить доступ SSH с определенного IP-адреса, используя -s source_ip
вариант.
Выполнение команд в указанном выше порядке приведет к зависанию текущего сеанса SSH. Это потому, что команды iptables вступают в силу немедленно. Вам необходимо выполнить их в сценарии оболочки, чтобы не потерять возможность подключения к вашей машине при удаленном выполнении.
Что-то вроде этого:
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -j REJECT # or iptables -P INPUT DROP
iptables -A OUTPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -j REJECT # or iptables -P OUTPUT DROP