billing:nas_access_server:firewall_generator

Генератор правил 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
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 адрес страницы "заглушки"

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
  • billing/nas_access_server/firewall_generator.txt
  • Последнее изменение: 6 лет назад
  • alexd