Как настроить 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
Все, теперь девственности портов ничего не угрожает.
Примечание
В новых версиях Ubuntu и Debian служба iptables-persistent может называться netfilter-persistent.