Сегодня в статье поговорим о защите вашей операционной системы Linux при помощи встроенной утилиты iptables
Вывод списка правил iptables
Чтобы узнать все активные правила в iptables, откройте терминал и введите следующую команду:
sudo iptables -L
Если никаких правил не существует (они не добавлены), вы увидите подобный вывод:
На картинке выше вы видите, что в iptables существуют 3 цепочки, которые называются INPUT, FORWARD, OUTPUT и никакие правила для них не применяются.
Введите следующую команду чтобы узнать статус цепочек вашего межсетевого экрана iptables:
sudo iptables -S
Как удалять правила в iptables
Чтобы удалить все правила из iptables, введите следующую команду:
sudo iptables -F
Если вы хотите удалить только цепочку INPUT или любую другую цепочку, используйте следующие команды:
sudo iptables -F INPUT
sudo iptables -F OUTPUT
sudo iptables -F FORWARD
Цепочки ACCEPT или DROP
Чтобы принимать или откидывать отдельные цепочки, введите одну из следующих команд в терминале, которая соответствует вашим требованиям:
iptables --policy INPUT DROP
Правило выше не разрешит принимать любой трафик на этом сервере.
Чтобы вернуть его назад к ACCEPT, сделайте следующее:
iptables --policy INPUT ACCEPT
Тоже самое и для других цепочек:
iptables --policy OUTPUT DROP
iptables --policy FORWARD DROP
Замечание: По умолчанию, все цепочки iptables находятся в режиме ACCEPT.
Разрешаем порты
Если у вас на сервере запущен веб-сервер, тогда вы должны разрешить 80 порт вашему межсетевому экрану для того, чтобы сервер мог его прослушивать или отвечать на него. Сделаем это с помощью следующей команды:
sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT
В команде выше:
- -A означает добавление нового правила в список iptables.
- INPUT значит, что изменения касаются цепочки INPUT.
- -p — указывает на протокол. В нашем случае, на TCP.
- —dport — порт назначения. По умолчанию любой веб-сервер запущен на 80-ом порте.
Точно также вы можете разрешить порт SSH:
sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT
По умолчанию, SSH запущен на 22 порте.
Замечание: Пример хорошей практики — не запускать SSH на порте по умолчанию. Сделайте это на другом порте! Для этого откройте файл /etc/ssh/sshd_config в своем любимом редакторе и измените 22 на любой другой свободный номер порта.
Блокирование портов
Чтобы заблокировать порт 1080, вводим:
sudo iptables -A INPUT -p tcp --dport 1080 -j DROP
Если вы хотите заблокировать возможность подключаться по SSH с вашего сервера к другому хосту/серверу, введите следующую команду:
sudo iptables -A OUTPUT -p tcp --dport 22 -j DROP
Делая это, никто не сможет использовать ваш сервер для старта SSH подключения. Цепочка OUPUT будет фильтровать, а DROP — сбрасывать любое исходящее TCP подключение к другим хостам.
Разрешаем IP-адреса и порты
Делаем это с помощью команды:
sudo iptables -A INPUT -p tcp -s 0/0 --dport 22 -j ACCEPT
Правило -s 0/0 разрешает любой IP-адрес источника.
Если вы хотите разрешить определенный IP-адрес, используйте эту команду:
sudo iptables -A INPUT -p tcp -s 10.10.10.10/32 --dport 22 -j ACCEPT
В примере выше, вы разрешаете только IP-адресу 10.10.10.10 подключаться к порту SSH. Остальные IP-адреса не смогут этого сделать.
Если вы хотите заблокировать IP-адрес, измените ACCEPT на DROP таким образом:
sudo iptables -A INPUT -p tcp -s 10.10.10.0/24 --dport 22 -j DROP
Эта команда не разрешит подключаться к порту 22 всем устройствам в сети 10.10.10.0.
Блокирование ICMP
Если вам нужно заблокировать запрос ICMP (ping) от и к вашему серверу, введите следующие команды:
sudo iptables -A OUTPUT -p icmp --icmp-type 8 -j DROP
Эта команда заблокирует отправку ICMP пакетов к другому хосту. Попробуйте пропинговать google.com, у вас ничего не получится!
Чтобы заблокировать входящий ping запрос, введите следующие команды в терминале:
sudo iptables -I INPUT -p icmp --icmp-type 8 -j DROP
Теперь сервер не будет отвечать на ping запросы.
Как предотвращать DDoS атаки с помощью iptables
Я уверен, что вы все знаете что такое DDoS. Чтобы не допустить этого, воспользуйтесь следующей командой:
iptables -A INPUT -p tcp --dport 80 -m limit --limit 20/minute --limit-burst 100 -j ACCEPT
, где
- —limit 20/minute — максимальная средняя частота положительных результатов. После числа можно указывать единицы: `/second’, `/minute’, `/hour’, `/day’; значение по умолчанию — 3/hour. Лимит настраивайте в зависимости от своих требований.
- —limit-burst number — ограничивает исходное число пропускаемых пакетов: это число увеличивается на единицу каждый раз когда ограничение на частоту положительных результатов не достигается. Это происходит столько раз, сколько указано в данном параметре. Значение по умолчанию — 5.
Блокировка сканирования порта используя iptables
Хакеры так и ждут возможности просканировать открытые порты на вашем сервере и взломать систему безопасности. Чтобы не допустить этого безобразия:
sudo iptables -N block-scan
sudo iptables -A block-scan -p tcp —tcp-flags SYN,ACK,FIN,RST -m limit —limit 1/s -j RETURN
sudo iptables -A block-scan -j DROP
где block-scan — это название новой цепочки.
Надеюсь, что этот пост был максимально полезным для вас!
[endtxt]