2

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

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

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

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

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

2 ответа2

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
    
2

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .