Используйте iptables для блокировки всех входящих IP-адресов

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

4
задан 11 July 2017 в 22:38

2 ответа

Блокирование всего дюйм/с кроме 1 или 2:

sudo /sbin/iptables -I INPUT -j DROP
sudo /sbin/iptables -I INPUT -s xxx.xxx.x.xxx -j ACCEPT
sudo /sbin/iptables -I INPUT -s xxx.xxx.x.yyy -j ACCEPT

первые блоки команды весь IP; второе и третье говорят компьютеру принимать соединения от определенного IP.

, Если Вы хотите делать эти изменения постоянными после выполнения команд выше, выполняют следующее.

Установка, iptables-персистентная

sudo apt-get install iptables-persistent

, Сохраняют Ваши изменения iptables в файле

iptables-save > /etc/iptables/rules.v4

... И это должно работать!

3
ответ дан 11 July 2017 в 22:38

К сожалению, другой ответ здесь не учитывает три важных случая:

  1. Локальный трафик самой системы. ( localhost и т. Д. Через адаптер lo )
  2. Трафик , связанный с другим трафиком, который вы сделали (ответы на исходящие соединения и т. Д.)
  3. ICMP-ответы из вашей собственной сети (которые иногда необходимы в зависимости от сетевой среды).

В большинстве жилых или средних сетей нет необходимости в №3, но №1 и №2 имеют решающее значение - №1, поэтому трафик в систему из системы работает (подумайте о подключениях localhost для локальных служб или sudo ] для поиска собственного внутреннего имени хоста) и №2, потому что вам нужно иметь возможность получать трафик, связанный с установленными вами исходящими соединениями, чтобы получать ответы DNS, данные пакетов HTTP / HTTPS для ваших установок или обновлений пакетов и т. д.

Итак, решение, которое я предлагаю, заключается в следующем:

Если у вас уже есть какие-либо правила iptables , удалите их с помощью sudo iptables -F , поэтому мы начнем с «чистый лист», прежде чем делать это.

# This first command is OK, setting INPUT to default ACCEPT becase
# we will force all unpermitted traffic to DROP at the end of this ruleset.
sudo iptables -P INPUT ACCEPT
sudo iptables -A INPUT -i lo -m comment --comment "Accept localhost, computer to itself" -j ACCEPT
sudo iptables -A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -m comment --comment "Accept traffic related to established connections and this system's outgoing traffic" -j ACCEPT
sudo iptables -A INPUT -s a.b.c.d --comment "Accept inbound connections from a.b.c.d" -j ACCEPT
sudo iptables -A INPUT -s w.x.y.z --comment "Accept inbound connections from w.x.y.z" -j ACCEPT
# Repeat previous line as many times as you need to in order to accept traffic
# that you want to accept, but also add a line for the IP address you are 
# currently connected to the system from if a remote SSH session, otherwise
# you may lock yourself out.
sudo iptables -A INPUT -m comment --comment "Drop all other traffic inbound" -j DROP

Это сделает то, что пытался сделать anonymous2, но также позволит вашему компьютеру по-прежнему работать с Интернетом и позволит вашей системе функционировать должным образом. Это также позволяет вашей системе продолжать работать до тех пор, пока вы не добавите правило DROP в самом конце (не добавляйте это правило, пока вы также не внесете в белый список IP-адрес, с которого вы получаете доступ, который ДОЛЖЕН быть одним из правил РАЗРЕШЕНИЯ выше, и вы можете добавить МНОЖЕСТВО

. Обязательно установите iptables-persistent и сохраните эти правила в /etc/iptables/rules.v4 , иначе эти правила не сохранятся.

1
ответ дан 17 March 2020 в 21:43

Другие вопросы по тегам:

Похожие вопросы: