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