Я выполняю что-то на порте 3000, и я хочу предложить эту услугу на порте 3000 только определенным пользователям (IP-адресом). Как я делаю это?
Это сделано с ufw или iptables (оба из которых я знаю очень мало о)?
Этот ответ использует 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