IPTABLES и FirewallD.

Установка, настройка, эксплуатация.
Ответить
Аватара пользователя
root
Site Admin
Сообщения: 501
Зарегистрирован: 15 авг 2026 01:31

IPTABLES и FirewallD.

Сообщение root »

Оглавление
Темы
IPTABLES
FirewallD
Установка компонентов управления iptables и остановка службы firewalld

Код: Выделить всё

systemctl disable firewalld
systemctl stop firewalld
dnf install iptables-services iptables-utils
systemctl enable iptables
systemctl start iptables
Журналирование событий iptables в отдельный файл. Редактируем файл /etc/rsyslog.conf, перед правилами в секции RULES вставляем:

Код: Выделить всё

:msg, startswith, "-- OUT -- DROP " -/var/log/iptables.log
:msg, startswith, "-- IN -- DROP " -/var/log/iptables.log
:msg, startswith, "-- FW -- DROP " -/var/log/iptables.log
Обычные сообщения FileTypically записываются в реальные файлы. Файл должен быть указан с полным путём, начиная с косой черты " / ". Вы можете приписать каждой записи знак минус " - ", чтобы не синхронизировать файл после каждой регистрации. Обратите внимание, что вы можете потерять информацию, если система выходит из строя сразу после попытки записи. Тем не менее это может дать вам некоторую производительность, особенно если вы запускаете программы, которые используют ведение журнала в очень подробном режиме. Для автоматической ротации файла /var/log/iptables создаем файл /etc/logrotate.d/iptables с таким содержанием:

Код: Выделить всё

/var/log/iptables.log
{
        rotate 5
        daily
        missingok
        notifempty
        delaycompress
        compress
        postrotate
                service rsyslog reload > /dev/null
        endscript
}
Проброс Порта SSH до http://www.corp.ru (внутрь сети на host server.corp.ru 192.168.1.1)

Код: Выделить всё

$IPT -t nat -A PREROUTING --dst $WAN_IP -p tcp --dport 2222 -j DNAT --to-destination 147.45.67.34
$IPT -I FORWARD 1 -i $WAN -o $LAN -d 147.45.67.34 -p tcp -m tcp --dport 2222 -j ACCEPT
Настройка параметров для NAT

Код: Выделить всё

net.core.rmem_default = 16777216
net.core.rmem_max = 16777216
net.core.wmem_default = 16777216
net.core.wmem_max = 16777216
net.ipv4.tcp_rmem = 4096 16777216  16777216
net.ipv4.tcp_wmem = 4096 16777216  16777216
net.ipv4.tcp_syncookies = 1
net.ipv4.conf.all.accept_redirects = 0
net.ipv4.conf.default.accept_redirects = 0
net.ipv4.icmp_echo_ignore_broadcasts=1
net.ipv4.conf.all.accept_source_route=0
net.ipv4.ip_local_port_range = 16384    61000
net.ipv4.tcp_keepalive_time = 1800
net.ipv4.netfilter.ip_conntrack_tcp_timeout_established = 200000
net.ipv4.ip_conntrack_max = 64000000
net.ipv4.tcp_fin_timeout = 30
net.ipv4.tcp_keepalive_probes = 2
# Указываем максимальное количество начальных SYN и SYN+ACK повторов для установки TCP соединения.
# Данные параметры следует использовать с осторожностью на плохих линиях связи т.к. есть вероятность,
что TCP сессии никогда не будут установлены.
net.ipv4.tcp_synack_retries = 3
net.ipv4.tcp_syn_retries = 3
#Следующие параметры явно не влияют на производительность сетевой подсистемы.
kernel.panic = 10
net.ipv4.tcp_timestamps=0
Для применения данных параметров выполните:

Код: Выделить всё

sysctl -p
Управление загрузкой дополнительных модулей осуществляется в файле /etc/sysconfig/iptables-config

Код: Выделить всё

IPTABLES_MODULES=""
Список основных модулей firewall'а

Код: Выделить всё

ip_conntrack
ip_conntrack_ftp
ip_conntrack_irc
ip_conntrack_netbios_ns
ip_nat_ftp ip_nat_irc
ipt_comment ipt_conntrack
ipt_helper
ipt_length
ipt_limit
ipt_LOG
ipt_multiport
ipt_REDIRECT
ipt_REJECT
ipt_state
ipt_tcp
ipt_TCPMSS
ipt_tcpmss
ipt_tos
ipt_TOS
ipt_ttl
iptable_filter
iptable_mangle
iptable_nat
Пример скрипта для управления правилами iptable
cat /etc/iptables_rules.sh

Код: Выделить всё

#!/bin/bash
# Объявление переменных
export IPT="iptables"
# Интерфейс который смотрит в интернет
export WAN="enp5s0"
export WAN_IP="195.0.1.3"
export WAN_NET="195.0.1.0/24"
export VPN_NET="10.8.0.0/24"
export VPN="tun0"
export DNS="212.1.224.6,212.1.244.6"
export NTP="212.1.224.6,212.1.244.6"
export GW="212.1.254.156"
export PING="212.1.224.6,212.1.244.6"
################################################################
# Очистка всех цепочек iptables
$IPT -F
$IPT -X
$IPT -F -t nat
$IPT -t nat -X
$IPT -F -t mangle
$IPT -t mangle -X
################################################################
# Установим политики по умолчанию для трафика, не соответствующего ни одному из правил
$IPT -P INPUT DROP
$IPT -P FORWARD DROP
$IPT -P OUTPUT DROP
# Отбрасывать все пакеты, которые не могут быть идентифицированы
# и поэтому не могут иметь определенного статуса.
$IPT -A INPUT -m state --state INVALID -j DROP
# Приводит к связыванию системных ресурсов, так что реальный
# обмен данными становится не возможным, обрубаем
$IPT -A INPUT -p tcp ! --syn -m state --state NEW -j DROP
$IPT -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
# Отбрасывать все пакеты, которые не могут быть идентифицированы
# и поэтому не могут иметь определенного статуса.
$IPT -A FORWARD -m state --state INVALID -j DROP
# Состояние ESTABLISHED говорит о том, что это не первый пакет в соединении.
# Пропускать все уже инициированные соединения, а также дочерние от них
$IPT -A FORWARD -p all -m state --state ESTABLISHED,RELATED -j ACCEPT
#$IPT -A FORWARD -i $VPN -j ACCEPT
# Включаем фрагментацию пакетов. Необходимо из за разных значений MTU
$IPT -I FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu
# Возвращаем "Сеть не доступна" при попытке пинговать сеть за этим роутером,
# если источник пинга не в сети 195.0.1.0/24
$IPT -I FORWARD -i $WAN -p icmp ! -s $WAN_NET -j REJECT --reject-with icmp-net-unreachable
######################################################
### INPUT ####
# разрешаем входящий трафик для loopback
$IPT -A INPUT -i lo -j ACCEPT
### "OUTPUT" ####
# Приводит к связыванию системных ресурсов, так что реальный
# обмен данными становится не возможным, обрубаем
$IPT -A OUTPUT -p tcp ! --syn -m state --state NEW -j DROP
# разрешаем исходящий трафик для loopback                                                       
$IPT -A OUTPUT -o lo -j ACCEPT
### "OUTPUT" ####
$IPT -A OUTPUT -o $WAN -j ACCEPT
### ВЫХОД через VPN
$IPT -A OUTPUT -o $VPN -j ACCEPT
$IPT -A INPUT -i $VPN -j ACCEPT
################################################################
# Открываем порты для цепочки "INPUT"
### SSH
$IPT -A INPUT -i $WAN -p tcp --dport ssh -m state --state NEW -j ACCEPT
# Не работает -m connlimit --connlimit-above 2
$IPT -A INPUT -i $WAN -p tcp -m multiport --dport ftp-data,ftp -m state --state NEW -j ACCEPT
$IPT -A INPUT -i $WAN -p tcp --dport smtp -m state --state NEW -j ACCEPT
$IPT -A INPUT -i $WAN -p tcp -m multiport --dport http,https -m state --state NEW -j ACCEPT
$IPT -A INPUT -i $WAN -p tcp -m multiport --dport smtp,smtps,imap,imaps -m state --state NEW -j ACCEPT
# FTP-PASSIVE
$IPT -A INPUT -i $WAN -p tcp -m multiport --dport 49152:50000 -j ACCEPT
# ICQ-QIP
$IPT -A INPUT -i $WAN -p tcp -m multiport --dport 5024:5048 -m state --state NEW -j ACCEPT
$IPT -A INPUT -i $WAN -p tcp --dport 5222 -m state --state NEW -j ACCEPT
### MySQL
#$IPT -A INPUT -i $WAN -p tcp -s $WAN_NET --dport 3306 -m state --state NEW -j ACCEPT
# TORRENT Transmission
$IPT -A INPUT -i $WAN -p tcp --dport 51413 -j ACCEPT
$IPT -A INPUT -i $WAN -p udp --dport 51413 -j ACCEPT
# * Для запросов DNS из сети 195.0.1.0/24
$IPT -A INPUT -i $WAN -p tcp -s $WAN_NET --dport domain -j ACCEPT
$IPT -A INPUT -i $WAN -p udp -s $WAN_NET --dport domain -j ACCEPT
$IPT -A INPUT -i $WAN -p tcp -s $VPN_NET --dport domain -j ACCEPT
$IPT -A INPUT -i $WAN -p udp -s $VPN_NET --dport domain -j ACCEPT
# * Для запросов NTP  из сети 195.0.1.0/24
$IPT -A INPUT -i $WAN -p udp -s $WAN_NET -m multiport --dport ntp,323 -j ACCEPT
# * Для запросов TFTP  из сети 195.0.1.0/24
$IPT -A INPUT -i $WAN -p tcp -s $WAN_NET --dport tftp -j ACCEPT
$IPT -A INPUT -i $WAN -p udp -s $WAN_NET --dport tftp -j ACCEPT
# * Для запросов DHCP  из сети 195.0.1.0/24
$IPT -A INPUT -i $WAN -p tcp -s $WAN_NET --dport bootpc -j ACCEPT
$IPT -A INPUT -i $WAN -p udp -s $WAN_NET --dport bootpc -j ACCEPT
# AMULE
$IPT -A INPUT -i $WAN -p udp -s $WAN_NET --dport 4672  -j ACCEPT
$IPT -A INPUT -i $WAN -p tcp -s $WAN_NET -m multiport --dport 4662,4665  -j ACCEPT
$IPT -A INPUT -i $WAN -p udp -s $WAN_NET -m multiport --dport 4662,4665  -j ACCEPT
# HP LaserJet M1536dnf MFP
$IPT -A INPUT -i $WAN -p udp -s $WAN_NET -m multiport --dport 137,161,427,5222,5223,5353,5297,5298  -j ACCEPT
$IPT -A INPUT -i $WAN -p tcp -s $WAN_NET -m multiport --dport 139,5222,5223,9100,9220,9500  -j ACCEPT
# * Для запросов SAMBA  из сети 195.0.1.0/24
$IPT -A INPUT -i $WAN -p udp -s $WAN_NET -m multiport --dport 137,138 -j ACCEPT
$IPT -A INPUT -i $WAN -p tcp -s $WAN_NET -m multiport --dport 139,445 -j ACCEPT
# Для VNC из сети 195.0.1.0/24
$IPT -A INPUT -i $WAN -p tcp -s $WAN_NET -m multiport --dport 5901,6001 -j ACCEPT
# Для Admin Cosole из сети 195.0.1.0/24
$IPT -A INPUT -i $WAN -p tcp -s $WAN_NET -m multiport --dport 9090,9091 -j ACCEPT
# * Для запросов ICMP из сети 195.0.1.0/24
$IPT -A INPUT -i $WAN -p icmp -d $WAN_NET,$PING,$GW -j ACCEPT
$IPT -A INPUT -i $WAN -p icmp ! -d $WAN_NET -j REJECT --reject-with icmp-host-unreachable
# i2p
$IPT -A INPUT -i $WAN -p udp --dport 13331 -j ACCEPT
# * Подключение клиентов OpenVPN к серверу на внешний интерфейс
#$IPT -A INPUT -i $WAN -p udp --dport openvpn -j ACCEPT
############################################################
# Логирование
# Все что не разрешено, но ломится отправим в цепочку undef
$IPT -N undef_in
$IPT -N undef_out
$IPT -N undef_fw
$IPT -A INPUT -j undef_in
$IPT -A OUTPUT -j undef_out
$IPT -A FORWARD -j undef_fw
# Логируем все из undef
$IPT -A undef_in -j LOG --log-level info --log-prefix "-- IN -- DROP "
$IPT -A undef_in -j DROP
$IPT -A undef_out -j LOG --log-level info --log-prefix "-- OUT -- DROP "
$IPT -A undef_out -j DROP
$IPT -A undef_fw -j LOG --log-level info --log-prefix "-- FW -- DROP "
$IPT -A undef_fw -j DROP
# Записываем правила
/sbin/iptables-save  > /etc/sysconfig/iptables
Аватара пользователя
root
Site Admin
Сообщения: 501
Зарегистрирован: 15 авг 2026 01:31

📝

Сообщение root »


Разрешить для зоны public ftp на постоянной основе

Код: Выделить всё

firewall-cmd --permanent --zone=public --add-service=ftp
Разрешить SSH доступ к серверу из-под сети 10.0.0.0/8.

Код: Выделить всё

firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address="10.0.0.0/8" service name="ssh" accept"
firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="x.x.x.x/x" service name="ssh" log prefix="ssh" level"info" accept'
Просмотр настроек для зоны по умолчанию

Код: Выделить всё

firewall-cmd  --list-all
external (default, active)
  interfaces: enp0s3 enp0s8
  sources:
  services: 1c dns ftp hasp http https openvpn postgresql samba ssh
  ports:
  masquerade: yes
  forward-ports:
  icmp-blocks:
  rich rules:
Список портов используемых при доступе к SAMBA

Код: Выделить всё

firewall-cmd --permanent --zone=public --add-port=137/udp
firewall-cmd --permanent --zone=public --add-port=138/udp
firewall-cmd --permanent --zone=public --add-port=139/tcp
firewall-cmd --permanent --zone=public --add-port=445/tcp
firewall-cmd --permanent --zone=public --add-port=901/tcp

если wins нужен то еще - TCP\UDP 42
firewall-cmd --permanent --zone=public --add-port=42/udp
firewall-cmd --permanent --zone=public --add-port=42/tcp
firewall-cmd --reload

Проверяем включен ли приём пакетов на пересылку

Код: Выделить всё

sysctl net.ipv4.ip.forward
net.ipv4.ip_forward = 1
или
cat /proc/sys/net/ipv4/ip_forward
1
Проверяем включена ли пересылка пакетов на интерфейс lo

Код: Выделить всё

sysctl net.ipv4.conf.enp5s0.route_localnet
net.ipv4.conf.enp5s0.route_localnet = 1
Если значения вышеизложенных параметров отличаются от единицы, то правим значения на верные

Код: Выделить всё

sysctl -w net.ipv4.ip_forward=1
sysctl -w net.ipv4.conf.enp5s0.route_localnet=1
С подготовительным этапом на этом всё. Теперь переходим к настройке самого редиректа портов. Перенаправляем входящий трафик по порту 9050 на интерфейс lo но порт 9050:

Код: Выделить всё

firewall-cmd --add-forward-port=port=9050:proto=tcp:toport=9050:toaddr=127.0.0.1
firewall-cmd --add-forward-port=port=3065:proto=tcp:toport=3065:toaddr=127.0.0.1

Nat IPv6 только для крайних степеней запущенности

Применил для доступа в интернет куска локальной сети с site-loca unicast адресацией.

Код: Выделить всё

firewall-cmd --add-rich-rule='rule family="ipv6" source address="fd00:7777:7777:7777::0/64" masquerade' --permanent
firewall-cmd --add-rich-rule='rule family="ipv6" source address="fd00:7777:7777:7777::0/64" masquerade'
Последний раз редактировалось root 08 июн 2026 02:18, всего редактировалось 1 раз.
Ответить