Image

База знаний → Настройка фаервола iptables в Debian 12

[Виртуальные сервера]
Дата публикации: 16.10.2023

В debian 12 фаервол iptables вшит в ядро и в отличие от предыдущих debian не имеет статуса службы. В данном руководстве мы рассмотрим основные команды по управлению.

1. Просмотр списка правил

iptables -L -n

Использование ключа -n отключает преобразование ip адресов в название хоста (IP-PTR).

1.1 Просмотр списка правил с нумерацией

iptables -L --line-numbers

2 Работа с правилами

2.1 Примеры правил для разрешения порта

2.1.1 Разрешим подключение по 22 порту

iptables -A INPUT -p tcp --dport 22 -j ACCEPT

2.1.2 Разрешим подключение по 80 порту

iptables -A INPUT -p tcp --dport 80 -j ACCEPT

2.1.2 Разрешим подключение по 443 порту и сделаем правило первым в цепочке правил

iptables -A INPUT 1 -p tcp --dport 443 -j ACCEPT

2.2 Удаление правил

2.2.1 Удаление по номеру правила

iptables -D INPUT 1

2.2.2 Удаление по содержанию правила

iptables -D INPUT -p tcp --dport 80 -j ACCEPT

2.3 Примеры правил для запрета

2.3.1 Запретим подключение для определенного ip к 25 порту

iptables -A INPUT -s xx.ip.xx.ip -p tcp –destination-port 25 -j DROP

2.3.2 Запретим подключение для определенного ip полностью

iptables -A INPUT -s 192.168.0.100 -j DROP

2.3.3 Запретим подключение для всей подсети

iptables -A INPUT -s 192.168.0.0/24 -j DROP

2.4 Сброс цепочки правил

Обратите внимание, чтобы у Вас было установлено правило по умолчанию перед вводом команды сброса правил, так как это приведет к потере соединения с сервером.

iptables -P INPUT ACCEPT

2.4.1 Сброс всех правил

iptables -F

2.4.2 Сброс цепочки правил

iptables -F INPUT

3. Сохранение правил

После перезагрузке сервера все прописанные правила будут удалены, чтобы этого не происходило, установим утилиту.

apt install iptables-persistent

В процессе установки будет предложено сохранить текущие настройки правил. iptables-persistent ищет файлы rules.v4 и rules.v6 в /etc/iptables и восстанавливает их при запуске сервера.

3.1 Сохранение правил

3.1.1 Сохранение через iptables-persistent

netfilter-persistent save 

3.1.2 Сохранение через iptables

Для того чтобы сохранить настройки правил позже, используйте команду

iptables-save > /etc/iptables/rules.v4
ip6tables-save > /etc/iptables/rules.v6

3.2 Восстановление правил

3.2.1 Восстановление с заменой текущих правил

iptables-restore < /etc/iptables/rules.v4

3.2.2 Восстановление с сохранением текущих правил

iptables-restore -n < /etc/iptables/rules.v4




Серж
22.09.2024 11:46
А если у меня при наборе команды iptables -L -n
Выдаёт
bash: iptables: команда не найдена
Synay Support
22.09.2024 11:50
Команда для установки:

apt-get install iptables
Серж
22.09.2024 12:02
Деор в том что при установке он выдаёт
mersoid@hp:~$ sudo apt install iptables
[sudo] пароль для mersoid:
Чтение списков пакетов… Готово
Построение дерева зависимостей… Готово
Чтение информации о состоянии… Готово
Уже установлен пакет iptables самой новой версии (1.8.9-2).
Обновлено 0 пакетов, установлено 0 новых пакетов, для удаления отмечено 0 пакетов, и 0 пакетов не обновлено.
mersoid@hp:~$ iptables -L
bash: iptables: команда не найдена
Synay Support
22.09.2024 12:09
Данная команда запускается от пользователя root
Для смены пользователя root, используйте команду su -
Серж
22.09.2024 12:16
Тоже самое пишет
root@hp:/# iptables -L -n
bash: iptables: команда не найдена
root@hp:/
Серж
22.09.2024 12:19
Прошу прощения за невнимательность. Спасибо получилось!
root@hp:/# sudo iptables -L -n
Chain INPUT (policy ACCEPT)
target prot opt source destination

Chain FORWARD (policy ACCEPT)
target prot opt source destination

Chain OUTPUT (policy ACCEPT)
target prot opt source destination
root@hp:/#
Synay Support
22.09.2024 12:23
Странно, когда от root, должен без sudo работать.
Может переменные окружения не заданы.
Полный путь на debian 12:
/sbin/iptables
Серж
22.09.2024 12:48
Возможно вот такие у меня
BASH=/usr/bin/bash
BASHOPTS=checkwinsize:cmdhist:complete_fullquote:expand_aliases:extquote:force_fignore:globasciiranges:globskipdots:hostcomplete:interactive_comments:patsub_replacement:progcomp:promptvars:sourcepath
BASH_ALIASES=()
BASH_ARGC=([0]="0")
BASH_ARGV=()
BASH_CMDS=()
BASH_LINENO=()
BASH_LOADABLES_PATH=/usr/local/lib/bash:/usr/lib/bash:/opt/local/lib/bash:/usr/pkg/lib/bash:/opt/pkg/lib/bash:.
BASH_SOURCE=()
BASH_VERSINFO=([0]="5" [1]="2" [2]="15" [3]="1" [4]="release" [5]="x86_64-pc-linux-gnu")
BASH_VERSION='5.2.15(1)-release'
COLORTERM=truecolor
COLUMNS=120
DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/1000/bus
DESKTOP_SESSION=gnome
DIRSTACK=()
DISPLAY=:0
EUID=0
GDMSESSION=gnome
GDM_LANG=ru_RU.UTF-8
GNOME_DESKTOP_SESSION_ID=this-is-deprecated
GNOME_SETUP_DISPLAY=:1
GNOME_TERMINAL_SCREEN=/org/gnome/Terminal/screen/04e98a7b_d034_486e_b8f1_6219b477a8df
GNOME_TERMINAL_SERVICE=:1.89
GROUPS=()
GTK_MODULES=gail:atk-bridge
HISTFILE=/root/.bash_history
HISTFILESIZE=500
HISTSIZE=500
HOME=/root
HOSTNAME=hp
HOSTTYPE=x86_64
IFS=$' \t\n'
IM_CONFIG_PHASE=1
LANG=ru_RU.UTF-8
LINES=24
LOGNAME=mersoid
LS_COLORS='rs=0:di=01;34:ln=01;36:mh=00:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:mi=00:su=37;41:sg=30;43:ca=00:tw=30;42:ow=34;42:st=37;44:ex=01;32:*.tar=01;31:*.tgz=01;31:*.arc=01;31:*.arj=01;31:*.taz=01;31:*.lha=01;31:*.lz4=01;31:*.lzh=01;31:*.lzma=01;31:*.tlz=01;31:*.txz=01;31:*.tzo=01;31:*.t7z=01;31:*.zip=01;31:*.z=01;31:*.dz=01;31:*.gz=01;31:*.lrz=01;31:*.lz=01;31:*.lzo=01;31:*.xz=01;31:*.zst=01;31:*.tzst=01;31:*.bz2=01;31:*.bz=01;31:*.tbz=01;31:*.tbz2=01;31:*.tz=01;31:*.deb=01;31:*.rpm=01;31:*.jar=01;31:*.war=01;31:*.ear=01;31:*.sar=01;31:*.rar=01;31:*.alz=01;31:*.ace=01;31:*.zoo=01;31:*.cpio=01;31:*.7z=01;31:*.rz=01;31:*.cab=01;31:*.wim=01;31:*.swm=01;31:*.dwm=01;31:*.esd=01;31:*.avif=01;35:*.jpg=01;35:*.jpeg=01;35:*.mjpg=01;35:*.mjpeg=01;35:*.gif=01;35:*.bmp=01;35:*.pbm=01;35:*.pgm=01;35:*.ppm=01;35:*.tga=01;35:*.xbm=01;35:*.xpm=01;35:*.tif=01;35:*.tiff=01;35:*.png=01;35:*.svg=01;35:*.svgz=01;35:*.mng=01;35:*.pcx=01;35:*.mov=01;35:*.mpg=01;35:*.mpeg=01;35:*.m2v=01;35:*.mkv=01;35:*.webm=01;35:*.webp=01;35:*.ogm=01;35:*.mp4=01;35:*.m4v=01;35:*.mp4v=01;35:*.vob=01;35:*.qt=01;35:*.nuv=01;35:*.wmv=01;35:*.asf=01;35:*.rm=01;35:*.rmvb=01;35:*.flc=01;35:*.avi=01;35:*.fli=01;35:*.flv=01;35:*.gl=01;35:*.dl=01;35:*.xcf=01;35:*.xwd=01;35:*.yuv=01;35:*.cgm=01;35:*.emf=01;35:*.ogv=01;35:*.ogx=01;35:*.aac=00;36:*.au=00;36:*.flac=00;36:*.m4a=00;36:*.mid=00;36:*.midi=00;36:*.mka=00;36:*.mp3=00;36:*.mpc=00;36:*.ogg=00;36:*.ra=00;36:*.wav=00;36:*.oga=00;36:*.opus=00;36:*.spx=00;36:*.xspf=00;36:*~=00;90:*#=00;90:*.bak=00;90:*.old=00;90:*.orig=00;90:*.part=00;90:*.rej=00;90:*.swp=00;90:*.tmp=00;90:*.dpkg-dist=00;90:*.dpkg-old=00;90:*.ucf-dist=00;90:*.ucf-new=00;90:*.ucf-old=00;90:*.rpmnew=00;90:*.rpmorig=00;90:*.rpmsave=00;90:'
MACHTYPE=x86_64-pc-linux-gnu
MAIL=/var/mail/root
MAILCHECK=60
OLDPWD=/etc/apt
OPTERR=1
OPTIND=1
OSTYPE=linux-gnu
PATH=/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games
PIPESTATUS=([0]="0")
PPID=3024
PS1='${debian_chroot:+($debian_chroot)}\u@\h:\w\$ '
PS2='> '
PS4='+ '
PWD=/
QT_ACCESSIBILITY=1
QT_IM_MODULE=ibus
SESSION_MANAGER=local/hp:@/tmp/.ICE-unix/1549,unix/hp:/tmp/.ICE-unix/1549
SHELL=/bin/bash
SHELLOPTS=braceexpand:emacs:hashall:histexpand:history:interactive-comments:monitor
SHLVL=2
SSH_AGENT_LAUNCHER=openssh
SSH_AUTH_SOCK=/run/user/1000/keyring/ssh
SYSTEMD_EXEC_PID=1585
TERM=xterm-256color
UID=0
USER=mersoid
USERNAME=mersoid
VTE_VERSION=7006
WAYLAND_DISPLAY=wayland-0
XAUTHORITY=/run/user/1000/.mutter-Xwaylandauth.H681T2
XDG_CURRENT_DESKTOP=GNOME
XDG_DATA_DIRS=/usr/share/gnome:/usr/local/share/:/usr/share/
XDG_MENU_PREFIX=gnome-
XDG_RUNTIME_DIR=/run/user/1000
XDG_SESSION_CLASS=user
XDG_SESSION_DESKTOP=gnome
XDG_SESSION_TYPE=wayland
XMODIFIERS=@im=ibus
_=--line-numbers
Synay Support
22.09.2024 12:56
Попробуйте добавить /sbin в строку
PATH=/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games

Получится вот так:
PATH=/usr/local/bin:/usr/bin:/bin:/sbin:/usr/local/games:/usr/games
Cерж
22.09.2024 13:27
попробовал изменить через root@hp:/# sudo nano /etc/profile добавив /sbin
но ничего не поменялось
и без sudo также
root@hp:/# iptables -L -n
bash: iptables: команда не найдена
при проверке PATH ничего не изменилось в строке, в profile изменения сохранились
root@hp:/# printenv PATH
/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games
Synay Support
22.09.2024 13:46
Причина в этом и уже выходит за пределы статьи про iptables.
Либо полный путь писать /sbin/iptables
Серж
22.09.2024 17:48
Спасибо! Реально выручили!