IPTABLES и FirewallD.

Установка, настройка, эксплуатация.

Модератор: ROOT

IPTABLES и FirewallD.

Сообщение ROOT » 19 июл 2017, 11:47

Оглавление


Темы
 IPTABLES 
 FirewallD 


 IPTABLES 
Установка компонентов управления 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
Администрирование Fedora Linux + настройка сети и прочая IT-Ботва


Для желающих поддержать
Карта SB: 5469 4009 6510 2267


Лучше ужасный конец, чем ужас без конца!
Аватар пользователя
ROOT
Администратор
 
Сообщений: 436
Зарегистрирован: 01 авг 2011, 09:36
Откуда: Моск. обл., г. Железнодорожный

Сообщение ROOT » 09 апр 2022, 18:08



 FirewallD 
Разрешить для зоны 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 --permanent --direct --add-rule ipv4 nat OUTPUT 0 -p tcp -o lo --dport 9050 -j REDIRECT --to-ports 9050

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'
Администрирование Fedora Linux + настройка сети и прочая IT-Ботва


Для желающих поддержать
Карта SB: 5469 4009 6510 2267


Лучше ужасный конец, чем ужас без конца!
Аватар пользователя
ROOT
Администратор
 
Сообщений: 436
Зарегистрирован: 01 авг 2011, 09:36
Откуда: Моск. обл., г. Железнодорожный


Вернуться в Fedora

Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 0