Простые/общие вопросы по UNIX системам. Спросите здесь, если вы новичок
Модераторы: vadim64, terminus
Правила форума
Убедительная просьба юзать теги [cоde] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
-
lazhu
- сержант
- Сообщения: 252
- Зарегистрирован: 2013-08-10 14:28:38
-
Контактная информация:
Непрочитанное сообщение
lazhu » 2013-11-13 10:09:21
Их уже тьма тьмущая, но вопросов от этого меньше не становится.
Так что может кому и пригодится.
L2TP, таблицы, ядреный нат, прозрачный сквид, openvpn
Код: Выделить всё
#!/bin/sh
# Firewall command
fwcmd='/sbin/ipfw -q'
# Network interfaces
int_if="bge0" # Internal
ext_if="re0" # External (ISP network)
l2tp_if="ng0" # L2TP/PPTP (Internet)
vpn_if="tun0" # OpenVPN
# L2TP/PPTP IP address
l2tp_ip=`ifconfig ${l2tp_if} | awk '$1=="inet"{print $2}'`
# Netbios ports
netbios="81,137,138,139"
# Tables
nonroute="table(0)" # Nonroutable networks
squid="table(1)" # Squid users
# Flush all rules and tables
${fwcmd} flush
${fwcmd} table all flush
# Populate tables
for file in /etc/ipfw_*; do
table=`echo ${file} | awk -F '_' '{print $2}'`
for ip in `grep "^[0-9]" ${file}`; do
case ${table} in
nonroute)
${fwcmd} table 0 add ${ip};;
squid)
${fwcmd} table 1 add ${ip};;
esac
done
done
# Allow all on loopback
${fwcmd} add allow ip from any to any via lo0
# Transparent squid
${fwcmd} add fwd 127.0.0.1,3129 tcp from ${squid} to not me 80 in recv ${int_if}
# Allow all on local and OpenVPN networks
${fwcmd} add allow all from any to any via ${int_if}
${fwcmd} add allow all from any to any via ${vpn_if}
# Deny nonroutable networks and netbios incoming traffic on internet interface
${fwcmd} add deny ip from any to ${nonroute} in recv ${l2tp_if}
${fwcmd} add deny ip from ${nonroute} to any in recv ${l2tp_if}
${fwcmd} add deny ip from any ${netbios} to any in recv ${l2tp_if}
# Deny fragmented and broadcasted icmp packets
${fwcmd} add deny icmp from any to any frag
${fwcmd} add deny icmp from any to 255.255.255.255 via ${l2tp_if}
# NAT on external interface (ISP network)
${fwcmd} nat 1 config log if ${ext_if} reset same_ports deny_in
${fwcmd} add nat 1 ip from any to any via ${ext_if}
# NAT on L2TP/PPTP interface (Internet)
${fwcmd} nat 2 config log if ${l2tp_if} reset same_ports deny_in\
redirect_port udp ${l2tp_ip}:1194 1194\ # Local OpenVPN server
redirect_port tcp ${l2tp_ip}:80 80\ # Local Web server
${fwcmd} add nat 2 ip from any to any via ${l2tp_if}
# Default deny
${fwcmd} add deny log all from any to any
lazhu
-
Хостинг HostFood.ru
-
Хостинг HostFood.ru
Тарифы на хостинг в России, от 12 рублей:
https://www.host-food.ru/tariffs/hosting/
Тарифы на виртуальные сервера (VPS/VDS/KVM) в РФ, от 189 руб.:
https://www.host-food.ru/tariffs/virtualny-server-vps/
Выделенные сервера, Россия, Москва, от 2000 рублей (HP Proliant G5, Intel Xeon E5430 (2.66GHz, Quad-Core, 12Mb), 8Gb RAM, 2x300Gb SAS HDD, P400i, 512Mb, BBU):
https://www.host-food.ru/tariffs/vydelennyi-server-ds/
Недорогие домены в популярных зонах:
https://www.host-food.ru/domains/
-
Alex Keda
- стреляли...
- Сообщения: 35427
- Зарегистрирован: 2004-10-18 14:25:19
- Откуда: Made in USSR
-
Контактная информация:
Непрочитанное сообщение
Alex Keda » 2014-01-30 22:42:25
у меня круче есть - оно ещё само порты которые банить надо определяет по именам файлов

--
на хостинге юзаю, чтоб автопилоты тупо IP скидывали в файлы, а файрволл на старте сам разбирался из какого файла какой порт надо побанить
Код: Выделить всё
#!/bin/sh
# path
PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/sbin:/usr/local/bin
# бинариник файрволла
FwCMD="/sbin/ipfw -q"
# директория где живём
basedir="/root/scripts/ipfw"
# файлы локальных таблиц
basedir_local="/root/scripts/db"
# ограничиваем полосу
IdIn="1"
IdOut="2"
IdMail="3"
IdUDP="4"
LanLocal="91.227.16.0/22,77.73.24.0/21" # our lan, gptel lan
BwIn="70" # 70 Mbit
BwOut="80" # 80 Mbit
BwMail="64" # bit/s
BwUDP="1"
# tmp file
tmp="/tmp/$$"
# файлы таблиц
table_list="`ls $basedir | grep table`"
table_list_local="`ls $basedir_local | grep table`"
# список портов
port_list="`ls $basedir | grep table | awk -F '.' '{print $2}'`"
port_list_local="`ls $basedir_local | grep table | awk -F '.' '{print $2}'`"
#echo $table_list
# отключаем файрволл
#${FwCMD} disable firewall
# сбрасываем все правила
${FwCMD} -f flush
# сбрасываем все pipe
${FwCMD} -f pipe flush
# сбрасываем очереди
${FwCMD} -f queue flush
# разрешаем ходить самому на себя
${FwCMD} add allow all from me to me
# Запрещаем заблокированным хостам указанные порты - глобально
for port in $port_list
do
# строим временный файл для загрузки парвил
echo -n > $tmp.$port.global
for ip in `cat $basedir/table.$port.txt | grep -v ^# | grep -v ^\$ | sort | uniq`
do
echo "table $port add $ip" >> $tmp.$port.global
done
# очищаем таблицу
${FwCMD} table $port flush
# добавляем правило в файрволл
${FwCMD} add drop ip from "table($port)" to me $port
# заполняем таблицу из временного файла
${FwCMD} $tmp.$port.global &
done
# Запрещаем заблокированным хостам указанные порты - локально
for port in $port_list_local
do
# добавляем правило в файрволл - если такой таблицы нет локально
if test -f $basedir/table.$port.txt
then
# есть
else
${FwCMD} table $port flush
${FwCMD} add drop ip from "table($port)" to me $port
fi
# строим временный файл для загрузки прaвил
echo -n > $tmp.$port.local
for ip in `cat $basedir_local/table.$port.txt | grep -v ^# | grep -v ^\$ | sort | uniq`
do
echo "table $port add $ip" >> $tmp.$port.local
done
# заполняем таблицу из временного файла
${FwCMD} $tmp.$port.local &
done
# Запрет X-сканирования:
${FwCMD} add reject log tcp from any to any tcpflags fin, syn, rst, psh, ack, urg
# Запрет N-сканирования:
${FwCMD} add reject log tcp from any to any tcpflags !fin, !syn, !rst, !psh, !ack, !urg
# Запрет FIN-сканирования:
${FwCMD} add reject log tcp from any to any not established tcpflags fin
# Защита от спуфинга
${FwCMD} add drop log ip from any to any not verrevpath in
# прикрываем memcached снаружи
${FwCMD} add drop tcp from not me to me 11211
${FwCMD} add drop udp from not me to me 11211
# запрещаем доступ к неоторым адресам/сетям
if test -f $basedir_local/ipfw.drop.from.me.txt
then
${FwCMD} table 1 flush
for ip in `cat $basedir_local/ipfw.drop.from.me.txt | grep -v ^# | grep -v ^\$ | sort | uniq`
do
${FwCMD} table 1 add $ip
done
${FwCMD} add drop ip from me to "table(1)"
fi
# named странно себя ведёт. создаёт большой трафф на другие сервера.
#${FwCMD} add drop log udp from me to not 91.227.16.10,91.227.17.11 dst-port 53 uid bind
# ограничиваем полосу
if [ `hostname -s` != "bkp0" ]
then
${FwCMD} pipe $IdIn config bw ${BwIn}Mbit/s
${FwCMD} pipe $IdOut config bw ${BwOut}Mbit/s
${FwCMD} pipe $IdMail config bw ${BwMail}bit/s
${FwCMD} pipe $IdUDP config bw ${BwUDP}Mbit/s
${FwCMD} add pipe $IdOut ip from me to not $LanLocal
${FwCMD} add pipe $IdUDP udp from not $LanLocal to me
${FwCMD} add pipe $IdIn ip from not $LanLocal to me
${FwCMD} add pipe $IdMail tcp from me to not me 25 not uid mailnull
fi
# Ограничиваем кол-во подключений с одного IP
# FTP
${FwCMD} add allow tcp from not me to me 21 setup limit src-addr 16
# просто разрешаем подключения на 80 порт. проблемы числа коннектов
# придётся переложить на nginx - пока, больше проблем от ограничения на
# число динамических правил...
${FwCMD} add allow tcp from not me to me 80 #setup limit src-addr 32
# SSL
${FwCMD} add allow tcp from not me to me 443 setup limit src-addr 16
# apache
${FwCMD} add allow tcp from not me to me 8080 setup limit src-addr 1
# limit all ports
${FwCMD} add allow tcp from any to me setup limit src-addr 32
# ограничиваем число одновременных соединений наружу с сервера на 25 порт других
# серверов, для всех кроме юзера mailnull
if [ "`hostname -s`" != "bkp0" ]
then
${FwCMD} add allow log logamount 100000 tcp from me to not me 25 not uid mailnull setup limit src-addr 1
fi
#else
# # unlimit connects to mysql
# ${FwCMD} add allow tcp from any to me not 3306 setup limit src-addr 32
# ${FwCMD} add allow tcp from any to me 3306 setup limit src-addr 50
#fi
# added by lissyara 2009-10-04 in 01:44
${FwCMD} add allow tcp from any to any
${FwCMD} add allow udp from any to any
${FwCMD} add allow all from any to any
# включаем файрволл
${FwCMD} enable firewall
/sbin/sysctl net.inet.ip.fw.enable=1
# удаляем врменный файл
sleep 5 && rm -f $tmp.* &
# удаляем кору, если она есть
rm -f ipfw.core
но это так, на посмотреть.
такие вещщи пишутся индивидуально
Убей их всех! Бог потом рассортирует...
Alex Keda