Как закрыть порты в linux: различия между версиями
Swidh (обсуждение | вклад) |
VorteX (обсуждение | вклад) |
||
(не показано 11 промежуточных версий 2 участников) | |||
Строка 9: | Строка 9: | ||
sudo apt-get install iptables | sudo apt-get install iptables | ||
Существует три типа правил iptables — input, forward и output. | <h3>Существует три типа правил iptables — input, forward и output.</h3> | ||
Input — Такие цепочки используются для контроля поведения входящих соединений. К примеру, если пользователь попробует подключиться к серверу по SSH, то iptables сравнит его IP-адрес со своим списком, чтобы разрешить или запретить доступ. | <b>Input</b> — Такие цепочки используются для контроля поведения входящих соединений. К примеру, если пользователь попробует подключиться к серверу по SSH, то iptables сравнит его IP-адрес со своим списком, чтобы разрешить или запретить доступ. | ||
Forward — Правила этого типа используются для обработки входящих сообщений, конечный пункт назначения которых не является текущим сервером. К примеру, в случае маршрутизатора, к нему подключаются многие пользователи и приложения, но данные не посылаются на сам маршрутизатор, они лишь передаются ему, чтобы он мог перенаправить их адресату. Если вы не занимаетесь настройкой маршрутизации или NAT, то правила этого типа использовать в работе не будете. | <b>Forward</b> — Правила этого типа используются для обработки входящих сообщений, конечный пункт назначения которых не является текущим сервером. К примеру, в случае маршрутизатора, к нему подключаются многие пользователи и приложения, но данные не посылаются на сам маршрутизатор, они лишь передаются ему, чтобы он мог перенаправить их адресату. Если вы не занимаетесь настройкой маршрутизации или NAT, то правила этого типа использовать в работе не будете. | ||
Output — Такие цепочки используются для исходящих соединений. К прмиеру, если пользователь пытается отправинг запрос ping к сайту 1cloud.ru, iptables изучит цепочку правил, чтобы понять, что нужно делать в случае ping и этого сайт, и только потом разрешит или запретит соединение. | <b>Output</b> — Такие цепочки используются для исходящих соединений. К прмиеру, если пользователь пытается отправинг запрос ping к сайту 1cloud.ru, iptables изучит цепочку правил, чтобы понять, что нужно делать в случае ping и этого сайт, и только потом разрешит или запретит соединение. | ||
Важный момент | <b>Важный момент</b> | ||
Даже в случае пинга внешних хостов, нужно не только отправить пакеты к ним, но и получить ответ. При работе с iptables важно помнить, что многие протоколы передачи данных требуют двусторонней коммуникации. Поэтому нужно настраивать правила соответствующим образом — случаи, когда новички забывают разрешить работу с сервером по SSH случаются очень часто. | Даже в случае пинга внешних хостов, нужно не только отправить пакеты к ним, но и получить ответ. При работе с iptables важно помнить, что многие протоколы передачи данных требуют двусторонней коммуникации. Поэтому нужно настраивать правила соответствующим образом — случаи, когда новички забывают разрешить работу с сервером по SSH случаются очень часто. | ||
<h3>Рассмотрим вариант закрытия всех портов на сервере minecraft</h3> | |||
Создаем файл. | |||
nano /usr/local/sbin/my-firewall.sh | |||
Скопируйте и вставьте следующее содержимое (подсказка: чтобы вставить в терминал, используйте Ctrl + Shift + V): | |||
#!/bin/bash | |||
set -ex | |||
# Очищаем все правила <span style="color:#ff0000">Внимание! Может закрыть доступ ssh. Попробовать перезапуск машины.</span> | |||
iptables -F | |||
iptables -X | |||
iptables -t nat -F | |||
iptables -t nat -X | |||
iptables -t mangle -F | |||
iptables -t mangle -X | |||
iptables -t raw -F | |||
iptables -t raw -X | |||
# Default policy: блокировать все входящие соединения <span style="color:#ff0000">Внимание! Может закрыть доступ ssh.</span> | |||
iptables -P FORWARD DROP | |||
iptables -P INPUT DROP | |||
iptables -P OUTPUT ACCEPT | |||
# Разрешить ранее установленные соединения | |||
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT | |||
# Разрешить loopback соединения | |||
iptables -A INPUT -i lo -j ACCEPT | |||
# ICMP (ping) разрешаем пинг | |||
iptables -A INPUT -p icmp -j ACCEPT | |||
# SSH (port 22/TCP,UDP) разрешаем ssh соединения | |||
#iptables -A INPUT -p tcp --dport 22 -j ACCEPT | |||
#iptables -A INPUT -p udp --dport 22 -j DROP | |||
# MINECRAFT (port 25565/TCP) разрешаем подкючение к порту 25565 | |||
iptables -A INPUT -p tcp --dport 25565 -j ACCEPT | |||
# Block all UDP - блокируем все подключения по протоколу UDP | |||
iptables -A INPUT -p udp -s 0.0.0.0/0 -j DROP | |||
Измените права доступа к файлу, чтобы только пользователь root мог запускать скрипт: | |||
# chmod 744 /usr/local/sbin/my-firewall.sh | |||
Вот и все! Теперь, когда вам нужно настроить iptables, просто запустите скрипт: | |||
# /usr/local/sbin/my-firewall.sh | |||
Когда вам нужно изменить правила брандмауэра, отредактируйте скрипт и запустите его снова. | |||
<h3>Запуск iptables при загрузке</h3> | |||
Чтобы наш брандмауэр был идеальным, не хватает только одного: правила должны быть установлены во время загрузки вместе с операционной системой, сетью и службами. | |||
В дистрибутивах systemd, таких как openSUSE и Linux Kamarada, лучший способ запустить сценарий, такой как my-firewall.sh, во время загрузки — это создать службу. | |||
Например, создайте службу systemd с именем my-firewall.service в папке /etc/systemd/system/ с помощью вашего любимого текстового редактора: | |||
# nano /etc/systemd/system/my-firewall.service | |||
Скопируйте и вставьте следующее содержимое: | |||
[Unit] | |||
After=network.target | |||
[Service] | |||
ExecStart=/usr/local/sbin/my-firewall.sh | |||
[Install] | |||
WantedBy=default.target | |||
Настройте права доступа к файлам: | |||
# chmod 664 /etc/systemd/system/my-firewall.service | |||
Установите и включите службу, чтобы она запускалась при следующей загрузке: | |||
# systemctl daemon-reload | |||
# systemctl enable my-firewall | |||
Если вы хотите протестировать свою службу перед перезагрузкой, запустите: | |||
# systemctl start my-firewall | |||
# iptables -L | |||
Вот и все! В следующий раз, когда вы перезагрузите систему, systemd запустит службу, которая запускает скрипт, настраивающий iptables. |
Текущая версия на 18:47, 10 марта 2024
Как закрыть порты в linux
<< SurvivalHost Wiki
| К концу статьи | Короткая ссылка
Iptables — это межсетевой экран для операционных систем Linux.
Успешно применять этот инструмент могут не только продвинутые пользователи Linux, но и новички. В этом руководстве представлено описание базовых настроек конфигурации этого мощного файрвола.
Что такое iptables
Как сказано выше, iptables является утилитой, выполняющей функции межсетевого экрана. Настройка iptables производится в командной строке, с помощью правил iptables можно разрешать или блокировать прохождение трафика. Когда происходит попытка установления соединения с текущей машиной, iptables просматривает список правил в списке, чтобы понять, как нужно поступить в этом случае. Если правила нет, то выполняется действие по умолчанию.
Как правило, itpables предустанавливается на всех Linux-дистрибутивах. Чтобы обновить утилиту, или установить ее, если по каким-то причинам она отсутствует в базовой поставке, нужно воспользоваться следующей командой:
sudo apt-get install iptables
Существует три типа правил iptables — input, forward и output.
Input — Такие цепочки используются для контроля поведения входящих соединений. К примеру, если пользователь попробует подключиться к серверу по SSH, то iptables сравнит его IP-адрес со своим списком, чтобы разрешить или запретить доступ.
Forward — Правила этого типа используются для обработки входящих сообщений, конечный пункт назначения которых не является текущим сервером. К примеру, в случае маршрутизатора, к нему подключаются многие пользователи и приложения, но данные не посылаются на сам маршрутизатор, они лишь передаются ему, чтобы он мог перенаправить их адресату. Если вы не занимаетесь настройкой маршрутизации или NAT, то правила этого типа использовать в работе не будете.
Output — Такие цепочки используются для исходящих соединений. К прмиеру, если пользователь пытается отправинг запрос ping к сайту 1cloud.ru, iptables изучит цепочку правил, чтобы понять, что нужно делать в случае ping и этого сайт, и только потом разрешит или запретит соединение.
Важный момент
Даже в случае пинга внешних хостов, нужно не только отправить пакеты к ним, но и получить ответ. При работе с iptables важно помнить, что многие протоколы передачи данных требуют двусторонней коммуникации. Поэтому нужно настраивать правила соответствующим образом — случаи, когда новички забывают разрешить работу с сервером по SSH случаются очень часто.
Рассмотрим вариант закрытия всех портов на сервере minecraft
Создаем файл.
nano /usr/local/sbin/my-firewall.sh
Скопируйте и вставьте следующее содержимое (подсказка: чтобы вставить в терминал, используйте Ctrl + Shift + V):
#!/bin/bash set -ex
# Очищаем все правила Внимание! Может закрыть доступ ssh. Попробовать перезапуск машины.
iptables -F
iptables -X
iptables -t nat -F
iptables -t nat -X
iptables -t mangle -F
iptables -t mangle -X
iptables -t raw -F
iptables -t raw -X
# Default policy: блокировать все входящие соединения Внимание! Может закрыть доступ ssh.
iptables -P FORWARD DROP
iptables -P INPUT DROP
iptables -P OUTPUT ACCEPT
# Разрешить ранее установленные соединения
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
# Разрешить loopback соединения
iptables -A INPUT -i lo -j ACCEPT
# ICMP (ping) разрешаем пинг
iptables -A INPUT -p icmp -j ACCEPT
# SSH (port 22/TCP,UDP) разрешаем ssh соединения
#iptables -A INPUT -p tcp --dport 22 -j ACCEPT
#iptables -A INPUT -p udp --dport 22 -j DROP
# MINECRAFT (port 25565/TCP) разрешаем подкючение к порту 25565
iptables -A INPUT -p tcp --dport 25565 -j ACCEPT
# Block all UDP - блокируем все подключения по протоколу UDP
iptables -A INPUT -p udp -s 0.0.0.0/0 -j DROP
Измените права доступа к файлу, чтобы только пользователь root мог запускать скрипт:
# chmod 744 /usr/local/sbin/my-firewall.sh
Вот и все! Теперь, когда вам нужно настроить iptables, просто запустите скрипт:
# /usr/local/sbin/my-firewall.sh
Когда вам нужно изменить правила брандмауэра, отредактируйте скрипт и запустите его снова.
Запуск iptables при загрузке
Чтобы наш брандмауэр был идеальным, не хватает только одного: правила должны быть установлены во время загрузки вместе с операционной системой, сетью и службами.
В дистрибутивах systemd, таких как openSUSE и Linux Kamarada, лучший способ запустить сценарий, такой как my-firewall.sh, во время загрузки — это создать службу.
Например, создайте службу systemd с именем my-firewall.service в папке /etc/systemd/system/ с помощью вашего любимого текстового редактора:
# nano /etc/systemd/system/my-firewall.service
Скопируйте и вставьте следующее содержимое:
[Unit] After=network.target [Service] ExecStart=/usr/local/sbin/my-firewall.sh [Install] WantedBy=default.target
Настройте права доступа к файлам:
# chmod 664 /etc/systemd/system/my-firewall.service
Установите и включите службу, чтобы она запускалась при следующей загрузке:
# systemctl daemon-reload # systemctl enable my-firewall
Если вы хотите протестировать свою службу перед перезагрузкой, запустите:
# systemctl start my-firewall # iptables -L
Вот и все! В следующий раз, когда вы перезагрузите систему, systemd запустит службу, которая запускает скрипт, настраивающий iptables.