Как я ограничиваю доступ к сервису/порту IP-адресом?

Я выполняю что-то на порте 3000, и я хочу предложить эту услугу на порте 3000 только определенным пользователям (IP-адресом). Как я делаю это?

Это сделано с ufw или iptables (оба из которых я знаю очень мало о)?

1
задан 2 March 2020 в 11:05

1 ответ

Этот ответ использует iptables только. ufw является просто фронтэндом для iptables и большим количеством людей как он, я не делаю.

Если у Вас уже есть некоторые правила iptables, правила из этого ответа должны будут быть, так или иначе добавляются к тому, что уже существует. Измените имя интерфейса на свое имя интерфейса.

Этот ответ предполагает, что Ваш список разрешенных пользователей является маленьким и что протокол является tcp. Списки тысяч IP-адресов должны быть обработаны через ipsec расширение.

sudo iptables -A INPUT -i enp3s0 -p tcp -m tcp --dport 3000 -s 1.2.3.4 -j ACCEPT
sudo iptables -A INPUT -i enp3s0 -p tcp -m tcp --dport 3000 -s 4.3.2.1 -j ACCEPT
sudo iptables -A INPUT -i enp3s0 -p tcp -m tcp --dport 3000 -s 1.2.4.3 -j ACCEPT
sudo iptables -A INPUT -i enp3s0 -p tcp -m tcp --dport 3000 -s 111.222.113.224 -j ACCEPT
sudo iptables -A INPUT -i enp3s0 -p tcp -m tcp --dport 3000 -j DROP

Теперь, проверьте получающийся набор правила:

doug@s18:~$ sudo iptables -v -x -n -L
Chain INPUT (policy ACCEPT 95 packets, 9490 bytes)
    pkts      bytes target     prot opt in     out     source               destination
       0        0 ACCEPT     tcp  --  enp3s0 *       1.2.3.4              0.0.0.0/0            tcp dpt:3000
       0        0 ACCEPT     tcp  --  enp3s0 *       4.3.2.1              0.0.0.0/0            tcp dpt:3000
       0        0 ACCEPT     tcp  --  enp3s0 *       1.2.4.3              0.0.0.0/0            tcp dpt:3000
       0        0 ACCEPT     tcp  --  enp3s0 *       111.222.113.224      0.0.0.0/0            tcp dpt:3000
       0        0 DROP       tcp  --  enp3s0 *       0.0.0.0/0            0.0.0.0/0            tcp dpt:3000

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
    pkts      bytes target     prot opt in     out     source               destination

Chain OUTPUT (policy ACCEPT 32 packets, 4916 bytes)
    pkts      bytes target     prot opt in     out     source               destination

Теперь, протестируйте его от другого компьютера. Я буду использовать hping3, но у читателей могли бы быть другие предпочтительные утилиты. Я буду имитировать один IP-адрес, который позволяется (в моем случае, никакой ответ, потому что у меня на самом деле нет ничего слушающего на порте 3000, и потому что я имитировал исходный IP-адрес, ответ не будет направлен назад к исходному компьютеру во всяком случае) и тот, который не является:

doug@s15:~$ sudo hping3 -c 5 -a 1.2.3.4 --destport 3000 s18
HPING s18 (br0 192.168.111.122): NO FLAGS are set, 40 headers + 0 data bytes

--- s18 hping statistic ---
5 packets transmitted, 0 packets received, 100% packet loss
round-trip min/avg/max = 0.0/0.0/0.0 ms
doug@s15:~$
doug@s15:~$ sudo hping3 -c 5 -a 4.4.4.4 --destport 3000 s18
HPING s18 (br0 192.168.111.122): NO FLAGS are set, 40 headers + 0 data bytes

--- s18 hping statistic ---
5 packets transmitted, 0 packets received, 100% packet loss
round-trip min/avg/max = 0.0/0.0/0.0 ms
doug@s15:~$

Теперь, проверьте пути, взятые путем наблюдения счетчика пакетов в наборе правила iptables (подсказка: точно как ожидалось):

doug@s18:~$ sudo iptables -v -x -n -L
Chain INPUT (policy ACCEPT 274 packets, 28567 bytes)
    pkts      bytes target     prot opt in     out     source               destination
       5      200 ACCEPT     tcp  --  enp3s0 *       1.2.3.4              0.0.0.0/0            tcp dpt:3000
       0        0 ACCEPT     tcp  --  enp3s0 *       4.3.2.1              0.0.0.0/0            tcp dpt:3000
       0        0 ACCEPT     tcp  --  enp3s0 *       1.2.4.3              0.0.0.0/0            tcp dpt:3000
       0        0 ACCEPT     tcp  --  enp3s0 *       111.222.113.224      0.0.0.0/0            tcp dpt:3000
       5      200 DROP       tcp  --  enp3s0 *       0.0.0.0/0            0.0.0.0/0            tcp dpt:3000

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
    pkts      bytes target     prot opt in     out     source               destination

Chain OUTPUT (policy ACCEPT 60 packets, 10628 bytes)
    pkts      bytes target     prot opt in     out     source               destination
0
ответ дан 17 March 2020 в 00:11

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

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