====== Генератор правил iptables под Accel [Проверить] ======
===== Таблица прохода трафика =====
PACKET IN --->---PREROUTING---[ маршрутизация ]--->----FORWARD---->---POSTROUTING--->--- PACKET OUT
- raw | - mangle - mangle
- mangle | - filter - nat (src)
- nat (dst) | |
| |
| OUTPUT
INPUT - raw
- mangle - mangle
- filter - nat (dst)
| - filter
| |
`---->----[ приложение ]---->----'
===== Настройка скрипта =====
Для правильной работы, нужен установленный пакет ipset
Создать файл:
nano /etc/init.d/firewall
#!/bin/bash
#
# firewall
#
# chkconfig: - 97 20
#
### BEGIN INIT INFO
# Provides: firewall
# Required-Start: $network
# Required-Stop:
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Description: Mikbill firewall builder
### END INIT INFO
lock_path=/var/lock/firewall.lock
# Список IPSETов
ipset_list=(
nomoney
freezee
disabled
deleted
unknown
)
IPT=`which iptables`
IPS=`which ipset`
DIG=`which dig`
CTL=`which sysctl`
DNS_lookup="127.0.0.1"
# OUT интерфейс (интернет)
out_interface1="eth0"
# IP SRC-NAT для пользователей
out_ext_ip1="1.2.3.4"
# IP для редиректа на страницу заглушку
REDIRECT_IP="10.0.0.1"
# IP SRC-NAT для выхода на разрешенные IP
allowed_ext_ip="1.2.3.4"
# название IPSETа для разрешенных IP
allowed_ipset="allowed"
# Список разрешенных сайтов и IP
allowed_list=(
4.2.2.2
8.8.8.8
8.8.4.4
mikbill.ru
)
postrouting() {
# Очищаем NAT
$IPT -t nat -F POSTROUTING
# NAT для пользователей
$IPT -t nat -A POSTROUTING -s 10.0.0.0/24 -o $out_interface1 -j SNAT --to-source $out_ext_ip1
# NAT для разрешенных IP
$IPT -t nat -A POSTROUTING -m set --match-set $allowed_ipset dst -p tcp --dport 80 -o $out_interface1 -j SNAT --to-source $allowed_ext_ip
$IPT -t nat -A POSTROUTING -m set --match-set $allowed_ipset dst -p tcp --dport 443 -o $out_interface1 -j SNAT --to-source $allowed_ext_ip
echo "POSTROUTING done"
}
input() {
$IPT -F INPUT
# Если используете Fail2ban SSH
#$IPT -N fail2ban-ssh
#$IPT -A INPUT -p tcp -m multiport --dports 22 -j fail2ban-ssh
echo "INPUT done"
}
raw_rules() {
# очищаем RAW таблицы
$IPT -t raw -F PREROUTING
$IPT -t raw -F OUTPUT
echo "RAW rules done"
}
forward() {
# Очищаем FORWARD
$IPT -F FORWARD
# Пропускаем трафик к разрешенным IP
$IPT -A FORWARD -m set --match-set $allowed_ipset dst -j ACCEPT
# Блокируем трафик пользователей в IPSETах
for ipset_name in ${ipset_list[*]}
do
$IPT -A FORWARD -m set --match-set $ipset_name src -j REJECT --reject-with icmp-proto-unreach
done
echo "FORWARD done"
}
prerouting() {
# Очищаем PREROUTING
$IPT -t nat -F PREROUTING
# Пропускаем трафик к разрешенным IP
$IPT -t nat -A PREROUTING -m set --match-set $allowed_ipset dst -j ACCEPT
# Перенаправляем пользователей из IPSETов на страницы заглушки
$IPT -t nat -A PREROUTING -m set --match-set nomoney src -p tcp --dport 80 -j DNAT --to-destination $REDIRECT_IP:81
$IPT -t nat -A PREROUTING -m set --match-set freezee src -p tcp --dport 80 -j DNAT --to-destination $REDIRECT_IP:82
$IPT -t nat -A PREROUTING -m set --match-set disabled src -p tcp --dport 80 -j DNAT --to-destination $REDIRECT_IP:83
$IPT -t nat -A PREROUTING -m set --match-set deleted src -p tcp --dport 80 -j DNAT --to-destination $REDIRECT_IP:84
$IPT -t nat -A PREROUTING -m set --match-set unknown src -p tcp --dport 80 -j DNAT --to-destination $REDIRECT_IP:85
echo "PREROUTING done"
}
allow() {
# Очищаем IPSET разрешенных IP
$IPS -F $allowed_ipset
for row in ${allowed_list[*]}
do
# проверяем запись из списка разрешенных, явлияется ли она IP адресом
if [[ $row =~ ^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$ ]];
then
# добавляем этот IP в список разрешенных
$IPS add $allowed_ipset $row > /dev/null 2>&1
else
# запись оказалась доменом, резолвим его IP через dig
for ip in `$DIG $row +short @$DNS_lookup`
do
# добавляем полученные через dns IP адрес в список разрешенных
$IPS add $allowed_ipset $ip > /dev/null 2>&1
done
fi
done
echo "ALLOWED done"
}
start() {
if [ -f $lock_path ]; then
echo "Firewall is running"
exit 0
else
touch $lock_path
fi
echo "Start building firewall"
for ipset_name in ${ipset_list[*]}
do
$IPS -N $ipset_name iphash > /dev/null 2>&1
done
$IPS -N active iphash > /dev/null 2>&1
$IPS -N $allowed_ipset iphash > /dev/null 2>&1
allow
input
forward
prerouting
postrouting
raw_rules
$CTL -p > /dev/null 2>&1
echo "Firewall rules created"
}
stop() {
if [ ! -f $lock_path ]; then
echo "Firewall is stoped"
exit 0
else
rm -f $lock_path
fi
$IPT -F INPUT
$IPT -F FORWARD
$IPT -t nat -F
$IPT -t mangle -F
$IPT -t raw -F PREROUTING
$IPT -t raw -F OUTPUT
$IPT -P FORWARD ACCEPT
echo "FORWARD/NAT/RAW flushed"
$CTL -p > /dev/null 2>&1
}
show() {
$IPT -L INPUT -v -n --line-numbers
$IPT -L FORWARD -v -n --line-numbers
$IPT -t nat -L PREROUTING -v -n --line-numbers
$IPT -t nat -L POSTROUTING -v -n --line-numbers
$IPT -t raw -L -v -n --line-numbers
$IPS list $allowed_ipset
}
case "$1" in
start)
start
;;
stop)
stop
;;
restart)
stop
start
;;
allow)
allow
;;
input)
input
;;
forward)
forward
;;
pre)
prerouting
;;
post)
postrouting
;;
raw)
raw_rules
;;
show)
show
;;
*)
echo "Usage: $0 {start|stop|restart|allow|input|forward|pre|post|raw|show}"
esac
Дать права запуска:
chmod +x /etc/init.d/firewall
и добавить в автозагрузку:
chkconfig firewall on
Изменить значения под себя:\\
**DNS_lookup="127.0.0.1"** - IP DNS сервера для обработки доменов\\
**out_interface1="eth0"** - out интерфейс (интернет)\\
**out_ext_ip1="1.2.3.4"** - SRC-NAT IP адрес для абонентов\\
**allowed_ext_ip="1.2.3.4"** - SRC-NAT IP адрес при обращении на разрешенные узлы\\
**REDIRECT_IP="10.0.0.1"** - IP адрес страницы "[[config:nas_servers:accel:utility:accel_users_page|заглушки]]"\\
\\
**allowed_list** - список разрешенных сайтов/ip\\
\\
\\
В цепочке postrouting, изменить сеть абонентов 10.0.0.0/24 под себя:\\
# NAT для пользователей
$IPT -t nat -A POSTROUTING -s 10.0.0.0/24 -o $out_interface1 -j SNAT --to-source $out_ext_ip1
\\
В цепочке prerouting, измените порты(81,82,83,84,85) заглушек под свои (если нужно):\\
$IPT -t nat -A PREROUTING -m set --match-set nomoney src -p tcp --dport 80 -j DNAT --to-destination $REDIRECT_IP:81
$IPT -t nat -A PREROUTING -m set --match-set freezee src -p tcp --dport 80 -j DNAT --to-destination $REDIRECT_IP:82
$IPT -t nat -A PREROUTING -m set --match-set disabled src -p tcp --dport 80 -j DNAT --to-destination $REDIRECT_IP:83
$IPT -t nat -A PREROUTING -m set --match-set deleted src -p tcp --dport 80 -j DNAT --to-destination $REDIRECT_IP:84
$IPT -t nat -A PREROUTING -m set --match-set unknown src -p tcp --dport 80 -j DNAT --to-destination $REDIRECT_IP:85
\\
===== Использование =====
/etc/init.d/firewall start
Запустить (создает правила)\\
/etc/init.d/firewall stop
Остановить (удаляет все созданные правила)\\
/etc/init.d/firewall restart
Перезапустить (удаляет и заново создает правила)\\
/etc/init.d/firewall allow
Обновить список разрешенных сайтов/IP\\
/etc/init.d/firewall input
Обновить цепочку правил input\\
/etc/init.d/firewall forward
Обновить цепочку правил forward\\
/etc/init.d/firewall pre
Обновить цепочку правил prerouting\\
/etc/init.d/firewall post
Обновить цепочку правила postrouting\\
/etc/init.d/firewall show
Показать все правила и ipset разрешенных сайтов/IP\\
===== Домены платежных систем =====
Некоторые домены:\\
Liqpay и PrivatBank\\
www.liqpay.com
liqpay.com
static.liqpay.com
ecommerce.liqpay.com
api.privatbank.ua
login.privatbank.ua
privat24.privatbank.ua
www.privat24.ua
privat24.ua
liqpay.com
www.liqpay.com
static.liqpay.com
ecommerce.liqpay.com
fonts.googleapis.com
ajax.googleapis.com
my-payments-p24.privatbank.ua
themes.googleusercontent.com
www.google-analytics.com
google-analytics.com
ssl.google-analytics.com
widget.siteheart.com
static.siteheart.com
www.googleadservices.com
stats.g.doubleclick.net
googleads.g.doubleclick.net
qrapi.privatbank.ua
js.honeybadger.io
socauth.privatbank.ua
www.googletagmanager.com
st.privatbank.ua
services.privatbank.ua
mypayments.privatbank.ua
client.siteheart.com
fonts.gstatic.com
esapi.siteheart.com
crm.privatbank.ua
===== Страницы "заглушки" =====
[[config:nas_servers:accel:utility:accel_users_page]] для сервера Accel.\\