Мои задачи
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 ЕслИ и есть кто знающий, посмотрите пож..та цепочку, что нет так на ваш взгляд?
Валяется у меня уже не помню откуда взявшийся и не факт, что когда-то исполнявшийся, скрипт: вроде, по виду должен делать сильно похожее на то, что нужно вам. Может позаимствуете какие идеи.
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
Skunkогромное спасибо, у Вас стандартный код + запись в лог, про который я кстати забыл, спасибо
но у меня немного сложней задача, да еще и NAT долбанный
Ну, тогда еще один хитровычурный вариант: взять раутер на DD-WRT, сконфигурировать его как вам хочется через UI - а потом посмотреть, что он написал а iptables. 😊
не могу понять, как взаимодействуют между собой интерфейсы enp2s0 и enp3s0Chain FORWARD
P.S.: самый простой способ решить задачу - прекратить маяться херней и нанять на работу системного администратора.
HenriЗдравая мысль, проходили уже, знаем
Chain FORWARDP.S.: самый простой способ решить задачу - прекратить маяться херней и нанять на работу системного администратора.
Задачу он выполнит за пару часов а зарплату ему платить каждый месяц исправно, да ещё и налоги по 36% государству...
А он потом каждый день приходит на работу и рубится с утра до вечера? В крупной канторе это может и выход, но для мелкой шаражки с 5тью компами слишком круто,
есть конечно вариант принять и через сутки уволить, но у меня как то совесть знаете... Лучше сам покапаюсь,
Alex2355
Здравая мысль, проходили уже, знаем
Задачу он выполнит за пару часов а зарплату ему платить каждый месяц исправно, да ещё и налоги по 36% государству...
А он потом каждый день приходит на работу и рубится с утра до вечера? В крупной канторе это может и выход, но для мелкой шаражки с 5тью компами слишком круто,
есть конечно вариант принять и через сутки уволить, но у меня как то совесть знаете... Лучше сам покапаюсь,
Аутсорс/фриланс. 20 минут работы, из которых 15 минут - документирование работы.
Заплатите долларов 30, зато сколько сэкономленных ночей и закрытых уязвимостей.
Alex2355
...мелкой шаражки с 5тью компами...
Купите обычный раутер, перепрожгите на уже помянутую DD-WRT - и получите то же самое: еще и с кучей дополнительных примочек.