Практическое занятие. Расширенная диагностика и настройка сети

Цель занятия: знакомство с командами анализа сетевой активности и хостов в TCP/IP-сети и интстументами управления межсетевым экраном в Linux.

Изучаемые команды: iptables, nmap, tcpdump

Сценарий: Сканирование локальной сети

Сценарий описывает возможности по просмотру сетевого трафика, проходящего через присутствующие в системе сетевые интерфейсы.

Начальные условия: Командная строка суперпользователя после входа в систему, настроенные сетевой интерфейс и таблица маршрутизации.

  1. Выведем все пакеты, проходящие через интерфейс eth0, с помощью команды tcpdump -i eth0 -l -n:

    desktop ~ # tcpdump -i eth0 -l -n
    tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
    listening on eth0, link-type EN10MB (Ethernet), capture size 96 bytes
    14:37:23.929208 IP 192.168.0.204.32791 > 192.168.0.1.53:  40133+ A? ya.ru. (23)
    14:37:23.931050 IP 192.168.0.1.53 > 192.168.0.204.32791:  40133- 1/0/0 A 213.180.204.8 (39)
    14:37:23.932778 IP 192.168.0.204 > 213.180.204.8: ICMP echo request, id 12586, seq 1, length 64
    14:37:23.954412 IP 213.180.204.8 > 192.168.0.204: ICMP echo reply, id 12586, seq 1, length 64
    14:37:23.954784 IP 192.168.0.204.32791 > 192.168.0.1.53:  29723+ PTR? 8.204.180.213.in-addr.arpa. (44)
    14:37:23.956530 IP 192.168.0.1.53 > 192.168.0.204.32791:  29723- 1/0/0 (63)
    ...

    Прервать выполнение команды можно нажатием Ctrl-C.

  2. Используем фильтр по уалённому порту для просмотра всего трафика в сети, генерируемого данной машиной, tcpdump -i eth0 -l -n src host 192.168.0.204:

    desktop ~ # tcpdump -i eth0 -l -n src host 192.168.0.204
    tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
    listening on eth0, link-type EN10MB (Ethernet), capture size 96 bytes
    14:43:02.492487 IP 192.168.0.204.32791 > 192.168.0.1.53:  13524+ AAAA? yandex.ru. (27)
    14:43:02.520278 IP 192.168.0.204.32791 > 192.168.0.1.53:  12908+ AAAA? yandex.ru. (27)
    14:43:02.522799 IP 192.168.0.204.32791 > 192.168.0.1.53:  48501+ A? yandex.ru. (27)
    14:43:02.525069 IP 192.168.0.204.57521 > 1.0.0.0.80: S 1379873941:1379873941(0) win
       5840 <mss 1460,sackOK,timestamp 2563967 0,nop,wscale 2>
    ...

  3. Условия можно объёдинять, например, посмотрим все обращения по протоколу http на хост ya.ru, tcpdump -i eth0 -l -n src host 192.168.0.204 and dst port 80:

    desktop ~ # tcpdump -i eth0 -l -n src host 192.168.0.204 and dst port 80
    tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
    listening on eth0, link-type EN10MB (Ethernet), capture size 96 bytes
    14:49:39.015251 IP 192.168.0.204.38172 > 213.180.204.11.80: S 1789772982:1789772982(0)
       win 5840 <mss 1460,sackOK,timestamp 2663083 0,nop,wscale 2>
    14:49:39.054551 IP 192.168.0.204.38172 > 213.180.204.11.80: . ack 851659167 win 5840
    14:49:39.056486 IP 192.168.0.204.38172 > 213.180.204.11.80: P 0:626(626) ack 1 win 5840
    14:49:39.598337 IP 192.168.0.204.38172 > 213.180.204.11.80: . ack 1411 win 8460
    14:49:39.604713 IP 192.168.0.204.38172 > 213.180.204.11.80: . ack 2821 win 11280
    14:49:39.659811 IP 192.168.0.204.38172 > 213.180.204.11.80: . ack 4231 win 14100
    14:49:39.784351 IP 192.168.0.204.38172 > 213.180.204.11.80: . ack 5641 win 16920
    14:49:39.848824 IP 192.168.0.204.38172 > 213.180.204.11.80: . ack 7051 win 19740
    14:49:39.966120 IP 192.168.0.204.38172 > 213.180.204.11.80: F 626:626(0) ack 8118
       win 22560

    В данном примере можно увидеть одно последовательное TCP-соединение.

  4. С помощью параметров -X и -s можно просмотреть содержимое пакетов, tcpdump -i eth0 -l -n -X -s 2048 src host 192.168.0.204 and dst port 80:

    desktop ~ # tcpdump -i eth0 -l -n -X -s 2048 src host 192.168.0.204 and dst port 80
    tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
    listening on eth0, link-type EN10MB (Ethernet), capture size 2048 bytes
    15:00:20.150901 IP 192.168.0.204.58273 > 213.180.204.11.80: S 2473175603:2473175603(0)
       win 5840 <mss 1460,sackOK,timestamp 2823357 0,nop,wscale 2>
            0x0000:  4500 003c be8e 4000 4006 18f9 c0a8 00cc  E..<..@.@.......
            0x0010:  d5b4 cc0b e3a1 0050 9369 aa33 0000 0000  .......P.i.3....
            0x0020:  a002 16d0 9789 0000 0204 05b4 0402 080a  ................
            0x0030:  002b 14bd 0000 0000 0103 0302            .+..........
    15:00:20.172752 IP 192.168.0.204.58273 > 213.180.204.11.80: . ack 2349139833 win 5840
            0x0000:  4500 0028 be8f 4000 4006 190c c0a8 00cc  E..(..@.@.......
            0x0010:  d5b4 cc0b e3a1 0050 9369 aa34 8c05 0779  .......P.i.4...y
            0x0020:  5010 16d0 80c1 0000                      P.......
    15:00:20.172815 IP 192.168.0.204.58273 > 213.180.204.11.80: P 0:624(624) ack 1 win 5840
            0x0000:  4500 0298 be90 4000 4006 169b c0a8 00cc  E.....@.@.......
            0x0010:  d5b4 cc0b e3a1 0050 9369 aa34 8c05 0779  .......P.i.4...y
            0x0020:  5018 16d0 023e 0000 4745 5420 2f79 616e  P....>..GET./yan
            0x0030:  6473 6561 7263 683f 7465 7874 3d74 6573  dsearch?text=tes
            0x0040:  7426 7374 7970 653d 7777 7720 4854 5450  t&stype=www.HTTP
            0x0050:  2f31 2e31 0d0a 486f 7374 3a20 7777 772e  /1.1..Host:.www.
            0x0060:  7961 6e64 6578 2e72 750d 0a55 7365 722d  yandex.ru..User-
            0x0070:  4167 656e 743a 204d 6f7a 696c 6c61 2f35  Agent:.Mozilla/5
            0x0080:  2e30 2028 5831 313b 2055 3b20 4c69 6e75  .0.(X11;.U;.Linu
            0x0090:  7820 6936 3836 3b20 656e 2d55 533b 2072  x.i686;.en-US;.r
            0x00a0:  763a 312e 372e 3132 2920 4765 636b 6f2f  v:1.7.12).Gecko/
    ...

Сценарий: Сканирование удалённых хостов

Начальные условия: Командная строка суперпользователя после входа в систему, настроенные сетевой интерфейс и таблица маршрутизации.

  1. Простое сканирование хоста можно произвести, если указать его IP-адрес в аргументе команды nmap: nmap 192.168.0.120:

    user@desktop ~ $ nmap 192.168.0.120
    Starting nmap 3.75 ( http://www.insecure.org/nmap/ ) at 2006-02-06 23:21 MSK
    Interesting ports on gate.localnet (192.168.0.120):
    (The 1658 ports scanned but not shown below are in state: closed)
    PORT    STATE SERVICE
    21/tcp  open  ftp
    22/tcp  open  ssh
    80/tcp  open  http
    443/tcp open  https
    873/tcp open  rsync
    
    Nmap run completed -- 1 IP address (1 host up) scanned in 0.555 seconds

    При этом nmap производит попытки соединения с портами, что может быть обнаружено на стороне хоста.

  2. Более «тихим» способом сканирования является SYN-сканирование, когда вместо настоящего соединения посылается только SYN-пакет. Этот способ сканировани доступен только суперпользователю: nmap -sS 192.168.0.120

    desktop ~ # nmap -sS 192.168.0.120
    Starting nmap 3.75 ( http://www.insecure.org/nmap/ ) at 2006-02-06 23:28 MSK
    Interesting ports on gate.localnet (192.168.0.120):
    (The 1658 ports scanned but not shown below are in state: closed)
    PORT    STATE SERVICE
    21/tcp  open  ftp
    22/tcp  open  ssh
    80/tcp  open  http
    443/tcp open  https
    873/tcp open  rsync
    MAC Address: 00:11:2F:F4:4B:55 (Asustek Computer)
    
    Nmap run completed -- 1 IP address (1 host up) scanned in 0.405 seconds

  3. Самую полную информацию о тестируемом хосте можно узнать, если использовать ключи -v (дважды) и -O, nmap -sS -v -v -O 192.168.0.120:

    desktop ~ # nmap -sS -v -v -O 192.168.0.120
    Starting nmap 3.75 ( http://www.insecure.org/nmap/ ) at 2006-02-06 23:31 MSK
    Initiating SYN Stealth Scan against gate.localnet (192.168.0.120) [1663 ports] at 23:31
    Discovered open port 80/tcp on 192.168.0.120
    Discovered open port 21/tcp on 192.168.0.120
    Discovered open port 443/tcp on 192.168.0.120
    Discovered open port 22/tcp on 192.168.0.120
    Discovered open port 873/tcp on 192.168.0.120
    The SYN Stealth Scan took 0.08s to scan 1663 total ports.
    For OSScan assuming port 21 is open, 1 is closed, and neither are firewalled
    Host gate.localnet (192.168.0.120) appears to be up ... good.
    Interesting ports on gate.localnet (192.168.0.120):
    (The 1658 ports scanned but not shown below are in state: closed)
    PORT    STATE SERVICE
    21/tcp  open  ftp
    22/tcp  open  ssh
    80/tcp  open  http
    443/tcp open  https
    873/tcp open  rsync
    MAC Address: 00:11:2F:F4:4B:55 (Asustek Computer)
    Device type: general purpose
    Running: Linux 2.4.X|2.5.X|2.6.X
    OS details: Linux 2.4.18 - 2.6.7
    OS Fingerprint:
    TSeq(Class=RI%gcd=1%SI=2E7845%IPID=Z%TS=1000HZ)
    T1(Resp=Y%DF=Y%W=16A0%ACK=S++%Flags=AS%Ops=MNNTNW)
    T2(Resp=N)
    T3(Resp=Y%DF=Y%W=16A0%ACK=S++%Flags=AS%Ops=MNNTNW)
    T4(Resp=Y%DF=Y%W=0%ACK=O%Flags=R%Ops=)
    T5(Resp=Y%DF=Y%W=0%ACK=S++%Flags=AR%Ops=)
    T6(Resp=Y%DF=Y%W=0%ACK=O%Flags=R%Ops=)
    T7(Resp=Y%DF=Y%W=0%ACK=S++%Flags=AR%Ops=)
    PU(Resp=Y%DF=N%TOS=C0%IPLEN=164%RIPTL=148%RID=E%RIPCK=E%UCK=E%ULEN=134%DAT=E)
    
    Uptime 24.662 days (since Fri Jan 13 07:38:30 2006)
    TCP Sequence Prediction: Class=random positive increments
                             Difficulty=3045445 (Good luck!)
    TCP ISN Seq. Numbers: FC47E005 FC966A63 FC61563D FBC11ADD FC5E53A5 FBBE2AA2
    IPID Sequence Generation: All zeros
    
    Nmap run completed -- 1 IP address (1 host up) scanned in 2.340 seconds

    На основании анализа поведения системы программа делает предположение о типе операционной системы, запущенной на хосте.

Сценарий: Настройка сетевого экрана

Начальные условия: Командная строка суперпользователя после входа в систему, настроенные сетевой интерфейс и таблица маршрутизации.

  1. Для просмотра текущей таблицы правил сетевого экрана воспользуемся командой iptables -L:

    desktop ~ # iptables -L
    Chain INPUT (policy ACCEPT)
    target     prot opt source               destination
    
    Chain FORWARD (policy ACCEPT)
    target     prot opt source               destination
    
    Chain OUTPUT (policy ACCEPT)
    target     prot opt source               destination

    Все три цепочки не содержат правил и имеют политику разрешения всех пакетов по умолчанию.

  2. Запретим весь сетевой трафик как на вход, так и на выход командами iptables -P INPUT DROP, iptables -P OUTPUT DROP:

    desktop ~ # iptables -P INPUT DROP
    desktop ~ # iptables -P OUTPUT DROP
    desktop ~ # iptables -L
    Chain INPUT (policy ACCEPT)
    target     prot opt source               destination
    
    Chain FORWARD (policy ACCEPT)
    target     prot opt source               destination
    
    Chain OUTPUT (policy ACCEPT)
    target     prot opt source               destination

  3. Любой сетевой обмен (даже команда ping 127.0.0.1) будет запрещён:

    desktop ~ # ping 127.0.0.1
    PING 127.0.0.1 (127.0.0.1) 56(84) bytes of data.
    ping: sendmsg: Operation not permitted
    ping: sendmsg: Operation not permitted

  4. Разрешим вход и выход всем пакетам, связанным с локальным интерфейсом (lo) с помощью команд: iptables -A INPUT -i lo -j ACCEPT и iptables -A OUTPUT -o lo -j ACCEPT.

    desktop ~ # iptables -A INPUT -i lo -j ACCEPT
    desktop ~ # iptables -A OUTPUT -o lo -j ACCEPT
    desktop ~ # ping 127.0.0.1
    PING 127.0.0.1 (127.0.0.1) 56(84) bytes of data.
    64 bytes from 127.0.0.1: icmp_seq=1 ttl=64 time=0.056 ms
    64 bytes from 127.0.0.1: icmp_seq=2 ttl=64 time=0.043 ms

  5. Разрешим вход и выход всем пакетам, относящимся к протоколу ICMP: iptables -A INPUT -p icmp -j ACCEPT и iptables -A OUTPUT -p icmp -j ACCEPT.

    desktop ~ # iptables -A INPUT -p icmp -j ACCEPT
    desktop ~ # iptables -A OUTPUT -p icmp -j ACCEPT

  6. Чтобы пропускать пакеты, относящиеся ко всем установленным соединениям, добавим два правила: iptables -A INPUT -m state --state ESTABLISHED -j ACCEPT и iptables -A OUTPUT -m state --state ESTABLISHED -j ACCEPT

    desktop ~ # iptables -A INPUT -m state --state ESTABLISHED -j ACCEPT
    desktop ~ # iptables -A OUTPUT -m state --state ESTABLISHED -j ACCEPT

  7. Теперь осталось только разрешить входящие и исходящие соединения на определённые порты. Например, для исходящего доступа по протоколу HTTP выполним iptables -A OUTPUT -m state --state NEW -p tcp --dport 80 -j ACCEPT:

    desktop ~ # iptables -A OUTPUT -m state --state NEW -p tcp --dport 80 -j ACCEPT

  8. В завершение можно очистить все заданные правила с помощью iptables -F:

    desktop ~ # iptables -F
    desktop ~ # iptables -L
    Chain INPUT (policy ACCEPT)
    target     prot opt source               destination
    
    Chain FORWARD (policy ACCEPT)
    target     prot opt source               destination
    
    Chain OUTPUT (policy ACCEPT)
    target     prot opt source               destination

    Обратите внимание, что это не изменило политики по умолчанию.

Задания для самоподготовки

  1. Подсчитайте число устанавливаемых tcp соеднинений в сети за одну минуту.
  2. Проследите сожержимое tcp-сессии telnet- и ssh-соединения. Сравните результаты.