7727
Комментарий:
|
9062
Опечатка
|
Удаления помечены так. | Добавления помечены так. |
Строка 3: | Строка 3: |
Ранее мы вручную настроили фаерволл, но писать большое количество правил неудобно и желание полуавтоматизировать процесс вполне естесственно. Существует два способа сделать это. Первый достался по наследству от дистрибутива Mandrake и позволяет записать все правила кучей в {{{/etc/sysconfig/iptables}}}. Теперь они будут добавляться при запуске iptables. Второй способ -- вписать нужные настройки в подкаталог {{{/etc/net/}}}. Полную информацию о том, как это делать можно прочитать в {{{/usr/share/doc/etcnet-<version>/examples/firewall-hiddenman/ifaces/default/fw/iptables/nat}}}: | Выше был приведён пример полностью ручной настройки фаерволла, но писать большое количество правил неудобно, и желание полуавтоматизировать процесс вполне естественно. Существует два способа сделать это. Первый достался по наследству от дистрибутива Mandrake и позволяет записать все правила кучей в {{{/etc/sysconfig/iptables}}}. Теперь они будут добавляться при запуске iptables. Второй способ -- вписать нужные настройки в соответствующий подкаталог {{{/etc/net/}}}. Полную информацию о том, как это делать можно прочитать в {{{/usr/share/doc/etcnet-<version>/examples/firewall-hiddenman/ifaces/default/fw/iptables/nat}}}. Один из примеров фрагмента довольно сложной конфигурации: |
Строка 12: | Строка 12: |
Для примера настроим NAT для второй машины на интерфейсе eth1 и заблокируем соединения с некоторым адресом. Настройки интерфейса eth0 на второй машине и соединённого с ним eth1 на первой не приводятся по причине рассмотренности ранее [[http://uneex.lorien.cs.msu.su/PspoClasses/080703/04EtcNetAndDHCP|Автоматическая настройка сетевых подключений]]. Для того, чтобы серверная машина смогла маршрутизировать пакеты необходимо включить в {{{/etc/net/sysctl.conf}}} опцию {{{net.ipv4.ip_forward}}}: | Для примера настроим NAT (Network Address Translation, преобразование сетевых адресов) для второй машины, подключенной к интерфейсу eth1 и заблокируем для неё соединения с некоторым адресом. Настройки интерфейса eth0 на второй машине и соединённого с ним eth1 на первой не приводятся по причине рассмотренности ранее ([[http://uneex.lorien.cs.msu.su/PspoClasses/080703/04EtcNetAndDHCP|Автоматическая настройка сетевых подключений]]). Для того, чтобы серверная машина смогла маршрутизировать пакеты необходимо включить в {{{/etc/net/sysctl.conf}}} опцию {{{net.ipv4.ip_forward}}}: |
Строка 27: | Строка 27: |
# cp fw/iptables/nat | # cd fw/iptables/nat |
Строка 33: | Строка 33: |
# echo '-j SNAT --to-source ${IPV4ADDRESS}' > POSTROUTING | # echo '-o ${NAME} -j SNAT --to-source ${IPV4ADDRESS}' > POSTROUTING |
Строка 37: | Строка 37: |
##Ответ на замечание: в использованной 23 июля при установке в терминальный класс версии Легкого Линукса этой проблемы нет. -- DmitryChistikov <<DateTime(2008-07-23T22:48:41+0400)>> | |
Строка 38: | Строка 39: |
Итак, мы добились включения и выключения iptables через /etc/net. При этом iptables может быть выключен по умолчанию (например, в версии дистрибутива Lite), в таком случае редактирование /etc/net не приведёт к его работе -- фаерволл следует сначала включить. | Таким образом мы совершили настройку iptables через /etc/net. То есть, при выполнении `service network restart` соответствующие правила будут применены. При этом iptables может быть выключен по умолчанию (например, в версии дистрибутива Lite), в таком случае редактирование /etc/net не приведёт к его работе -- фаерволл следует сначала включить. |
Строка 40: | Строка 41: |
Для примера попробуем забанить сайт linux.org.ru. Добавим правило (по умолчанию используется таблица filter, но мы это традиционно укажем явно) | Для примера запретим для второй машины соединения с адресом linux.org.ru. Добавим правило (таблица filter уже используется по умолчанию, но мы это традиционно укажем явно) |
Строка 46: | Строка 47: |
Первой строчкой мы добавили в syslog предупреждение о попытке посещения неким пользователем указанного сайта, а второй оборвали связь. | Первой строчкой мы добавили в syslog предупреждение о попытке посещения неким пользователем указанного сайта, а второй оборвали связь. Для сохранения этих настроек будет достаточно добавить аргументы команды iptables в файл FORWARD в рассмотренном выше каталоге `/etc/net/ifaces/eth0/fw/iptables/nat`. |
Строка 48: | Строка 49: |
Обратите внимание, что мы написали правила для перенаправляемых пакетов, следовательно к пакетам, отправленным с маршрутизатора, эти правила не применяются. Проверим, что получилось. | Обратите внимание, что мы написали правила для перенаправляемых (проходящих "сквозь" маршрутизатор) пакетов, следовательно к пакетам, отправленным с маршрутизатора, эти правила не будут применяться. Проверим, что получилось. |
Строка 50: | Строка 51: |
На demo (серверной машине) попробуем соединиться с 80 портом: | На demo (серверной машине) попробуем соединиться с 80 портом (послав туда некие данные, в нашем примере --- текст календаря за этот месяц, выводимый командой cal): |
Строка 74: | Строка 75: |
Попробуем соединиться с linux.org.ru с клиентской машины localhost, использующей demo в качестве роутера: | Попробуем соединиться с linux.org.ru с клиентской машины localhost, использующей demo в качестве маршрутизатора: |
Строка 78: | Строка 79: |
Соединения обрываются роутером, и в логах на demo появляется запись: | Соединение не проходит, и в syslog на demo появляется запись: |
Строка 92: | Строка 93: |
|| 45 || 1 || 1 || 1 || || 1 || MaximByshevskiKonopko, BorisTsema || || || | || 70 || 1 || 1 || 1 || || 1 || MaximByshevskiKonopko, BorisTsema, MaximByshevskiKonopko || || || |
Практика использования iptables: продолжение
Выше был приведён пример полностью ручной настройки фаерволла, но писать большое количество правил неудобно, и желание полуавтоматизировать процесс вполне естественно. Существует два способа сделать это. Первый достался по наследству от дистрибутива Mandrake и позволяет записать все правила кучей в /etc/sysconfig/iptables. Теперь они будут добавляться при запуске iptables. Второй способ -- вписать нужные настройки в соответствующий подкаталог /etc/net/. Полную информацию о том, как это делать можно прочитать в /usr/share/doc/etcnet-<version>/examples/firewall-hiddenman/ifaces/default/fw/iptables/nat. Один из примеров фрагмента довольно сложной конфигурации:
# cat POSTROUTING snat-to 5.6.7.8 if marked as 1
Для примера настроим NAT (Network Address Translation, преобразование сетевых адресов) для второй машины, подключенной к интерфейсу eth1 и заблокируем для неё соединения с некоторым адресом. Настройки интерфейса eth0 на второй машине и соединённого с ним eth1 на первой не приводятся по причине рассмотренности ранее (Автоматическая настройка сетевых подключений). Для того, чтобы серверная машина смогла маршрутизировать пакеты необходимо включить в /etc/net/sysctl.conf опцию net.ipv4.ip_forward:
# grep forward sysctl.conf # IPv4 packet forwarding. net.ipv4.ip_forward = 0 # sed -i '/net.ipv4.ip_forward = 0/s/0/1/' sysctl.conf # grep forward sysctl.conf # IPv4 packet forwarding. net.ipv4.ip_forward = 1
Создадим каталог fw/iptables/nat в /etc/net/ifaces/eth0:
# cd /etc/net/ifaces/eth0 # mkdir -p fw/iptables/nat # cd fw/iptables/nat # echo 'snat-to 10.0.2.15' > POSTROUTING
Существует проблема управления iptables в etc-net, связанная с различными форматами синтаксиса. В файле документации /etc/net/ifaces/default/fw/iptables/syntax описано их взаимооднозначное соответствие. В связи с этим правильно заменить ip-адрес на ${IPV4ADDRESS}:
# echo '-o ${NAME} -j SNAT --to-source ${IPV4ADDRESS}' > POSTROUTING
Таким образом мы совершили настройку iptables через /etc/net. То есть, при выполнении service network restart соответствующие правила будут применены. При этом iptables может быть выключен по умолчанию (например, в версии дистрибутива Lite), в таком случае редактирование /etc/net не приведёт к его работе -- фаерволл следует сначала включить.
Для примера запретим для второй машины соединения с адресом linux.org.ru. Добавим правило (таблица filter уже используется по умолчанию, но мы это традиционно укажем явно)
iptables -t filter -A FORWARD -d linux.org.ru -j LOG --log-level warning iptables -t filter -A FORWARD -d linux.org.ru -j DROP
Первой строчкой мы добавили в syslog предупреждение о попытке посещения неким пользователем указанного сайта, а второй оборвали связь. Для сохранения этих настроек будет достаточно добавить аргументы команды iptables в файл FORWARD в рассмотренном выше каталоге /etc/net/ifaces/eth0/fw/iptables/nat.
Обратите внимание, что мы написали правила для перенаправляемых (проходящих "сквозь" маршрутизатор) пакетов, следовательно к пакетам, отправленным с маршрутизатора, эти правила не будут применяться. Проверим, что получилось.
На demo (серверной машине) попробуем соединиться с 80 портом (послав туда некие данные, в нашем примере --- текст календаря за этот месяц, выводимый командой cal):
# cal | netcat linux.org.ru 80 HTTP/1.1 400 Bad Request Date: Tue, 08 Jul 2008 15:19:53 GMT Server: Apache/2.2.8 (Fedora) Content-Length: 352 Connection: close Content-Type: text/html; charset=iso-8859-1 <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN"> <html><head> <title>400 Bad Request</title> </head><body> <h1>Bad Request</h1> <p>Your browser sent a request that this server could not understand.<br /> Request header field is missing ':' separator.<br /> <pre> Su Mo Tu We Th Fr Sa 1 2 3 4 5 6 7 8 9 10 11 12</pre> </p> </body></html>
Соединение проходит, пакеты идут в обе стороны.
Попробуем соединиться с linux.org.ru с клиентской машины localhost, использующей demo в качестве маршрутизатора:
# cal | netcat linux.org.ru 80
Соединение не проходит, и в syslog на demo появляется запись:
# tail -2 /var/log/syslog/messages Jul 8 19:19:13 demo kernel: IN=eth1 OUT=eth0 SRC=172.16.0.2 DST=217.76.32.61 LEN=52 TOS=0x00 PREC=0x00 TTL=63 ID=16897 DF PROTO=TCP SPT=1395 DPT=80 WINDOW=5840 RES=0x00 SYN URGP=0 Jul 8 19:19:16 demo kernel: IN=eth1 OUT=eth0 SRC=172.16.0.2 DST=217.76.32.61 LEN=52 TOS=0x00 PREC=0x00 TTL=63 ID=16898 DF PROTO=TCP SPT=1395 DPT=80 WINDOW=5840 RES=0x00 SYN URGP=0
Сведения о ресурсах
Готовность (%) |
Продолжительность (ак. ч.) |
Подготовка (календ. ч.) |
Полный текст (раб. д.) |
Предварительные знания |
Level |
Maintainer |
Start date |
End date |
70 |
1 |
1 |
1 |
|
1 |
|
|