Ограничение и контроль исходящего трафика могут быть полезны во многих случаях, например:
Защита от атак - когда службы на сервере генерируют ответы Защита данных - сложнее забрать информацию с сервера Защита от скриптов с закрытым кодом, которые могут собирать и передавать информацию без Вашего ведома
В нашем примере мы создадим виртуальную машину и предположим нам нужно протестировать некий софт на предмет передачи информации. Таким образом мы запретим все, кроме 1 ip с которого мы будем тестировать программное обеспечение.
1. Добавим правила в iptables
# Сброс текущих правил (осторожно, если подключение по SSH)
iptables -F OUTPUT
# Разрешить loopback (localhost)
iptables -A OUTPUT -o lo -j ACCEPT
# Разрешить DNS-запросы (если нужны, необязательно)
iptables -A OUTPUT -p udp --dport 53 -j ACCEPT
# Разрешить все исходящие соединения на IP 111.222.111.222
iptables -A OUTPUT -d 111.222.111.222 -j ACCEPT
# Все остальные исходящие соединения — запретить
iptables -A OUTPUT -j REJECT
Где 111.222.111.222 - ip с которого мы будем тестировать, отправлять и получать данные.
2. Проверка правил, проверяем через ssh, с самого сервера
2.1 Проверка ping
ping 8.8.8.8
PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.
From 79.174.xx.xxx icmp_seq=1 Destination Port Unreachable
ping: sendmsg: Операция не позволена
From 79.174.xx.xxx icmp_seq=2 Destination Port Unreachable
ping: sendmsg: Операция не позволена
From 79.174.xx.xxx icmp_seq=3 Destination Port Unreachable
ping: sendmsg: Операция не позволена
2.1 Проверка telnet
telnet google.com 443
Trying 209.85.233.101...
Connection failed: В соединении отказано
Trying 209.85.233.113...
Connection failed: В соединении отказано
Trying 209.85.233.139...
Connection failed: В соединении отказано
Trying 209.85.233.100...
Как мы видим правила работают и при попытке скриптов, служб - никакие данные в интернет переданы не будут.
3. Мониторинг трафика и попыток соединений
3.1 Данный пример будет обновлять данные по соединениям php каждую секунду
watch -n 1 'lsof -i -nP | grep php'
php-fpm8. 445 www-data 11u IPv4 2405976614 0t0 TCP 127.0.0.1:9000 (LISTEN)
php-fpm8. 448 www-data 12u IPv4 2405976614 0t0 TCP 127.0.0.1:9000 (LISTEN)
php-fpm8. 449 www-data 14u IPv4 2405976614 0t0 TCP 127.0.0.1:9000 (LISTEN)
php-fpm8. 453 www-data 16u IPv4 2405976614 0t0 TCP 127.0.0.1:9000 (LISTEN)
При наличии попыток соединиться с внешним узлом соединение будет видно, включая порт и ip адрес.
В случае с мониторингом php скриптом есть также дополнительные модули, например xdebug, не оставляйте его включенным в режиме продакшена, только для отладки.
Таким образом можно быстро создать песочницу на виртуальном сервере для необходимых скриптов и отслеживать сетевую активность - не подвергая данные риску.