Настройка шлюза в интернет для домашней сети на базе компьютера с 2 сетевыми картами. Одна карта смотрит в интернет c фиксированным интернет IP адресом, другая подключена к домашнему wifi роутеру.
Проверка статуса сервиса ufw, конфигурация портов:
vasi@v ~ $ sudo ufw status verbose Status: active Logging: on (medium) Default: deny (incoming), allow (outgoing), allow (routed) New profiles: skip To Action From -- ------ ---- 5601 ALLOW IN Anywhere 443/tcp ALLOW IN 192.168.1.57 3389 ALLOW IN 192.168.1.0/24 (log-all) 21 ALLOW IN 192.168.1.0/24 (log-all) Anywhere ALLOW IN 192.168.122.0/24 (log-all) 22 ALLOW IN 192.168.1.0/24 22 DENY IN Anywhere (log-all) 8980 ALLOW IN 192.168.1.0/24 (log-all) 8980 DENY IN Anywhere (log-all) 80 on ppp0 ALLOW IN Anywhere 443 on ppp0 ALLOW IN Anywhere 5432 ALLOW IN 192.168.1.0/24 21 on ppp0 DENY IN Anywhere (log-all) 5432 on ppp0 DENY IN Anywhere (log) 8081/tcp ALLOW IN Anywhere 20595/udp ALLOW IN Anywhere 1024:65535/tcp ALLOW IN Anywhere 1024:65535/udp ALLOW IN Anywhere Anywhere ALLOW IN 192.168.1.0/24 53/tcp ALLOW IN Anywhere 53/udp ALLOW IN Anywhere 443 ALLOW IN Anywhere 4096:65535/tcp ALLOW IN Anywhere 4096:65535/udp ALLOW IN Anywhere 16384:65535/tcp ALLOW IN Anywhere 80/tcp ALLOW IN Anywhere 21 (v6) on ppp0 DENY IN Anywhere (v6) (log-all) 22 (v6) on ppp0 DENY IN Anywhere (v6) (log) 5432 (v6) on ppp0 DENY IN Anywhere (v6) (log) 22 (v6) DENY IN Anywhere (v6) (log-all) 8081/tcp (v6) ALLOW IN Anywhere (v6) 20595/udp (v6) ALLOW IN Anywhere (v6) 1024:65356/tcp (v6) ALLOW IN Anywhere (v6) 1024:65356/udp (v6) ALLOW IN Anywhere (v6) 1024:65535/tcp (v6) ALLOW IN Anywhere (v6) 1024:65535/udp (v6) ALLOW IN Anywhere (v6) 80 (v6) on ppp0 ALLOW IN Anywhere (v6) 443 (v6) on ppp0 ALLOW IN Anywhere (v6) Anywhere (v6) ALLOW IN Anywhere (v6) 53/tcp (v6) ALLOW IN Anywhere (v6) 53/udp (v6) ALLOW IN Anywhere (v6) 8980 (v6) DENY IN Anywhere (v6) (log-all) 443 (v6) ALLOW IN Anywhere (v6) 4096:65535/tcp (v6) ALLOW IN Anywhere (v6) 4096:65535/udp (v6) ALLOW IN Anywhere (v6) 16384:65535/tcp (v6) ALLOW IN Anywhere (v6) 80/tcp (v6) ALLOW IN Anywhere (v6) 5601 (v6) on enp4s0 ALLOW IN Anywhere (v6) 33259 (v6) on enp4s0 ALLOW IN Anywhere (v6) 5601 (v6) ALLOW IN Anywhere (v6)
Restart network:
7 Ways to Restart Network in Linux Ubuntu, Debian, CentOS
$ sudo systemctl restart systemd-networkd $ sudo systemctl restart NetworkManager.service $ sudo nmcli networking off & sudo nmcli networking on $ systemctl status NetworkManager
Разрешить DNS:
$ sudo ufw allow 53/tcp $ sudo ufw allow 53/udp
Эксперименты с произвольным портом (8980):
-----------DENY AND LOG on ALL INTERFACES sudo ufw insert 1 deny log-all 8980 http http://v.perm.ru:8980/vacancy/api/company/ http: error: Request timed out (30s). СРАБАТЫВАЕТ! $ sudo tail -f /var/log/ufw.log | grep 8980 2024-10-01T11:28:45.247315+05:00 v kernel: [UFW BLOCK] IN=enp4s0 OUT= MAC=00:11:95:5b:fe:7d:ac:b5:7d:3e:9f:c6:08:00 SRC=192.168.1.57 DST=46.146.232.50 LEN=60 TOS=0x00 PREC=0x00 TTL=64 ID=53199 DF PROTO=TCP SPT=46480 DPT=8980 WINDOW=64240 RES=0x00 SYN URGP=0 2024-10-01T11:28:46.249369+05:00 v kernel: [UFW BLOCK] IN=enp4s0 OUT= MAC=00:11:95:5b:fe:7d:ac:b5:7d:3e:9f:c6:08:00 SRC=192.168.1.57 DST=46.146.232.50 LEN=60 TOS=0x00 PREC=0x00 TTL=64 ID=53200 DF PROTO=TCP SPT=46480 DPT=8980 WINDOW=64240 RES=0x00 SYN URGP=0 2024-10-01T11:28:48.269372+05:00 v kernel: [UFW BLOCK] IN=enp4s0 OUT= MAC=00:11:95:5b:fe:7d:ac:b5:7d:3e:9f:c6:08:00 SRC=192.168.1.57 DST=46.146.232.50 LEN=60 TOS=0x00 PREC=0x00 TTL=64 ID=53201 DF PROTO=TCP SPT=46480 DPT=8980 WINDOW=64240 RES=0x00 SYN URGP=0 sudo ufw delete 1 -----------ALLOW AND LOG on ALL INTERFACES sudo ufw insert 1 allow log-all proto tcp from any to any port 8980 $ sudo tail -f /var/log/ufw.log | grep 8980 2024-10-01T11:34:47.455990+05:00 v kernel: [UFW ALLOW] IN=enp4s0 OUT= MAC=00:11:95:5b:fe:7d:ac:b5:7d:3e:9f:c6:08:00 SRC=192.168.1.57 DST=46.146.232.50 LEN=60 TOS=0x00 PREC=0x00 TTL=64 ID=55228 DF PROTO=TCP SPT=35760 DPT=8980 WINDOW=64240 RES=0x00 SYN URGP=0 -----------DENY AND LOG on PPP0 //sudo ufw insert 1 deny log-all on ppp0 8980 sudo ufw insert 1 deny log-all 8980 -----------ALLOW AND LOG on 192.168.1.0/24 sudo ufw insert 1 allow log-all from 192.168.1.0/24 to any port 8980 $ http http://v.perm.ru:8980/vacancy/api/company/ vasi@v:~/prog/kotlin/vacancy_backend$ sudo tail -f /var/log/ufw.log | grep 8980 2024-10-01T11:58:19.249305+05:00 v kernel: [UFW ALLOW] IN=enp4s0 OUT= MAC=00:11:95:5b:fe:7d:ac:b5:7d:3e:9f:c6:08:00 SRC=192.168.1.57 DST=46.146.232.50 LEN=60 TOS=0x00 PREC=0x00 TTL=64 ID=40649 DF PROTO=TCP SPT=54972 DPT=8980 WINDOW=64240 RES=0x00 SYN URGP=0 $ http http://192.168.1.20:8980/vacancy/api/company/ 2024-10-01T12:00:14.836976+05:00 v kernel: [UFW ALLOW] IN=enp4s0 OUT= MAC=00:11:95:5b:fe:7d:ac:b5:7d:3e:9f:c6:08:00 SRC=192.168.1.57 DST=192.168.1.20 LEN=60 TOS=0x00 PREC=0x00 TTL=64 ID=42622 DF PROTO=TCP SPT=41372 DPT=8980 WINDOW=64240 RES=0x00 SYN URGP=0 sudo ufw insert 1 deny log-all 8980 ----------------------Итого так правильно sudo ufw insert 1 allow log-all from 192.168.1.0/24 to any port 8980 sudo ufw insert 1 deny log-all 8980 vasi@v:~/prog/kotlin/vacancy_backend$ sudo ufw status numbered verbose | grep 8980 [ 1] 8980 ALLOW IN 192.168.1.0/24 (log-all) [ 2] 8980 DENY IN Anywhere (log-all) 1. Из локалки работает vasi@vasi-note:~$ http http://192.168.1.20:8980/vacancy/api/company/ и логируется 2024-10-01T12:12:10.017313+05:00 v kernel: [UFW ALLOW] IN=enp4s0 OUT= MAC=00:11:95:5b:fe:7d:ac:b5:7d:3e:9f:c6:08:00 SRC=192.168.1.57 DST=192.168.1.20 LEN=60 TOS=0x00 PREC=0x00 TTL=64 ID=24045 DF PROTO=TCP SPT=49152 DPT=8980 WINDOW=64240 RES=0x00 SYN URGP=0 2. Из инета БЛОКИРУЕТСЯ (https://httpie.io/app) https://v.perm.ru:8980/vacancy/api/company/ vasi@v:~/prog/kotlin/vacancy_backend$ sudo tail -f /var/log/ufw.log | grep 8980 2024-10-01T12:13:55.414078+05:00 v kernel: [UFW BLOCK] IN=ppp0 OUT= MAC= SRC=3.93.199.77 DST=46.146.232.50 LEN=60 TOS=0x10 PREC=0x60 TTL=114 ID=11273 DF PROTO=TCP SPT=41774 DPT=8980 WINDOW=64240 RES=0x00 SYN URGP=0 2024-10-01T12:13:56.438232+05:00 v kernel: [UFW BLOCK] IN=ppp0 OUT= MAC= SRC=3.93.199.77 DST=46.146.232.50 LEN=60 TOS=0x10 PREC=0x60 TTL=114 ID=11274 DF PROTO=TCP SPT=41774 DPT=8980 WINDOW=64240 RES=0x00 SYN URGP=0 2024-10-01T12:13:58.454444+05:00 v kernel: [UFW BLOCK] IN=ppp0 OUT= MAC= SRC=3.93.199.77 DST=46.146.232.50 LEN=60 TOS=0x10 PREC=0x60 TTL=114 ID=11275 DF PROTO=TCP SPT=41774 DPT=8980 WINDOW=64240 RES=0x00 SYN URGP=0 2024-10-01T12:14:02.582139+05:00 v kernel: [UFW BLOCK] IN=ppp0 OUT= MAC= SRC=3.93.199.77 DST=46.146.232.50 LEN=60 TOS=0x10 PREC=0x60 TTL=114 ID=11276 DF PROTO=TCP SPT=41774 DPT=8980 WINDOW=64240 RES=0x00 SYN URGP=0 СРАБАТЫВАЕТ НА ПЕРВОМ ПОДХОДЯЩЕМ ПРАВИЛЕ: sudo ufw insert 1 deny log-all 8980 Rule inserted vasi@v:~/prog/kotlin/vacancy_backend$ sudo ufw status numbered verbose | grep 8980 [ 1] 8980 DENY IN Anywhere (log-all) <--- сработает ЭТОТ запрет. Не смотря что правило 2 разрешает [ 2] 8980 ALLOW IN 192.168.1.0/24 (log-all) [32] 8980 (v6) DENY IN Anywhere (v6) (log-all) vasi@v:~/prog/kotlin/vacancy_backend$ sudo ufw status numbered verbose Status: active To Action From -- ------ ---- [ 1] 8980 ALLOW IN 192.168.1.0/24 (log-all) [ 2] 8980 DENY IN Anywhere (log-all) [ 3] 80 on ppp0 ALLOW IN Anywhere [ 4] 443 on ppp0 ALLOW IN Anywhere [ 5] 5432 ALLOW IN 192.168.1.0/24 [ 6] 21 on ppp0 DENY IN Anywhere (log-all) [ 7] 5432 on ppp0 DENY IN Anywhere (log) [ 8] 22 ALLOW IN Anywhere [ 9] 8081/tcp ALLOW IN Anywhere [10] 20595/udp ALLOW IN Anywhere [11] 1024:65535/tcp ALLOW IN Anywhere [12] 1024:65535/udp ALLOW IN Anywhere [13] Anywhere ALLOW IN 192.168.1.0/24 [14] 53/tcp ALLOW IN Anywhere [15] 53/udp ALLOW IN Anywhere [16] 21 (v6) on ppp0 DENY IN Anywhere (v6) (log-all) [17] 22 (v6) on ppp0 DENY IN Anywhere (v6) (log) [18] 5432 (v6) on ppp0 DENY IN Anywhere (v6) (log) [19] 22 (v6) ALLOW IN Anywhere (v6) [20] 8081/tcp (v6) ALLOW IN Anywhere (v6) [21] 20595/udp (v6) ALLOW IN Anywhere (v6) [22] 1024:65356/tcp (v6) ALLOW IN Anywhere (v6) [23] 1024:65356/udp (v6) ALLOW IN Anywhere (v6) [24] 1024:65535/tcp (v6) ALLOW IN Anywhere (v6) [25] 1024:65535/udp (v6) ALLOW IN Anywhere (v6) [26] 80 (v6) on ppp0 ALLOW IN Anywhere (v6) [27] 443 (v6) on ppp0 ALLOW IN Anywhere (v6) [28] Anywhere (v6) ALLOW IN Anywhere (v6) [29] 53/tcp (v6) ALLOW IN Anywhere (v6) [30] 53/udp (v6) ALLOW IN Anywhere (v6) [31] 8980 (v6) DENY IN Anywhere (v6) (log-all) Разрешить для дианазона портов: $ sudo ufw allow 8000:8080/tcp $ sudo ufw allow from 192.168.1.0/24 to any port 22 (уже разрешено выше) Моя настройка: root@v:/etc/ufw# cat user.rules *filter :ufw-user-input - [0:0] :ufw-user-output - [0:0] :ufw-user-forward - [0:0] :ufw-before-logging-input - [0:0] :ufw-before-logging-output - [0:0] :ufw-before-logging-forward - [0:0] :ufw-user-logging-input - [0:0] :ufw-user-logging-output - [0:0] :ufw-user-logging-forward - [0:0] :ufw-after-logging-input - [0:0] :ufw-after-logging-output - [0:0] :ufw-after-logging-forward - [0:0] :ufw-logging-deny - [0:0] #:ufw-logging-allow - [0:0] #:ufw-user-limit - [0:0] #:ufw-user-limit-accept - [0:0] ### RULES ### ### tuple ### allow any 22 0.0.0.0/0 any 192.168.1.0/24 in -A ufw-user-input -p tcp --dport 22 -s 192.168.1.0/24 -j ACCEPT -A ufw-user-input -p udp --dport 22 -s 192.168.1.0/24 -j ACCEPT ### tuple ### deny_log-all any 22 0.0.0.0/0 any 0.0.0.0/0 in -A ufw-user-logging-input -p tcp --dport 22 -m limit --limit 3/min --limit-burst 10 -j LOG --log-prefix "[UFW BLOCK] " -A ufw-user-logging-input -p tcp --dport 22 -j RETURN -A ufw-user-input -p tcp --dport 22 -j ufw-user-logging-input -A ufw-user-input -p tcp --dport 22 -j DROP -A ufw-user-logging-input -p udp --dport 22 -m limit --limit 3/min --limit-burst 10 -j LOG --log-prefix "[UFW BLOCK] " -A ufw-user-logging-input -p udp --dport 22 -j RETURN -A ufw-user-input -p udp --dport 22 -j ufw-user-logging-input -A ufw-user-input -p udp --dport 22 -j DROP ### tuple ### allow_log-all any 8980 0.0.0.0/0 any 192.168.1.0/24 in -A ufw-user-logging-input -p tcp --dport 8980 -s 192.168.1.0/24 -m limit --limit 3/min --limit-burst 10 -j LOG --log-prefix "[UFW ALLOW 8980] " -A ufw-user-logging-input -p tcp --dport 8980 -s 192.168.1.0/24 -j RETURN -A ufw-user-input -p tcp --dport 8980 -s 192.168.1.0/24 -j ufw-user-logging-input -A ufw-user-input -p tcp --dport 8980 -s 192.168.1.0/24 -j ACCEPT -A ufw-user-logging-input -p udp --dport 8980 -s 192.168.1.0/24 -m limit --limit 3/min --limit-burst 10 -j LOG --log-prefix "[UFW ALLOW 8980_] " -A ufw-user-logging-input -p udp --dport 8980 -s 192.168.1.0/24 -j RETURN -A ufw-user-input -p udp --dport 8980 -s 192.168.1.0/24 -j ufw-user-logging-input -A ufw-user-input -p udp --dport 8980 -s 192.168.1.0/24 -j ACCEPT ### tuple ### deny_log-all any 8980 0.0.0.0/0 any 0.0.0.0/0 in -A ufw-user-logging-input -p tcp --dport 8980 -m limit --limit 3/min --limit-burst 10 -j LOG --log-prefix "[UFW BLOCK] " -A ufw-user-logging-input -p tcp --dport 8980 -j RETURN -A ufw-user-input -p tcp --dport 8980 -j ufw-user-logging-input -A ufw-user-input -p tcp --dport 8980 -j DROP -A ufw-user-logging-input -p udp --dport 8980 -m limit --limit 3/min --limit-burst 10 -j LOG --log-prefix "[UFW BLOCK] " -A ufw-user-logging-input -p udp --dport 8980 -j RETURN -A ufw-user-input -p udp --dport 8980 -j ufw-user-logging-input -A ufw-user-input -p udp --dport 8980 -j DROP ### tuple ### allow any 80 0.0.0.0/0 any 0.0.0.0/0 in_ppp0 -A ufw-user-input -i ppp0 -p tcp --dport 80 -j ACCEPT -A ufw-user-input -i ppp0 -p udp --dport 80 -j ACCEPT ### tuple ### allow any 443 0.0.0.0/0 any 0.0.0.0/0 in_ppp0 -A ufw-user-input -i ppp0 -p tcp --dport 443 -j ACCEPT -A ufw-user-input -i ppp0 -p udp --dport 443 -j ACCEPT ### tuple ### allow any 5432 0.0.0.0/0 any 192.168.1.0/24 in -A ufw-user-input -p tcp --dport 5432 -s 192.168.1.0/24 -j ACCEPT -A ufw-user-input -p udp --dport 5432 -s 192.168.1.0/24 -j ACCEPT ### tuple ### deny_log-all any 21 0.0.0.0/0 any 0.0.0.0/0 in_ppp0 -A ufw-user-logging-input -i ppp0 -p tcp --dport 21 -m limit --limit 3/min --limit-burst 10 -j LOG --log-prefix "[UFW BLOCK_TCP] " -A ufw-user-logging-input -i ppp0 -p tcp --dport 21 -j RETURN -A ufw-user-input -i ppp0 -p tcp --dport 21 -j ufw-user-logging-input -A ufw-user-input -i ppp0 -p tcp --dport 21 -j DROP -A ufw-user-logging-input -i ppp0 -p udp --dport 21 -m limit --limit 3/min --limit-burst 10 -j LOG --log-prefix "[UFW_BLOCK_UDP] " -A ufw-user-logging-input -i ppp0 -p udp --dport 21 -j RETURN -A ufw-user-input -i ppp0 -p udp --dport 21 -j ufw-user-logging-input -A ufw-user-input -i ppp0 -p udp --dport 21 -j DROP ### tuple ### deny_log any 5432 0.0.0.0/0 any 0.0.0.0/0 in_ppp0 -A ufw-user-logging-input -i ppp0 -p tcp --dport 5432 -m conntrack --ctstate NEW -m limit --limit 3/min --limit-burst 10 -j LOG --log-prefix "[UFW BLOCK_TCP_5432] " -A ufw-user-logging-input -i ppp0 -p tcp --dport 5432 -j RETURN -A ufw-user-input -i ppp0 -p tcp --dport 5432 -j ufw-user-logging-input -A ufw-user-input -i ppp0 -p tcp --dport 5432 -j DROP -A ufw-user-logging-input -i ppp0 -p udp --dport 5432 -m conntrack --ctstate NEW -m limit --limit 3/min --limit-burst 10 -j LOG --log-prefix "[UFW BLOCK_UDP_5432] " -A ufw-user-logging-input -i ppp0 -p udp --dport 5432 -j RETURN -A ufw-user-input -i ppp0 -p udp --dport 5432 -j ufw-user-logging-input -A ufw-user-input -i ppp0 -p udp --dport 5432 -j DROP ### tuple ### allow tcp 8081 0.0.0.0/0 any 0.0.0.0/0 in -A ufw-user-input -p tcp --dport 8081 -j ACCEPT ### tuple ### allow udp 20595 0.0.0.0/0 any 0.0.0.0/0 in -A ufw-user-input -p udp --dport 20595 -j ACCEPT ### tuple ### allow tcp 1024:65535 0.0.0.0/0 any 0.0.0.0/0 in -A ufw-user-input -p tcp -m multiport --dports 1024:65535 -j ACCEPT ### tuple ### allow udp 1024:65535 0.0.0.0/0 any 0.0.0.0/0 in -A ufw-user-input -p udp -m multiport --dports 1024:65535 -j ACCEPT ### tuple ### allow any any 0.0.0.0/0 any 192.168.1.0/24 in -A ufw-user-input -s 192.168.1.0/24 -j ACCEPT ### tuple ### allow tcp 53 0.0.0.0/0 any 0.0.0.0/0 in -A ufw-user-input -p tcp --dport 53 -j ACCEPT ### tuple ### allow udp 53 0.0.0.0/0 any 0.0.0.0/0 in -A ufw-user-input -p udp --dport 53 -j ACCEPT ### END RULES ### ### LOGGING ### -A ufw-after-logging-input -j LOG --log-prefix "[UFW BLOCK_ufw-after-log-input] " # для отладки можно включить, но лог сильно засран #-A ufw-after-logging-output -j LOG --log-prefix "[UFW ALLOW ufw-after-log-output] " # для отладки можно включить, но лог сильно засран #-A ufw-after-logging-forward -j LOG --log-prefix "[UFW ALLOW ufw-after-log-forward] " -A ufw-logging-deny -m conntrack --ctstate INVALID -j LOG --log-prefix "[UFW AUDIT INVALID] " -A ufw-logging-deny -j LOG --log-prefix "[UFW BLOCK] " # полезно для отладки , НО засирает log #-A ufw-logging-allow -j LOG --log-prefix "[UFW ALLOW ufw-logging-allow] " -I ufw-before-logging-input -j LOG --log-prefix "[UFW AUDIT] " -m limit --limit 3/min --limit-burst 10 -I ufw-before-logging-output -j LOG --log-prefix "[UFW AUDIT] " -m limit --limit 3/min --limit-burst 10 -I ufw-before-logging-forward -j LOG --log-prefix "[UFW AUDIT] " -m limit --limit 3/min --limit-burst 10 ### END LOGGING ### ### RATE LIMITING ### -A ufw-user-limit -m limit --limit 3/minute -j LOG --log-prefix "[UFW LIMIT BLOCK] " -A ufw-user-limit -j REJECT -A ufw-user-limit-accept -j ACCEPT ### END RATE LIMITING ### COMMIT
Ссылки:
Настройка файрвола в Ubuntu с помощью утилиты UFW в Ubuntu 20
Как настроить брандмауэр с UFW в Ubuntu 20.04
Настройка firewall в Ubuntu с помощью утилиты UFW
Узелки на память. Использование утилиты UFW на Ubuntu 18.04 LTS