Хелп, прошу помощи Ubuntu Linux, правила iptables

Alex2355
Доброго дня, прошу помощи настроить фаервол в Ubuntu Linux 16.04,  заранее благодарен всем, кто откликнется.
Мои задачи
1.      запрещаем все входящие соединения;
2.      открыть входящие соединения для HTTP/HTTPS (80 порт);
3.      открываем нужные порты для входящих соединений;
4.      разрешаем все исходящие пакеты
5.      настройка таблицы NAT для RDP
6.      POSTROUTING без фильтрации
7.      MASQUERADE по умолчанию
8.      сделать запись о пакете в лог файл
9.      сохранить все правила в фаил (бэкап)
 
составил список основных команд с напоминалкой,

действующие интерфейсы 
enp2s0 - провайдер
enp3s0 - шлюз (192.168.1.1) 
Lo  - Loopback (127.0.0.1)

Общие настройки 
1. Сбрасываем текущие правила:
sudo serviceiptables-persistent flush
2. Запрашиваем список текущих правил, чтобы убедиться, что они сброшены:
sudo iptables -S
3.Проверяем Таблицу filter должны быть все политики по умолчанию для всех цепочек ACCEPT (справочно).
-P INPUT ACCEPT
-P FORWARD ACCEPT
-P OUTPUT ACCEPT

4. Определяем цепочки правил для трафика UDP, TCP и ICMP.
sudo iptables -N UDP
sudo iptables -N TCP
sudo iptables -N ICMP

5. После этого добавляем правила для трафика SSH.
поскольку SSH использует TCP, то добавить правило, разрешающее этот трафик на порт 22, в цепочку TCP.
sudo iptables -A TCP -p tcp --dport 22 -j ACCEPT
Для другие протоколов TCP, используем эту же команду, заменив только номер порта.
6. Создаем исключение, которое будет принимать трафик, относящийся к установленным соединениям.
sudo iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -jACCEPT
7.Разрешаем весь трафик, исходящий от локального Lo интерфейса. 
sudo iptables -A INPUT -i lo -j ACCEPT
8.Блокируем все недействительные пакеты. 
sudo iptables -A INPUT -m conntrack --ctstate INVALID -j DROP
Настраиваем iptables
1. Чтобы трафик передавался в ту или иную цепочку, нужно настроить брандмауэр для передачи пакетов согласно типу протокола. При этом пакет будет представлять
собой новое соединение (любые установленные или родственные соединения должны быть обработаны ранее). ДляTCP-пакетов нужно добавить дополнительное требование:
такой пакет должен быть пакетом SYN, так как это единственный допустимый тип для начала соединения TCP.
sudo iptables-A INPUT -p udp -m conntrack --ctstate NEW -j UDP
sudo iptables -AINPUT -p tcp --syn -m conntrack --ctstate NEW -j TCP
sudo iptables -AINPUT -p icmp -m conntrack --ctstate NEW -j ICMP

 
2. Если пакет не совпал ни с одним правилом из цепочки для протоколов, он вернётся в цепочку INPUT. Любой пакет, достигший этой точки, будет заблокирован брандмауэром.
sudo iptables-A INPUT -p udp -j REJECT --reject-with icmp-port-unreachable
sudo iptables-A INPUT -p tcp -j REJECT --reject-with tcp-reset
sudo iptables-A INPUT -j REJECT --reject-with icmp-proto-unreachable

 
Настройка политик по умолчанию
Устанавливаем политику по умолчанию DROP в качестве меры предосторожности. Также устанавливаем  эту политику в цепочке FORWARD, 
sudo iptables -P INPUT DROP
sudo iptables -PFORWARD DROP
sudo iptables -P OUTPUT ACCEPT

1.    Блокируем трафик IPv6, 
sudoip6tables -P INPUT DROP
sudo ip6tables -PFORWARD DROP
sudo ip6tables -POUTPUT DROP

2.     Сохраняем текущие правила IPv4 и IPv6, 
sudoservice iptables-persistent save
 
Настройка правил NAT 
1.    Настраиваем на брандмауэре подмену IP, которая замаскирует узлы локальной сети под IP-адресом внешнего интерфейса брандмауэра (в данном случае, enp2s0)
iptables -t nat -A POSTROUTING -o enp2s0 -j MASQUERADE
2. Настраиваем перенаправление адреса для RDP
iptables -A PREROUTING -t nat -i enp2s0 -p tcp --dport33890 -j DNAT --to-destination 192.168.1.2:3389   
3. Разрешаем порт 3389
iptables -t filter -A FORWARD-i enp2s0 -o enp2s0 -d 192.168.1.1 -m tcp -p tcp --dport 3389 -j ACCEPT

дальше туплю, не могу понять, как взаимодействуют между собой интерфейсы enp2s0 и enp3s0 ЕслИ и есть кто знающий, посмотрите пож..та цепочку, что нет так на ваш взгляд? 

Skunk
Alex2355
Валяется у меня уже не помню откуда взявшийся и не факт, что когда-то исполнявшийся, скрипт: вроде, по виду должен делать сильно похожее на то, что нужно вам. Может позаимствуете какие идеи.

code:

#! /bin/sh
#
# Firewall scr1pt. Must be placed in /etc/init.d/ directory
# and linked by update-rc.d firewall start 60 S . (Note the '.' at the end!!!)
#
# PACKET IN ---;---PREROUTING---[ routing ]---;----FORWARD---[ routing ]---POSTROUTING---;--- PACKET OUT
# - mangle | - mangle | - mangle
# - nat (dst) | - filter | - nat (src)
# | |
# | |
# INPUT OUTPUT
# - mangle - mangle
# - filter - nat (dst)
# | - filter
# | |
# `----;--[ application ]--;----'


# Define constants:
IPTABLES="/sbin/iptables"
LOCAL_NETWORK="192.168.0.0/24"
ROUTER="192.168.0.1"
FTP_PORT="21"
SSH_PORT="22"

# Drop previous settings:
#./iptables-flush
/etc/init.d/iptables-flush

# Create a LOGDROP chain to log and drop packets:
$IPTABLES -N LOGDROP
$IPTABLES -A LOGDROP -j LOG
$IPTABLES -A LOGDROP -j DROP

# By default - disable all traffic:
$IPTABLES -P INPUT DROP
$IPTABLES -P OUTPUT DROP
$IPTABLES -P FORWARD DROP

# Allow unlimited traffic on the loopback interface
$IPTABLES -A INPUT -i lo -j ACCEPT
$IPTABLES -A OUTPUT -o lo -j ACCEPT

# Disable new connections to local network, except the router:
$IPTABLES -A OUTPUT --destination $ROUTER -j ACCEPT
$IPTABLES -A OUTPUT --destination $LOCAL_NETWORK -m state --state NEW -j DROP

# Allow unlimited outbound traffic
$IPTABLES -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
$IPTABLES -A OUTPUT -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT

# Enable incoming from local network
$IPTABLES -A INPUT --source $LOCAL_NETWORK -j ACCEPT

# Enable incoming to FTP port
$IPTABLES -A INPUT --protocol tcp --destination-port $FTP_PORT -j ACCEPT

# Enable incoming to SSH port
$IPTABLES -A INPUT --protocol tcp --destination-port $SSH_PORT -j ACCEPT

# Log and drop all other traffic
#$IPTABLES -A INPUT -j LOGDROP
#$IPTABLES -A OUTPUT -j LOGDROP
#$IPTABLES -A FORWARD -j LOGDROP

Alex2355
Skunk
огромное спасибо, у Вас стандартный код + запись в лог,  про который я кстати забыл, спасибо 
но у меня немного сложней задача, да еще и NAT долбанный 
Skunk
Alex2355
Ну, тогда еще один хитровычурный вариант: взять раутер на DD-WRT, сконфигурировать его как вам хочется через UI - а потом посмотреть, что он написал а iptables. 😊
Henri
не могу понять, как взаимодействуют между собой интерфейсы enp2s0 и enp3s0
Chain FORWARD

P.S.: самый простой способ решить задачу - прекратить маяться херней и нанять на работу системного администратора.

Alex2355
Henri
Chain FORWARD

P.S.: самый простой способ решить задачу - прекратить маяться херней и нанять на работу системного администратора.

Здравая мысль, проходили уже, знаем 
Задачу он выполнит за пару часов а зарплату ему платить каждый месяц исправно, да ещё и налоги по 36% государству...
А он потом каждый день приходит на работу и рубится с утра до вечера? В крупной канторе это может и выход, но для мелкой шаражки с 5тью компами слишком круто, 
есть конечно вариант принять и через сутки уволить, но у меня как то совесть знаете... Лучше сам покапаюсь, 
Henri
Alex2355
Здравая мысль, проходили уже, знаем 
Задачу он выполнит за пару часов а зарплату ему платить каждый месяц исправно, да ещё и налоги по 36% государству...
А он потом каждый день приходит на работу и рубится с утра до вечера? В крупной канторе это может и выход, но для мелкой шаражки с 5тью компами слишком круто, 
есть конечно вариант принять и через сутки уволить, но у меня как то совесть знаете... Лучше сам покапаюсь, 

Аутсорс/фриланс. 20 минут работы, из которых 15 минут - документирование работы.
Заплатите долларов 30, зато сколько сэкономленных ночей и закрытых уязвимостей.

Skunk
Alex2355
...мелкой шаражки с 5тью компами...

Купите обычный раутер, перепрожгите на уже помянутую DD-WRT - и получите то же самое: еще и с кучей дополнительных примочек.