|
|||||
|
Iptables - скрипты для конфигурированияВ статье представлено несколько скриптов для конфигурирования iptables и ip6tables: сброс настроек по умолчанию для всех таблиц, цепочек фаервола с удалением пользовательских названий цепочек и базовые конфигурации для iptables протоколов IPv4 и IPv6. Описание процесса настройки iptables, ip6tables и как сохранить конфигурацию фаервола после перезагрузки сервера - читайте тут: Как настроить iptables. Очистка всех настроекЭтот скрипт поможет очистить все настройки iptables, ip6tables и установить политики по умолчанию для всех цепочек firewall. Его можно установить в cron и запускать, например, раз в 20 минут, для того, чтобы в ходе экспериментов с фаерволом не лишиться доступа к удаленному серверу. Если запустить скрипт без параметров, то в консоль пользователю будет выводиться информация о конфигурации скрипта (какие firewall будут затронуты и политика по умолчанию). После положительного ответа (нажатия Y) отобразится краткий отчет по проведенным действиям. Чтобы скрипт запустился в автоматическом режиме, например из cron, необходимо запускать скрипт с параметром -cron: iptables_def -cron В этом случае, не будет запрашиваться подтверждение на выполнение изменений в iptables, и скрипт выполнится без отображения запускаемых им команд. Закомментировав строку iptables_path[1] или iptables_path[2] - можно выбрать, для какого из протоколов, IPv4 или IPv6 будут применяться настройки. Также, присвоив переменной def_val значение DROP, можно полностью закрыть сервер от сети, но ни в коем случае не применяйте параметр DROP для той сети, по которой подключены, если работаете удаленно! Скрипт iptables_def: iptables_def: очистка настроек iptables
#!/bin/bash ################################################### # iptables & ip6tables # # Установка параметров по умолчанию и # очистка всех пользовательских настроек # Source: http://petrenco.com/ubuntu.php?txt=561 ################################################### # Полный путь к iptables iptables_path[1]="/sbin/iptables" # Полный путь к ip6tables iptables_path[2]="/sbin/ip6tables" # Состояние по умолчанию, устанавливаемое скриптом def_val="ACCEPT" # Таблицы iptables ipt_table[1]='filter' ipt_table[2]='nat' ipt_table[3]='mangle' ipt_table[4]='raw' ipt_table[5]='security' # Цепочки для каждой таблицы chain_filter=( INPUT OUTPUT FORWARD ) chain_nat=( PREROUTING INPUT OUTPUT POSTROUTING ) chain_mangle=( PREROUTING INPUT FORWARD OUTPUT POSTROUTING ) chain_raw=( PREROUTING OUTPUT ) chain_security=( INPUT OUTPUT FORWARD ) cron_flag="-cron" if [ "$1" != "$cron_flag" ] then echo "Firewall set default and clear user settings." echo "" echo "Setting:" echo "Firewall path: ${iptables_path[@]}." echo "Default value for all chains tables: $def_val." echo "" read -p "Are you sure to start (y/n): " AMSURE. if [ "$AMSURE" != "y" ] then echo "Exit, no changes." exit fi fi [ "$1" != "$cron_flag" ] && echo "" for d in "${!iptables_path[@]}"; do iptables_path=${iptables_path[$d]} [ "$1" != "$cron_flag" ] && echo "Firewal script $iptables_path:" for i in "${!ipt_table[@]}"; do table=${ipt_table[$i]}. chain=chain_$table chains='' # Запуск настроек iptables for c in $(eval echo "\${$chain[@]}"); do $iptables_path -t $table -P $c $def_val $iptables_path -t $table -F $iptables_path -t $table -X chains="${chains}$c, " done if [ "$1" != "$cron_flag" ] then chains="${chains:0:-2}." echo " - Table \"$table\", chains: $chains - all setting cleared." fi done [ "$1" != "$cron_flag" ] && echo "" done Конфигурация iptablesСкрипт iptables_conf_set загружает в iptables базовую конфигурацию, предварительно очистив все правила и пользовательские цепочки для ВСЕХ таблиц iptables, и записывает настройки в файл, указанный в переменной $IPTCONF. Правила разрешают доступ из вне на указанном сетевом интерфейсе только к определенным портам и запрещают весь остальной входящий трафик (таблица filter, цепочка INPUT). Также, в качестве примера, приведены настройки для блокирования исходящего трафика в цепочке OUTPUT таблицы filter. Но, поскольку, последним правилом в OUTPUT записано: "-A OUTPUT -j ACCEPT", что разрешает весь исходящий (созданный сервером) трафик, то в не зависимости от правил цепочки, остальные пакеты блокироваться не будут. Если нужно блокировать все, кроме разрешенных, соединения, инициированные сервером, можно установить в последнем правиле цепочки OUTPUT направление DROP, как это сделано в цепочке INPUT. Перед запуском скрипта внимательно проверьте все устанавливаемые им правила, чтобы не лишиться доступа к серверу, если конфигурирование происходит удаленно!!! iptables_conf_set - установка правил для iptables
#!/bin/bash ################################################## # iptables config # Source: http://petrenco.com/ubuntu.php?txt=561 ################################################## # Полный путь к iptables IPT="/sbin/iptables" # Полный путь к iptables-save IPTS="/sbin/iptables-save" # Полный путь к файлу, в котором будет сохранена конфигурация iptables IPTCONF="/etc/iptables.conf" # Название сетевого интерфейса, к которому будут применены разрешающие правила # Название можно найти тут: /etc/network/interfaces PUBIF="eth0" # IP-адрес сервера SRVIP=`ifconfig $PUBIF | grep 'inet addr' | awk {'print $2'} | sed s/.*://` # Состояние по умолчанию, устанавливаемое скриптом def_val="ACCEPT" # Таблицы iptables ipt_table[1]='filter' ipt_table[2]='nat' ipt_table[3]='mangle' ipt_table[4]='raw' ipt_table[5]='security' # Цепочки для каждой таблицы chain_filter=( INPUT OUTPUT FORWARD ) chain_nat=( PREROUTING INPUT OUTPUT POSTROUTING ) chain_mangle=( PREROUTING INPUT FORWARD OUTPUT POSTROUTING ) chain_raw=( PREROUTING OUTPUT ) chain_security=( INPUT OUTPUT FORWARD ) echo "Starting IPv4 firewall (iptables) configure" read -p "Are you sure to start (y/n): " start if [ "$start" != "y" ] then echo "Exit, no changes." exit fi echo "" echo "Step 1: clean old configuration" for i in "${!ipt_table[@]}"; do table=${ipt_table[$i]} chain=chain_$table chains='' # Сброс настроек iptables for c in $(eval echo "\${$chain[@]}"); do $IPT -t $table -P $c $def_val $IPT -t $table -F $IPT -t $table -X chains="${chains}$c, " done chains="${chains:0:-2}." echo " - Table \"$table\", chains: $chains - all setting cleared." done echo "" echo "Step 2: saved main configuration" # Полный доступ интерфейса loopback $IPT -A INPUT -i lo -j ACCEPT $IPT -A OUTPUT -o lo -j ACCEPT # Разрешить весь исходящий трафик и инициированный им входящий $IPT -A INPUT -i $PUBIF -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT #$IPT -A OUTPUT -o $PUBIF -m conntrack --ctstate NEW,ESTABLISHED,RELATED -j ACCEPT # Разрешить входящий ICMP $IPT -A INPUT -i $PUBIF -p icmp -j ACCEPT $IPT -A OUTPUT -o $PUBIF -p icmp -j ACCEPT # Разрешить SSH $IPT -A INPUT -i $PUBIF -p tcp -m tcp --dport 22 -j ACCEPT $IPT -A OUTPUT -o $PUBIF -p tcp -m tcp --sport 22 -j ACCEPT # Разрешить HTTP $IPT -A INPUT -i $PUBIF -p tcp -m tcp --dport 80 -j ACCEPT $IPT -A OUTPUT -o $PUBIF -p tcp -m tcp --sport 80 -j ACCEPT # Разрешить HTTPS $IPT -A INPUT -i $PUBIF -p tcp -m tcp --dport 443 -j ACCEPT $IPT -A OUTPUT -o $PUBIF -p tcp -m tcp --sport 443 -j ACCEPT # Открыть порт OpenVPN $IPT -A INPUT -i $PUBIF -m tcp -p tcp --dport 1723 -j ACCEPT $IPT -A INPUT -i $PUBIF -p gre -j ACCEPT $IPT -A OUTPUT -o $PUBIF -p tcp -m tcp --sport 1723 -j ACCEPT $IPT -A OUTPUT -o $PUBIF -p gre -j ACCEPT # Nat для VPN-подключения $IPT -t nat -A POSTROUTING -j SNAT --to-source $SRVIP # Логирование всего, что не попало под правила ACCEPT # $IPT -A INPUT -i $PUBIF -j LOG # Запретить весь входящий и исходящий трафик на всех сетевых интерфейсах # не попавший под правила ACCEPT вверху $IPT -A INPUT -j DROP $IPT -A OUTPUT -j ACCEPT # Записать настройки в конфигурационный файл iptables,. # настройки из которого загружаются сразу после перезагрузки $IPTS > $IPTCONF echo "IPv4 firewall configured, config saved to "$IPTCONF Конфигурация ip6tablesСкрипт ip6tables_conf_set для базовой конфигурации фаервола ip6tables протокола IPv6. ip6tables_conf_set - установка правил для ip6tables
#!/bin/bash ################################################## # ip6tables config # Source: http://petrenco.com/ubuntu.php?txt=561 ################################################## # Полный путь к ip6tables IPT6="/sbin/ip6tables" # Полный путь к ip6tables-save IPT6S="/sbin/ip6tables-save" # Полный путь к файлу, в котором будет сохранена конфигурация ip6tables IPT6CONF="/etc/ip6tables.conf" # Название сетевого интерфеса, к которому будут применены разрешающие правила # Название можно найти тут: /etc/network/interfaces PUBIF="eth0" # Состояние по умолчанию, устанавливаемое скриптом def_val="ACCEPT" # Таблицы iptables ipt_table[1]='filter' ipt_table[2]='nat' ipt_table[3]='mangle' ipt_table[4]='raw' ipt_table[5]='security' # Цепочки для каждой таблицы chain_filter=( INPUT OUTPUT FORWARD ) chain_nat=( PREROUTING INPUT OUTPUT POSTROUTING ) chain_mangle=( PREROUTING INPUT FORWARD OUTPUT POSTROUTING ) chain_raw=( PREROUTING OUTPUT ) chain_security=( INPUT OUTPUT FORWARD ) echo "Starting IPv6 firewall (ip6tables) configure" read -p "Are you sure to start (y/n): " start if [ "$start" != "y" ] then echo "Exit, no changes." exit fi echo "" echo "Step 1: clean old configuration" for i in "${!ipt_table[@]}"; do table=${ipt_table[$i]} chain=chain_$table chains='' # Сброс настроек ip6tables for c in $(eval echo "\${$chain[@]}"); do $IPT6 -t $table -P $c $def_val $IPT6 -t $table -F $IPT6 -t $table -X chains="${chains}$c, " done chains="${chains:0:-2}." echo " - Table \"$table\", chains: $chains - all setting cleared." done echo "" echo "Step 2: saved main configuration" # По умолчанию разрешить весь входящий, исходящий и запретить перенаправляемый трафик $IPT6 -P INPUT ACCEPT $IPT6 -P OUTPUT ACCEPT $IPT6 -P FORWARD DROP # Полный доступ интерфеса loopback $IPT6 -A INPUT -i lo -j ACCEPT $IPT6 -A OUTPUT -o lo -j ACCEPT # Разрешить весь исходящий трафик и инициированный им входящий $IPT6 -A INPUT -i $PUBIF -m state --state ESTABLISHED,RELATED -j ACCEPT $IPT6 -A OUTPUT -o $PUBIF -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT # Разрешить входящий ICMP $IPT6 -A INPUT -i $PUBIF -p ipv6-icmp -j ACCEPT $IPT6 -A OUTPUT -o $PUBIF -p ipv6-icmp -j ACCEPT # Здесь можно добавить свои правила, например открыть 80 порт по IPv6 # ... # Логирование всего, что не попало под правила ACCEPT $IPT6 -A INPUT -i $PUBIF -j LOG # Запретить весь входящий и исходящий трафик на всех сетевых интерфейсах # не попавший под правила ACCEPT вверху $IPT6 -A INPUT -j DROP $IPT6 -A OUTPUT -j DROP # Записать настройки в конфигурационный файл ip6tables, # настройки из которого загружаются сразу после перезагрузки $IPT6S > $IPT6CONF echo "IPv6 firewall configured, config saved to "$IPT6CONF
Опубликовано: 2016/04/02
HTML-код ссылки на эту страницу:
<a href="https://petrenco.com/linux.php?txt=561" target="_blank">Iptables - скрипты для конфигурирования</a> 4784
Добавить комментарий
|