
Управление сетевым трафиком - одна из самых сложных задач, с которыми приходится сталкиваться системным администраторам. Он должен настроить брандмауэр таким образом, чтобы он отвечал требованиям системы и пользователей как для входящих, так и для исходящих соединений, не оставляя систему уязвимой для атак.
Это где iptables
пригодиться. Iptables - это брандмауэр командной строки Linux, который позволяет системным администраторам управлять входящим и исходящим трафиком с помощью набора настраиваемых табличных правил.
Iptables использует набор таблиц, в которых есть цепочки, содержащие набор встроенных или определенных пользователем правил. Благодаря им системный администратор может правильно фильтровать сетевой трафик своей системы.
В руководстве по iptables в настоящее время существует 3 типа таблиц:
ФИЛЬТР
- это таблица по умолчанию, которая содержит встроенные цепочки для: NAT
- таблица, к которой обращаются, когда пакет пытается создать новое соединение. Он имеет следующие встроенные функции: МАНУЛ
- эта таблица используется для изменения пакетов. До версии ядра 2.4 в этой таблице было всего две цепочки, а теперь их 5: В этой статье вы увидите несколько полезных команд, которые помогут вам управлять брандмауэром Linux Box через iptables. В этой статье я начну с более простых команд и перейду к более сложным до конца.
Во-первых, вы должны знать, как управлять сервисом iptables в разных дистрибутивах Linux. Это довольно просто:
На Cent / RHEL 7 и Fedora 22+ # systemctl start iptables. # systemctl stop iptables. # systemctl перезапуск iptables.
На Cent / RHEL 6/5 и Fedora # /etc/init.d/iptables start # /etc/init.d/iptables stop. # /etc/init.d/iptables restart.
Если вы хотите проверить существующие правила, используйте следующую команду:
# iptables -L -n -v.
Это должно вернуть результат, аналогичный приведенному ниже:
Цепочка INPUT (политика ACCEPT 1129K пакетов, 415M байтов) pkts bytes target prot opt in source destination 0 0 ACCEPT tcp - lxcbr0 * 0.0.0.0/0 0.0.0.0/0 tcp dpt: 53 0 0 ПРИНЯТЬ udp - lxcbr0 * 0.0.0.0/0 0.0.0.0/0 udp dpt: 53 0 0 ПРИНЯТЬ tcp - lxcbr0 * 0.0.0.0/0 0.0.0.0/0 tcp dpt: 67 0 0 ПРИНЯТЬ udp - lxcbr0 * 0.0.0.0/0 0.0.0.0/0 UDP dpt: 67
Цепочка FORWARD (политика ACCEPT 0 пакетов, 0 байтов) pkts bytes target prot opt in out source destination 0 0 ACCEPT all - * lxcbr0 0.0.0.0/0 0.0.0.0/0 0 0 ACCEPT all - lxcbr0 * 0.0.0.0/ 0 0.0.0.0/0
Цепочка ВЫХОДА (политика ПРИНЯТЬ пакеты 354 КБ, 185 Мбайт) Пакеты байтов target prot opt in source destination
Если вы предпочитаете проверять правила для конкретной таблицы, вы можете использовать -t
вариант, за которым следует таблица, которую вы хотите проверить. Например, чтобы проверить правила в NAT
table можно использовать:
# iptables -t nat -L -v -n.
Если вы обнаружите необычную или оскорбительную активность с IP-адреса, вы можете заблокировать этот IP-адрес с помощью следующего правила:
# iptables -A INPUT -s xxx.xxx.xxx.xxx -j DROP.
Где вам нужно изменить "xxx.xxx.xxx.xxx"
с фактическим IP-адресом. Будьте очень осторожны при запуске этой команды, так как вы можете случайно заблокировать свой IP-адрес. В -А
опция добавляет правило в конец выбранной цепочки.
Если вы хотите только заблокировать TCP трафик с этого IP-адреса, вы можете использовать -п
опция, указывающая протокол. В этом случае команда будет выглядеть так:
# iptables -A INPUT -p tcp -s xxx.xxx.xxx.xxx -j DROP.
Если вы решили, что больше не хотите блокировать запросы с определенного IP-адреса, вы можете удалить правило блокировки с помощью следующей команды:
# iptables -D INPUT -s xxx.xxx.xxx.xxx -j DROP.
В -D
опция удаляет одно или несколько правил из выбранной цепочки. Если вы предпочитаете использовать более длинный вариант, вы можете использовать --Удалить
.
Иногда вам может потребоваться заблокировать входящие или исходящие соединения на определенном порту. Это хорошая мера безопасности, и вам стоит подумать об этом при настройке брандмауэра.
Чтобы заблокировать исходящие соединения на определенном порту, используйте:
# iptables -A ВЫХОД -p tcp --dport xxx -j DROP.
Чтобы разрешить входящие соединения, используйте:
# iptables -A ВВОД -p tcp --dport xxx -j ПРИНЯТЬ.
В обоих примерах измените «ххх»
с фактическим портом, который вы хотите разрешить. Если вы хотите заблокировать UDP трафик вместо TCP, просто измените "TCP"
с "UDP"
в приведенном выше правиле iptables.
Вы можете разрешить несколько портов одновременно, используя многопортовый, ниже вы можете найти такое правило как для входящих, так и для исходящих соединений:
# iptables -A INPUT -p tcp -m multiport --dports 22,80,443 -j ПРИНЯТЬ. # iptables -A ВЫХОД -p tcp -m multiport --sports 22,80,443 -j ПРИНЯТЬ.
Вы можете захотеть ограничить определенные подключения на определенном порту к данной сети. Допустим, вы хотите разрешить исходящие соединения на порту. 22
в сеть 192.168.100.0/24
.
Вы можете сделать это с помощью этой команды:
# iptables -A ВЫХОД -p tcp -d 192.168.100.0/24 --dport 22 -j ПРИНЯТЬ.
Некоторые работодатели любят блокировать доступ к Facebook своим сотрудникам. Ниже приведен пример того, как заблокировать трафик на Facebook.
Примечание: Если вы системный администратор и вам необходимо применять эти правила, имейте в виду, что ваши коллеги могут перестать с вами разговаривать :)
Сначала найдите IP-адреса, используемые Facebook:
# host facebook.com facebook.com имеет адрес 66.220.156.68.
# whois 66.220.156.68 | grep CIDR. CIDR: 66.220.144.0/20.
Затем вы можете заблокировать эту сеть Facebook с помощью:
# iptables -A ВЫХОД -p tcp -d 66.220.144.0/20 -j DROP.
Имейте в виду, что диапазон IP-адресов, используемых Facebook, может отличаться в вашей стране.
Иногда вам может потребоваться перенаправить трафик одной службы на другой порт. Вы можете добиться этого с помощью следующей команды:
# iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 25 -j REDIRECT --to-port 2525.
Приведенная выше команда перенаправляет весь входящий трафик на сетевой интерфейс. eth0
, из порта 25
портировать 2525
. Вы можете поменять порты на те, которые вам нужны.
Иногда IP-адреса могут запрашивать слишком много подключений к веб-портам на вашем веб-сайте. Это может вызвать ряд проблем, и для предотвращения таких проблем вы можете использовать следующее правило:
# iptables -A INPUT -p tcp --dport 80 -m limit --limit 100 / minute --limit-burst 200 -j ACCEPT.
Вышеупомянутая команда ограничивает входящие соединения с минуты до 100
и устанавливает предельную серию на 200
. Вы можете редактировать предел и пакетный предел в соответствии с вашими конкретными требованиями.
Некоторым системным администраторам нравится блокировать входящие запросы ping из соображений безопасности. Хотя угроза не так уж велика, полезно знать, как заблокировать такой запрос:
# iptables -A INPUT -p icmp -i eth0 -j DROP.
Петлевой доступ (доступ из 127.0.0.1
) важен, и вы всегда должны оставлять его активным:
# iptables -A ВВОД -i lo -j ПРИНЯТЬ. # iptables -A ВЫХОД -o lo -j ПРИНЯТЬ.
Если вы хотите регистрировать потерянные пакеты на сетевом интерфейсе eth0
, вы можете использовать следующую команду:
# iptables -A INPUT -i eth0 -j LOG --log-prefix "IPtables потерял пакеты:"
Вы можете изменить значение после "--log-prefix"
с чем-то по вашему выбору. Сообщения зарегистрированы /var/log/messages
и вы можете искать их с помощью:
# grep "IPtables потерял пакеты:" / var / log / messages.
Вы можете заблокировать доступ к вашей системе с определенного MAC-адреса, используя:
# iptables -A INPUT -m mac --mac-source 00: 00: 00: 00: 00: 00 -j DROP.
Конечно, вам нужно будет изменить "00:00:00:00:00:00"
с фактическим MAC-адресом, который вы хотите заблокировать.
Если вы не хотите, чтобы с одного IP-адреса на заданный порт устанавливалось слишком много одновременных подключений, вы можете использовать следующую команду:
# iptables -A INPUT -p tcp --syn --dport 22 -m connlimit --connlimit-above 3 -j REJECT.
Приведенная выше команда позволяет не более 3
подключений на клиента. Конечно, вы можете изменить номер порта, чтобы он соответствовал другой службе. Так же --connlimit-выше
следует изменить в соответствии с вашими требованиями.
После того, как вы определили свои правила iptables, вам может понадобиться время от времени выполнять поиск и, возможно, потребуется их изменить. Простой способ поиска по вашим правилам - использовать:
# iptables -L $ table -v -n | grep $ string.
В приведенном выше примере вам нужно будет изменить $ таблица
с реальной таблицей, в которой вы хотите искать и $ строка
с фактической строкой, которую вы ищете.
Вот пример:
# iptables -L INPUT -v -n | grep 192.168.0.100.
С помощью iptables вы можете определить свою собственную цепочку и хранить в ней собственные правила. Чтобы определить цепочку, используйте:
# iptables -N настраиваемый-фильтр.
Теперь вы можете проверить, есть ли ваш новый фильтр:
# iptables -L.
Цепочка INPUT (политика ACCEPT) target prot opt источник назначения.
Цепочка ВПЕРЕД (политика ПРИНЯТЬ) target prot opt источник назначения
Цепочка ВЫХОДА (политика ПРИНЯТЬ) target prot opt источник назначения
Цепь настраиваемый фильтр(0 ссылок) target prot opt источник назначения
Если вы хотите очистить цепочки брандмауэра, вы можете использовать:
# iptables -F.
Вы можете очистить цепочки из определенной таблицы с помощью:
# iptables -t нат -F.
Ты можешь измениться "нац"
с фактической таблицей, цепочки которых вы хотите сбросить.
Если вы хотите сохранить правила брандмауэра, вы можете использовать iptables-save
команда. Вы можете использовать следующее для сохранения и хранения ваших правил в файле:
# iptables-save> ~ / iptables.rules.
Вам решать, где вы будете хранить файл и как вы назовете его.
Если вы хотите восстановить список правил iptables, вы можете использовать iptables-восстановление
. Команда выглядит так:
# iptables-restoreКонечно, путь к вашему файлу правил может быть другим.
21. Настройка правил IPtables для соответствия PCI
Некоторым системным администраторам может потребоваться настроить свои серверы на совместимость с PCI. Различные поставщики, отвечающие за соответствие требованиям PCI, выдвигают множество требований, но есть несколько общих.
Во многих случаях вам потребуется более одного IP-адреса. Вам нужно будет применить приведенные ниже правила для IP-адреса сайта. Будьте особенно осторожны при использовании приведенных ниже правил и используйте их только в том случае, если вы уверены, что делаете:
# iptables -I INPUT -d SITE -p tcp -m multiport --dports 21,25,110,143,465,587,993,995 -j DROP.Если вы используете cPanel или аналогичную панель управления, вам также может потребоваться заблокировать ее порты. Вот пример:
# iptables -I in_sg -d DEDI_IP -p tcp -m multiport --dports 2082,2083,2095,2096,2525,2086,2087 -j DROP.Примечание: Чтобы убедиться, что вы соответствуете требованиям поставщика PCI, внимательно проверьте его отчет и примените необходимые правила. В некоторых случаях вам может потребоваться также заблокировать UDP-трафик на определенных портах.
22. Разрешить установленные и связанные подключения
Поскольку сетевой трафик разделен на входящий и исходящий, вы захотите разрешить установленный и связанный входящий трафик. Для входящих подключений сделать это с помощью:
# iptables -A INPUT -m conntrack --ctstate ESTABLISHED, RELATED -j ACCEPT.Для исходящего использования:
# iptables -A ВЫХОД -m conntrack --ctstate УСТАНОВЛЕН -j ПРИНЯТЬ.23. Отбрасывать недопустимые пакеты в IPtables
Некоторые сетевые пакеты могут быть помечены как недопустимые. Некоторые люди могут предпочесть регистрировать эти пакеты, но другие предпочитают отбрасывать их. Чтобы отбросить недействительные пакеты, вы можете использовать:
# iptables -A INPUT -m conntrack --ctstate INVALID -j DROP24. Блокировать подключение к сетевому интерфейсу
Некоторые системы могут иметь более одного сетевого интерфейса. Вы можете ограничить доступ к этому сетевому интерфейсу или заблокировать соединения с определенного IP-адреса.
Например:
# iptables -A INPUT -i eth0 -s xxx.xxx.xxx.xxx -j DROP.Изменять «Xxx.xxx.xxx.xxx» с фактическим IP-адресом (или сетью), который вы хотите заблокировать.
25. Отключить исходящую почту через IPTables
Если ваша система не должна отправлять электронные письма, вы можете заблокировать исходящие порты на портах SMTP. Например, вы можете использовать это:
# iptables -A ВЫХОД -p tcp --dports 25,465,587 -j ОТКАЗАТЬ.Вывод
Iptables это мощный брандмауэр, которым вы легко можете воспользоваться. Каждому системному администратору жизненно важно знать хотя бы основы iptables. Если вы хотите найти более подробную информацию о iptables и его опциях, настоятельно рекомендуется прочитать его руководство:
# человек iptables.Если вы считаете, что мы должны добавить больше команд в этот список, поделитесь ими с нами, отправив их в разделе комментариев ниже.