Создание задач в сервисе «planfix» через отправку e-mail.
Настройка iptables Описание: в данной статье будут описаны два скрипа управления межсетевым экраном iptables, а так же основные средства внесения настроек и изменений. Базовая настройка iptables через скрипт shielder.sh Не всегда удобно оперировать с консолью в целях настройки файервола: требуется держать в памяти команды редактирования, их передаваемые им аргументы, распределение по интерфейсам сервера и прочие […]
Настройка iptables
Описание: в данной статье будут описаны два скрипа управления межсетевым экраном iptables, а так же основные средства внесения настроек и изменений.
- Базовая настройка iptables через скрипт shielder.sh
Не всегда удобно оперировать с консолью в целях настройки файервола: требуется держать в памяти команды редактирования, их передаваемые им аргументы, распределение по интерфейсам сервера и прочие тонкости. Поэтому в целях «быстрого старта» и компенсации времени затрачиваемых на настройку был написан скрипт отвечающий настройкам минимальной безопасности. Его исходный код с комментариями представлен ниже:
#!/bin/bash
# Приложение
IPT="iptables"
# Внешний интерфейс
WAN=eth1
# Локальная сеть
LAN=eth0
# Очищаем правила
$IPT -F
$IPT -F -t nat
$IPT -F -t mangle
$IPT -X
$IPT -t nat -X
$IPT -t mangle -X
# Запрещаем все, что не разрешено
$IPT -P INPUT DROP
$IPT -P OUTPUT DROP
$IPT -P FORWARD DROP
# Разрешаем localhost и локалку
$IPT -A INPUT -i lo -j ACCEPT
$IPT -A INPUT -i $LAN -j ACCEPT
$IPT -A OUTPUT -o lo -j ACCEPT
$IPT -A OUTPUT -o $LAN -j ACCEPT
# Рзрешаем пинги
$IPT -A INPUT -p icmp --icmp-type echo-reply -j ACCEPT
$IPT -A INPUT -p icmp --icmp-type destination-unreachable -j ACCEPT
$IPT -A INPUT -p icmp --icmp-type time-exceeded -j ACCEPT
$IPT -A INPUT -p icmp --icmp-type echo-request -j ACCEPT
# Разрешаем исходящие подключения сервера
$IPT -A OUTPUT -o $WAN -j ACCEPT
#$IPT -A INPUT -i $WAN -j ACCEPT
# разрешаем установленные подключения
$IPT -A INPUT -p all -m state --state ESTABLISHED,RELATED -j ACCEPT
$IPT -A OUTPUT -p all -m state --state ESTABLISHED,RELATED -j ACCEPT
$IPT -A FORWARD -p all -m state --state ESTABLISHED,RELATED -j ACCEPT
# Отбрасываем неопознанные пакеты
$IPT -A INPUT -m state --state INVALID -j DROP
$IPT -A FORWARD -m state --state INVALID -j DROP
# Отбрасываем нулевые пакеты
$IPT -A INPUT -p tcp --tcp-flags ALL NONE -j DROP
# Закрываемся от syn-flood атак
$IPT -A INPUT -p tcp ! --syn -m state --state NEW -j DROP
$IPT -A OUTPUT -p tcp ! --syn -m state --state NEW -j DROP
# Блокируем доступ с указанных адресов
#$IPT -A INPUT -s 84.122.21.197 -j REJECT
# Пробрасываем порт в локалку
#$IPT -t nat -A PREROUTING -p tcp --dport 23543 -i ${WAN} -j DNAT --to 10.1.3.50:3389
#$IPT -A FORWARD -i $WAN -d 10.1.3.50 -p tcp -m tcp --dport 3389 -j ACCEPT
# Разрешаем доступ из локалки наружу
$IPT -A FORWARD -i $LAN -o $WAN -j ACCEPT
# Закрываем доступ снаружи в локалку
$IPT -A FORWARD -i $WAN -o $LAN -j REJECT
# Открываем порты
$IPT -A INPUT -i $WAN -p tcp --dport 22 -j ACCEPT -m comment --comment "SSH"
$IPT -A INPUT -p tcp -m tcp --dport 80 -j ACCEPT -m comment --comment "WEB"
$IPT -A INPUT -p tcp -m tcp --dport 443 -j ACCEPT -m comment --comment "WEB"
$IPT -A INPUT -p udp -m udp --dport 5060 -j ACCEPT -m comment --comment "SIP"
$IPT -A INPUT -p udp -m udp --dport 4569 -j ACCEPT -m comment --comment "IAX2"
$IPT -A INPUT -p udp -m udp --dport 36600:39999 -j ACCEPT -m comment --comment "RTP"
# Сохраняем правила
/sbin/iptables-save > /etc/sysconfig/iptables
Как видно, в нём уже хранятся некоторые правила разрешения и запрета передачи пакетов по портам и ip-адресам. Внося некоторые правки, копируя уже существующие правила или дописывая собственные гораздо удобнее производить настройки. А главное в разы сокращается возможность «отрезать» самому себе доступ.
Чтобы узнать как формируются новые правила для скрипта, а так же ручного выполнения изменений обратитесь к п.3 данной статьи. Там будет приведено краткое описание возможных операций.
2. Использование скрипта different.sh
Что же делать если правки iptables уже, возможно были произведены в «ручном режиме»? Применение скрипта настройки – сотрёт все правила установленные до его запуска. Можно, конечно, выполнить «выгрузку» текущих правил, но можно сделать и иначе: воспользоваться скриптом сравнения этой самой «выгрузки» и скрипта настройки shielder.sh Вот его исходный код:
#!/bin/bash
clear
r="\033[0;31m"
g="\033[0;32m"
y="\033[0;33m"
n="\033[0m"
echo -e "${y}[ status : start ] ${n}"
echo -e "${y}[ status : create file] ${n}"
service iptables save
cp fw_iptables.sh fw_iptables.sh.backup
iptables-save > firewall-to-verifing
# ======= Проверка успешности выгрузки =======
if [ -f "firewall-to-verifing" ]; then
echo -e "${g}Файл текущей конфигурации файервола успешно создан и открыт ${n}"
else
echo -e "${r}Не удалось создать и\или найти файл настроек файервола. Выполнение будет прервано${n}"
echo -e "${y}[ status : faild ] ${n}"
exit 0
fi
echo -e "${y}[ status : start verifing ip-address ] ${n}"
# ======= Проверка ip адресов: выгрузка -> скрипт =======
yi=0
ni=0
while read line
do
line=${line##*'-s'}
line=${line%%'-i'*}
line=${line%%'-j'*}
line=${line%%'/'*}
if [ "${line:0:1}" == " " ]; then
try=$( fgrep "$line" /root/fw_iptables.sh )
if [ "$try" == "" ]; then
echo -e "${r}Не найден в fw_iptables.sh :$line ${n}"
let "ni=ni+1"
else
echo -e "${g}Найден в fw_iptables.sh :$line ${n}"
let "yi=yi+1"
fi
fi
done < firewall-to-verifing
echo -e "${y}[ status : start verifing ports ] ${n}"
# ======= Проверка портов: выгрузка -> скрипт =======
yp=0
np=0
while read line
do
line=${line##*'-m tcp'}
line=${line##*'-m udp'}
line=${line##*'-m icmp'}
line=${line##*'-m limit'}
line=${line%%' -j'*}
if [ "${line:0:1}" == " " ] && [ "${line:0:4}" != " --t" ] && [ "${line:0:2}" != " !" ]; then
# ------------ Подмена номеров портов icmp на названия ------------
if [ "${line: -3}" == "e 8" ]; then
line=${line%?}"echo-request"
fi
if [ "${line: -3}" == "3/4" ]; then
line=${line%???}"fragmentation-needed"
fi
if [ "${line: -3}" == " 11" ]; then
line=${line%??}"time-exceeded"
fi
# -----------------------------------------------------------------
try=$( fgrep "$line" /root/fw_iptables.sh )
if [ "$try" == "" ]; then
echo -e "${r}Не найден в fw_iptables.sh :$line ${n}"
let "np=np+1"
else
echo -e "${g}Найден в fw_iptables.sh :$line ${n}"
let "yp=yp+1"
fi
fi
done < firewall-to-verifing
echo -e "${y}[ status : result ] ${n}"
let "yp=yp+yi"
let "np=np+ni"
echo -e "${g}Обнаружено : "$yp" совпадений ${n}"
echo -e "${r}Обнаружено : "$np" различий ${n}"
echo -e "${y}[ status : verdict ] ${n}"
if [ "$np" == 0 ]; then
echo -e "${g}Конфигурация файервола соответствует скрипту настройки fw_iptables.sh, вмешательство не требуется ${n}"
else
echo -e "${r}Конфигурация файервола не соответствует скрипту fw_iptables.sh, требуется настройка ${n}"
fi
echo -e "${y}[ status : completed ] ${n}"
Для применения следует скопировать в файл на целевой системе с расширением filename.sh, сделать исполняемым, при необходимости повысить права и выполнить из консоли через
./filename.sh
Выполнение скрипта возможно из любой директории. При запуске создается файл выгрузки, копирование файла скрипта fw_iptables.sh в fw_iptables.backup и построчное сравнение двух файлов.
Пример работы с нормальным результатом
Пример работы с портом который есть в выгрузке, но отсутствует в скрипте и, как следствие, при выполнении скрипта будет закрыт:
- Установка и настройка «с нуля»
Важным шагом после установки новой системы является ее защита от вредоносного ПО. Особенно это касается серверов и прочего оборудования подключенного к сети Интернет. Пример команд выполняется от root-пользователя или с префиксом «sudo…»
Набор команд установки в систему:
Debian/Ubuntu
apt-get install ipset -y
apt-get install iptables -y
CentOS
yum install ipset –y
yum install iptables –y
Команды запуска и остановки имеют следующий вид:
Debian/Ubuntu
/etc/init.d/iptables start [stop]
CentOS
service iptables start [stop]
Для отображения настроенных разрешений служит команда:
iptables –L -nv
На данном этапе получим примерно такой результат
Заметим, что по умолчанию, с момента установки присутствуют три цепочки: INPUT, FORWARD и OUTPUT, которые в данный момент не содержат в себе правил. Приступим к созданию.
Есть два типа цепочек, разрешающие и запрещающие: ACCEPT и DROP соответственно. Рассмотрим на примерах.
iptables --policy INPUT DROP
Запрещает весь входящий трафик.
Отмена предыдущей команды:
iptables --policy INPUT ACCEPT
То же самое применимо и для остальных цепочек. Т.е. в целом синтаксис:
iptables --policy [INPUT|FORWARD|OUTPUT] [DROP|ACCEPT]
То что следует знать, но не применять. Для удаления правил служит параметр –F.
iptables –F [|INPUT|FORWARD|OUTPUT]
Пустой первый блок – это не ошибка. Если применить команду без указания цепочки, будут удалены все правила iptables.
Но на текущий момент у нас все еще нет этих правил. Добавляем.
iptables –A INPUT –p tcp --dport 80 –j ACCEPT
Поясним:
«-A» параметр указывающий на добавление нового правила
«INPUT» цепочка, которой правило будет принадлежать
«-p tcp» протокол передачи ([p]rotocol)
«—dport 80» ([d]estination [port])
Этим действием мы разрешили доступ по 80-у порту, который используется для доступа к web-серверу Apache или его аналогам.
Для примера закрытия порта рассмотрим запрет на исходящие обращения по ssh:
iptables –A OUTPUT –p tcp --dport 22 –j DROP
Разрешение и запрет ip-адресов:
iptables –A INPUT –s 192.168.170.0/24 –j [ACCEPT|DROP]
Возможно комбинирование с портом:
iptables –A OUTPUT –p tcp –s 0/0 --dport 22 –j [ACCEPT| DROP]
Практический пример применения iptables: разрешим пинг (icmp) на и с нашего сервера.
iptables –A [INPUT|OUTPUT] –p icmp --icmp-type 8 –j ACCEPT
4. Внесение изменений
Таким образом межсетевой экран настроен и функционирует, защищая нас от атак. Разберем настройку действующего файервола. Для этого нам понадобится:
- Применить правила которые были установлены ранее
service iptables save
2. Выгрузить настройки правил в файл. Путь и имя файла могут быть произвольными.
iptables-save > /tmp/firewall_rules
3. Произвести необходимые изменения в файле.
nano /tmp/firewall_rules
4. Восстановить правила из файла.
iptables-restore < /tmp/firewall_rules
5. Применить правила.
service iptables save
6. Перезапустить службы iptables и fail2ban
service iptables restart && service fail2ban restart
5. Другие полезные функции
Защита от «DDOS» атак средствами iptables.
iptables –A INPUT –p tcp --dport 80 –m limit --limit 10/minute --limit-burst 50 –j ACCEPT
Где:
«—limit 10/minute» период времени
«—limit-burst 50» количество успешных запросов
Логика: если в течении 10 минут превышен порог в 50 пакетов, то правило уже не выполнится. В связи с чем есть сложность: это правило должно сопровождаться запрещающей парой. Для примера выше это будет выглядеть как:
iptables –A INPUT –p tcp --dport 80 –m limit --limit 10/minute --limit-burst 50 –j ACCEPT
iptables –A INPUT –p tcp --dport 80 –j DROP
Защита от атаки вида «Ping-of-death»
iptables –A FORWARD –p tcp –icmp-type echo-request –m limit --limit 1/second –j ACCEPT
iptables –A FORWARD –p tcp –icmp-type echo-request –j DROP
Логика: запретить ответ на пинг (icmp) более чем раз в секунду.
Защита от «сканера портов»
iptables –N quarantine
iptables –A quarantine –p tcp --tcp-flags SYN,ACK,FIN,RST –m limit --limit 1/second –j RETURN
iptables –A quarantine –j DROP
Вывод: iptables простой, доступный и довольно гибкий инструмент защиты доступа. Его настройки можно производить как в ручную, так и автоматически посредством скриптов. Однако, настоятельно рекомендуется не забывать делать резервные копии настроек и соблюдать осторожность, чтобы не отрезать доступ самому себе.
Остались вопросы?
Я - Виталий Шелест, менеджер компании Voxlink. Хотите уточнить детали или готовы оставить заявку? Укажите номер телефона, я перезвоню в течение 3-х секунд.
категории
- DECT
- Linux
- Вспомогательный софт при работе с Asterisk
- Интеграция с CRM и другими системами
- Интеграция с другими АТС
- Использование Elastix
- Использование FreePBX
- Книга
- Мониторинг и траблшутинг
- Настройка Asterisk
- Настройка IP-телефонов
- Настройка VoIP-оборудования
- Новости и Статьи
- Подключение операторов связи
- Разработка под Asterisk
- Установка Asterisk
VoIP оборудование
ближайшие курсы
Новые статьи
10 доводов в пользу Asterisk
Распространяется бесплатно.
Asterisk – программное обеспечение с открытым исходным кодом, распространяется по лицензии GPL. Следовательно, установив один раз Asterisk вам не придется дополнительно платить за новых абонентов, подключение новых транков, расширение функционала и прочие лицензии. Это приближает стоимость владения станцией к нулю.
Безопасен в использовании.
Любое программное обеспечение может стать объектом интереса злоумышленников, в том числе телефонная станция. Однако, сам Asterisk, а также операционная система, на которой он работает, дают множество инструментов защиты от любых атак. При грамотной настройке безопасности у злоумышленников нет никаких шансов попасть на станцию.
Надежен в эксплуатации.
Время работы серверов некоторых наших клиентов исчисляется годами. Это значит, что Asterisk работает несколько лет, ему не требуются никакие перезагрузки или принудительные отключения. А еще это говорит о том, что в районе отличная ситуация с электроэнергией, но это уже не заслуга Asterisk.
Гибкий в настройке.
Зачастую возможности Asterisk ограничивает только фантазия пользователя. Ни один конструктор шаблонов не сравнится с Asterisk по гибкости настройки. Это позволяет решать с помощью Asterisk любые бизнес задачи, даже те, в которых выбор в его пользу не кажется изначально очевидным.
Имеет огромный функционал.
Во многом именно Asterisk показал какой должна быть современная телефонная станция. За многие годы развития функциональность Asterisk расширилась, а все основные возможности по-прежнему доступны бесплатно сразу после установки.
Интегрируется с любыми системами.
То, что Asterisk не умеет сам, он позволяет реализовать за счет интеграции. Это могут быть интеграции с коммерческими телефонными станциями, CRM, ERP системами, биллингом, сервисами колл-трекинга, колл-бэка и модулями статистики и аналитики.
Позволяет телефонизировать офис за считанные часы.
В нашей практике были проекты, реализованные за один рабочий день. Это значит, что утром к нам обращался клиент, а уже через несколько часов он пользовался новой IP-АТС. Безусловно, такая скорость редкость, ведь АТС – инструмент зарабатывания денег для многих компаний и спешка во внедрении не уместна. Но в случае острой необходимости Asterisk готов к быстрому старту.
Отличная масштабируемость.
Очень утомительно постоянно возвращаться к одному и тому же вопросу. Такое часто бывает в случае некачественного исполнения работ или выбора заведомо неподходящего бизнес-решения. С Asterisk точно не будет такой проблемы! Телефонная станция, построенная на Asterisk может быть масштабируема до немыслимых размеров. Главное – правильно подобрать оборудование.
Повышает управляемость бизнеса.
Asterisk дает не просто набор полезных функций, он повышает управляемость организации, качества и комфортности управления, а также увеличивает прозрачность бизнеса для руководства. Достичь этого можно, например, за счет автоматизации отчетов, подключения бота в Telegram, санкционированного доступа к станции из любой точки мира.
Снижает расходы на связь.
Связь между внутренними абонентами IP-АТС бесплатна всегда, независимо от их географического расположения. Также к Asterisk можно подключить любых операторов телефонии, в том числе GSM сим-карты и настроить маршрутизацию вызовов по наиболее выгодному тарифу. Всё это позволяет экономить с первых минут пользования станцией.