Темы
IPTABLES
FirewallD
Установка компонентов управления iptables и остановка службы firewalld
Код: Выделить всё
systemctl disable firewalld
systemctl stop firewalld
dnf install iptables-services iptables-utils
systemctl enable iptables
systemctl start iptablesКод: Выделить всё
:msg, startswith, "-- OUT -- DROP " -/var/log/iptables.log
:msg, startswith, "-- IN -- DROP " -/var/log/iptables.log
:msg, startswith, "-- FW -- DROP " -/var/log/iptables.logКод: Выделить всё
/var/log/iptables.log
{
rotate 5
daily
missingok
notifempty
delaycompress
compress
postrotate
service rsyslog reload > /dev/null
endscript
}Код: Выделить всё
$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Код: Выделить всё
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Код: Выделить всё
IPTABLES_MODULES=""Код: Выделить всё
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_natcat /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