Firewall Сравнение версий

Различия

Здесь показаны различия между двумя версиями данной страницы.

Ссылка на это сравнение

Предыдущая версия справа и слева Предыдущая версия
Следующая версия
Предыдущая версия
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 eth0eth1, and 192.168.0.0/​24 with the appropriate interfaces and IP range for your network.+Для каждой таблицы обязательно присутствие соответствующего ей оператора **COMMIT** (применение изменений). В данных примерах показаны только таблицы nat и filterно вы можете также добавлять правила для таблиц raw и mangle.
  
-    Finallydisable 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 enabledYou 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>​
  
-    Nextexecute 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. -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 ​(-Ato 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 rebootwhich you probably doedit /​etc/​rc.local ​and add any commands used aboveFor 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 ​rulesand noticing unusual activity on your networkYou must include logging rules in your firewall ​for them to be generatedthough, and logging rules must come before any applicable terminating rule (a rule with a target that decides the fate of the packetsuch 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 ufwenter:+В этом случае в начале поступит запрос на порт 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 ​Вики также отличный источник.