Здесь я не стану рассматривать общий принцип, т.к. это тема очень обширная, а выложу лишь уже готовые скрипты для разных ситуаций.

И так для начала все таки включим возможность форвадинга трафика через машинку на linux:

sudo sed -i ‘/#net.ipv4.ip_forward=1/s/#net.ipv4.ip_forward=1/net.ipv4.ip_forward=1/g’ /etc/sysctl.conf

после этого нужно перезагрузить компьютер.

Скрипт очистки файервола:

!/bin/bash
# Удаляем все правила
sudo iptables -F
sudo iptables —flush
sudo iptables —table nat —flush
sudo iptables —delete-chain
sudo iptables —table nat —delete-chain
# Открываем все
sudo iptables -P INPUT ACCEPT
sudo iptables -P OUTPUT ACCEPT
sudo iptables -P FORWARD ACCEPT
# Вставляем в автозагрузку
sudo echo «#! /sbin/iptables-restore» > /etc/network/if-up.d/iptables-rules
sudo iptables-save >> /etc/network/if-up.d/iptables-rules
sudo chmod +x /etc/network/if-up.d/iptables-rules

Скрипт настройки файервола для рабочей станции:

!/bin/bash
# Удаляем все правила
sudo iptables -F
sudo iptables —flush
sudo iptables —table nat —flush
sudo iptables —delete-chain
sudo iptables —table nat —delete-chain
# Сначала все закрываем
sudo iptables -P INPUT DROP
sudo iptables -P OUTPUT DROP
sudo iptables -P FORWARD DROP
# разрешим передачу пакетов через входящий петлевой интерфейс и исходящий петлевой интерфейс в таблицах INPUT
sudo iptables -A INPUT -i lo -j ACCEPT
sudo iptables -A OUTPUT -o lo -j ACCEPT
# разрешить работу протокола ICMP
sudo iptables -A INPUT -p icmp —icmp-type 0 -j ACCEPT
sudo iptables -A INPUT -p icmp —icmp-type 8 -j ACCEPT
sudo iptables -A OUTPUT -p icmp -j ACCEPT
# разрешающей все исхолящие соединения
sudo iptables -P OUTPUT ACCEPT
# разрешить попадание на наш компьютер только тех TCP- и UDP-пакетов, которые были запрошены локальными приложениями
sudo iptables -A INPUT -p TCP -m state —state ESTABLISHED,RELATED -j ACCEPT
sudo iptables -A INPUT -p UDP -m state —state ESTABLISHED,RELATED -j ACCEPT
# Модули iptables MicrosoftVPN нужны для запуска протокола gre, а так же для работы ftp
modprobe ip_conntrack
modprobe ip_conntrack_ftp
modprobe ip_nat_ftp
modprobe ip_gre
modprobe ip_conntrack_pptp
modprobe ip_nat_pptp
# Теперь открываем порты для наших серверных функций, причем с защитой от перебора
# Для DNS, если нужно
# здесь внутрення сеть компании 192.168.1.0/24
# sudo iptables -A INPUT —protocol udp —dport 53 —match state —state NEW —match string —algo kmp —hex-string «|00 00 02 00 01|» —from 40 —to 45 —match recent —name DNST —update —seconds 600 —jump DROP
# sudo iptables -A INPUT —protocol udp —dport 53 —match state —state NEW —match string —algo kmp —hex-string «|00 00 02 00 01|» —from 40 —to 45 —match recent —name DNST —set —jump ACCEPT
# sudo iptables -A INPUT -p udp —dport 53 -j ACCEPT
# sudo iptables -A OUTPUT -p udp —sport 53 -j ACCEPT
# Для нашего RDP
sudo iptables -N RDP
sudo iptables -A INPUT -p tcp —dport 4319 -j RDP
sudo iptables -A OUTPUT -p tcp —sport 4319 -j RDP
sudo iptables -A RDP -m state —state NEW -m recent —set —name RDPH —rsource
# sudo iptables -A RDP -m recent —update —seconds 300 —hitcount 2 —name RDPH —rsource -j LOG —log-prefix «Anti RDPH-Bruteforce: » —log-level 6
sudo iptables -A RDP -m recent —update —seconds 60 —hitcount 2 —name RDPH —rsource -j DROP
sudo iptables -A RDP -j ACCEPT
# Для нашего SSH
sudo iptables -N SSH
sudo iptables -A INPUT -p tcp —dport 4318 -j SSH
sudo iptables -A OUTPUT -p tcp —sport 4318 -j SSH
sudo iptables -A SSH -m state —state NEW -m recent —set —name SSHH —rsource
# sudo iptables -A SSH -m recent —update —seconds 300 —hitcount 2 —name SSHH —rsource -j LOG —log-prefix «Anti SSHH-Bruteforce: » —log-level 6
sudo iptables -A SSH -m recent —update —seconds 60 —hitcount 2 —name SSHH —rsource -j DROP
sudo iptables -A SSH -j ACCEPT
# Для работы почты открыть порты
# SMTP
# sudo iptables -A INPUT -p tcp —dport 25 -j ACCEPT
# sudo iptables -A OUTPUT -p tcp —sport 25 -j ACCEPT
# SSMTP
# sudo iptables -A INPUT -p tcp —dport 465 -j ACCEPT
# sudo iptables -A OUTPUT -p tcp —sport 465 -j ACCEPT
# SMTP Submission
# sudo iptables -A INPUT -p tcp —dport 587 -j ACCEPT
# sudo iptables -A OUTPUT -p tcp —sport 587 -j ACCEPT
# POP3
# sudo iptables -A INPUT -p tcp —dport 110 -j ACCEPT
# sudo iptables -A OUTPUT -p tcp —sport 110 -j ACCEPT
# SPOP3
# sudo iptables -A INPUT -p tcp —dport 995 -j ACCEPT
# sudo iptables -A OUTPUT -p tcp —sport 995 -j ACCEPT
# IMAP
# sudo iptables -A INPUT -p tcp —dport 143 -j ACCEPT
# sudo iptables -A OUTPUT -p tcp —sport 143 -j ACCEPT
# SIMAP
# sudo iptables -A INPUT -p tcp —dport 993 -j ACCEPT
# sudo iptables -A OUTPUT -p tcp —sport 993 -j ACCEPT
# HTTP
# sudo iptables -A INPUT -p tcp —dport 80 -j ACCEPT
# sudo iptables -A OUTPUT -p tcp —sport 80 -j ACCEPT
# sudo iptables -A INPUT -p tcp —dport 8800 -j ACCEPT
# sudo iptables -A OUTPUT -p tcp —sport 8800 -j ACCEPTT
# SHTTP
# sudo iptables -A INPUT -p tcp —dport 443 -j ACCEPT
# sudo iptables -A OUTPUT -p tcp —sport 443 -j ACCEPT
# sudo iptables -A INPUT -p tcp —dport 8843 -j ACCEPT
# sudo iptables -A OUTPUT -p tcp —sport 8843 -j ACCEPT
# Для VPN
# OpenVPN
# sudo iptables -A INPUT -p udp —dport 1194 -j ACCEPT
# sudo iptables -A OUTPUT -p udp —sport 1194 -j ACCEPT
# KerioVPN
# sudo iptables -A INPUT -p tcp —dport 4090 -j ACCEPT
# sudo iptables -A OUTPUT -p tcp —sport 4090 -j ACCEPT
# sudo iptables -A INPUT -p udp —dport 4090 -j ACCEPT
# sudo iptables -A OUTPUT -p udp —sport 4090 -j ACCEPT
# Microsoft VPN
# sudo iptables -A INPUT -p tcp —dport 1723 -j ACCEPT
# sudo iptables -A OUTPUT -p tcp —sport 1723 -j ACCEPT
# sudo iptables -A INPUT -p tcp —dport 3522 -j ACCEPT
# sudo iptables -A OUTPUT -p tcp —sport 3522 -j ACCEPT
# sudo iptables -A INPUT -p 41 -j ACCEPT
# sudo iptables -A INPUT -p gre -j ACCEPT
# открыть порт для SQL
# sudo iptables -A INPUT -p tcp —dport 1433 -j ACCEPT
# sudo iptables -A OUTPUT -p tcp —sport 1433 -j ACCEPT
# Включаем защиту от перебора открытых портов
# sudo iptables -A INPUT -p tcp -m tcp -j DROP
# Вставляем в автозагрузку
sudo echo «#! /sbin/iptables-restore» > /etc/network/if-up.d/iptables-rules
sudo iptables-save >> /etc/network/if-up.d/iptables-rules
sudo chmod +x /etc/network/if-up.d/iptables-rules

В этом скрипте много про запас, что бы работали и некоторые серверные функции, если это необходимо, то нужно раскомментировать нужное. Запускать лучше все-так от root-а.

Следующий скрипт для раздачи интернета в сети:

!/bin/bash
# Пусть eth1 (192.168.1.1/24) это сеть интернета, eth0 (10.41.0.1/24) это локальная сеть
# Удаляем все правила
sudo iptables -F
sudo iptables —flush
sudo iptables —table nat —flush
sudo iptables —delete-chain
sudo iptables —table nat —delete-chain
# Сначала все закрываем
sudo iptables -P INPUT DROP
sudo iptables -P OUTPUT DROP
sudo iptables -P FORWARD DROP
# разрешим передачу пакетов через входящий петлевой интерфейс и исходящий петлевой интерфейс в таблицах INPUT
sudo iptables -A INPUT -i lo -j ACCEPT
sudo iptables -A OUTPUT -o lo -j ACCEPT
# разрешить работу протокола ICMP
sudo iptables -A INPUT -p icmp —icmp-type 0 -j ACCEPT
sudo iptables -A INPUT -p icmp —icmp-type 8 -j ACCEPT
sudo iptables -A OUTPUT -p icmp -j ACCEPT
# разрешающей все исхолящие соединения
sudo iptables -P OUTPUT ACCEPT
# разрешить попадание на наш компьютер только тех TCP- и UDP-пакетов, которые были запрошены локальными приложениями
sudo iptables -A INPUT -p TCP -m state —state ESTABLISHED,RELATED -j ACCEPT
sudo iptables -A INPUT -p UDP -m state —state ESTABLISHED,RELATED -j ACCEPT
# Теперь открываем порты для наших серверных функций, причем с защитой от перебора
# Для DNS, если нужно
# sudo iptables -A INPUT —protocol udp —dport 53 —match state —state NEW —match string —algo kmp —hex-string «|00 00 02 00 01|» —from 40 —to 45 —match recent —name DNST —update —seconds 600 —jump DROP
# sudo iptables -A INPUT —protocol udp —dport 53 —match state —state NEW —match string —algo kmp —hex-string «|00 00 02 00 01|» —from 40 —to 45 —match recent —name DNST —set —jump ACCEPT
# sudo iptables -A INPUT -p udp —dport 53 -j ACCEPT
# sudo iptables -A OUTPUT -p udp —sport 53 -j ACCEPT
# Для моего RDP
sudo iptables -N RDP
sudo iptables -A INPUT -p tcp —dport 4319 -j RDP
sudo iptables -A OUTPUT -p tcp —sport 4319 -j RDP
sudo iptables -A RDP -m state —state NEW -m recent —set —name RDPH —rsource
# sudo iptables -A RDP -m recent —update —seconds 300 —hitcount 2 —name RDPH —rsource -j LOG —log-prefix «Anti RDPH-Bruteforce: » —log-level 6
sudo iptables -A RDP -m recent —update —seconds 60 —hitcount 2 —name RDPH —rsource -j DROP
sudo iptables -A RDP -j ACCEPT
# Для моего SSH
sudo iptables -N SSH
sudo iptables -A INPUT -p tcp —dport 4318 -j SSH
sudo iptables -A OUTPUT -p tcp —sport 4318 -j SSH
sudo iptables -A SSH -m state —state NEW -m recent —set —name SSHH —rsource
# sudo iptables -A SSH -m recent —update —seconds 300 —hitcount 2 —name SSHH —rsource -j LOG —log-prefix «Anti SSHH-Bruteforce: » —log-level 6
sudo iptables -A SSH -m recent —update —seconds 60 —hitcount 2 —name SSHH —rsource -j DROP
sudo iptables -A SSH -j ACCEPT
# Модули iptables MicrosoftVPN нужны для запуска протокола gre, а так же для работы ftp
modprobe ip_conntrack
modprobe ip_conntrack_ftp
modprobe ip_nat_ftp
modprobe ip_gre
modprobe ip_conntrack_pptp
modprobe ip_nat_pptp
# Включение NAT
# разрешаем уже установленные соединения в цепочке FORWARD, таблице filter
sudo iptables -A FORWARD -m conntrack —ctstate ESTABLISHED,RELATED -j ACCEPT
# разрешаем устанавливать новые соединения в цепочке FORWARD, таблице filter
sudo iptables -A FORWARD -m conntrack —ctstate NEW -i eth0 -j ACCEPT
# Все остальные пакеты, которые проходят через цепочку FORWARD — отбрасывать
sudo iptables -P FORWARD DROP
# выполняем маскирование (подмену адреса отправителя пакета в заголовках) всех пакетов, исходящих с интерфейса eth0
sudo iptables -t nat -A POSTROUTING -o eth1 -s 10.41.0.0/24 -j MASQUERADE
# Запрещаем доступ снаружи во внутреннюю сеть
iptables -A FORWARD -i eth1 -o eth1 -j REJECT
# Перенаправляем DNS
sudo iptables -t nat -A PREROUTING -p udp —in-interface eth1 —dport 53 -j DNAT —to-destination 10.41.0.13
sudo iptables -t nat -A POSTROUTING -p udp —dst 10.41.0.13 —dport 53 -j SNAT —to-source 192.168.1.1
sudo iptables -A FORWARD -i eth1 -p udp -d 10.41.0.13 —dport 53 -j ACCEPT
sudo iptables -t nat -A PREROUTING -p tcp —in-interface eth1 —dport 53 -j DNAT —to-destination 10.41.0.13
sudo iptables -t nat -A POSTROUTING -p tcp —dst 10.41.0.13 —dport 53 -j SNAT —to-source 192.168.1.1
sudo iptables -A FORWARD -i eth1 -p tcp -d 10.41.0.13 —dport 53 -j ACCEPT
# Для работы почты открыть порты
# SMTP
sudo iptables -t nat -A PREROUTING -p tcp —in-interface eth1 —dport 25 -j DNAT —to-destination 10.41.0.2
sudo iptables -t nat -A POSTROUTING -p tcp —dst 10.41.0.2 —dport 25 -j SNAT —to-source 192.168.1.1
sudo iptables -A FORWARD -i eth1 -p tcp -d 10.41.0.2 —dport 25 -j ACCEPT
# SSMTP
sudo iptables -t nat -A PREROUTING -p tcp —in-interface eth1 —dport 465 -j DNAT —to-destination 10.41.0.2
sudo iptables -t nat -A POSTROUTING -p tcp —dst 10.41.0.2 —dport 465 -j SNAT —to-source 192.168.1.1
sudo iptables -A FORWARD -i eth1 -p tcp -d 10.41.0.2 —dport 465 -j ACCEPT
# SMTP Submission
sudo iptables -t nat -A PREROUTING -p tcp —in-interface eth1 —dport 587 -j DNAT —to-destination 10.41.0.2
sudo iptables -t nat -A POSTROUTING -p tcp —dst 10.41.0.2 —dport 587 -j SNAT —to-source 192.168.1.1
sudo iptables -A FORWARD -i eth1 -p tcp -d 10.41.0.2 —dport 587 -j ACCEPT
# POP3
sudo iptables -t nat -A PREROUTING -p tcp —in-interface eth1 —dport 110 -j DNAT —to-destination 10.41.0.2
sudo iptables -t nat -A POSTROUTING -p tcp —dst 10.41.0.2 —dport 110 -j SNAT —to-source 192.168.1.1
sudo iptables -A FORWARD -i eth1 -p tcp -d 10.41.0.2 —dport 110 -j ACCEPT
# SPOP3
sudo iptables -t nat -A PREROUTING -p tcp —in-interface eth1 —dport 995 -j DNAT —to-destination 10.41.0.2
sudo iptables -t nat -A POSTROUTING -p tcp —dst 10.41.0.2 —dport 995 -j SNAT —to-source 192.168.1.1
sudo iptables -A FORWARD -i eth1 -p tcp -d 10.41.0.2 —dport 995 -j ACCEPT
# IMAP
sudo iptables -t nat -A PREROUTING -p tcp —in-interface eth1 —dport 143 -j DNAT —to-destination 10.41.0.2
sudo iptables -t nat -A POSTROUTING -p tcp —dst 10.41.0.2 —dport 143 -j SNAT —to-source 192.168.1.1
sudo iptables -A FORWARD -i eth1 -p tcp -d 10.41.0.2 —dport 143 -j ACCEPT
# SIMAP
sudo iptables -t nat -A PREROUTING -p tcp —in-interface eth1 —dport 993 -j DNAT —to-destination 10.41.0.2
sudo iptables -t nat -A POSTROUTING -p tcp —dst 10.41.0.2 —dport 993 -j SNAT —to-source 192.168.1.1
sudo iptables -A FORWARD -i eth1 -p tcp -d 10.41.0.2 —dport 993 -j ACCEPT
# HTTP
sudo iptables -t nat -A PREROUTING -p tcp —in-interface eth1 —dport 80 -j DNAT —to-destination 10.41.0.2
sudo iptables -t nat -A POSTROUTING -p tcp —dst 10.41.0.2 —dport 80 -j SNAT —to-source 192.168.1.1
sudo iptables -A FORWARD -i eth1 -p tcp -d 10.41.0.2 —dport 80 -j ACCEPT
sudo iptables -t nat -A PREROUTING -p tcp —in-interface eth1 —dport 8800 -j DNAT —to-destination 10.41.0.2
sudo iptables -t nat -A POSTROUTING -p tcp —dst 10.41.0.2 —dport 8800j SNAT —to-source 192.168.1.1
sudo iptables -A FORWARD -i eth1 -p tcp -d 10.41.0.2 —dport 8800 -j ACCEPT
# SHTTP
sudo iptables -t nat -A PREROUTING -p tcp —in-interface eth1 —dport 443 -j DNAT —to-destination 10.41.0.2
sudo iptables -t nat -A POSTROUTING -p tcp —dst 10.41.0.2 —dport 443 -j SNAT —to-source 192.168.1.1
sudo iptables -A FORWARD -i eth1 -p tcp -d 10.41.0.2 —dport 443 -j ACCEPT
sudo iptables -t nat -A PREROUTING -p tcp —in-interface eth1 —dport 8843 -j DNAT —to-destination 10.41.0.2
sudo iptables -t nat -A POSTROUTING -p tcp —dst 10.41.0.2 —dport 8843 -j SNAT —to-source 192.168.1.1
sudo iptables -A FORWARD -i eth1 -p tcp -d 10.41.0.2 —dport 8843 -j ACCEPT
# Для VPN
# OpenVPN
sudo iptables -N OpenVPN
sudo iptables -t nat -A PREROUTING -p udp —in-interface eth1 —dport 1194 -j DNAT —to-destination 10.41.0.2
sudo iptables -A FORWARD -i eth1 -p udp -d 10.41.0.2 —dport 1194 -j OpenVPN
sudo iptables -A OpenVPN -m recent —set —name OpenVPNH —rsource
# sudo iptables -A OpenVPN -m recent —update —seconds 60 —hitcount 2 —name OpenVPNH —rsource -j LOG —log-prefix «Anti OpenVPNH-Bruteforce: » —log-level 6
sudo iptables -A OpenVPN -m recent —update —seconds 300 —hitcount 2 —name OpenVPNH —rsource -j DROP
sudo iptables -A OpenVPN -j ACCEPT
# Microsoft VPN
sudo iptables -A FORWARD -p gre -j ACCEPT
sudo iptables -t nat -A PREROUTING —dst 192.168.1.1 -p tcp —dport 1723 -j DNAT —to-destination 10.41.0.2
sudo iptables -t nat -A POSTROUTING —dst 10.41.0.2 -p tcp —dport 1723 -j SNAT —to-source 10.41.0.11
sudo iptables -t nat -A OUTPUT —dst 185.97.115.98 -p tcp —dport 1723 -j DNAT —to-destination 10.41.0.2
sudo iptables -I FORWARD 1 -i eth1 -o eth0 -d 10.41.0.2 -p tcp -m tcp —dport 1723 -j ACCEPT

# Блокируем остальное
sudo iptables -A INPUT -p tcp -m tcp -j DROP
# Вставляем в автозагрузку
sudo echo «#! /sbin/iptables-restore» > /etc/network/if-up.d/iptables-rules
sudo iptables-save >> /etc/network/if-up.d/iptables-rules
sudo chmod +x /etc/network/if-up.d/iptables-rules