Различия
Здесь показаны различия между двумя версиями данной страницы.
Предыдущая версия справа и слева Предыдущая версия Следующая версия | Предыдущая версия | ||
wiki:руководство_по_ubuntu_server:безопасность:firewall [2012/06/20 21:23] |
wiki:руководство_по_ubuntu_server:безопасность:firewall [2012/06/21 22:14] (текущий) [Другие инструменты] |
||
---|---|---|---|
Строка 35: | Строка 35: | ||
5. Для удаления правила используйте delete: | 5. Для удаления правила используйте delete: | ||
<code>sudo ufw delete deny 22</code> | <code>sudo ufw delete deny 22</code> | ||
- | 6. Также можно разрешить доступ к порту с определенных компьютеров или подсетей. Следующий пример описывает доступ через SSH с компьютера 192.168.0.2 к любому ip-адресу на этом хосте: | + | 6. Также можно разрешить доступ к порту с определенных компьютеров или сетей. Следующий пример разрешает на этом компьютере доступ по SSH с адреса 192.168.0.2 на любой IP адрес: |
<code>sudo ufw allow proto tcp from 192.168.0.2 to any port 22</code> | <code>sudo ufw allow proto tcp from 192.168.0.2 to any port 22</code> | ||
- | Замените 192.168.0.2 на 192.168.0.0/24 для доступа через SSH для всей подсети. | + | Замените 192.168.0.2 на 192.168.0.0/24 чтобы разрешить доступ по SSH для всей подсети. |
- | 7. Добавив опцию --dry-run ufw отображает список правил, но не применяет их. Следующий пример показывает применение опции для открытия порта HTTP: | + | 7. Добавление опции **--dry-run** команде **ufw** выведет список правил, но не применит их. Например, далее показано, что было бы применено, если открыть HTTP порт: |
<code>sudo ufw --dry-run allow http</code> | <code>sudo ufw --dry-run allow http</code> | ||
- | + | <code> | |
- | <code>*filter | + | *filter |
:ufw-user-input - [0:0] | :ufw-user-input - [0:0] | ||
:ufw-user-output - [0:0] | :ufw-user-output - [0:0] | ||
Строка 61: | Строка 61: | ||
-A ufw-user-limit-accept -j ACCEPT | -A ufw-user-limit-accept -j ACCEPT | ||
COMMIT | COMMIT | ||
- | Rules updated</code> | + | Rules updated |
- | + | </code> | |
- | 8. ufw можно выключить командой: | + | 8. **ufw** можно выключить командой: |
<code>sudo ufw disable</code> | <code>sudo ufw disable</code> | ||
- | + | 9. Чтобы посмотреть статус сетевой защиты: | |
- | 9. Чтобы посмотреть статус ufw: | + | |
<code>sudo ufw status</code> | <code>sudo ufw status</code> | ||
- | + | 10. Для более полного отображения информации введите: | |
- | 10. Для более полного отображения информации введите: | + | |
<code>sudo ufw status verbose</code> | <code>sudo ufw status verbose</code> | ||
- | + | 11. Для отображения в виде формата **numbered**: | |
- | 11. Для отображения в виде пронумерованного списка: | + | |
<code>sudo ufw status numbered</code> | <code>sudo ufw status numbered</code> | ||
- | Если порт, который вы хотите открыть или закрыть определен в файле /etc/services, вы можете использовать имя порта вместо его номера. В приведенном выше примере попробуйте заменить ssh на 22. | + | <note>Если порт, который вы хотите открыть или закрыть определен в файле /etc/services, вы можете использовать имя порта вместо его номера. В приведенных выше примерах можете заменить **22** на **ssh**.</note> |
Это лишь краткое описание использования ufw. Пожалуйста обратитесь к странице man ufw для более подробной информации. | Это лишь краткое описание использования ufw. Пожалуйста обратитесь к странице man ufw для более подробной информации. | ||
Строка 81: | Строка 78: | ||
===Интеграция Приложений в ufw=== | ===Интеграция Приложений в ufw=== | ||
- | Приложения, открывающие порты могут включать профиль ufw, который детально описывает порты, необходимые этому приложению для корректной работы. Файлы профилей находятся в /etc/ufw/applications.d, и могут быть отредактированы если порты были изменены. | + | Приложения, которые открывают порты, можно включать в профили ufw, которые детализируют какие порты необходимы этому приложению для корректной работы. Профили содержатся в /etc/ufw/applications.d, и могут быть отредактированы, если порты по умолчанию были изменены. |
- | 1. Для просмотра доступных профилей введите следующую команду в терминале: | + | 1. Чтобы посмотреть для каких приложений установлен профиль введите следующую команду в терминале: |
<code>sudo ufw app list</code> | <code>sudo ufw app list</code> | ||
- | + | 2. Аналогично, разрешить трафик по порту, используя профиль приложения, можно следующей командой: | |
- | 2. Подобной командой для разрешения трафика на порт может служить следующий пример: | + | |
<code>sudo ufw allow Samba</code> | <code>sudo ufw allow Samba</code> | ||
- | + | 3. Также доступен расширенный синтаксис: | |
- | 3. Доступен также расширенный синтаксис: | + | |
<code>ufw allow from 192.168.0.0/24 to any app Samba</code> | <code>ufw allow from 192.168.0.0/24 to any app Samba</code> | ||
- | + | Замените **Samba** и **192.168.0.0/24** на используемый вами профиль приложения и IP диапазон вашей сети. | |
- | Замените Samba и 192.168.0.0/24 на профиль вашего приложения и диапазон необходимых ip-адресов. | + | <note>Нет необходимости в определении протокола, поскольку эта информация детализирована в профиле. Также обратите внимание, что имя **app** заменило номер **port**.</note> |
- | + | 4. Для просмотра деталей какие порты, протоколы и пр. определены для приложения введите: | |
- | <note>В определении протокола нет необходимости, так как эта информация детально описана в профиле. Также обратите внимание, что номер порта будет заменен на имя приложения. | + | |
- | </note> | + | |
- | | + | |
- | 4. Для детальной информации о портах, протоколах, и т.п. необходимых для приложения введите: | + | |
<code>sudo ufw app info Samba</code> | <code>sudo ufw app info Samba</code> | ||
- | Не все приложения, которые запрашивают открытие порта поставляются с профилем ufw, но если вы хотите чтобы профиль был включен в пакет приложения, сообщите об ошибке на сайте Launchpad. | + | Не для всех приложений, которые требуют открытие сетевого порта, поставляется профиль ufw, но если у вас есть профиль для приложения, и вы хотите чтобы этот файл был включен в пакет приложения, зарегистрируйте ошибку о пакете на сайте Launchpad. |
<code>ubuntu-bug nameofpackage</code> | <code>ubuntu-bug nameofpackage</code> | ||
Строка 114: | Строка 104: | ||
Эти правила разбиты на два разных файла команд, одни должны быть выполнены ufw перед списком правил, а другие выполняются после списка правил. | Эти правила разбиты на два разных файла команд, одни должны быть выполнены ufw перед списком правил, а другие выполняются после списка правил. | ||
- | 1. Во-первых, в ufw должно быть активировано перенаправление. Для этого нужно изменить конфигурацию двух файлов, в /etc/default/ufw измените DEFAULT_FORWARD_POLICY на “ACCEPT”: | + | 1. Во-первых, в ufw должно быть активировано перенаправление. Для этого нужно изменить конфигурацию двух файлов, в /etc/default/ufw измените DEFAULT_FORWARD_POLICY на “ACCEPT”: |
<code>DEFAULT_FORWARD_POLICY="ACCEPT"</code> | <code>DEFAULT_FORWARD_POLICY="ACCEPT"</code> | ||
Строка 123: | Строка 113: | ||
<code>net/ipv6/conf/default/forwarding=1</code> | <code>net/ipv6/conf/default/forwarding=1</code> | ||
- | 2. Теперь добавим правила в файл /etc/ufw/before.rules. Правила по умолчанию описаны лишь в таблице //filter//, а для работы маскировки нам нужно отредактировать таблицу //nat//. Добавьте следующие строки в начало файла конфигурации сразу после заголовка с комментарием: | + | 2. Теперь добавим правила в файл /etc/ufw/before.rules. Правила по умолчанию описаны лишь в таблице //filter//, а для работы маскировки нам нужно отредактировать таблицу //nat//. Добавьте следующие строки в начало файла конфигурации сразу после заголовка с комментарием: |
- | <code># nat Table rules | + | <code> |
+ | # nat Table rules | ||
*nat | *nat | ||
:POSTROUTING ACCEPT [0:0] | :POSTROUTING ACCEPT [0:0] | ||
Строка 133: | Строка 124: | ||
# don't delete the 'COMMIT' line or these nat table rules won't be processed | # don't delete the 'COMMIT' line or these nat table rules won't be processed | ||
- | COMMIT</code> | + | COMMIT |
+ | </code> | ||
- | Комментарий (COMMIT) не обязателен, но как правило это принято делать для корректной работы. Также при изменении каких-либо правил в файле /etc/ufw убедитесь что строки комментария являются последними для каждой измененной таблицы: | + | Комментарии не обязательны, но считается хорошим тоном документировать свою конфигурацию. Также при изменении каких-либо **rules** файлов в каталоге /etc/ufw, убедитесь, что данные строки являются последними для каждой измененной таблицы: |
- | <code># don't delete the 'COMMIT' line or these rules won't be processed | + | <code> |
- | COMMIT</code> | + | # don't delete the 'COMMIT' line or these rules won't be processed |
- | + | COMMIT | |
- | For each Table a corresponding COMMIT statement is required. In these examples only the nat and filter tables are shown, but you can also add rules for the raw and mangle tables. | + | </code> |
- | In the above example replace eth0, eth1, and 192.168.0.0/24 with the appropriate interfaces and IP range for your network. | + | Для каждой таблицы обязательно присутствие соответствующего ей оператора **COMMIT** (применение изменений). В данных примерах показаны только таблицы nat и filter, но вы можете также добавлять правила для таблиц raw и mangle. |
- | Finally, disable and re-enable ufw to apply the changes: | + | <note>В примерах выше замените **eth0**, **eth1** и **192.168.0.0/24** на соответствующие интерфейсы и IP диапазон вашей сети.</note> |
- | sudo ufw disable && sudo ufw enable | + | 3. Наконец, выключите и повторно включите ufw для применения изменений: |
+ | <code>sudo ufw disable && sudo ufw enable</code> | ||
- | IP Masquerading should now be enabled. You can also add any additional FORWARD rules to the /etc/ufw/before.rules. It is recommended that these additional rules be added to the ufw-before-forward chain. | + | IP маскировка теперь должна быть включена. Вы также можете добавить дополнительные правила FORWARD в /etc/ufw/before.rules. Рекомендуется чтобы эти дополнительные правила были добавлены в цепочку/секцию (chain) **ufw-before-forward**. |
===Маскировка iptables=== | ===Маскировка iptables=== | ||
- | iptables can also be used to enable Masquerading. | + | Iptables также может быть использован для маскировки соединений. |
- | Similar to ufw, the first step is to enable IPv4 packet forwarding by editing /etc/sysctl.conf and uncomment the following line | + | 1. Подобно ufw, первым делом нам необходимо включить форвардинг для IPv4 отредактировав следующий файл /etc/sysctl.conf и убрав комментарий со строки: |
+ | <code>net.ipv4.ip_forward=1</code> | ||
- | net.ipv4.ip_forward=1 | + | Если вы хотите включить форвардинг для IPv6 также удалите комментарий: |
+ | <code>net.ipv6.conf.default.forwarding=1</code> | ||
- | If you wish to enable IPv6 forwarding also uncomment: | + | 2. Далее выполните команду sysctl для применения новых настроек в файле конфигурации: |
+ | <code>sudo sysctl -p</code> | ||
- | net.ipv6.conf.default.forwarding=1 | + | 3. Теперь настройка маскировки ip-адреса может быть завершена с выполнением лишь одной команды, которая может немного отличатся в зависимости от вашей конфигурации сети: |
+ | <code>sudo iptables -t nat -A POSTROUTING -s 192.168.0.0/16 -o ppp0 -j MASQUERADE</code> | ||
- | Next, execute the sysctl command to enable the new settings in the configuration file: | + | После выполнения этой команды можно считать, что ваша частная сеть имеет адрес 192.168.0.0/16, а сетевая карта с выходом в Интернет - ppp0. Синтаксис определен следующим образом: |
- | sudo sysctl -p | + | 1. -t nat -- правило применяется к таблице //nat// |
- | IP Masquerading can now be accomplished with a single iptables rule, which may differ slightly based on your network configuration: | + | 2. -A POSTROUTING -- правило добавлено (-A) в цепочку POSTROUTING |
- | sudo iptables -t nat -A POSTROUTING -s 192.168.0.0/16 -o ppp0 -j MASQUERADE | + | 3. -s 192.168.0.0/16 -- правило применено к трафику, исходящему из этого адресного пространства |
- | The above command assumes that your private address space is 192.168.0.0/16 and that your Internet-facing device is ppp0. The syntax is broken down as follows: | + | 4. -o ppp0 -- правило применено к трафику, который необходимо перенаправить через этот интерфейс |
- | -t nat -- the rule is to go into the nat table | + | 5. -j MASQUERADE -- трафик подпадающий под это правило выполняет "прыжок" ("jump") (-j) в цепочку MASQUERADE для дальнейшей манипуляции с ним как описаны выше |
- | -A POSTROUTING -- the rule is to be appended (-A) to the POSTROUTING chain | + | 4. Также каждая цепочка таблицы //filter// (цепочка, где происходит фильтрация большинства пакетов) по умолчанию имеет правило ACCEPT, но если вы настраиваете ваш firewall с целью создания шлюза, вы должны выбрать либо политику DROP либо REJECT, в этом случае ваш "замаскированный" трафик должен быть пропущен через цепочку FORWARD для срабатывания предыдущих правил: |
- | -s 192.168.0.0/16 -- the rule applies to traffic originating from the specified address space | + | <code>sudo iptables -A FORWARD -s 192.168.0.0/16 -o ppp0 -j ACCEPT |
+ | sudo iptables -A FORWARD -d 192.168.0.0/16 -m state \ | ||
+ | --state ESTABLISHED,RELATED -i ppp0 -j ACCEPT</code> | ||
- | -o ppp0 -- the rule applies to traffic scheduled to be routed through the specified network device | + | Вышеперечисленные команды разрешают форвардинг всех соединений из локальной сети в Интернет, а весь трафик относящийся к этим соединениям возвращается к компьютерам, пославшим запрос. |
- | -j MASQUERADE -- traffic matching this rule is to "jump" (-j) to the MASQUERADE target to be manipulated as described above | + | Если вы хотите, чтобы маскировка работала после перезагрузки ПК, отредактируйте файл /etc/rc.local и добавьте туде вышеперечисленные команды. Например, добавьте первую команду без опций фильтрации: |
- | + | <code>iptables -t nat -A POSTROUTING -s 192.168.0.0/16 -o ppp0 -j MASQUERADE</code> | |
- | Also, each chain in the filter table (the default table, and where most or all packet filtering occurs) has a default policy of ACCEPT, but if you are creating a firewall in addition to a gateway device, you may have set the policies to DROP or REJECT, in which case your masqueraded traffic needs to be allowed through the FORWARD chain for the above rule to work: | + | |
- | + | ||
- | sudo iptables -A FORWARD -s 192.168.0.0/16 -o ppp0 -j ACCEPT | + | |
- | sudo iptables -A FORWARD -d 192.168.0.0/16 -m state \ | + | |
- | --state ESTABLISHED,RELATED -i ppp0 -j ACCEPT | + | |
- | + | ||
- | The above commands will allow all connections from your local network to the Internet and all traffic related to those connections to return to the machine that initiated them. | + | |
- | + | ||
- | If you want masquerading to be enabled on reboot, which you probably do, edit /etc/rc.local and add any commands used above. For example add the first command with no filtering: | + | |
- | + | ||
- | iptables -t nat -A POSTROUTING -s 192.168.0.0/16 -o ppp0 -j MASQUERADE | + | |
====Журналы==== | ====Журналы==== | ||
- | Firewall logs are essential for recognizing attacks, troubleshooting your firewall rules, and noticing unusual activity on your network. You must include logging rules in your firewall for them to be generated, though, and logging rules must come before any applicable terminating rule (a rule with a target that decides the fate of the packet, such as ACCEPT, DROP, or REJECT). | + | Журналы firewall крайне необходимы для обнаружения атак, возникающих проблем с правилами, а также обнаружения повышенной активности в вашей сети. В настройках firewall необходимо включить журналирование для правил, которое должно быть указано перед списком правил (правил, которые решают дальнейшую судьбу пакета, такие как ACCEPT, DROP или REJECT). |
- | If you are using ufw, you can turn on logging by entering the following in a terminal: | + | Если вы используете ufw, журналирование можно включить следующей командой: |
+ | <code>sudo ufw logging on</code> | ||
- | sudo ufw logging on | + | Чтобы выключить журналирование в ufw просто замените значение on на off. |
- | To turn logging off in ufw, simply replace on with off in the above command. | + | Для iptables введите: |
+ | <code>sudo iptables -A INPUT -m state --state NEW -p tcp --dport 80 \ | ||
+ | -j LOG --log-prefix "NEW_HTTP_CONN: "</code> | ||
- | If using iptables instead of ufw, enter: | + | В этом случае в начале поступит запрос на порт 80 от компьютера в локальной сети, затем будет сгенерирован файл журнала в dmesg который выгдлядит примерно так (одна строка разделена на три для корректного отображения на экране): |
+ | <code>[4304885.870000] NEW_HTTP_CONN: IN=lo OUT= MAC=00:00:00:00:00:00:00:00:00:00:00:00:08:00 | ||
+ | SRC=127.0.0.1 DST=127.0.0.1 LEN=60 TOS=0x00 PREC=0x00 TTL=64 ID=58288 DF PROTO=TCP | ||
+ | SPT=53981 DPT=80 WINDOW=32767 RES=0x00 SYN URGP=0</code> | ||
- | sudo iptables -A INPUT -m state --state NEW -p tcp --dport 80 \ | + | Этот текст журнала также появится в файле /var/log/messages, /var/log/syslog и /var/log/kern.log. Эти настройки можно изменить отредактировав файл /etc/syslog.conf аналогично или при установке и настройке ulogd, а также используя ULOG вместо LOG. Демон ulogd это пользовательский сервер который слушает инструкции ядра для дальнейшего журналирования, в частности для firewall, и может вести журналирование даже в PostgreSQL или MySQL базы данных. Для того, чтобы легко разобраться в файлах журнала можно использовать их анализаторы, такие как logwatch, fwanalog, fwlogwatch или lire. |
- | -j LOG --log-prefix "NEW_HTTP_CONN: " | + | |
- | A request on port 80 from the local machine, then, would generate a log in dmesg that looks like this (single line split into 3 to fit this document): | + | ====Другие инструменты==== |
- | [4304885.870000] NEW_HTTP_CONN: IN=lo OUT= MAC=00:00:00:00:00:00:00:00:00:00:00:00:08:00 | + | Существует множество утилит для помощи в построении полноценного firewall без углубленных навыков в iptables. |
- | SRC=127.0.0.1 DST=127.0.0.1 LEN=60 TOS=0x00 PREC=0x00 TTL=64 ID=58288 DF PROTO=TCP | + | |
- | SPT=53981 DPT=80 WINDOW=32767 RES=0x00 SYN URGP=0 | + | |
- | + | ||
- | The above log will also appear in /var/log/messages, /var/log/syslog, and /var/log/kern.log. This behavior can be modified by editing /etc/syslog.conf appropriately or by installing and configuring ulogd and using the ULOG target instead of LOG. The ulogd daemon is a userspace server that listens for logging instructions from the kernel specifically for firewalls, and can log to any file you like, or even to a PostgreSQL or MySQL database. Making sense of your firewall logs can be simplified by using a log analyzing tool such as logwatch, fwanalog, fwlogwatch, or lire. | + | |
- | + | ||
- | ====Другие инструменты==== | + | |
- | There are many tools available to help you construct a complete firewall without intimate knowledge of iptables. For the GUI-inclined: | + | Для работы с интерфейсом: |
- | fwbuilder is very powerful and will look familiar to an administrator who has used a commercial firewall utility such as Checkpoint FireWall-1. | + | 1. [[http://www.fwbuilder.org/|fwbuilder]] очень мощная утилита, которая настраивается подобно проприетарным продуктам вроде //Checkpoint FireWall-1//. |
- | If you prefer a command-line tool with plain-text configuration files: | + | Если вы предпочитаете утилиты с поддержкой командной строки и списком файлов конфигураций: |
- | Shorewall is a very powerful solution to help you configure an advanced firewall for any network. | + | 2. [[http://www.shorewall.net/|Shorewall]] - мощное решение, которое поможет вам создать серьезный firewall для любого типа вашей сети. |
====Ссылки==== | ====Ссылки==== | ||
- | The Ubuntu Firewall wiki page contains information on the development of ufw. | + | 1. Вики страница [[https://wiki.ubuntu.com/UncomplicatedFirewall | Ubuntu Firewall]] содержит необходимую информацию о работе над ufw. |
- | Also, the ufw manual page contains some very useful information: man ufw. | + | 2. Также посмотрите man страницу ufw, которая содержит много полезной информации: **man ufw**. |
- | See the packet-filtering-HOWTO for more information on using iptables. | + | 3. Для более подробной информации об использовании iptables смотрите [[http://www.netfilter.org/documentation/HOWTO/packet-filtering-HOWTO.html|packet-filtering-HOWTO]]. |
- | The nat-HOWTO contains further details on masquerading. | + | 4. Руководство [[http://www.netfilter.org/documentation/HOWTO/NAT-HOWTO.html|nat-HOWTO]] содержит полное описание о маскировке соединений. |
- | The IPTables HowTo in the Ubuntu wiki is a great resource. | + | 5. [[https://help.ubuntu.com/community/IptablesHowTo|IPTables HowTo]] Ubuntu Вики также отличный источник. |