
- •4.1. Создание, изменение и удаление учётных записей
- •4.1.1. Введение
- •4.1.2. Добавление пользователя
- •4.1.3. Изменение параметров пользовательской учётной записи
- •4.1.4. Удаление учётной записи
- •6.1. Определение существующих установок tcp/ip
- •Комментарий
- •6.1.1. Ifconfig(8) — настройки сетевых интерфейсов
- •6.1.2. Netstat(1)
- •6.1.2.1. Таблица маршрутизации
- •6.1.2.2. Статистика
- •6.1.2.3. Работающие интернет сервисы и открытые сокеты
- •6.1.2.3.1. Открытие tcp соединения (тройное рукопожатие)
- •6.1.2.3.2. Закрытие tcp соединения
- •6.1.3. Route(8)
- •6.1.4. /Etc/resolv.Conf(5)
- •6.2.2.1. Изменение настроек физического уровня
- •6.2.2.2. Изменение настроек канального уровня
- •6.2.2.2.1. Изменение mac-адреса:
- •6.2.2.2.2. Смена флагов канального уровня
- •6.2.2.3. Изменение настроек сетевого уровня
- •6.2.2.3.2. Ip, маска подсети, широковещательный адрес
- •6.2.2.3.4. Другие протоколы сетевого уровня
- •6.2.3. Route(8) — настройка таблицы маршрутизации
- •6.2.4. Resolv.Conf(5) — настройка клиента dns
- •6.2.5. Hosts(5) — локальная база имён
- •6.2.6. Как сохранить установленные сетевые параметры
- •6.2.6.1. FreeBsd
- •6.3. Определение какие tcp или udp порты открыты в системе
- •Комментарий
- •6.3.1. Fstat(1)
- •6.3.2. Sockstat(1)
- •6.3.3. Lsof(1)
- •6.3.4. Nmap(1)
- •6.4. Проверка доступности tcp/ip сервиса
- •Комментарий
- •6.4.1. Ping(8)
- •6.4.2. Traceroute(1)
- •6.4.3. Hping(8)
- •6.4.4. Telnet(1), nc(1)
6.3.3. Lsof(1)
Это тоже очень полезная программа, которая умеет рассказывать об открытых сокетах, сетевых соединениях и открытых файлах. Данная программа не входит в состав BSD, а доступна исключительно ввиде стороннего продукта (порта или пакета).
С опцией -i она может рассказать об открытых интернет-соединениях:
$ lsof -i -n | head
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
syslogd 306 root 5u IPv4 0xc18cc708 0t0 UDP *:syslog
ntpd 439 root 4u IPv4 0xc18cc654 0t0 UDP *:ntp
ntpd 439 root 5u IPv4 0xc18cc5a0 0t0 UDP 192.168.0.4:ntp
ntpd 439 root 6u IPv4 0xc18cc4ec 0t0 UDP 192.168.0.6:ntp
ntpd 439 root 7u IPv4 0xc18cc438 0t0 UDP 127.0.0.1:ntp
sshd 470 root 3u IPv4 0xc18fade0 0t0 TCP *:ssh (LISTEN)
sendmail 476 root 4u IPv4 0xc18fac24 0t0 TCP 127.0.0.1:smtp (LISTEN)
mysqld 570 mysql 3u IPv4 0xc18fa8ac 0t0 TCP *:3306 (LISTEN)
mysqld 570 mysql 3u IPv4 0xc18fa8ac 0t0 TCP *:3306 (LISTEN)
Здесь в скобках показано состояние соединения TCP (расшифровку см. выше). Сделав поиск по слову ESTABLISHED мы можем узнать соединения, по которым в данный момент могут передаваться данные:
$ lsof -i -n | grep ESTABLISHED | head
sshd 53540 root 4u IPv4 0xc28ae1bc 0t0 TCP xxx.yyy.zzz.xyz:ssh->xxx.yyy.zzz.zyx:52954 (ESTABLISHED)
sshd 53542 emin 4u IPv4 0xc28ae1bc 0t0 TCP xxx.yyy.zzz.xyz:ssh->xxx.yyy.zzz.zyx:52954 (ESTABLISHED)
httpd 47448 www 66u IPv4 0xc1f296f0 0t0 TCP xxx.yyy.zzz.xyz:http->**************:31825 (ESTABLISHED)
httpd 51286 www 66u IPv4 0xc2407378 0t0 TCP xxx.yyy.zzz.xyz:http->***********:2381 (ESTABLISHED)
httpd 51314 www 66u IPv4 0xc21c3534 0t0 TCP xxx.yyy.zzz.xyz:http->*************:11009 (ESTABLISHED)
httpd 51316 www 66u IPv4 0xc1b6dde0 0t0 TCP xxx.yyy.zzz.xyz:http->************:3664 (ESTABLISHED)
httpd 52426 www 66u IPv4 0xc2407a68 0t0 TCP xxx.yyy.zzz.xyz:http->************:10555 (ESTABLISHED)
httpd 53595 www 66u IPv4 0xc208ec24 0t0 TCP xxx.yyy.zzz.xyz:http->*************:55420 (ESTABLISHED)
httpd 53666 www 66u IPv4 0xc43adde0 0t0 TCP xxx.yyy.zzz.xyz:http->**************:3339 (ESTABLISHED)
httpd 53778 www 66u IPv4 0xc1fa8534 0t0 TCP xxx.yyy.zzz.xyz:http->*************:33735 (ESTABLISHED)
Следующий скрипт отслеживает количество соединений с web-сервером apache, и печатает статистику, по которой можно установить с какого IP пришло слишком много запросов.
#!/bin/sh
while :
do
echo "========== `/bin/date` =========="
/usr/local/bin/lsof -i -n |\
/usr/bin/awk '/^httpd.*ESTABLISHED/{print $9}' |\
/usr/bin/sed 's/.*->\([0-9.]*\):.*/\1/' |\
/usr/bin/sort | /usr/bin/uniq -c | /usr/bin/sort -n -k1,1
/bin/sleep 5
done
Ту же задачу, впрочем, можно решить и при помощи команды netstat(1):
#!/bin/sh
while :
do
echo "========== `/bin/date` =========="
/usr/bin/netstat -n | /usr/bin/awk '/62\.117\.108\.4\.80 .*ESTABLISHED/{print $5}' |\
/usr/bin/sed 's/\.[0-9]*$//' |\
/usr/bin/sort | /usr/bin/uniq -c | /usr/bin/sort -n -k1,1
/bin/sleep 5
done
Без опции -i программа lsof(1) выводит информацию об открытых файлах. Вывод её несколько удобнее, чем у программы fstat(1), так как включает в себя не только номера inod'ов, но и имена файлов, которые она берёт из кеша ядра.