LINUX.ORG.RU
ФорумAdmin

Насройтка firewall для wireguard

 , , ,


0

1

Привет все. Озадачился настройкой собственного VPN сервера, купил VPS, настроил wireguard, nftables. Вопросы по nftables, конфиг такой:

01 #!/usr/sbin/nft -f
02
03 flush ruleset
04 
05 table inet filter {
06 	chain input {
07 		type filter hook input priority filter; policy drop;
08 		ct state invalid counter packets 0 bytes 0 drop
09 		iifname "lo" accept
10 		icmp type echo-request counter packets 0 bytes 0 accept
11 		ct state established,related counter packets 0 bytes 0 accept
12 		iifname "enp3s0" tcp dport 22 counter packets 0 bytes 0 accept
13 		iifname "enp3s0" udp dport 44830 counter packets 0 bytes 0 accept
14 	}
15 
16 	chain forward {
17 		type filter hook forward priority filter; policy drop;
18 		ct state invalid drop
19 		ct state established,related,new counter packets 0 bytes 0 accept
20 	}
21 
22 	chain output {
23 		type filter hook output priority filter; policy accept;
24 	}
25 }
26 table ip nat {
27 	chain prerouting {
28 		type nat hook prerouting priority dstnat; policy accept;
29 	}
30 
31 	chain postrouting {
32 		type nat hook postrouting priority srcnat; policy accept;
33 		oifname "enp0s3" counter packets 0 bytes 0 masquerade
34 	}
35 }
  • Если в таблице filter политики цепочек input и forward установлены в policy drop, то имеют ли смысл строки [08] и [18]?

  • Для iptables хатало строк:
iptables -A INPUT -i enp0s3 -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -i enp0s3 -p udp --dport 53830 -j ACCEPT
iptables -A INPUT -i enp0s3 -j DROP
iptables -A FORWARD -i eth0 -o wg0 -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -i eth0 -o wg0 -j DROP
iptables -t nat -A POSTROUTING -o eth0 -s 10.0.0.0/24 -j MASQUERADE

А вот при переносе правил в nftables В строке [19] пришлось добавить state new, это правильный подход?


  • Ну и самое главное, сламался curl. Примеры: kali-linux качает, но в консоли пишет всякую дребедень
curl -Lv https://kali.download/arm-images/kali-2022.3/kali-linux-2022.3-raspberry-pi-zero-2-w-armhf.img.xz -o NUL
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0*   Trying 104.18.103.100:443...
* Connected to kali.download (104.18.103.100) port 443 (#0)
* schannel: disabled automatic use of client certificate
* ALPN: offers http/1.1
* ALPN: server accepted http/1.1
> GET /arm-images/kali-2022.3/kali-linux-2022.3-raspberry-pi-zero-2-w-armhf.img.xz HTTP/1.1
> Host: kali.download
> User-Agent: curl/7.83.1
> Accept: */*
>
* Mark bundle as not supporting multiuse
< HTTP/1.1 200 OK
< Date: Tue, 25 Oct 2022 03:43:19 GMT
< Content-Type: application/octet-stream
< Content-Length: 2079663332
< Connection: keep-alive
< Last-Modified: Tue, 09 Aug 2022 13:52:26 GMT
< ETag: "62f2669a-7bf524e4"
< Expires: Thu, 31 Dec 2037 23:55:55 GMT
< Cache-Control: max-age=315360000
< CF-Cache-Status: HIT
< Age: 50
< Accept-Ranges: bytes
< Server: cloudflare
< CF-RAY: 75f7f284ad7abfb4-WAW
<
{ [2340 bytes data]
* schannel: failed to decrypt data, need more data
{ [99725 bytes data]
* schannel: failed to decrypt data, need more data
....
и так далее

А вот alpine вообще не качает, просто зависает вот так вот:

C:\#share>curl -Lv https://dl-cdn.alpinelinux.org/alpine/v3.16/releases/x86_64/alpine-standard-3.16.2-x86_64.iso -o NUL
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0*   Trying 151.101.114.133:443...
* Connected to dl-cdn.alpinelinux.org (151.101.114.133) port 443 (#0)
* schannel: disabled automatic use of client certificate
* ALPN: offers http/1.1
  0     0    0     0    0     0      0      0 --:--:--  0:01:02 --:--:--     0

Ключ -k не помогает

Это значит, что я не все правильно настроил. Где искать?


chain forward {
 		type filter hook forward priority filter; policy drop;
 		ct state invalid drop
 		ct state established,related,new counter packets 0 bytes 0 accept
}

Не имеет особого смысла. Оставь policy accept и ct state invalid drop. Либо разреши форвард только с конкретного интерфейса.

Meyer ★★★★★
()
Последнее исправление: Meyer (всего исправлений: 1)
Ответ на: комментарий от Meyer

Ну ок, получается так?

chain forward {
	type filter hook forward priority filter; policy accept;
	ct state invalid drop
}

С интерфейсами мне не до конца понятно как общаются между собой enp0s3 и wg0. Поэтому я решил избежать указание их в правилах.

dnsis
() автор топика
Ответ на: комментарий от dnsis

Тогда лучше так:

chain forward {
	type filter hook forward priority filter; policy drop;

        ct state invalid drop

        ct state established,related accept

        iifname wg0 oifname enp0s3 ct state new accept
}

Meyer ★★★★★
()
Последнее исправление: Meyer (всего исправлений: 2)

Не понимаю, почему все так любят руками крутить таблицы файрволла?

И где тогда эти толпы любителей ассемблера?!

Блять ну есть же компиляторы правил, позволяющие оперировать нормальными сущностями, а не отрывками правил в куче цепочек!

Shorewall уже сто лет как есть! Чего вы устраиваете?!

AVL2 ★★★★★
()
Ответ на: комментарий от AVL2

Ну во-первых я тоже не понимаю, для чего нужно пушку доставать, если перед нами воробей? Во-вторых, как я понял, Shorewall - это про iptables.

Да и вообще, тут не дикая гиганская сеть, тут всего то 2 сервиса нужно настроить.

И да, я извращенец, мне нравится минимализм и кажется, что так удобнее, 1 раз сделал и забыл.

dnsis
() автор топика
Ответ на: комментарий от AVL2

Не понимаю, почему все так любят руками крутить таблицы файрволла?

Чтобы получить то, что ты хочешь. Под капотом всяких ufw, firewalld и т.п может быть куча всего лишнего.

Meyer ★★★★★
()
Последнее исправление: Meyer (всего исправлений: 1)
Ответ на: комментарий от Meyer

Потом появляются программы типа MgxBox_Hello_World.exe весом по 1-2 мегабайта или статические html страницы которые весят в 10 раз меньше чем подключаемый jquery.

dnsis
() автор топика
Ответ на: комментарий от dnsis

Да пофиг, ядра с nftables прекрасно работают с shorewall.

Минимализм, это от убогости. И это паническое, «написал и забыл» тоже оттуда. Это все равно что отказываться от ручки и компьютера с принтером в пользу зубила с молотком и искать спасение в минимализме и этом пресловутом навысекал в мраморе и забыл…

AVL2 ★★★★★
()
Ответ на: комментарий от dnsis

При настройке wireguard, на сервере выставил MTU = 1280 по рекомендациям. Из-за этого как раз и была проблема curl, строку убрал и все заработало.

Каюсь, как влияет MTU на все это не понимаю до конца. Пошел читать и оказалось, тема очень обширная.

dnsis
() автор топика
Ответ на: комментарий от dnsis

Продолжаем разговор. При установке в конфиге MTU=1280 (я не знаю зачем это, но в интернете же советуют) нужно корректировать правила nftables:

        chain forward {
                type filter hook forward priority filter; policy accept;
                ct state invalid drop
                tcp flags syn counter packets 240 bytes 12480 tcp option maxseg size set rt mtu
        }
dnsis
() автор топика