Differences between revisions 2 and 4 (spanning 2 versions)
Revision 2 as of 2008-07-08 18:32:45
Size: 5459
Editor: eSyr
Comment:
Revision 4 as of 2008-07-12 01:50:58
Size: 10758
Comment:
Deletions are marked like this. Additions are marked like this.
Line 3: Line 3:
У нас сейчас две вирт. машины. На одной, которая demo, половинка сетевого инт., у которой одна половинка есть, а другого нету. В другой стороны стоит виртуалбоксЮ, который генерирует пакеты как обычное сетевое приложение. Второй инт. --- внутренний. А у лёгкого линукса только внутренний интерфейс и всё. Вот ег-то и будем в интернет выпускать. ## {00:47:10}
Line 5: Line 5:
Сформируем задачу: мы хотим сделать две вещи6
 0. Чтбы отсюда работал какой-то интернет. Для начала руками. Для этого нужно связать эти машины, сделать demo фильтром и сделать там nat
 0. Поупражняться с фиьдтрацией, чтобы посмтреть, как iptables делает фильтрацию в разных местах
У нас сейчас у нас есть две доступные машины. На одной, которая называется demo, имеется половинка сетевого интерфейса, у которой одна половинка есть, а другого нету. '''''В другой стороны стоит виртуалбокс, который генерирует пакеты как обычное сетевое приложение.''''' Второй интерфейс --- внутренний. А у Linux Lite (который второй) есть только внутренний интерфейс и всё. Вот для него-то мы и будем создавать доступ в интернет а также попытаемся ограничить этот самый доступ .
Line 9: Line 7:
Для начала выберем какую-то сеть внутр. диапазона. Сформируем задачу: мы хотим сделать две вещи:
 0. Чтобы отсюда работал какой-то интернет. Для начала настроим его руками. Для этого нужно связать две имеющиеся у нас машины, сделать demo фильтром пакетов и сделать там {{http://ru.wikipedia.org/wiki/NAT|NAT}}(network address translanion)
 0. Поупражняться с фильтрацией, чтобы посмотреть, как iptables добавляет правила для фильтрации в разных местах.

Для начала выберем какую-то сеть внутреннего диапазона. И возьмем себе аддрес из этого диапазона. Пусть это будет 172.16.0.2 с маской 255.255.255.0 (172.16.0.1 -- адрес для нашего "сервера". Конечно не обязательно делать так. Можно назначать любые адреса из диапазона, но принято делать именно так.).
Line 15: Line 17:
А на демо, если сказать ip a, увидим, что сработал zeroconf. Создадим в /etc/net конфигурацию для eth1: А на demo, если сказать ip a, увидим, что сработал конфигуратор по умолчанию (zeroconf).
{{{
# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast qlen 1000
    link/ether 08:00:27:50:7a:b1 brd ff:ff:ff:ff:ff:ff
    inet 10.0.2.15/24 brd 10.0.2.255 scope global eth0
3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast qlen 1000
    link/ether 08:00:27:7f:75:e2 brd ff:ff:ff:ff:ff:ff
    inet 169.254.8.10/16 brd 169.254.255.255 scope global eth1:avahi
}}}
Создадим в /etc/net конфигурацию для eth1 и перезапустим сеть:
Line 29: Line 44:
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast qlen 1000
    link/ether 08:00:27:50:7a:b1 brd ff:ff:ff:ff:ff:ff
    inet 10.0.2.15/24 brd 10.0.2.255 scope global eth0
3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast qlen 1000
    link/ether 08:00:27:7f:75:e2 brd ff:ff:ff:ff:ff:ff
    inet 172.16.0.1/24 brd 172.16.0.255 scope global eth1
Line 30: Line 54:
172.16.0.0/24 dev eth1 proto kernel scope link src 172.16.0.1
10.0.2.0/24 dev eth0 proto kernel scope link src 10.0.2.15
default via 10.0.2.2 dev eth0
Line 35: Line 62:
PING 172.16.0.1 (172.16.0.1) 56(84) bytes of data.
64 bytes from 172.16.0.1: icmp_seq=1 ttl=64 time=36.5 ms
64 bytes from 172.16.0.1: icmp_seq=2 ttl=64 time=19.6 ms
64 bytes from 172.16.0.1: icmp_seq=3 ttl=64 time=3.57 ms
64 bytes from 172.16.0.1: icmp_seq=4 ttl=64 time=16.9 ms
64 bytes from 172.16.0.1: icmp_seq=5 ttl=64 time=5.05 ms
64 bytes from 172.16.0.1: icmp_seq=6 ttl=64 time=3.86 ms
64 bytes from 172.16.0.1: icmp_seq=7 ttl=64 time=5.37 ms

--- 172.16.0.1 ping statistics ---
7 packets transmitted, 7 received, 0% packet loss, time 6014ms
rtt min/avg/max/mdev = 3.571/13.014/36.595/11.405 ms
Line 37: Line 76:
Добавляем маршрут по умолчанию (сейчас есть только внутренний): Добавляем маршрут по умолчанию (сейчас прописан только маршрут до компьютеров нашей внутренней подсети):
Line 42: Line 81:
Но при этом маршрутизация не работает. Но при этом маршрутизация не работает. Это можно увидеть попробовав зайти на какой-нибудь сайт при помощи команды netcat:
{{{
# netcat 80.68.240.144 80
}}}
Line 48: Line 90:
Этот пакет необходим для просмотра пакетов проходящих через сетевые интерфейсы нашего компьютера.
Line 49: Line 92:
теперь говорим tcpdump, на другой машине netcat и видим, что н туда ломится, но ответа не приходит. Убедимся, чт пакеты не проходят: tcpdump -i eth0 host 80.68.240.144 Теперь запустим tcpdump на сервере, на другой машине netcat. Мы видим, что наш компьютер туда ломится через сервер, но сервер не пересылает эти приходящие к нему пакеты, и поэтому он не может достучатся до туда. Убедимся, что пакеты не проходят: tcpdump -i eth0 host 80.68.240.144
Line 51: Line 94:

{{{
# tcpdump -i eth1
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth1, link-type EN10MB (Ethernet), capture size 96 bytes
18:00:32.777207 IP 172.16.0.2.4471 > 192.168.200.117.webcache: S 2740685371:2740685371(0) win 5840 <mss 1460,nop,nop,sackOK,nop,wscale 2>
18:00:35.798593 IP 172.16.0.2.4471 > 192.168.200.117.webcache: S 2740685371:2740685371(0) win 5840 <mss 1460,nop,nop,sackOK,nop,wscale 2>
18:00:35.968782 IP demo.local.5353 > 224.0.0.251.5353: 0 PTR (QM)? 117.200.168.192.in-addr.arpa. (46)
18:00:37.822276 arp who-has demo.local tell 172.16.0.2
18:00:37.822365 arp reply demo.local is-at 08:00:27:7f:75:e2 (oui Unknown)
18:00:41.818490 IP 172.16.0.2.4471 > 192.168.200.117.webcache: S 2740685371:2740685371(0) win 5840 <mss 1460,nop,nop,sackOK,nop,wscale 2>
18:00:53.803214 IP 172.16.0.2.4471 > 192.168.200.117.webcache: S 2740685371:2740685371(0) win 5840 <mss 1460,nop,nop,sackOK,nop,wscale 2>
18:01:17.798826 IP 172.16.0.2.4471 > 192.168.200.117.webcache: S 2740685371:2740685371(0) win 5840 <mss 1460,nop,nop,sackOK,nop,wscale 2>
18:01:22.825093 arp who-has demo.local tell 172.16.0.2
18:01:22.825233 arp reply demo.local is-at 08:00:27:7f:75:e2 (oui Unknown)
18:02:05.822643 IP 172.16.0.2.4471 > 192.168.200.117.webcache: S 2740685371:2740685371(0) win 5840 <mss 1460,nop,nop,sackOK,nop,wscale 2>
18:02:10.810226 arp who-has demo.local tell 172.16.0.2
18:02:10.810354 arp reply demo.local is-at 08:00:27:7f:75:e2 (oui Unknown)

13 packets captured
13 packets received by filter
0 packets dropped by kernel
}}}
Line 55: Line 121:
# IPv4 packet forwarding.
net.ipv4.ip_forward = 0
Line 57: Line 125:
# IPv4 packet forwarding.
net.ipv4.ip_forward = 1
Line 58: Line 128:
В пятой строчке этого кода использовалась команда ''sed''
Line 59: Line 130:
##Указание расшифровщикам: вырезать все ответы, оставить только запросы. '''''##Указание расшифровщикам: вырезать все ответы, оставить только запросы.'''''
Line 66: Line 137:
Что в результате получилось? Эта утилита (iptables) предназначена для редактирования тех самых таблиц. -t --- таблица, -A --- команда, -o указывает, какой инт. исп. при переадресаци, -j --- действе, которое надо произв. Скажем iptables-save, чтобы посмтреть. Можно также сказать iptables -t nat -L -nvx Что в результате получилось? Эта утилита (iptables) предназначена для редактирования тех самых таблиц. -t --- таблица, -A --- команда, -o указывает, какой интерфейс используется при переадресации, -j --- действе, которое надо произв. Скажем iptables-save, чтобы посмотреть. Можно также сказать iptables -t nat -L -nvx
Line 81: Line 152:
|| 0 || 1 || 1 || 1 || || 1 || SergeyKorobkov, VladimirLysikov || || || || 10 || 1 || 1 || 1 || || 1 || SergeyKorobkov, VladimirLysikov || || ||

Практика использования iptables

У нас сейчас у нас есть две доступные машины. На одной, которая называется demo, имеется половинка сетевого интерфейса, у которой одна половинка есть, а другого нету. В другой стороны стоит виртуалбокс, который генерирует пакеты как обычное сетевое приложение. Второй интерфейс --- внутренний. А у Linux Lite (который второй) есть только внутренний интерфейс и всё. Вот для него-то мы и будем создавать доступ в интернет а также попытаемся ограничить этот самый доступ .

Сформируем задачу: мы хотим сделать две вещи:

  1. Чтобы отсюда работал какой-то интернет. Для начала настроим его руками. Для этого нужно связать две имеющиеся у нас машины, сделать demo фильтром пакетов и сделать там NAT(network address translanion)

  2. Поупражняться с фильтрацией, чтобы посмотреть, как iptables добавляет правила для фильтрации в разных местах.

Для начала выберем какую-то сеть внутреннего диапазона. И возьмем себе аддрес из этого диапазона. Пусть это будет 172.16.0.2 с маской 255.255.255.0 (172.16.0.1 -- адрес для нашего "сервера". Конечно не обязательно делать так. Можно назначать любые адреса из диапазона, но принято делать именно так.).

# ip addr add 172.16.0.2/24 dev eth0

А на demo, если сказать ip a, увидим, что сработал конфигуратор по умолчанию (zeroconf).

# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue 
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast qlen 1000
    link/ether 08:00:27:50:7a:b1 brd ff:ff:ff:ff:ff:ff
    inet 10.0.2.15/24 brd 10.0.2.255 scope global eth0
3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast qlen 1000
    link/ether 08:00:27:7f:75:e2 brd ff:ff:ff:ff:ff:ff
    inet 169.254.8.10/16 brd 169.254.255.255 scope global eth1:avahi

Создадим в /etc/net конфигурацию для eth1 и перезапустим сеть:

# mkdir /etc/net/ifaces/eth1
# cd /etc/net/ifaces/eth1
# echo "172.16.0.1/24" > ipv4address
# cat > options
DISABLED=no
BOOTPROTO=static
# service network restart

Прверим результат действий:

# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue 
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast qlen 1000
    link/ether 08:00:27:50:7a:b1 brd ff:ff:ff:ff:ff:ff
    inet 10.0.2.15/24 brd 10.0.2.255 scope global eth0
3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast qlen 1000
    link/ether 08:00:27:7f:75:e2 brd ff:ff:ff:ff:ff:ff
    inet 172.16.0.1/24 brd 172.16.0.255 scope global eth1
# ip r
172.16.0.0/24 dev eth1  proto kernel  scope link  src 172.16.0.1 
10.0.2.0/24 dev eth0  proto kernel  scope link  src 10.0.2.15 
default via 10.0.2.2 dev eth0 

Возвращаемся на localhost и проверяем:

#ping 172.16.0.1
PING 172.16.0.1 (172.16.0.1) 56(84) bytes of data.
64 bytes from 172.16.0.1: icmp_seq=1 ttl=64 time=36.5 ms
64 bytes from 172.16.0.1: icmp_seq=2 ttl=64 time=19.6 ms
64 bytes from 172.16.0.1: icmp_seq=3 ttl=64 time=3.57 ms
64 bytes from 172.16.0.1: icmp_seq=4 ttl=64 time=16.9 ms
64 bytes from 172.16.0.1: icmp_seq=5 ttl=64 time=5.05 ms
64 bytes from 172.16.0.1: icmp_seq=6 ttl=64 time=3.86 ms
64 bytes from 172.16.0.1: icmp_seq=7 ttl=64 time=5.37 ms

--- 172.16.0.1 ping statistics ---
7 packets transmitted, 7 received, 0% packet loss, time 6014ms
rtt min/avg/max/mdev = 3.571/13.014/36.595/11.405 ms

Добавляем маршрут по умолчанию (сейчас прописан только маршрут до компьютеров нашей внутренней подсети):

ip route add default via 172.16.0.1

Но при этом маршрутизация не работает. Это можно увидеть попробовав зайти на какой-нибудь сайт при помощи команды netcat:

# netcat 80.68.240.144 80

Доустановим пакет tcpdump (для этого должен быть включён какой-нибудь репозиторий --- updates или branch)

# apt-get install tcpdump

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

Теперь запустим tcpdump на сервере, на другой машине netcat. Мы видим, что наш компьютер туда ломится через сервер, но сервер не пересылает эти приходящие к нему пакеты, и поэтому он не может достучатся до туда. Убедимся, что пакеты не проходят: tcpdump -i eth0 host 80.68.240.144

# tcpdump -i eth1
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth1, link-type EN10MB (Ethernet), capture size 96 bytes
18:00:32.777207 IP 172.16.0.2.4471 > 192.168.200.117.webcache: S 2740685371:2740685371(0) win 5840 <mss 1460,nop,nop,sackOK,nop,wscale 2>
18:00:35.798593 IP 172.16.0.2.4471 > 192.168.200.117.webcache: S 2740685371:2740685371(0) win 5840 <mss 1460,nop,nop,sackOK,nop,wscale 2>
18:00:35.968782 IP demo.local.5353 > 224.0.0.251.5353: 0 PTR (QM)? 117.200.168.192.in-addr.arpa. (46)
18:00:37.822276 arp who-has demo.local tell 172.16.0.2
18:00:37.822365 arp reply demo.local is-at 08:00:27:7f:75:e2 (oui Unknown)
18:00:41.818490 IP 172.16.0.2.4471 > 192.168.200.117.webcache: S 2740685371:2740685371(0) win 5840 <mss 1460,nop,nop,sackOK,nop,wscale 2>
18:00:53.803214 IP 172.16.0.2.4471 > 192.168.200.117.webcache: S 2740685371:2740685371(0) win 5840 <mss 1460,nop,nop,sackOK,nop,wscale 2>
18:01:17.798826 IP 172.16.0.2.4471 > 192.168.200.117.webcache: S 2740685371:2740685371(0) win 5840 <mss 1460,nop,nop,sackOK,nop,wscale 2>
18:01:22.825093 arp who-has demo.local tell 172.16.0.2
18:01:22.825233 arp reply demo.local is-at 08:00:27:7f:75:e2 (oui Unknown)
18:02:05.822643 IP 172.16.0.2.4471 > 192.168.200.117.webcache: S 2740685371:2740685371(0) win 5840 <mss 1460,nop,nop,sackOK,nop,wscale 2>
18:02:10.810226 arp who-has demo.local tell 172.16.0.2
18:02:10.810354 arp reply demo.local is-at 08:00:27:7f:75:e2 (oui Unknown)

13 packets captured
13 packets received by filter
0 packets dropped by kernel

Пакеты не идут потому, что машина не работает в режиме маршрутизатора. Как включить режим маршрутизации:

# cd /etc/net/
# grep forward sysctl.conf
# IPv4 packet forwarding.
net.ipv4.ip_forward = 0
# sed -i '/net.icv4.ip_forward = 0/s/0/1/'
# grep forward sysctl.conf
# IPv4 packet forwarding.
net.ipv4.ip_forward = 1

В пятой строчке этого кода использовалась команда sed

##Указание расшифровщикам: вырезать все ответы, оставить только запросы.

После этого маршрутизация работает, но преобразования ip не происходит и ответов не приходит. Для того, чтобы это заработало, нужен nat:

# iptables -t nat -A POSTROUTING -o eth0 -j SNAT --to-source=10.0.2.15

Что в результате получилось? Эта утилита (iptables) предназначена для редактирования тех самых таблиц. -t --- таблица, -A --- команда, -o указывает, какой интерфейс используется при переадресации, -j --- действе, которое надо произв. Скажем iptables-save, чтобы посмотреть. Можно также сказать iptables -t nat -L -nvx

iptables-save выдаёт цепочки по типам таблиц (?), iptables -L выдаёт таблицы в порядке прохождения. Согласно задумке лектора, оно должно работать.

Теперь посмотрим, какая активность. Сначала на внешнем, потом на внутреннем.

Обратите внимание, что произошла подмена адресов. Если сделаем tcpdump -i eth1, то увидем тот же трафик, но с непоменяным адресом.


Сведения о ресурсах

Готовность (%)

Продолжительность (ак. ч.)

Подготовка (календ. ч.)

Полный текст (раб. д.)

Предварительные знания

Level

Maintainer

Start date

End date

10

1

1

1

1

SergeyKorobkov, VladimirLysikov


CategoryLectures CategoryPspo CategoryMpgu CategoryUneex

PspoClasses/080708/02IptablesPractice (last edited 2008-10-09 18:32:07 by MaximByshevskiKonopko)