Установка и настройка фаервола iptables

Тема в разделе "Linux", создана пользователем oke, 3 апр 2017.

  1. oke

    oke Administrator Команда форума

    iptables - известный и широко распространенный фаервол под Linux. В статье я расскажу как его установить себе на сервер.

    Устанавливаем iptables из репозитория Debian/Ubuntu:

    aptitude install iptables-persistent xtables-addons-dkms

    И так, в системе уже присутствует главный из списка необходимых инструмент — iptables. Но этого недостаточно. Также понадобятся фильтр tarpit и iptables-persistent, чтобы загружать правила при старте системы. Во время установки persistent будет задано два вопроса о сохранении текущих правил. Можно ответить «Да» и тогда в папке /etc/iptables/rules/ будут созданы нужные файлы с правилами, которые мы отредактируем.

    Пример правил:

    *filter
    # Разрешить весь локальный (lo0) трафик и отбрасывать весь трафик на сеть 127/8, который не идет через lo0
    -A INPUT -i lo -j ACCEPT
    -A INPUT ! -i lo -d 127.0.0.0/8 -j REJECT

    # Разрешить все установленные изнутри подключения
    -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

    # Разрешить весь исходящий трафик
    -A OUTPUT -j ACCEPT

    # Открываем порт для доступа к базе MySQL сервера
    -A INPUT -s 80.77.0.0 -p tcp -m state --state NEW -m tcp --dport 3306 -j ACCEPT

    # Разрешить HTTP и HTTPS подключения отовсюду на сервер
    -A INPUT -p tcp --dport 80 -j ACCEPT
    -A INPUT -p tcp --dport 443 -j ACCEPT
    -A INPUT -p tcp --dport 1500 -j ACCEPT

    # pop3, pop3s:
    -A INPUT -p tcp --dport 110 -j ACCEPT
    -A INPUT -p tcp --dport 995 -j ACCEPT

    # imap , imaps:
    -A INPUT -p tcp --dport 143 -j ACCEPT
    -A INPUT -p tcp --dport 993 -j ACCEPT
    -A INPUT -p tcp --dport 25 -j ACCEPT
    -A INPUT -p tcp --dport 465 -j ACCEPT

    #Открываем порт для DNS
    -A INPUT -p tcp -m conntrack --ctstate NEW -m tcp --dport 53 -j ACCEPT
    -A INPUT -p udp -m conntrack --ctstate NEW -m udp --dport 53 -j ACCEPT

    # Открывает порт сервера CS 1.6
    -A INPUT -p udp --dport 27015 -j ACCEPT
    -A INPUT -p udp --dport 27016 -j ACCEPT
    -A INPUT -p udp --dport 27017 -j ACCEPT

    # Разрешить подключения по SSH
    # Номер порта --dport такой же как в /etc/ssh/sshd_config
    -A INPUT -p tcp -m state --state NEW --dport 22 -j ACCEPT

    # Защита сервера SSH от брутфорса
    -A INPUT -p tcp --syn --dport 22 -m recent --name dmitro --set
    -A INPUT -p tcp --syn --dport 22 -m recent --name dmitro --update --seconds 30 --hitcount 3 -j DROP

    # Простая защита от DoS-атаки
    -A INPUT -p tcp -m tcp --tcp-flags SYN,ACK,FIN,RST RST -m limit --limit 1/s -j ACCEPT

    # Защита от спуфинга
    -I INPUT -m conntrack --ctstate NEW,INVALID -p tcp --tcp-flags SYN,ACK SYN,ACK -j REJECT --reject-with tcp-reset

    # Защита от попытки открыть входящее соединение TCP не через SYN
    -I INPUT -m conntrack --ctstate NEW -p tcp ! --syn -j DROP

    # Закрываемся от кривого icmp
    -I INPUT -p icmp -f -j DROP

    # Разрешить пинг
    # заметьте, что блокирование других типов icmp трафика нежелательно
    # удалите -m icmp --icmp-type 8 отсюда чтобы разрешить все виды icmp:
    # https://security.stackexchange.com/questions/22711
    -A INPUT -p icmp -m icmp --icmp-type 8 -j ACCEPT

    # логировать неудачные попытки доступа (доступен через команду 'dmesg')
    -A INPUT -m limit --limit 5/min -j LOG --log-prefix "iptables denied: " --log-level 7

    # Отбрасывать все входящие пакеты. по умолчанию все разрешается, что не хорошо:
    -A INPUT -j REJECT
    -A FORWARD -j REJECT

    COMMIT
     

Поделиться этой страницей