summaryrefslogtreecommitdiff
path: root/LINUX/UFW.md
blob: af92d4eb95251b961db58e09b5023ab44d8240cb (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
```sh
sudo su

ufw status

ufw enable

ufw app list
ufw allow OpenSSH

# Чтобы увидеть, что в настоящее время заблокировано или разрешено, вы можете использовать параметр **verbose** при запуске **ufw status**, как показано ниже:

sudo ufw status verbose

sudo ufw disable

# Блокировка обращения IP-адреса
# Чтобы заблокировать все сетевые подключения, исходящие с определенного IP-адреса, выполните следующую команду, заменив выделенный IP-адрес на IP-адрес, который вы хотите заблокировать:

sudo ufw deny from 91.198.174.190

# Заблокировать подсеть
# Если вам нужно заблокировать всю подсеть, вы можете использовать адрес подсети в качестве параметра «from» в команде ufw deny. Это заблокирует все IP-адреса в приведенной в примере подсети 91.198.174.0/24:

sudo ufw deny from 91.198.174.0/24

# Блокирование входящих подключений к сетевому интерфейсу
# Чтобы заблокировать входящие подключения с определенного IP-адреса к определенному сетевому интерфейсу, выполните следующую команду, заменив IP-адрес на IP-адрес, который вы хотите заблокировать:

sudo ufw deny in on eth0 from 91.198.174.192

# Параметр «in» указывает брандмауэру применять правило только для входящих соединений, а параметр «on eth0» указывает, что правило применяется только для интерфейса eth0.
# Это может быть полезно, если у вас есть система с несколькими сетевыми интерфейсами (включая виртуальные), и вам нужно заблокировать внешний доступ к некоторым из этих интерфейсов, но не ко всем.

# Разрешить обращения IP-адреса
# Чтобы разрешить все сетевые подключения, исходящие с определенного IP-адреса, выполните следующую команду, заменив выделенный IP-адрес на IP-адрес, к которому вы хотите разрешить доступ:

sudo ufw allow from 91.198.174.192

# Если теперь вы запустите «sudo ufw status», вы увидите вывод, похожий на этот, с надписью ALLOW рядом с IP-адресом, который вы только что добавили:

# Разрешение входящих подключений к сетевому интерфейсу
# Чтобы разрешить входящие подключения с определенного IP-адреса к определенному сетевому интерфейсу, выполните следующую команду, заменив IP-адрес на тот, который вы хотите разрешить:

sudo ufw allow in on eth0 from 91.198.174.22

# Параметр «in» указывает брандмауэру применять правило только для входящих соединений, а параметр «on eth0» указывает, что правило применяется только для интерфейса «eth0».

# Удалить правило брандмауэра
# Чтобы удалить правило, ранее установленное в UFW, используйте **ufw delete**, затем введите правило (allow / deny) и целевую спецификацию. В следующем примере удаляется правило, ранее установленное для разрешения всех подключений с IP-адреса 91.198.174.192:

sudo ufw delete allow from 91.198.174.192

# Другой способ указать, какое правило вы хотите удалить, – это указать ID правила. Эту информацию можно получить с помощью следующей команды:

sudo ufw status numbered

sudo ufw delete 1

# Список доступных профилей приложений
# При установке приложения, которые полагаются на сетевые коммуникации, обычно устанавливают профиль брандмауэра, который можно использовать для разрешения подключения с внешних адресов. Это часто то же самое, что запустить «ufw allow from», с тем преимуществом, что это ярлык, который абстрагирует конкретные номера портов, используемые службой, и обеспечивает удобную номенклатуру для ссылающихся служб.

sudo ufw app list

# Если вы установили службу, например, веб-сервер или другое сетезависимое программное обеспечение, и профиль не был доступен в брандмауэре, сначала убедитесь, что служба включена.

# В следующем примере мы включаем профиль OpenSSH, который разрешит все входящие SSH-соединения на стандартном порту SSH.

sudo ufw allow OpenSSH

# Отключить профиль для определенного приложения
# Чтобы отключить профиль приложения, который вы ранее настроили в брандмауэре, вам нужно удалить соответствующее правило.

sudo ufw status

# Этот вывод указывает на то, что профиль приложения «Nginx Full» в настоящее время включен, разрешая любые соединения с веб-сервером как через HTTP[](https://serverspace.ru/support/glossary/http/), так и через HTTPS.

# Если вы хотите разрешить только HTTPS-запросы к вашему веб-серверу, вам нужно сначала включить наиболее ограничивающее правило, которым в данном случае будет «Nginx HTTPS», а затем отключить активное правило «Nginx Full»:

sudo ufw allow "Nginx HTTPS" sudo ufw delete allow "Nginx Full"

# Помните, что вы можете перечислить все доступные профили приложений с помощью:

sudo ufw app list



ip addr show
hostname -I

curl -4 icanhazip.com
```
=====================================================
### Шпаргалка по ufw для базовой настройки фаервола

Сетевой безопасностью часто пренебрегают при создании своих проектов на своем сервере. Но даже базовая настройка фаервола уже существенно снижает риски.

`ufw (Uncomplicated Firewall)` - простой способ настроить фаервол на Linux. Работает как обёртка над iptables, но не требует глубоких знаний сетевого стека.

Зачем вообще нужен фаервол?

Когда ты поднимаешь сервер (особенно публичный), он сразу становится видимым всему интернету. И даже если ты не настраиваешь ничего «опасного», какие-то сервисы по умолчанию могут слушать порты. 

ufw помогает ограничить доступ: только те порты, которые ты явно разрешил - будут открыты. Если ты только поднял VPS и хочешь защитить сервер - это именно то, что нужно. Если по какой-то причине у тебя ufw не установлен:

`sudo apt install ufw

Перед включением стоит задать основные правила, иначе можно случайно отрезать себя от SSH-доступа (особенно на VPS). Начнем с самого важного:

`sudo ufw allow ssh

Теперь можно активировать фаервол:

`sudo ufw enable

Просмотр статуса и активных правил:

`sudo ufw status verbose

Отключение при необходимости:

`sudo ufw disable

Базовые правила, которые стоить задать

Одно правило по разрешению ssh-доступа мы уже добавили, также будет правильно разрешить веб-траффик (http/https):


$ sudo ufw allow 80,443/tcp


Полезно запретить весь входящий трафик по умолчанию и разрешить только нужное. Также оставить открытым все на выход:

`sudo ufw default deny incoming

`sudo ufw default allow outgoing

#### Полезные команды:

**Удалить правило:

`sudo ufw delete allow 80/tcp

**Разрешить доступ по конкретному IP:

sudo ufw allow from 192.168.1.10

Это может понадобиться, например, чтобы открыть порты для веб-траффика только Cloudflare или ServicePipe и закрыть для всего остального:

`ufw default deny incoming
`ufw default allow outgoing

предположим что 192.168.1.10 - IP нашего ServicePipe

`sudo ufw allow from 192.168.1.10 to any port 22

Сбросить все правила и начать с нуля:

`sudo ufw reset

После настройки рекомендую протестировать сервер из другого устройства или использовать онлайн-сервисы вроде portquiz или nmap для сканирования портов. Также полезно мониторить логи:

`sudo less /var/log/ufw.log

Если `ufw` работает - ты увидишь записи о заблокированных соединениях, особенно на нестандартные порты. Даже минимальные настройки ufw — это уже огромный шаг вперёд в безопасности. Он не требует глубокого понимания iptables и легко вписывается в ежедневный рабочий процесс. Один раз настроил — и забыл.