Вопрос: Iptables: блокировка исходящего трафика, за исключением определенных IP-адресов


Используя iptables, мне нужно заблокировать весь исходящий трафик на моем сервере, за исключением:

  • SSH доступ к небольшому числу IP-адресов
  • Доступ HTTPS к тому же самому маленькому списку IP-адресов

Может ли кто-нибудь показать мне подходящий набор правил?

Спасибо.


5
2017-11-06 19:11


Источник


Вы хотите, чтобы сервер получал доступ к этим удаленным IP-адресам или что эти удаленные адреса должны иметь доступ к серверу? - Cry Havok
Чтобы уточнить это, это безопасный сервер, содержащий конфиденциальные данные. Я хочу, чтобы пользователи, которые регистрировались через SSH, не могли отправлять данные с этого аппарата. Я уже заблокировал входящий трафик с помощью iptables. спасибо - Rob Watson


Ответы:


iptables -I OUTPUT -d <remote_ip> -p tcp --dport 22 -j ACCEPT
iptables -I INPUT -s <remote_ip> -p tcp --sport 22 -j ACCEPT
iptables -I OUTPUT -d <remote_ip> -p tcp --dport 443 -j ACCEPT
iptables -I INPUT -s <remote_ip> -p tcp --sport 443 -j ACCEPT
iptables -P INPUT DROP
iptables -P OUTPUT DROP

Вам нужно будет ввести первые 4 правила для каждого из IP-адресов. Будьте осторожны, потому что вам нужно будет войти в систему через консоль на этой машине; любой другой доступ к нему будет заблокирован.


4
2017-11-06 19:30



Эти правила не будут правильно анализироваться, потому что вы указали -o (интерфейс вывода), фактически не назвав интерфейс. Вы хотите изменить правила, и я удалю этот комментарий? Вы можете захотеть добавить «-m state -state ESTABLISHED» в правила INPUT + ACCEPT, но это точка вкуса. - MadHatter


Теперь я понимаю контекст вашего quesiton, попробуйте:

iptables -P OUTPUT DROP
iptables -A OUTPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -p tcp -s 8.8.8.8 --dport 53 -j ACCEPT
iptables -A OUTPUT -p udp -s 8.8.8.8 --dport 53 -j ACCEPT
iptables -A OUTPUT -p tcp -s 10.11.12.13/24 --dport 22 -j ACCEPT
iptables -A OUTPUT -p tcp -s 10.11.12.13/24 --dport 443 -j ACCEPT

И так далее. Это установит политику по умолчанию для DROP, а затем разрешит доступ только к IP-адресам (или диапазонам). Вторая строка позволяет связать трафик (например, исходящие пакеты для текущего сеанса SSH), третий и четвертый примеры для поиска DNS.

Не забывайте, что вам понадобится правило INPUT, подобное строке 2.


3
2017-11-06 19:24



Аскер заявил, что он хотел заблокировать весь исходящий трафик за несколько исключений; вы блокируете весь входящий трафик за несколько исключений. - Kevin M
@Kevin M, учитывая, что предлагаемые правила не имеют апатридов, ничто из того, что вы делаете исходящими соединениями, не сможет ответить, кроме того, что он допустил. - Zoredache
@Kevin M. Вопрос был достаточно расплывчатым, и его можно было прочитать в любом случае, поэтому моя просьба разъяснить. Вопрос, который вы его представляете, не имеет большого смысла - как вы можете получить доступ к этому серверу, кроме консоли? - Cry Havok
Я добавил комментарий выше, который, я надеюсь, уточнит, дайте мне знать, если вам нужна дополнительная информация. - Rob Watson


Вышеупомянутые сообщения достигнут, чтобы заблокировать весь исходящий трафик, за исключением SSH и HTTPS, но они не будут соответствовать вашим вышеуказанным (в комментариях) заявленной цели:

Я хочу, чтобы пользователи, которые регистрировались через SSH, не могли отправлять данные с этого аппарата.

Рассмотрите следующее: если бы у меня был SSH-доступ к вашему ящику, я мог бы просто загрузить любые данные в ненадежное местоположение с помощью SSH-туннеля и пройти через один из пунктов назначения, для которых вы разрешаете исходящий трафик. Таким образом, я не думаю, что проблему можно решить только с помощью правил iptable на вашем хосте, содержащих конфиденциальные данные, если вы хотите, чтобы конфиденциальные данные не копировались вне вашей сети.


0
2017-11-07 18:00