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

11

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

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

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

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

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

Дискотека
источник

Ответы:

13

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

Халед
источник
4
--state RELATEDпо последнему правилу нет необходимости; --state ESTABLISHEDдостаточно. Возможно, вы также захотите разрешить DNS-трафик и, возможно, должны разрешить что-либо на интерфейсе обратной связи, или все виды вещей могут вести себя очень странно.
MadHatter
@MadHatter: Да, вы правы, особенно в отношении петлевых вещей :)
Халед
Спасибо, возможно ли получить весь файл от вас? то есть что-то, что я могу скопировать и вставить прямо в / etc / sysconfig / iptables? Я не достаточно опытен в этом, чтобы доверять своей интуиции, чтобы внести правильные изменения.
Дискотека
2
пс. установить соединение будет принудительно закрыто после первой команды
user956584
3
Вы должны действительно изменить порядок этих команд. Строки политики должны отображаться как последние. Любой, кто просто скопирует это в ssh-сессию, будет немедленно отключен и отключен
AndreasT
4

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

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
Mikel
источник
1
Я думаю, что вы имеете в виду -i loнет -s lo; опять же, ESTABLISHEDв государственных правилах требуется только , и, вероятно, --sport 22там тоже должно быть . Почему все так хотят RELATED?
MadHatter
@MadHatter: О RELATED: Это на самом деле полезно для сопоставления вещей, которые не являются TCP, таких как ответы на пинг и ответы DNS. По крайней мере, я всегда так предполагал.
Стивен Понедельник
2
Я считаю, что это не будет соответствовать ни одному из них. Это будет соответствовать, например, ответу ICMP, запрещенному администратором, но это примерно так же полезно; и если он не квалифицирован, он будет соответствовать любому связанному трафику, а не только трафику, связанному с предыдущей строкой.
MadHatter
@MadHatter: Думаю, мне придется выполнить несколько тестов, чтобы проверить, правы ли вы. Спасибо, что оспорили мое предположение.
Стивен Понедельник
Да, состояние ESTABLISHED - это все, что нужно для соответствия UDP-ответов UDP и эхо-ответов ICMP.
Стивен Понедельник