04b5ee1f02837c3174d3f2d030f7d33b120fb55b
Benjamin Renard Initial commit

Benjamin Renard authored 10 years ago

1) #!/bin/bash
2) 
3) DEBUG=0
4) ADD_COMMENT=1
5) PERMIT='ACCEPT'
6) DENY='DROP'
7) 
8) IN=$1
9) [ ! -f "$IN" ] && echo "Usage : $0 [rule file] [add to iptables command] [-d]" && exit 1
10) 
11) ADD_TO_IPTABLES_CMD=$2
12) 
13) [ "$2" == "-d" -o "$3" == "-d" ] && DEBUG=1
14) 
15) function get_word() {
16) 	echo "$1"|awk "{print \$$2}"
17) }
18) 
19) function is_valid_ip() {
20) 	ip="$1"
21) 	if [ "$( echo "$ip"| egrep -c '^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$' )" == "1" ]
22) 	then
23) 		for i in $( seq 1 4 )
24) 		do
25) 			O=$( echo "$ip"|cut -d '.' -f $i )
26) 			[ $O -lt 0 -o $O -gt 254 ] && echo $i && return $i
27) 		done
28) 		echo 0
29) 		return 0
30) 	fi
31) 	echo 1
32) 	return 1
33) }
34) 
35) function convert_mask() {
36) 	mask="$1"
37) 	if [ "$( echo "$mask"| egrep -c '^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$' )" == "1" ]
38) 	then
39) 		NETMASK=""
40) 		for i in $( seq 1 4 )
41) 		do
42) 			O=$( echo "$mask"|cut -d '.' -f $i )
43) 			[ $O -lt 0 -o $O -gt 255 ] && echo "" && return $i
44) 			let o=255-O
45) 			NETMASK="$NETMASK.$o"
46) 		done
47) 		echo $NETMASK|sed 's/^\.//'
48) 		return 0
49) 	fi
50) 	echo ""
51) 	return 1
52) }
53) 
54) function convert_netmask_to_cidr() {
55) 	mask="$1"
56) 	if [ "$( echo "$mask"| egrep -c '^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$' )" == "1" ]
57) 	then
58) 		CIDR=0
59) 		for i in $( seq 1 4 )
60) 		do
61) 			O=$( echo "$mask"|cut -d '.' -f $i )
62) 			if [ "$O" == "0" ]
63) 			then
64) 				continue
65) 			elif [ "$O" == "128" ]
66) 			then
67) 				let CIDR=CIDR+1
68) 			elif [ "$O" == "192" ]
69) 			then
70) 				let CIDR=CIDR+2
71) 			elif [ "$O" == "224" ]
72) 			then
73) 				let CIDR=CIDR+3
74) 			elif [ "$O" == "240" ]
75) 			then
76) 				let CIDR=CIDR+4
77) 			elif [ "$O" == "248" ]
78) 			then
79) 				let CIDR=CIDR+5
80) 			elif [ "$O" == "252" ]
81) 			then
82) 				let CIDR=CIDR+6
83) 			elif [ "$O" == "254" ]
84) 			then
85) 				let CIDR=CIDR+7
86) 			elif [ "$O" == "255" ]
87) 			then
88) 				let CIDR=CIDR+8
89) 			else
90) 				echo ""
91) 				return $i
92) 			fi
93) 		done
94) 		echo $CIDR
95) 		return 0
96) 	fi
97) 	echo ""
98) 	return 1
99) }
100) 
101) function convert_ip_mask_to_arg() {
102) 	IP="$1"
103) 	MASK="$2"
104) 	CIDR="$( convert_netmask_to_cidr "$MASK" )"
105) 	if [ "$CIDR" == "" ]
106) 	then
107) 		echo "Error converting netmask $MASK to CIDR (Result : $CIDR | Code : $?). Stop." > /dev/stderr
108) 		echo ""
109) 		return 1
110) 	elif [ "$CIDR" == "32" ]
111) 	then
112) 		echo "$IP"
113) 	elif [ "$CIDR" == "0" -a "$IP" == "0.0.0.0" ]
114) 	then
115) 		echo "0/0"
116) 	else
117) 		echo "$IP/$CIDR"
118) 	fi
119) }
120) 
121) function print_acl_details() {
122) 	echo "ACL : $line
123) Action : $ACL_ACTION
124) Protocole : $ACL_PROTO
125) Groupe : $ACL_GROUP
126) Source : $ACL_SRC_NET/$ACL_SRC_MASK
127) Source services : '$ACL_SRC_PORTS'
128) Destination : $ACL_DST_NET/$ACL_DST_MASK
129) Destination services : '$ACL_DST_PORTS'"
130) }
131) 
132) function convert_2_iptables_cmd() {
133) 	MULTIPORTS=0
Benjamin Renard Fix 'add to iptables comman...

Benjamin Renard authored 10 years ago

134) 	CMD="iptables -I FORWARD $ADD_TO_IPTABLES_CMD"
135) 	[ "$ACL_PROTO" != 'ip' ] && CMD="$CMD -p $ACL_PROTO"