Iptables — это приложение/программа, которая позволяет настраивать предоставленный ядром Linux межсетевой экран, в котором пользователь имеет возможность добавлять или удалять соответствующие его требованиям правила безопасности.
Iptables используется для IPv4, ip6tables — для IPv6.
Обычно, правила iptables настраиваются системным администратором либо аналитиком или IT менеджером.
Важно: чтобы применять правила iptables, нужны root-права.
Установка iptables
Сегодня iptables встраивается в каждое ядро Linux и на каждом известном линуксовом дистрибутиве можно найти его пребилд. В большинстве линуксовых систем iptables установлена в папку /usr/sbin/iptables. Еще ее можно найти в /sbin/iptables, но желаемое расположение остается в папке /usr/sbin.
Установка в Ubuntu или Debian:
1 |
apt-get install iptables |
В CentOS:
1 |
sudo yum install iptables-services |
В RHEL:
1 |
sudo yum install iptables |
Версии iptables
Чтобы узнать версию установленного iptables, введите эту команду в терминале:
1 |
sudo iptables --version |
Как запустить и остановить межсетевой экран iptables
Чтобы остановить iptables в OpenSUSE, введите эту команду:
1 |
sudo /sbin/rcSuSEfirewall2 stop |
Запустить его снова:
1 |
sudo /sbin/rcSuSEfirewall2 start |
Для Ubuntu:
1 |
sudo service ufw stop |
1 |
sudo service ufw start |
Для Debian & RHEL:
1 |
sudo/etc/init.d/iptables stop |
1 |
sudo /etc/init.d/iptables start |
Для CentOS:
1 |
sudo service iptables stop |
1 |
sudo service iptables start |
Вывод списка правил iptables
Чтобы узнать все активные правила в iptables, откройте терминал и введите следующую команду:
1 |
sudo iptables -L |
Если никаких правил не существует (они не добавлены), вы увидите подобный вывод:
На картинке выше вы видите, что в iptables существуют 3 цепочки, которые называются INPUT, FORWARD, OUTPUT и никакие правила для них не применяются.
Введите следующую команду чтобы узнать статус цепочек вашего межсетевого экрана iptables:
1 |
sudo iptables -S |
Как удалять правила в iptables
Чтобы удалить все правила из iptables, введите следующую команду:
1 |
sudo iptables -F |
Если вы хотите удалить только цепочку INPUT или любую другую цепочку, используйте следующие команды:
1 |
sudo iptables -F INPUT |
1 |
sudo iptables -F OUTPUT |
1 |
sudo iptables -F FORWARD |
Цепочки ACCEPT или DROP
Чтобы принимать или откидывать отдельные цепочки, введите одну из следующих команд в терминале, которая соответствует вашим требованиям:
1 |
iptables --policy INPUT DROP |
Правило выше не разрешит принимать любой трафик на этом сервере.
Чтобы вернуть его назад к ACCEPT, сделайте следующее:
1 |
iptables --policy INPUT ACCEPT |
Тоже самое и для других цепочек:
1 |
iptables --policy OUTPUT DROP |
1 |
iptables --policy FORWARD DROP |
Замечание: По умолчанию, все цепочки iptables находятся в режиме ACCEPT.
Разрешаем порты
Если у вас на сервере запущен веб-сервер, тогда вы должны разрешить 80 порт вашему межсетевому экрану для того, чтобы сервер мог его прослушивать или отвечать на него. Сделаем это с помощью следующей команды:
1 |
sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT |
В команде выше:
- -A означает добавление нового правила в список iptables.
- INPUT значит, что изменения касаются цепочки INPUT.
- -P — указывает на протокол. В этом случае, на TCP.
- —dport — порт назначения. По умолчанию любой веб-сервер запущен на 80-ом порте.
Точно также вы можете разрешить порт SSH:
1 |
sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT |
По умолчанию, SSH запущен на 22 порте.
Замечание: Пример хорошей практики — не запускать SSH на порте по умолчанию. Сделайте это на другом порте! Для этого откройте файл /etc/ssh/sshd_config в своем любимом редакторе и измените 22 на любой другой свободный номер порта.
Блокирование портов
Чтобы заблокировать порт 135, вводим:
1 |
sudo iptables -A INPUT -p tcp --dport 135 -j DROP |
Если вы хотите заблокировать возможность подключаться по SSH с вашего сервера к другому хосту/серверу, введите следующую команду:
1 |
sudo iptables -A OUTPUT -p tcp --dport 22- j DROP |
Делая это, никто не сможет использовать ваш сервер для старта SSH подключения. Цепочка OUPUT будет фильтровать, а DROP — сбрасывать любое исходящее TCP подключение к другим хостам.
Разрешаем IP-адреса и порты
Делаем это с помощью команды:
1 |
sudo iptables -A INPUT -p tcp -s --dport 22 -j ACCEPT |
Правило -s 0/0 разрешает любой IP-адрес источника.
Если вы хотите разрешить определенный IP-адрес, используйте эту команду:
1 |
sudo iptables -A INPUT -p tcp -s 12.12.12.12/32 --dport 22 -j ACCEPT |
В примере выше, вы разрешаете только IP-адресу 12.12.12.12 подключаться к порту SSH. Остальные IP-адреса не смогут подключитьcя к 22 порту.
Если вы хотите заблокировать IP-адрес, измените ACCEPT на DROP таким образом:
1 |
sudo iptables -A INPUT -p tcp -s 12.12.12.0/24 --dport 22 -j DROP |
Эта команда не разрешит подключаться к порту 22 устройствам с IP-адресами с 12.12.12.1 по 12.12.12.255.
Блокирование ICMP
Если вам нужно заблокировать запрос ICMP (ping) от и к вашему серверу, введите следующие команды:
1 |
sudo iptables -A OUTPUT -p icmp --icmp-type 8 -j DROP |
Эта команда заблокирует отправку ICMP пакетов к другому хосту. Попробуйте пропинговать google.com, у вас ничего не получится!
Чтобы заблокировать входящий ping запрос, введите следующие команды в терминале:
1 |
sudo iptables -I INPUT -p icmp --icmp-type 8 -j DROP |
Теперь сервер не будет отвечать на ping запросы.
Как предотвращать DDoS атаки с помощью iptables
Я уверен, что вы все знаете что такое DDoS. Чтобы не допустить этот, в последнее время очень популярный вид атаки, воспользуйтесь следующей командой:
1 |
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
Хакеры так и ждут возможности просканировать открытые порты на вашем сервере и взломать систему безопасности. Чтобы не допустить этого безобразия:
1 |
sudo iptables -N block-scan |
1 |
sudo iptables -A block-scan -p tcp —tcp-flags SYN,ACK,FIN,RST -m limit —limit 1/s -j RETURN |
1 |
sudo iptables -A block-scan -j DROP |
где block-scan — это название новой цепочки.
Надеюсь, что этот пост был максимально полезным для вас!