Назад | Перейти на главную страницу

IPTables: разрешить только SSH-доступ, больше ничего не входить и не выходить

Как настроить 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