В ldap Вы сделаете что-то как:
ldapsearch -x -Z uid=$1 pwdChangedTime | \
grep -vE '^#|^$' | grep pwdChangedTime | awk '{print $2}'
Запустить tcpdump
на машине на неделю или около того, чтобы перехватить средний трафик. Затем вы можете просмотреть трафик с помощью wireshark позже, чтобы посмотреть, какие порты используются.
Командой для этого будет tcpdump -i
Вы можете затем сопоставить это обратно, используя netstat -tuanp
, чтобы посмотреть, какие PID/приложения используют какие порты.
Теоретически это может быть скриптовано.
.Используйте правила 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-уровень
, чтобы журналы находились в другом файле, а не в /var/log/messages (вам придется настроить syslog daemon).
Я думаю, что вы должны читать журналы основных приложений, так как некоторые серверы имеют очень периодическую активность, например, полдень, конец недели, конец месяца (квартала, года), так что вы не пропустите важную сетевую активность сервера.
Так как сервер является критически важным, делает матрицу сетевого потока сервера в красивой электронной таблице (ip источник, ip пункт назначения, протокол, порт, приложение), которая поможет вам построить правила.
] Я знаю, что это не сценарий и [] это не ответ[] на вопрос OP, но это моя идея, которой я хочу поделиться с OP.[
] [] У меня есть все прослушивающие порты с:[
] [netstat -an | egrep 'tcp .*LISTEN' | awk -F" " '{print $4}' | awk -F":" '{print $NF}'
]
[]Может быть, это поможет вам приблизиться к написанию собственного сценария. :)[
]]К сожалению, нет такого скрипта, который мог бы работать в режиме обучения или пассивном режиме, регистрируя все использование вашей сети, беря его результаты и генерируя реальный брандмауэр, используя []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-соединения, i. e. они "прослушивают" соединения на различных портах.[
] []Это бессмысленно начинать с таких вещей, как SSH (порт 22) и HTTP (порт 80), если они типичны для вашей системы, поэтому я бы делал эти типы сервисов в массовом порядке одновременно. Для других служб, таких как LDAP или NIS, вы можете захотеть сделать это более контролируемым способом, убедившись, что все не сломается по мере того, как вы их вводите. [
] [] Такие инструменты как []FireHOL[], []Firewall Builder[] (fwbuilder), и []eztables[] могут быть полезны при атаке на этот проект, так как они обеспечивают хороший уровень абстракции от необходимости вручную создавать пользовательские []iptable[
] правила, что может быть непросто. [
] [] []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, OpenBSD's pf и другие), поэтому его правила могут быть развернуты на нескольких платформах. Давайте взглянем на использование Fwbuilder под Linux, который может стать пожизненным романом с мощной системой безопасности. Пример [
] [
][] [][
] [] [][
] [][]eztables[][] [] [] []Eztables позволяет быстро настроить брандмауэр, не касаясь iptables. Синтаксис правила брандмауэра разработан так, чтобы его было легко читать и применять.[
] []Так вы разрешаете всему Интернету получить доступ к вашему веб серверу на TCP-порте 80:[
] [][] [] allow_in any $eth0 any 80/tcp [
][] Eztables разработаны, чтобы быть простыми, но мощными. Не имеет значения, хотите ли вы защитить свой ноутбук, настроить домашний маршрутизатор или построить брандмауэр компании.[
] [
]С помощью рудиментарного []iptables[
] брандмауэра вы, скорее всего, захотите дополнить его с помощью такого инструмента, как []Fail2Ban[]. [
] [] []Fail2ban сканирует лог-файлы (например, /var/log/apache/error_log) и запрещает IP-адреса, показывающие вредоносные знаки -- слишком много ошибок при вводе паролей, поиск эксплойтов и т.д. Обычно Fail2Ban используется для обновления правил брандмауэра с целью отклонения IP-адресов на определенное время, хотя любые другие произвольные действия (например, отправка сообщения электронной почты) также могут быть настроены. В комплект поставки Fail2Ban входят фильтры для различных служб (apache, курьерская служба, ssh и т.д.)[
] [
]Использование таких инструментов, как этот, поможет ограничить экспозицию, которую вашей системе придется выдержать, так как вы продолжаете ее укреплять. Даже после того, как вы убедились, что ваша система была закалена, вы все равно можете продолжать использовать Fail2Ban как часть мер безопасности. [
] [Вы можете начать с очень базового шаблона типа- 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 <номер>
для введения правил в определенном месте, которое вы можете перечислить с помощью iptables -nvL --line-номеров INPUT
Сделайте это вручную
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
Вы можете начать с чего-то вроде этого:
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-адреса для портов назначения. Я не знаю, как это сделать, поэтому этот скрипт не позволит людям создавать новые сервисы на вашем сервере, которые прослушивают другие порты... что что-то.