Как я могу заблокировать все исходящие соединения?

2

Мне нужно заблокировать мой сервер от инициирование любые подключения к удаленному серверу.

Однако я все еще хочу, чтобы сервер мог отвечать на соединения, инициированные через подключенных клиентов.

Другими словами, я хочу, чтобы другие могли подключаться к серверу, но чтобы сервер не мог инициировать удаленные подключения к другим серверам.

Как я могу это сделать?

Я использую Ubuntu.

Joehot200
источник
Блокируйте исходящие TCP-пакеты с установленным SYN, если они не связаны с существующим соединением.
David Schwartz

Ответы:

6

Блокировка всех исходящих подключений - плохая идея, так как это помешает вам устанавливать программное обеспечение из онлайн-репозиториев, выполнять поиск DNS (что было бы ужасно в большинстве сред), обновлять время с помощью NTP и т. Д. В любом случае, если вы все еще хотите это сделать, попробуйте это:

  # Drop all connections initiated from this host
iptables -t filter -I OUTPUT 1 -m state --state NEW -j DROP
  # Additionally, log the event (optional)
iptables -t filter -I OUTPUT 1 -m state --state NEW -j LOG --log-level warning \
  --log-prefix "Attempted to initiate a connection from a local process" \
  --log-uid

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

  1. Сделайте спички более сложными. Было бы хорошо для одного или двух «белых» пунктов. Пример:

      # Only forbid non-UDP traffic
    iptables -t filter -I OUTPUT 1 -m state --state NEW \! -p udp -j DROP
    
  2. Предшествующие правила, которые соответствуют некоторым из желаемых сервисов, которые могут быть инициированы с локального хоста с целью "-j ПРИНЯТЬ". Пример:

      # Run this after the "DROP" rule to allow connection to ports
      #+ 80 and 443, mostly used for HTTP and HTTPS traffic
    iptables -t filter -I OUTPUT 1 -p udp -m multiport --ports 80,443 -j ACCEPT
    
Diego Augusto Molina
источник
Хорошо. Так что, если отключить это плохо, как я могу ограничить его одним подключением в минуту?
Joehot200
Поскольку у меня нет времени, я собираюсь заблокировать все исходящие соединения на данный момент. К сожалению, абсолютно необходимо, чтобы я либо блокировал, либо строго ограничивал исходящий трафик.
Joehot200
1
Вы задаете два совершенно разных вопроса. Вам следует опубликовать новый вопрос, в котором точно указывается ваша проблема, а не запрашивать реализацию решения, которое вы подумали, поскольку у вас недостаточно ясности по этому вопросу. Например: «У меня ограниченная скорость загрузки моего VPS, как я могу оптимизировать свой сервер с помощью iptables или другого решения, чтобы расставить приоритеты для определенного трафика и отбрасывать ненужный трафик, учитывая определенные потребности?». Вы должны иметь четкое представление о понятиях «соединение», «пакет» и «трафик» (по крайней мере), прежде чем задавать такие конкретные вопросы, чтобы решить проблему, которая может быть более широкой.
Diego Augusto Molina
2
В ответ на вопрос «как я могу ограничить это одним соединением в минуту?», Это может сделать нечто подобное: iptables -t filter -I OUTPUT 1 -m state --state NEW -j DROP; iptables -t filter -I OUTPUT 1 -m state --state NEW -m limit --limit 1/minute -j ACCEPT, Обратите внимание, что это может не работать для определенных протоколов, таких как те, которые должны инициировать более одного соединения для завершения функциональности (например, FTP в режиме PASV).
Diego Augusto Molina
2

Встроенный брандмауэр Ubuntu - это UFW. Вы можете управлять им, используя графический интерфейс Gufw. На главной панели Gufw просто нажмите Outgoing: Deny.

Humpity
источник