Доброго дня, прошу помощи настроить фаервол в 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 ЕслИ и есть кто знающий, посмотрите пож.. та цепочку, что нет так на ваш взгляд?