Изучение Firewall
Нет нужды объяснять интерес, который представляет Firewall для любого имеющего доступ к интернету человека. Чего стоит, к примеру, возможность блокировать рекламу, которая лезет в наш компьютер с любого коммерческого сайта. Да и любителей пошалить в интернете не мало…
К сожалению в Linux IPCHAINS-HOWTO упущено несколько деталей, показавшихся мне крайне важными. Поэтому я решил написать несколько простых тестов, позволяющих быстро получить набор минимальных знаний необходимых для построения Firewall. Этот документ ни в коем случае не заменяет чтение Linux IPCHAINS-HOWTO, но дополняет его, поэтому я не буду останавливаться на перекомпилировании ядра и объяснении команд используемых ipchains.
Условия проведения тестов
Чтобы разобраться с принципом работы Firewall я пользовался следующей конфигурацией:
| | ---------- ----------------- ISP |-----ppp0| My Host |----------| Internal Server | | ---------- ----------------- | 192.168.1.10 192.168.1.1 |
При создании файла конфигурации и работе с firewall необходимо иметь ввиду следующее:
1. Если команда
ipchains -L
не выводит на экран никаких результатов, то скорее всего проблема в IP адресах, которые не удается разрешить. Например /sbin/ipchains -A output -j REJECT -p tcp -s 0.0.0.0/0 -d 63.160.54.0/24, если ваш компьютер не подсоединен к интернету, заблокирует вывод результатов. Возможной альтернативой в этом случае может быть команда
ipchains -nL
2. Рассматриваемый IP-пакет сравнивается с установленными правилами по порядку, то есть правило:
/sbin/ipchains -A output -j REJECT -d 192.168.1.1
стоящее после строк
/sbin/ipchains -A input -p tcp -s 0/0 80 -d 192.168.1.10 -j ACCEPT
/sbin/ipchains -A output -p tcp -s 192.168.1.10 -d 0/0 80 -j ACCEPT
Не блокирует пакеты веб-сервера установленного на компьютере 192.168.1.1, а установленное перед ними — блокирует.
3. От перестановки слов внутри правила результат не меняется, то есть правило:
/sbin/ipchains -A output -d 192.168.1.1 -j DENY
и правило:
/sbin/ipchains -A output -j DENY -d 192.168.1.1
являются равными.
Тесты Firewall
ТЕСТ #1
Создайте файл simple.rc.firewall
, сделайте его выполнимым. Этот скрипт устанавливает значения правил по умолчанию.
#!/bin/sh
#2.2.x+ kernels with IPCHAINS ONLY
#
echo " - Setting Policies: IN/OUT is ACCEPT; FWD is reject (poor security; great functionality)"
/sbin/ipchains -P input ACCEPT
/sbin/ipchains -P output ACCEPT
/sbin/ipchains -P forward REJECT
echo " - Flushing any old rulesets"
/sbin/ipchains -F input
/sbin/ipchains -F output
/sbin/ipchains -F forward
echo "simple.rc.firewall done."
Выполните скрипт. С компьютера 192.168.1.10 Вы должны «видеть» интернет и внутренний сервер 192.168.1.1
Теперь с командной строки введите команду:
/sbin/ipchains -A output -d 192.168.1.1 -j DENY
Попробуйте «пингнуть» внутренний сервер. Результат должен быть следующий:
station:~# ping -c 1 192.168.1.1
PING 192.168.1.1 (192.168.1.1): 56 data bytes
ping: sendto: Operation not permitted
ping: wrote 192.168.1.1 64 chars, ret=-1
Наш внутренний сервер стал недосягаемым
ТЕСТ #2
Теперь попробуем скрипт, использующий принцип «запрещено все, что не разрешено».
#!/bin/sh
#2.2.x+ kernels with IPCHAINS ONLY
#
echo " - Setting Policies: IN/OUT, FWD is reject (great security)"
/sbin/ipchains -P input REJECT
/sbin/ipchains -P output REJECT
/sbin/ipchains -P forward REJECT
echo " - Flushing any old rulesets"
/sbin/ipchains -F input
/sbin/ipchains -F output
/sbin/ipchains -F forward
echo "strong.rc.firewall done."
Удостоверьтесь что, после выполнения вышеприведённого скрипта внешний мир оказался недосягаем.
Добавьте в конце скрипта:
/sbin/ipchains -A input -j ACCEPT -p icmp -s 0.0.0.0/0 -d 192.168.1.10
/sbin/ipchains -A output -j ACCEPT -p icmp -s 192.168.1.10 -d 0.0.0.0/0
И Вы сможете делать «пинг» внутреннего сервера.
Вставьте перед этими строчками
/sbin/ipchains -A output -d 192.168.1.1 -j DENY
И сервер снова станет недосягаемым.
Теперь попробуйте переместить эту строку в конец скрипта и Вы обнаружите, что ping работает как ни в чем не бывало.