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

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

Как настроить IPTables, чтобы он работалтолькоразрешить входящий трафик SSH и не разрешать никакой другой входящий трафикили вне?

Какие меры предосторожности кто-нибудь может порекомендовать?

У меня есть сервер, который яполагатьбыл успешно перенесен из GoDaddy, и яполагатьбольше не используется.

Но я хочу убедиться, потому что... никогда не знаешь наверняка. :)

Обратите внимание, что это виртуальный выделенный сервер от GoDaddy... Это означает отсутствие резервного копирования и фактически отсутствие поддержки.

решение1

Вам просто нужно установить политику по умолчанию 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 вступают в силу немедленно. Вам необходимо выполнить их в скрипте оболочки, чтобы не потерять возможность подключения к вашей машине при их удаленном выполнении.

решение2

Что-то вроде этого:

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

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