— правило проверяет, чтобы получателем был порт 80 (или его имя web) на сервере с адресом 192.168.77.1. В данном случае этот IP принадлежит моему серверу. Это значит, что я разрешил входящие пакеты на 80 порт своего компьютера. Адрес отправителя в правиле не указан, а значит, может быть любым;
□
– j ACCEPT
— опция устанавливает разрешение. Если пакет соответствует правилам, заданным предыдущими ключами (в данном случае проверяется адрес и порт назначения и протокол), то он будет пропущен.
В соответствии с первой строкой посылать на сервер запросы разрешается всем. Но Web-сервер
должен иметь возможность возвращать страницы на запросы клиентов. Для этого нужно открыть 80 порт моего сервера (192.168.77.1) для всех исходящих пакетов. Именно это делает вторая строка.
Выполните команду
ipchains -L
, и в результате вы должны увидеть следующее содержимое всех ваших цепочек:
Chain input (policy DENY):
target prot opt source destination ports
ACCEPT tcp ------ anywhere flenovm.ru any -> http
Chain forward (policy DENY):
Chain output (policy DENY):
target prot opt source destination ports
ACCEPT tcp ------ flenovm.ru anywhere http -> any
Chain icmp (0 references):
В цепочках input и output появилось по одной строке. Обратите внимание, что в колонках
source
и
destination
обеих цепочек IP-адрес заменился на доменное имя моего компьютера
flenovm.ru
. Если сервер может определить имя, то он делает такую подмену. Посмотрите на колонку
ports
, здесь номер порта 80 заменен на http.
Я советую вам внимательно проанализировать созданный нами список фильтров, чтобы вы четко понимали каждую его колонку. Рассмотрим структуру строк на примере цепочки input:
target prot opt source destination ports
ACCEPT tcp ------ anywhere flenottro.ru any -> http
Первая строка — имена столбцов, а вторая — это фильтр, содержащий реальные значения. Здесь у нас 6 колонок:
□
target
— действие, которое будет выполняться, если пакет удовлетворяет фильтру. В нашем случае стоит
ACCEPT
, т.е. пропустить дальше, в противном случае пакет уничтожается;
□
prot
— протокол, в данном случае
tcp
;
□
opt
— дополнительные опции. Мы их не указывали, поэтому здесь стоят прочерки;
□
source
— источник пакета. Слово "anywhere" указывает на то, что посылка может быть от любого компьютера;
□
destination
— адресат. Здесь может быть имя компьютера или его IP-адрес;
□
ports
— порт, указывается в виде
источник -> назначение
. В данном случае у источника может быть любой порт (используется слово any), а пункт назначения должен работать только через http (80 порт).
Как это часто бывает, Web-сервер должен кто-то обновлять, и обычно это делается через FTP-сервис. Всем доступ открывать нельзя, поэтому пропишем правило, по которому подключаться к FTP-серверу (21 порт) сможет только один компьютер с адресом 192.168.77.10. Для этого выполняем следующие команды:
ipchains -I input 1 -р tcp -d 192.168.77.1 21 \
-s 192.168.77.10 -j ACCEPT
ipchains -I output 1 -p tcp -s 192.168.77.1 21 \
-d 192.168.77.10 -j ACCEPT
В
данном примере пропускаются пакеты, входящие на 21 порт сервера с адресом 192.168.77.1 с любого порта компьютера 192.168.77.10. Вторая строка разрешает исходящие пакеты с 21 порта сервера 192.168.77.1 на компьютер клиента с адресом 192.168.77.10.
Если у вас настроен FTP-сервер и вы сейчас к нему подключитесь, то не увидите файлов и не сможете работать. В отличие от Web-сервера протокол FTP требует для работы два порта: 21 (ftp-порт для передачи команд) и 20 (ftp-data порт для обмена данными). Поэтому нужно открыть доступ и к 20 порту:
ipchains -I input 1 -р tcp -d 192.168.77.1 20 \
-s 192.168.77.10 -j ACCEPT
ipchains -I output 1 -p tcp -s 192.168.77.1 20 \
-d 192.168.77.10 -j ACCEPT
Теперь компьютер с адресом 192.168.77.10 имеет полноценный доступ к FTP-сервису, а для всех остальных он недоступен. Сканирование сервера с любого компьютера вашей сети покажет открытым только 80 порт, и лишь с компьютера с IP 192.168.77.10 можно будет увидеть 21 и 80 порты.
Выполните команду
ipchains -L
, чтобы просмотреть текущее состояние ваших цепочек. Вы должны увидеть примерно следующий результат:
Chain input (policy DENY):
target prot opt source Destination ports
ACCEPT tcp ------ 192.168.77.10 flenovm.ru any -> ftp-data
ACCEPT tcp ------ 192.168.77.10 flenovm.ru any -> ftp
ACCEPT tcp ------ anywhere flenovm.ru any -> http
Chain forward (policy DENY):
Chain output (policy DENY):
target prot opt source destination ports
ACCEPT tcp ------ flenovm.ru 192.168.77.10 ftp-data -> any
ACCEPT tcp ------ flenovm.ru 192.168.77.10 ftp -> any
ACCEPT tcp ------ flenovm.ru anywhere http -> any
Chain icmp (0 references):
Через фильтры, описанные в этом разделе, пропускаются любые пакеты, вне зависимости от интерфейса. В большинстве случаев это оправдано, но петля (loopback, всегда указывает на вашу машину), чаще всего, не нуждается в защите. Ее можно использовать только локально, и ни один хакер не сможет подключиться через этот виртуальный интерфейс удаленно. Вполне логичным будет разрешить все пакеты через loopback:
ipchains -A input -i lo -j ACCEPT
ipchains -A output -i lo -j ACCEPT
Большинство администраторов не любят открывать полный доступ через loopback, потому что политики внешнего и виртуального интерфейсов будут различаться. В этом случае тестирование сетевых программ усложняется. Проверив программу через
lo
, нет гарантии, что она будет функционировать с удаленными подключениями, ведь там могут помешать нормальной работе фильтры сетевого экрана.