Темы
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