скрипт советника iptables

Существует сервер без защиты iptables : ACCEPT all..

На этом сервере могут быть настраиваемые приложения.

Если нам нужно будет ожесточить этот сервер (так откажитесь от всего и разрешите только то, что требуется приложениям) со строгими правилами iptables, нам нужно вручную выяснить, какое приложение использует port/protocol dst/src port/protocol а затем мы имеем написать правила iptables для них.

Вопрос : есть ли какие-либо скрипты, которые могут помочь собрать эту информацию с работающей машины? (из журналов?) – И автоматически генерирует правила iptables?

Подобно тому, audit2allow в SELinux есть audit2allow . Просто для iptables !

Машина не может быть отключена!

Например: сценарий «MAGIC» должен запускаться неделя / месяц на машине, собирать информацию, а затем через неделю / месяц скрипт сможет создать файл правил iptables, который мы можем использовать.

Многие люди могут попасть в эту ситуацию (как закрепить сервер в отношении iptables). И было бы замечательно, если бы был сценарий / решение, которое может это сделать: \

Сделайте это вручную

 sudo ss -tuanp 

или

 sudo netstat -tuanp 

Объяснение:

 -t - show tcp sockets -u - show udp sockets -a - show all sockets -n - show numeric, don't resolve -p - show process name 

Запустите tcpdump на машине в течение недели или около того, чтобы захватить средний трафик. Затем вы можете просматривать трафик с помощью wirehark позже, чтобы узнать, какие порты используются.

Для этого команда tcpdump -i <interface> -s 65535 -w <some-file>

Затем вы можете сопоставить это с помощью netstat -tuanp чтобы узнать, какие PID / приложения используют порты.

Теоретически это может быть сценарий.

К сожалению, нет такого сценария, который я когда-либо видел, который может работать в режиме обучения или в пассивном режиме, регистрируя все использование вашей сети, принимая его результаты и генерируя фактический брандмауэр, используя iptables из своих журналов.

Лучше всего начать простой и постоянно добавлять различные части, когда вы начинаете полностью понимать, какие услуги предоставляет ваша система. Вам нужно будет использовать такие инструменты, как netstat чтобы узнать, какие порты используются для различных служб, которые вы используете, а также какие IP-адреса обращаются к ним.

 $ sudo netstat -tlpn Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 0.0.0.0:25 0.0.0.0:* LISTEN 26292/sendmail tcp 0 0 0.0.0.0:890 0.0.0.0:* LISTEN 26149/ypbind tcp 0 0 0.0.0.0:445 0.0.0.0:* LISTEN 26321/smbd tcp 0 0 127.0.0.1:2207 0.0.0.0:* LISTEN 26226/python tcp 0 0 127.0.0.1:2208 0.0.0.0:* LISTEN 26221/./hpiod tcp 0 0 127.0.0.1:199 0.0.0.0:* LISTEN 26237/snmpd tcp 0 0 0.0.0.0:809 0.0.0.0:* LISTEN 26067/rpc.statd tcp 0 0 0.0.0.0:139 0.0.0.0:* LISTEN 26321/smbd tcp 0 0 0.0.0.0:587 0.0.0.0:* LISTEN 26292/sendmail tcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN 26038/portmap tcp 0 0 0.0.0.0:35604 0.0.0.0:* LISTEN - tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 26249/sshd tcp 0 0 0.0.0.0:631 0.0.0.0:* LISTEN 26257/cupsd tcp 0 0 :::22 :::* LISTEN 26249/sshd tcp 0 0 :::631 :::* LISTEN 26257/cupsd 

ПРИМЕЧАНИЕ. В приведенном выше вы можете увидеть, какие службы у меня запущены на сервере, который принимает TCP-соединения, то есть они «прослушивают» соединения на разных портах.

Нет ничего труднее начать с таких вещей, как SSH (порт 22) и HTTP (порт 80), если они типичны для вашей системы, поэтому я бы сделал эти типы услуг в массовом порядке одновременно. Для других сервисов, таких как LDAP или NIS, вы можете сделать это более контролируемым образом, убедившись, что все не сломается, когда вы их вводите.

Такие инструменты, как FireHOL , Firewall Builder (fwbuilder) и eztables, могут быть полезны при атаке этого проекта, поскольку они обеспечивают хороший уровень абстракции от необходимости создавать пользовательские правила iptable вручную, что может быть сложно.

FireHOL

FireHOL – это язык (и программа для его запуска), который создает безопасные, защищенные от состояния брандмауэры любой сложности от простых для понимания, человекочитаемых конфигураций.

пример

 transparent_squid 8080 "squid root" inface eth0 interface eth0 mylan policy accept interface ppp+ internet server smtp accept server http accept server ftp accept server ssh accept src example.firehol.org client all accept router mylan2internet inface eth0 outface ppp+ masquerade route all accept 

fwbuilder

Fwbuilder – это уникальный графический инструмент межсетевого экрана, который позволяет пользователю создавать объекты, а затем перетаскивать эти объекты в брандмауэры, создавать мощную систему безопасности для одного ПК или сети ПК. Fwbuilder поддерживает широкий спектр брандмауэров (Cisco ASA / PIX, Linux iptables, ipfilter FreeBSD, pf OpenBSD и т. Д.), Поэтому его правила могут быть развернуты на нескольких платформах. Давайте посмотрим на использование Fwbuilder в Linux, которое может стать для жизни долгое время с мощной системой безопасности.

пример

ss fwbuilder

eztables

Eztables позволяет быстро настроить брандмауэр, не касаясь iptables. Синтаксис правила брандмауэра предназначен для простого чтения и применения.

Таким образом, вы разрешаете всему Интернету получать доступ к вашему веб-серверу на TCP-порту 80:

  allow_in any $eth0 any 80/tcp 

Eztables разработан как простой, но мощный. Неважно, хотите ли вы защитить свой ноутбук, настраиваете домашний маршрутизатор или создаете брандмауэр компании.

Использование Fail2Ban

С помощью рудиментарного брандмауэра iptables вы, скорее всего, захотите похвалить его, используя такой инструмент, как Fail2Ban .

выдержка

Fail2ban сканирует файлы журнала (например, / var / log / apache / error_log) и запрещает IP-адреса, которые показывают вредоносные знаки – слишком много сбоев паролей, поиск эксплойтов и т. Д. Обычно Fail2Ban используется для обновления правил брандмауэра, чтобы отклонить IP-адреса в течение определенного периода времени, хотя любое произвольное другое действие (например, отправка электронной почты) также может быть настроено. Из коробки Fail2Ban поставляется с фильтрами для различных сервисов (apache, courier, ssh и т. Д.).

Использование таких инструментов поможет ограничить экспозицию, которую ваша система будет терпеть, когда вы продолжите ее затвердевать. Даже после того, как вы достаточно уверены в том, что ваша система затвердела, вы все равно можете продолжать использовать Fail2Ban как часть ваших мер безопасности.

Рекомендации

  • Создание мощных брандмауэров Linux с помощью брандмауэра
  • Пример FireHOL
  • Основная страница проекта FirewallBuilder
  • Базовый пример брандмауэра / iptables

Вы можете начать с очень простого шаблона, например: https://gist.github.com/jirutka/3742890 , который разрешает только ssh и ping, а также добавлять любые вещи вручную.

быстрый скрипт для генерации правил iptables для вашего приложения, прослушивающего открытый интерфейс (0.0.0.0) / tcp

 netstat -lnpt | egrep '0.0.0.0:[0-9]+' | awk '{print $4,$7}' | \ sed -E -e 's/0.0.0.0://g' -e 's|[0-9]+/||' | \ awk '{printf ("iptables -A INPUT -p tcp --dport %5d --syn -m conntrack --ctstate NEW -m comment %s \n", $1,$2) }' 

вы также можете использовать iptables -I INPUT <number> чтобы ввести правила в определенном месте, которое вы можете перечислить с помощью iptables -nvL --line-numbers INPUT

Используйте правила iptable для регистрации новых подключений, которые также будут записывать udp.

 iptables -I INPUT -m state --state NEW -j LOG --log-prefix "New inbound connection: " iptables -I OUTPUT -m state --state NEW -j LOG --log-prefix "New outbound connection: " 

Вы можете указать другой --log-level чтобы иметь журналы в другом файле, чем / var / log / messages (вам нужно будет настроить демона syslog).

Я думаю, вам следует читать журналы основных приложений, так как у какого-то сервера есть очень периодическая деятельность, например, полдень, конец недели, конец месяца (квартал, год), поэтому вы не пропустите важную сетевую активность сервера.

Поскольку сервер имеет решающее значение, делает матрицу сетевого потока сервера на красивой электронной таблице (ip source, ip dest, protocol, port, application), которая поможет вам создать правила.

Я знаю, что это не сценарий, и это не ответ на вопрос OP, но это моя идея, которую я хочу поделиться с OP.

У меня есть все прослушивающие порты:

 netstat -an | egrep 'tcp .*LISTEN' | awk -F" " '{print $4}' | awk -F":" '{print $NF}' 

Возможно, это может приблизиться к написанию собственного сценария. 🙂

Вы можете начать с чего-то вроде этого:

 netstat -n -l -p | egrep "^(tcp|tcp6|udp)" | grep LISTEN | sed -r 's!^(tcp|tcp6|udp)\s.*:([0-9]+).*LISTEN\s+.*/(.*)!iptables -A INPUT -p \1 --dport \2 -j ACCEPT # \3!' 

а затем проследить

 iptables -P INPUT DROP 

или

 iptables -A INPUT -j REJECT --reject-with icmp-host-prohibited 

В первой строке используется netstat для отображения процессов прослушивания и их портов. Затем он будет генерировать строки «iptables» для каждого из входящих соединений. Маленькая замена регулярного выражения sed была настроена для вывода netstat на моем сервере, поэтому для вас может потребоваться некоторая настройка. Когда это сработает, вы должны получить что-то вроде:

 iptables -A INPUT -p tcp --dport 111 -j ACCEPT # rpcbind iptables -A INPUT -p tcp --dport 22 -j ACCEPT # sshd iptables -A INPUT -p tcp --dport 25 -j ACCEPT # master iptables -A INPUT -p tcp --dport 3306 -j ACCEPT # mysqld iptables -A INPUT -p tcp --dport 49476 -j ACCEPT # rpc.statd iptables -A INPUT -p tcp --dport 5432 -j ACCEPT # postgres.bin iptables -A INPUT -p tcp --dport 55371 -j ACCEPT # rpc.statd 

Следует отметить две важные вещи:

1) Эти правила ничего не делают для вас, пока вы не нажмете строку DROP или REJECT в конце или не сделаете эту политику по умолчанию для непревзойденных пакетов. Эти правила разрешают пакеты, которые являются спорными, если политика по умолчанию позволяет все, что не соответствует.

2) Эти правила противоречат исходному IP-адресу. С вашего исходного сообщения кажется, что вы хотите разрешить всем вашим клиентам использовать сервер, а затем изучить журналы, чтобы получить исходный IP-адрес для доступа к портам назначения. Я не знаю, как это сделать, поэтому этот скрипт будет мешать людям создавать новые сервисы на вашем сервере, которые прослушивают другие порты … что- то .