Простая конфигурация IPTables и примеры в Ubuntu 16.04

Вступление

iptablesэто мощный инструмент, используемый для настройки встроенного брандмауэра ядра Linux. Он предустановлен в большинстве дистрибутивов Ubuntu, однако, если вы используете настроенную версию Ubuntu или работаете внутри контейнера, вам, скорее всего, придется установить ее вручную.

sudo apt-get install iptables iptables-persistent

После установки, если вас спросят, сохранять ли ваши текущие правила, это не имеет значения в данный момент, поскольку вы собираетесь удалить или создать новые правила позже.

подсказки

Вы можете использовать netcatкоманду (на компьютере, отличном от вашего сервера), чтобы проверить, какие порты открыты или закрыты.

nc -z -w5 -v SERVER_IP PORT
  • nc это команда netcat
  • -z просто отправьте пакет без полезной нагрузки.
  • -w5 подождите до 5 секунд ответа.
  • -v подробный режим.
  • Замените SERVER_IPадрес вашего сервера.
  • Замените PORTна порт, который вы хотите проверить, если он открыт (например 22).

На вашем сервере вы можете использовать netstatкоманду, чтобы увидеть, какие порты в настоящее время прослушивают соединения.

sudo netstat -tulpn

Примечание. Хотя netstatэто удобно для поиска портов, с которыми вы хотите работать, вы должны знать о приложениях, которые вы в настоящее время установили на своем сервере, и какие порты прослушиваются, вам не нужно разрешать каждый порт, который вы найдете в netstatвыходных данных .

Синтаксис

sudo iptables -A INPUT -p tcp -m tcp --dport 22 --m geoip --src-cc PE -j ACCEPT
  • -A INPUTдобавить правило в INPUTцепочку, цепочка - это группа правил, которыми мы чаще всего будем пользоваться в этом руководстве INPUT, OUTPUTи PREROUTING.
  • -p tcpустановить tcpв качестве протокола, к которому будет применяться это правило, также можно использовать другие протоколы, такие как udp, icmpили all.
  • -m tcpиспользовать tcpмодуль. iptablesподдерживает дополнительные функции через модули, некоторые из которых уже предустановлены, iptablesа другие, например, geoipмодуль.
  • --dport 22Команды, начинающиеся с, --указывают на дополнительные опции для ранее использованного модуля, в этом случае мы сообщим, что tcpмодуль применяется только к порту 22.
  • -m geoipиспользовать geoipмодуль. Он будет ограничивать пакеты в зависимости от страны (дополнительная информация на шаге 5).
  • --src-cc PEскажите geoipмодулю ограничить входящие пакеты теми, которые приходят из Перу. Для получения дополнительных кодов стран ищите ISO 3166 country codesв Интернете.
  • -j ACCEPT-jаргумент указывает , iptablesчто делать , если пакет соответствует ограничениям , указанным в предыдущих рассуждениях. В этом случае это будут ACCEPTте пакеты, другие варианты REJECT, DROPи многое другое. Вы можете найти больше вариантов, выполнив поиск iptables jump targetsв Интернете.

1. Основы

Перечислите все правила.

sudo iptables -L

Перечислите все команды, которые использовались для создания используемых в настоящее время правил, полезных для редактирования или удаления правил.

sudo iptables -S

Чтобы удалить конкретное правило, выберите правило sudo iptables -Sи замените его -Aна -D.

# -A INPUT -p tcp -m tcp --dport 22 -j ACCEPT

sudo iptables -D INPUT -p tcp -m tcp --dport 22 -j ACCEPT

Перечислите все пронумерованные правила в INPUTцепочке.

sudo iptables -L INPUT --line-numbers

Удалить пронумерованное правило.

sudo iptables -D INPUT 2

Очистить все правила.

sudo iptables -F

Предупреждение: вы можете потерять соединение, если подключены по SSH .

Очистить только правила в OUTPUTцепочке.

sudo iptables -F OUTPUT

2. Создайте начальные правила

Разрешить SSHна eth0интерфейсе

sudo iptables -A INPUT -i eth0 -p tcp -m tcp --dport 22 -j ACCEPT
  • -i eth0 применить правило к определенному интерфейсу, чтобы разрешить из любого интерфейса удалить эту команду.

Чтобы ограничить входящие пакеты определенным IP (т.е. 10.0.3.1/32).

sudo iptables -A INPUT -i eth0 -s 10.0.3.1/32 -p tcp -m tcp --dport 22 -j ACCEPT
  • -s 10.0.3.1/32 указывает IP / подсеть, из которой разрешены соединения.

Установить правила цепочки по умолчанию.

Предупреждение: перед продолжением убедитесь, что вы применили правильные правила SSH при работе на удаленном сервере .

sudo iptables -P INPUT DROP
sudo iptables -P FORWARD DROP 
sudo iptables -P OUTPUT ACCEPT 
  • -P INPUT DROP запрещает все входящие пакеты (т.е. никто не сможет подключиться к вашим работающим серверам, таким как Apache, SQL и т. д.).
  • -P FORWARD DROP запрещает все перенаправленные пакеты (т.е. когда вы используете свою систему в качестве маршрутизатора).
  • -P OUTPUT ACCEPTразрешает все исходящие пакеты (т.е. когда вы выполняете HTTPзапрос).

Разрешить весь трафик по интерфейсу обратной связи ( рекомендуется ).

sudo iptables -A INPUT -i lo -j ACCEPT
sudo iptables -A OUTPUT -o lo -j ACCEPT

3. Сделайте правила постоянными

Сохранить текущие iptablesправила.

sudo netfilter-persistent save
sudo netfilter-persistent reload

Если вы работаете внутри контейнера, netfilter-persistentкоманда, скорее всего, не будет работать, поэтому вам нужно перенастроить iptables-persistentпакет.

sudo dpkg-reconfigure iptables-persistent

4. Разрешить исходящие соединения

Разрешить DNS-запросы.

sudo iptables -A OUTPUT -p tcp --dport 53 -m state --state NEW -j ACCEPT
sudo iptables -A OUTPUT -p udp --dport 53 -m state --state NEW -j ACCEPT

Используйте stateмодуль для разрешения RELATEDи ESTABLISHEDисходящих пакетов.

sudo iptables -A OUTPUT -m state --state RELATED,ESTABLISHED -j ACCEPT

Разрешить желаемые порты; в этом случае HTTPпорты.

sudo iptables -A OUTPUT -p tcp --dport 80 -m state --state NEW -j ACCEPT

Больше портов вы можете использовать.

  • FTP: TCP в порту 21
  • HTTPS: tcp в порту 443
  • DHCP: udp в порту 67
  • NTP: udp в порту 123

Примечание. Если вы хотите разрешить, apt-getможет потребоваться разрешить FTPиHTTPS .

Разрешить возвращаемый трафик только для RELATEDуже ESTABLISHEDподключенных соединений ( рекомендуется, поскольку иногда требуется двунаправленная связь).

sudo iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
Другие полезные правила

Разрешить пинг запросы извне.

sudo iptables -A INPUT -p icmp --icmp-type echo-request -j ACCEPT
sudo iptables -A OUTPUT -p icmp --icmp-type echo-reply -j ACCEPT

Форвард трафик на eth0порт 2200в 10.0.3.21:22(полезно , если вы хотите , чтобы открыть сервер SSH , который работает внутри контейнера).

sudo iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 2200 -j DNAT --to-destination 10.0.3.21:22

Если вы успешно войдете на свой сервер с помощью SSH, будет создано постоянное соединение (т.е. никаких новых соединений, даже если вы подключены более 1 часа). Если вы ошибетесь и попытаетесь войти снова, будет создано новое соединение. Это заблокирует непрерывные попытки входа по SSH, ограничивая количество новых подключений в час.

sudo iptables -I INPUT -p tcp --dport 22 -m state --state NEW -m recent --set
sudo iptables -I INPUT -p tcp --dport 22 -m state --state NEW -m recent --update --seconds 3600 --hitcount 4 -j DROP

Перенаправить все запросы от порта 443к порту 4430(полезно, если вы хотите привязать порт 443без root).

sudo iptables -t nat -A PREROUTING -i ens3 -p tcp --dport 443 -j REDIRECT --to-port 4430
sudo iptables -A INPUT -p tcp -m tcp --dport 4430 -m geoip --src-cc PE -j ACCEPT
  • ens3 сетевой интерфейс.
  • -m geoip модуль блока страны (см. шаг 5).

Предупреждение: не используйте lo, ОС будет отбрасывать все пакеты, перенаправленные на интерфейс обратной связи .

5. Разрешить или заблокировать целые страны

5.1 Установить xtables-addons

Вы можете установить xtables-addonsмодуль, используя различные методы, не стесняйтесь использовать метод установки, который подходит вам лучше всего.

  • Установите с помощью apt-get.

    sudo apt-get install xtables-addons-common
    
  • Установите с помощью module-assistant.

    sudo apt-get install module-assistant xtables-addons-source
    sudo module-assistant --verbose --text-mode auto-install xtables-addons
    
  • Установить из источника.

    sudo apt-get install git bc libncurses5-dev libtext-csv-xs-perl autoconf automake libtool xutils-dev iptables-dev
    git clone git://git.code.sf.net/p/xtables-addons/xtables-addons
    cd xtables-addons
    ./autogen.sh
    ./configure
    make
    sudo make install
    

Создайте базу данных "стран".

sudo apt-get install libtext-csv-xs-perl unzip
sudo mkdir /usr/share/xt_geoip
sudo /usr/lib/xtables-addons/xt_geoip_dl
sudo /usr/lib/xtables-addons/xt_geoip_build -D /usr/share/xt_geoip *.csv
sudo rm GeoIPCountryCSV.zip GeoIPCountryWhois.csv GeoIPv6.csv

Перезагрузите вашу систему.

sudo reboot

После xtables-addonsуспешной установки, после первой перезагрузки, запустите, depmodиначе блокировка страны не будет работать должным образом (это требуется только в первый раз).

sudo depmod 

Создайте скрипт /etc/cron.monthly/geoip-updaterдля обновления geoipбазы данных ежемесячно.

#!/usr/bin/env bash
# this script is intended to run with sudo privileges

echo 'Removing old database---------------------------------------------------'
rm -rf /usr/share/xt_geoip/*
mkdir -p /usr/share/xt_geoip

echo 'Downloading country databases-------------------------------------------'
mkdir /tmp/geoip-updater
cd /tmp/geoip-updater
/usr/lib/xtables-addons/xt_geoip_dl

echo 'Building geoip database-------------------------------------------------'
/usr/lib/xtables-addons/xt_geoip_build -D /usr/share/xt_geoip *.csv

echo 'Removing temporary files------------------------------------------------'
cd /tmp
rm -rf /tmp/geoip-updater

Сделать /etc/cron.monthly/geoip-updaterисполняемым.

sudo chmod +x /etc/cron.monthly/geoip-updater

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

_Примечание: Если вы получаете сообщение iptables: No chain/target/match by that nameоб ошибке при попытке применить geoipправило, возможно, xtables-addonsоно установлено неправильно. Попробуйте другой способ установки.

Блокируйте все входящие пакеты из Китая, Гонконга, России и Кореи.

sudo iptables -A INPUT -m geoip --src-cc CN,HK,RU,KR -j DROP

Разрешить входящие пакеты через порт 80отовсюду, кроме стран выше.

sudo iptables -A INPUT -p tcp -m tcp --dport 80 -j ACCEPT

Разрешить входящие пакеты на ens3интерфейс через порт 22только из Перу (не стесняйтесь выбирать код страны, из которой вы хотите принимать пакеты, например, USдля Соединенных Штатов).

sudo iptables -A INPUT -i ens3 -p tcp -m tcp --dport 22 -m geoip --src-cc PE -j ACCEPT

Разрешить входящие пакеты на порт 443только из Перу.

sudo iptables -A INPUT -p tcp -m tcp --dport 443 -m geoip --src-cc PE -j ACCEPT


Изучение 26 методов анализа больших данных: часть 1

Изучение 26 методов анализа больших данных: часть 1

Изучение 26 методов анализа больших данных: часть 1

6 невероятных фактов о Nintendo Switch

6 невероятных фактов о Nintendo Switch

Многие из вас знают Switch, который выйдет в марте 2017 года, и его новые функции. Для тех, кто не знает, мы подготовили список функций, которые делают «Switch» обязательным гаджетом.

Технические обещания, которые все еще не выполнены

Технические обещания, которые все еще не выполнены

Вы ждете, когда технологические гиганты выполнят свои обещания? проверить, что осталось недоставленным.

Функциональные возможности уровней эталонной архитектуры больших данных

Функциональные возможности уровней эталонной архитектуры больших данных

Прочтите блог, чтобы узнать о различных уровнях архитектуры больших данных и их функциях самым простым способом.

Как ИИ может вывести автоматизацию процессов на новый уровень?

Как ИИ может вывести автоматизацию процессов на новый уровень?

Прочтите это, чтобы узнать, как искусственный интеллект становится популярным среди небольших компаний и как он увеличивает вероятность их роста и дает преимущество перед конкурентами.

CAPTCHA: как долго она может оставаться жизнеспособным методом различения между человеком и ИИ?

CAPTCHA: как долго она может оставаться жизнеспособным методом различения между человеком и ИИ?

CAPTCHA стало довольно сложно решать пользователям за последние несколько лет. Сможет ли он оставаться эффективным в обнаружении спама и ботов в ближайшем будущем?

Технологическая сингулярность: далекое будущее человеческой цивилизации?

Технологическая сингулярность: далекое будущее человеческой цивилизации?

По мере того, как наука развивается быстрыми темпами, принимая на себя большую часть наших усилий, также возрастает риск подвергнуться необъяснимой сингулярности. Прочтите, что может значить для нас необычность.

Телемедицина и удаленное здравоохранение: будущее уже здесь

Телемедицина и удаленное здравоохранение: будущее уже здесь

Что такое телемедицина, дистанционное здравоохранение и их влияние на будущее поколение? Это хорошее место или нет в ситуации пандемии? Прочтите блог, чтобы узнать мнение!

Вы когда-нибудь задумывались, как хакеры зарабатывают деньги?

Вы когда-нибудь задумывались, как хакеры зарабатывают деньги?

Возможно, вы слышали, что хакеры зарабатывают много денег, но задумывались ли вы когда-нибудь о том, как они зарабатывают такие деньги? Давайте обсудим.

Обновление дополнения к macOS Catalina 10.15.4 вызывает больше проблем, чем решает

Обновление дополнения к macOS Catalina 10.15.4 вызывает больше проблем, чем решает

Недавно Apple выпустила macOS Catalina 10.15.4, дополнительное обновление для исправления проблем, но похоже, что это обновление вызывает больше проблем, приводящих к поломке компьютеров Mac. Прочтите эту статью, чтобы узнать больше