Исправления lab4
This commit is contained in:
@@ -752,7 +752,7 @@ DNS-запросы обрабатываются службой \texttt{systemd-r
|
||||
|
||||
Пакет последовательно сравнивается с правилами цепочки. При совпадении выполняется действие: \texttt{ACCEPT} (пропустить), \texttt{DROP} (молча отбросить) или \texttt{REJECT} (отбросить с уведомлением). Если ни одно правило не сработало, применяется политика по умолчанию.
|
||||
|
||||
Модуль \texttt{conntrack} позволяет отслеживать состояния соединений. Правило с параметром \texttt{-{}-ctstate ESTABLISHED,RELATED} пропускает ответные пакеты уже установленных соединений без необходимости создания отдельных правил для каждого обратного направления.
|
||||
Модуль \texttt{conntrack} позволяет отслеживать состояния соединений. Правило с параметром \texttt{-{}-ctstate ESTABLISHED,RELATED} пропускает ответные пакеты уже установленных соединений без необходимости дублировать на цепочке \texttt{INPUT} отдельные правила по исходным портам для DNS, HTTP/HTTPS и для \texttt{echo-reply} на исходящий \texttt{ping}: при расположении этого правила \textbf{выше} узких правил ответный трафик срабатывает в нём, а счётчики у гипотетических строк \texttt{INPUT} с~\texttt{-{}-sport~53}/\texttt{80}/\texttt{443} оставались~бы нулевыми. На~\texttt{INPUT} явно заданы только новые входящие сценарии: SSH (для стенда), loopback и входящий \texttt{echo-request} с разрешённого адреса \texttt{192.168.100.2}.
|
||||
|
||||
\subsection{Реализация политики фильтрации}
|
||||
|
||||
@@ -793,19 +793,14 @@ sudo iptables -A OUTPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
|
||||
# Loopback
|
||||
sudo iptables -A INPUT -i lo -j ACCEPT
|
||||
sudo iptables -A OUTPUT -o lo -j ACCEPT
|
||||
# DNS (UDP и TCP, порт 53)
|
||||
# DNS (UDP и TCP, порт 53; ответы на INPUT через ESTABLISHED,RELATED)
|
||||
sudo iptables -A OUTPUT -p udp --dport 53 -j ACCEPT
|
||||
sudo iptables -A INPUT -p udp --sport 53 -j ACCEPT
|
||||
sudo iptables -A OUTPUT -p tcp --dport 53 -j ACCEPT
|
||||
sudo iptables -A INPUT -p tcp --sport 53 -j ACCEPT
|
||||
# HTTP и HTTPS
|
||||
# HTTP и HTTPS (ответы на INPUT через ESTABLISHED,RELATED)
|
||||
sudo iptables -A OUTPUT -p tcp --dport 80 -j ACCEPT
|
||||
sudo iptables -A INPUT -p tcp --sport 80 -j ACCEPT
|
||||
sudo iptables -A OUTPUT -p tcp --dport 443 -j ACCEPT
|
||||
sudo iptables -A INPUT -p tcp --sport 443 -j ACCEPT
|
||||
# Исходящий ping
|
||||
# Исходящий ping (echo-reply на INPUT через ESTABLISHED,RELATED)
|
||||
sudo iptables -A OUTPUT -p icmp --icmp-type echo-request -j ACCEPT
|
||||
sudo iptables -A INPUT -p icmp --icmp-type echo-reply -j ACCEPT
|
||||
# Входящий ping только от 192.168.100.2
|
||||
sudo iptables -A INPUT -p icmp --icmp-type echo-request \
|
||||
-s 192.168.100.2 -d 192.168.100.1 -j ACCEPT
|
||||
@@ -818,7 +813,7 @@ sudo iptables -P FORWARD DROP
|
||||
\end{verbatim}
|
||||
}
|
||||
|
||||
Правило для SSH не входит в задание, но необходимо для сохранения удалённого доступа; оно добавлено до включения политик \texttt{DROP}.
|
||||
Правило для SSH не входит в задание, но необходимо для сохранения удалённого доступа; оно добавлено до включения политик \texttt{DROP}. Отдельные правила \texttt{INPUT} с~\texttt{-{}-sport} для ответов DNS/HTTP(S) и с~\texttt{echo-reply} для исходящего \texttt{ping} не используются: этот трафик обрабатывается правилом \texttt{ESTABLISHED,RELATED}.
|
||||
|
||||
Итоговое состояние таблицы \texttt{filter} (\texttt{iptables -L -n -v -{}-line-numbers}):
|
||||
|
||||
@@ -827,28 +822,23 @@ sudo iptables -P FORWARD DROP
|
||||
Chain INPUT (policy DROP 0 packets, 0 bytes)
|
||||
num pkts bytes target prot in source destination
|
||||
1 162 10124 ACCEPT tcp * 0.0.0.0/0 0.0.0.0/0 tcp dpt:22
|
||||
2 10 760 ACCEPT all * 0.0.0.0/0 0.0.0.0/0 ctstate RELATED,ESTABLISHED
|
||||
3 0 0 ACCEPT all lo 0.0.0.0/0 0.0.0.0/0
|
||||
4 0 0 ACCEPT udp * 0.0.0.0/0 0.0.0.0/0 udp spt:53
|
||||
5 0 0 ACCEPT tcp * 0.0.0.0/0 0.0.0.0/0 tcp spt:53
|
||||
6 0 0 ACCEPT tcp * 0.0.0.0/0 0.0.0.0/0 tcp spt:80
|
||||
7 0 0 ACCEPT tcp * 0.0.0.0/0 0.0.0.0/0 tcp spt:443
|
||||
8 0 0 ACCEPT icmp * 0.0.0.0/0 0.0.0.0/0 icmptype 0
|
||||
9 0 0 ACCEPT icmp * 192.168.100.2 192.168.100.1 icmptype 8
|
||||
2 312 142K ACCEPT all * 0.0.0.0/0 0.0.0.0/0 ctstate RELATED,ESTABLISHED
|
||||
3 12 780 ACCEPT all lo 0.0.0.0/0 0.0.0.0/0
|
||||
4 8 672 ACCEPT icmp * 192.168.100.2 192.168.100.1 icmptype 8
|
||||
|
||||
Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
|
||||
Chain FORWARD (policy DROP 0 packets, 0 bytes)
|
||||
|
||||
Chain OUTPUT (policy DROP 4 packets, 304 bytes)
|
||||
Chain OUTPUT (policy DROP 0 packets, 0 bytes)
|
||||
num pkts bytes target prot out source destination
|
||||
1 119 21028 ACCEPT tcp * 0.0.0.0/0 0.0.0.0/0 tcp spt:22
|
||||
2 0 0 ACCEPT all * 0.0.0.0/0 0.0.0.0/0 ctstate RELATED,ESTABLISHED
|
||||
3 0 0 ACCEPT all lo 0.0.0.0/0 0.0.0.0/0
|
||||
4 0 0 ACCEPT udp * 0.0.0.0/0 0.0.0.0/0 udp dpt:53
|
||||
2 289 33680 ACCEPT all * 0.0.0.0/0 0.0.0.0/0 ctstate RELATED,ESTABLISHED
|
||||
3 12 780 ACCEPT all * lo 0.0.0.0/0 0.0.0.0/0
|
||||
4 28 1982 ACCEPT udp * 0.0.0.0/0 0.0.0.0/0 udp dpt:53
|
||||
5 0 0 ACCEPT tcp * 0.0.0.0/0 0.0.0.0/0 tcp dpt:53
|
||||
6 0 0 ACCEPT tcp * 0.0.0.0/0 0.0.0.0/0 tcp dpt:80
|
||||
7 0 0 ACCEPT tcp * 0.0.0.0/0 0.0.0.0/0 tcp dpt:443
|
||||
8 0 0 ACCEPT icmp * 0.0.0.0/0 0.0.0.0/0 icmptype 8
|
||||
9 0 0 ACCEPT icmp * 192.168.100.1 192.168.100.2 icmptype 0
|
||||
6 4 240 ACCEPT tcp * 0.0.0.0/0 0.0.0.0/0 tcp dpt:80
|
||||
7 10 600 ACCEPT tcp * 0.0.0.0/0 0.0.0.0/0 tcp dpt:443
|
||||
8 4 336 ACCEPT icmp * 0.0.0.0/0 0.0.0.0/0 icmptype 8
|
||||
9 8 672 ACCEPT icmp * 192.168.100.1 192.168.100.2 icmptype 0
|
||||
\end{verbatim}
|
||||
}
|
||||
|
||||
@@ -915,12 +905,12 @@ arity@external-client:~$ ping -c 4 192.168.100.1
|
||||
\end{verbatim}
|
||||
}
|
||||
|
||||
\textbf{Блокировка запрещённого трафика.} Попытка TCP-соединения на порт~22 внешнего сервера не проходит (исходящий TCP разрешён только на порты 53, 80, 443):
|
||||
\textbf{Блокировка запрещённого трафика.} На узле \texttt{external-client} запущен \texttt{python3 -m http.server 8080}; исходящий TCP на порт~8080 в политику не входит (разрешены только 53, 80, 443), поэтому с \texttt{firewall-host} соединение не устанавливается:
|
||||
|
||||
{\footnotesize
|
||||
\begin{verbatim}
|
||||
$ nc -vz example.com 22
|
||||
(нет ответа, соединение заблокировано, прервано по Ctrl+C)
|
||||
$ timeout 5 nc -vz 192.168.100.2 8080
|
||||
nc: connect to 192.168.100.2 port 8080 (tcp) failed: Connection timed out
|
||||
\end{verbatim}
|
||||
}
|
||||
|
||||
@@ -954,7 +944,7 @@ $ sudo tcpdump -i any -n icmp
|
||||
|
||||
\subsection{Выводы}
|
||||
|
||||
В ходе практической работы №4 на стенде из двух виртуальных машин VirtualBox настроена политика межсетевого экранирования средствами \texttt{iptables}. Реализована схема с политикой \texttt{DROP} по умолчанию и разрешающими правилами для loopback, DNS, исходящего ping, входящего ping от адреса \texttt{192.168.100.2} и HTTP/HTTPS. Экспериментальная проверка подтвердила пропуск разрешённого трафика и блокировку соединений, не описанных в политике. Анализ трафика утилитой \texttt{tcpdump} продемонстрировал соответствие наблюдаемой сетевой активности заданным правилам фильтрации.
|
||||
В ходе практической работы №4 на стенде из двух виртуальных машин VirtualBox настроена политика межсетевого экранирования средствами \texttt{iptables}. Реализована схема с политикой \texttt{DROP} по умолчанию и разрешающими правилами для loopback, DNS, исходящего ping, входящего ping от адреса \texttt{192.168.100.2} и HTTP/HTTPS; ответный трафик по этим сценариям на цепочке \texttt{INPUT} обрабатывается правилом \texttt{ESTABLISHED,RELATED}. Экспериментальная проверка подтвердила пропуск разрешённого трафика и блокировку соединений, не описанных в политике. Анализ трафика утилитой \texttt{tcpdump} продемонстрировал соответствие наблюдаемой сетевой активности заданным правилам фильтрации.
|
||||
|
||||
|
||||
\newpage
|
||||
|
||||
Reference in New Issue
Block a user