Видео смотреть бесплатно

Смотреть вк видео

Официальный сайт oriflame100 24/7/365

Смотреть видео бесплатно

uscr 17.03.2011 11:31

СкриптыНа оценку: Скрипт быстрого проброса портов

В ответ на пост с предложением выносить свои скрипты на суд гуру. Представляю вашему вниманию скрипт для быстрого проброса порта с внешнего интерфейса во внутреннюю сеть. Справку по использованию можно найти в самом скрипте.

  1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
#!/bin/bash

#MAILTO: d n @ c s t e c h . r u

#При вызове передаём скрипту директиву, внешний порт, адрес и внутренний порт.
#Типа так: getport addport 4242 192.168.0.100 80
#Пробросит внешний порт 4242 внутрь на 192.168.0.100:80

#TODO:
#Научить скрипт выдирать INET_IP из интерфейса eth0

MAIN_SCRIPT_PATH="/etc/firewall-rules.sh" #Используется только в подсказке.

LOG_FILE="/var/portman/log"
TMP_LOG_FILE="/tmp/portmontmp"
DATE="/bin/date"
IPTABLES="/sbin/iptables"
SED="/bin/sed"
CAT="/bin/cat"

INET_IP="123.4.567.890"

addport () {
if < `whoami` != "root" >
then
echo ""
echo "Ничего не выйдет! Ты не root."
echo ""
exit 1
fi


echo "Добавляем проброс с $INET_IP:$1 на $2:$3? (y - yes)"
read Keypress

case "$Keypress" in
"y")
$IPTABLES -A tcp_packets -p TCP -s 0/0 --dport $1 -j allowed
if < $? -ne 0 >
then
echo ""
echo "Случилась беда! $IPTABLES не принял наши правила."
echo ""
exit 1
fi
$IPTABLES -t nat -A PREROUTING -p tcp --dport $1 -d $INET_IP -j DNAT --to-destination $2:$3
if < $? -ne 0 >
then
echo ""
echo "Случилась беда! $IPTABLES не принял наши правила."
echo ""
exit 1
fi

NOW_DATE=`$DATE`
echo "$NOW_DATE Для $INET_IP:$1 добавлен проброс на $2:$3" >> $LOG_FILE

echo "iptables -A tcp_packets -p TCP -s 0/0 --dport $1 -j allowed"
echo "iptables -t nat -A PREROUTING -p tcp --dport $1 -d $INET_IP -j DNAT --to-destination $2:$3"
;;
*)
echo ""
echo "Отменено"
exit 0
esac
}

rmport () {
if < `whoami` != "root" >
then
echo ""
echo "Ничего не выйдет! Ты не root."
echo ""
exit 1
fi

echo "Удаляем проброс с $INET_IP:$1 на $2:$3? (y - yes)"
read Keypress

case "$Keypress" in
"y")
$IPTABLES -D tcp_packets -p TCP -s 0/0 --dport $1 -j allowed
if < $? -ne 0 >
then
echo ""
echo "Случилась беда! $IPTABLES не принял наши правила."
echo ""
exit 1
fi
$IPTABLES -t nat -D PREROUTING -p tcp --dport $1 -d $INET_IP -j DNAT --to-destination $2:$3
if < $? -ne 0 >
then
echo ""
echo "Случилась беда! $IPTABLES не принял наши правила."
echo ""
exit 1
fi

$CAT $LOG_FILE > $TMP_LOG_FILE
$SED "/$INET_IT.*$1.*$2.*$3/d" $TMP_LOG_FILE > $LOG_FILE

echo "iptables -D tcp_packets -p TCP -s 0/0 --dport $1 -j allowed"
echo "iptables -t nat -D PREROUTING -p tcp --dport $1 -d $INET_IP -j DNAT --to-destination $2:$3"
;;
*)
echo ""
echo "Отменено"
exit 0
esac
}

usage () {
echo ""
echo "Скрипт для быстрого добавления\удаления проброса с внешнего интерфейса."
echo "В некотором роде является оболочкой для iptables."
echo "Основной скрипт правил брандмауера лежит в $MAIN_SCRIPT_PATH"
echo ""
echo "Для добавления проброса используется команда вида:"
echo ""
echo "portman addport 4242 192.168.0.50 80"
echo "Перенаправит запросы с 4242 порта внешнего интерфеса на 80 порт хоста 192.168.0.50"
echo ""
echo "portman rmport 4242 192.168.0.50 80"
echo "Удалит вышеописанное перенаправление."
echo ""
echo "Скрипт должен запускаться с правами рута."
echo "Скрипт яростно нуждается в наличии файла $LOG_FILE и правах записи в него."
echo "В этом файле скрипт пытается вести актуальную базу добавленных портов."
echo "При удалении проброса, скрипт самостоятельно удаляет и соответствующую строчку в файле."
echo "ВАРНИНГ!!! После перезагрузки, в логе могут остатся мусорные записи для несуществующих правил."
echo "Это не опасно, но неприятно при ручном контроле."
echo ""
exit 1
}

case "$1" in
"addport")
addport $2 $3 $4
;;

"rmport")
rmport $2 $3 $4
;;

*)
usage
;;

esac

exit 0



Тэги: проброс портов скрипты
+ 8 -
Похожие Поделиться

kstep 18.03.2011 16:42 #
+ 0 -
Замени:
$CAT $LOG_FILE > $TMP_LOG_FILE
$SED "/$INET_IT.*$1.*$2.*$3/d" $TMP_LOG_FILE > $LOG_FILE


на:
$SED -i.bak -e "/$INET_IT.*$1.*$2.*$3/d" $LOG_FILE

Тогда сед будет прямо инлайн файл править, предыдущаю версия файла будет сохранена с расширением .bak.
uscr 18.03.2011 16:42 #
+ 0 -
Это круто. Спасибо.
slava sh. 18.03.2011 21:05 #
+ 0 -
$MAIN_SCRIPT_PATH не нужен, потому что есть $0.
uscr 27.03.2011 17:26 #
+ 0 -
Это путь до скрипта с правилами, который запускается при старте системы.

Смотреть онлайн бесплатно

Онлайн видео бесплатно


Смотреть русское с разговорами видео

Online video HD

Видео скачать на телефон

Русские фильмы бесплатно

Full HD video online

Смотреть видео онлайн

Смотреть HD видео бесплатно

School смотреть онлайн