Сходство между ipchains и iptables прослеживается уже при взгляде на параметры:
□
– A цепочка правило
— добавить правило в конец цепочки. В качестве параметра указывается имя цепочки
INPUT
,
OUTPUT
или
FORWARD
;
□
– D цепочка номер
— удалить правило с указанным номером из заданной цепочки;
□
– R цепочка номер правило
— заменить правило с указанным номером в цепочке;
□
– I цепочка номер
правило
— вставить правило в указанную первым аргументом цепочку под номером, заданным во втором параметре. Если номер равен 1, то правило станет первым в цепочке;
□
– L цепочка
— просмотреть содержимое указанной цепочки;
□
– F цепочка
— удалить все правила из цепочки;
□
– р протокол
— определяет протокол, на который воздействует правило;
□
– i интерфейс
— определяет сетевой интерфейс, с которого данные были получены. Здесь можно использовать
INPUT
,
FORWARD
или
PREROUTING
;
□
– o интерфейс
— задает интерфейс, на который направляется пакет. Здесь можно указывать
OUTPUT
,
FORWARD
или
POSTROUTING
;
□
– j действие
— операция, которая должна быть выполнена над пакетом. В качестве аргументов можно указать следующие значения (рассмотрим только основные):
•
LOG
— поместить в журнал запись о получении пакета;
•
REJECT
— отправителю будет направлено сообщение об ошибке;
•
DROP
— удалить пакет;
•
BLOCK
— блокировать пакеты;
□
– s адрес
— IP-адрес отправителя пакета. Как и в случае с iptables, после адреса можно задать маску в виде
/mask
и знак отрицания "!", что будет соответствовать любым адресам, кроме указанных;
□
– d адрес
— адрес назначения пакета.
Как видите, большинство параметров абсолютно идентичны тем, что мы рассматривали для программы ipchains. Но есть важные и очень мощные отличия. Например, с помощью ключей
– о
и
– i
очень просто указывать, с какого на какой интерфейс направляется пакет. Из-за сходства конфигурирования сервисов ipchains и iptables в практической части мы не будем тратить драгоценное место книги, и кратко рассмотрим создание правил.
В данном обзоре ключей я затронул только основы, но если вы посмотрите файл документации, то увидите еще много вариантов работы с ключом
– j
, т.е. существуют большие возможности по управлению пакетом, если он соответствует правилам.
Настройка цепочек
iptables
не сильно отличается от
ipchains
. Начать формирование цепочки нужно с очистки всего содержимого. Двигаться необходимо от полного запрета и разрешать только то, что не нанесет вреда серверу. Сервисы, которые могут оказаться опасными, должны быть доступны только тем, кому это необходимо, или тем, кому вы доверяете. Хотя, в нашем деле полагаться ни на кого нельзя. Ваш друг может, не желая того, раскрыть секретную информацию злоумышленнику, или данные могут быть просто украдены, и тогда доверчивость сыграет с вами злую шутку.
Для сохранения изменений в iptables также надо выполнить специализированную команду:
service iptables save
4.12.2.
Переадресация
Для разрешения переадресации с помощью iptables нужно выполнить следующую команду:
iptables -A FORWARD -o ppp0 -j MASQUERADE
В данной строке позволяется переадресация на интерфейс ppp0. С помощью параметра
– j
мы требуем прятать IP-адрес отправителя, т.е. включаем маскарадинг.
Если вы используете трансляцию сетевых адресов (NAT, Network Address Translation), то команда может выглядеть следующим образом:
iptables -t nat -A FORWARD -o ppp0 -j MASQUERADE
Ключ
– t nat
указывает на необходимость загрузить модуль
iptable_nat
. Если он не загружен, то это легко сделать вручную с помощью следующей команды:
modprobe iptable_nat
iptable_nat
— это модуль ядра, который позволяет сетевому экрану работать с NAT.
4.12.3. Примеры конфигурирования iptables
Я не буду подробно останавливаться на описании различных запретов, потому что мы о них говорили при рассмотрении программы ipchains. Мы очень коротко рассмотрим создание различных правил.
Запрет любых обращений будет выглядеть следующим образом:
iptables -P INPUT DROP
Теперь все входящие пакеты будут удаляться. Как и в случае с программой ipchains, именно с этой команды нужно начинать конфигурирование iptables. Обратите внимание, что в правиле используется ключ
– P
, позволяющий задать значение по умолчанию для данной цепочки. Если фильтр добавить с помощью ключа -А, то вы можете запретить абсолютно любые подключения.
Некоторые специалисты по безопасности рекомендуют журналировать обращения, добавив в сетевой экран фильтр:
iptables -A INPUT -j LOG
Я бы не рекомендовал это делать. У публичных серверов за день происходит несколько сотен, а то и тысяч сканирований портов. Если обращать внимание на каждую такую попытку, вам придется устанавливать на сервер слишком большие жесткие диски для хранения журналов. А ведь если диск будет заполнен, то система выйдет из строя. Таким образом, хакер может просто направить бесконечные обращения на запрещенный порт и через некоторое время добиться удачно завершенной DoS-атаки.
Следующая команда создает фильтр, по которому запрещается принимать эхо-запросы от любых компьютеров:
iptables -A INPUT -s 0/0 -d localhost \
-p icmp --icmp-type echo-request -j DROP
Как видите, создание фильтра с помощью iptables не сильно отличается от аналогичной процедуры в ipchains.
Следующая команда запрещает доступ к FTP-порту:
iptables -A INPUT -s 0/0 -d localhost \
-p tcp --dport 21 -j DROP
Чтобы запретить доступ с определенного интерфейса, добавим ключ
– i
и укажем интерфейс eth0:
iptables -A INPUT -i eth0 -s 0/0 -d localhost \
-p tcp --dport 21 -j DROP
Теперь запретим исходящие пакеты с 21 порта. Для этого используем команду:
iptables -A OUTPUT -i eth0 -s localhost -d 0/0 \
-p tcp --dport 21 -j DROP
Очень мощной особенностью iptables является возможность проверки содержимого пакетов. Это очень удобно, например, для фильтрации Web-запросов.