Как настроить iptables для защиты компьютера с Linux от взлома

Хотя Linux славится своей надежностью и безопасностью, светить открытыми портами в сеть, где полно каккеров и прочих извращенцев — не самая хорошая идея. Рассмотрим как обнести все потенциально уязвимые отверстия огненной стеной.

[TOC Настройка IPTables]

Что такое iptables

Для этих целей добрые программисты запилили в Линукс фаейрвол iptables. Он быстр, надежен и бесплатен, однако, мало кто им пользуется по причине сложной и запутанной настройки. Интернет-издание Либератум первым в мире предлагает простой конфиг. Скописатил, запустил, забыл.

Как сохранять настройки iptables в Ubuntu и Debian

Но сначала небольшое отступление. Программа iptables устроена таким хитрым образом, что все сделанные настройки слетят при первой же перезагрузке. Поэтому неопытные админы стараются сохранить настройки в .sh-файле, а сами файлы раскидывают где попало. Мы не будем уподобляться этим наивным слепцам и сделаем все правильно. Есть программа, предоставляющая для iptables стандартный интерфейс Linux-сервиса и умеющая сохранять и восстанавливать правила. Имя ей — iptables-persistent.


apt-get install iptables-persistent

Вот теперь можно переходить к созданию правил для файервола. Все делается от имени суперпользователя.

Базовая настройка iptables


iptables -F
iptables -A INPUT -p tcp --tcp-flags ALL NONE -j DROP
iptables -A INPUT -p tcp ! --syn -m state --state NEW -j DROP
iptables -A INPUT -p tcp --tcp-flags ALL ALL -j DROP
iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -p tcp -m tcp --dport 22 -j ACCEPT
iptables -I INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -P OUTPUT ACCEPT
iptables -P INPUT DROP

Этот конфиг предполагает следующее поведение:

  • все входящие соединения выпиливаются — это для каккеров;
  • все исходящие соединения устанавливаются — это для хозяина системы;
  • пропускаются все уже установленные соединения;
  • пропускается всё в обоих направлениях на интерфейсе lo;
  • выпиливаются нулевые и syn-flood-пакеты — от пионеров;
  • пропускаются входящие соединения на 22й порт (это для того, чтобы можно было зайти по ssh, а также для того, чтобы продемонстрировать как пользователь может самостоятельно открыть любой порт — нужно скопировать эту строку и заменить номер порта).

Теперь проверим, правильно ли iptables понял наши указания:

iptables -L -v

Получаем следующую картину:

iptables -L -v
Chain INPUT (policy DROP 3710 packets, 163K bytes)
pkts bytes target prot opt in out source destination
851 77161 ACCEPT all -- any any anywhere anywhere state RELATED,ESTABLISHED
0 0 DROP tcp -- any any anywhere anywhere tcpflags: FIN,SYN,RST,PSH,ACK,URG/NONE
2 80 DROP tcp -- any any anywhere anywhere tcpflags:! FIN,SYN,RST,ACK/SYN state NEW
0 0 DROP tcp -- any any anywhere anywhere tcpflags: FIN,SYN,RST,PSH,ACK,URG/FIN,SYN,RST,PSH,ACK,URG
3 180 ACCEPT all -- lo any anywhere anywhere
1 52 ACCEPT tcp -- any any anywhere anywhere tcp dpt:22

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination

Chain OUTPUT (policy ACCEPT 1017 packets, 424K bytes)
pkts bytes target prot opt in out source destination

Да, все верно. И что интересно, iptables уже показывает сколько пакетов удалось отбросить — policy DROP 3710 packets. То есть, не успели мы еще настроить всё как следует, а компьютер уже попытались отыметь каккеры — какое всё же опасное место этот ваш интернет!

Netfilter Persistent

Теперь сохраняем правила для последующего употребления:

iptables-save > /etc/iptables/rules.v4

И перезапустим сервис:

service iptables-persistent restart

Все, теперь девственности портов ничего не угрожает.