]> git.ipfire.org Git - people/teissler/ipfire-2.x.git/blame - config/forwardfw/firewall-lib.pl
Forward Firewall: edited GPL-header
[people/teissler/ipfire-2.x.git] / config / forwardfw / firewall-lib.pl
CommitLineData
2a81ab0d
AM
1#!/usr/bin/perl
2###############################################################################
3# #
4# IPFire.org - A linux based firewall #
5bee9a9d 5# Copyright (C) 2013 Alexander Marx <amarx@ipfire.org> #
2a81ab0d
AM
6# #
7# This program is free software: you can redistribute it and/or modify #
8# it under the terms of the GNU General Public License as published by #
9# the Free Software Foundation, either version 3 of the License, or #
10# (at your option) any later version. #
11# #
12# This program is distributed in the hope that it will be useful, #
13# but WITHOUT ANY WARRANTY; without even the implied warranty of #
14# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the #
15# GNU General Public License for more details. #
16# #
17# You should have received a copy of the GNU General Public License #
18# along with this program. If not, see <http://www.gnu.org/licenses/>. #
19# #
20###############################################################################
2a81ab0d
AM
21
22use strict;
23no warnings 'uninitialized';
24
25package fwlib;
26
27my %customnetwork=();
28my %customhost=();
29my %customgrp=();
30my %customservice=();
31my %customservicegrp=();
32my %ccdnet=();
33my %ccdhost=();
34my %ipsecconf=();
35my %ipsecsettings=();
36my %netsettings=();
37my %ovpnsettings=();
38
39require '/var/ipfire/general-functions.pl';
40
41my $confignet = "${General::swroot}/fwhosts/customnetworks";
42my $confighost = "${General::swroot}/fwhosts/customhosts";
43my $configgrp = "${General::swroot}/fwhosts/customgroups";
44my $configsrv = "${General::swroot}/fwhosts/customservices";
45my $configsrvgrp = "${General::swroot}/fwhosts/customservicegrp";
46my $configccdnet = "${General::swroot}/ovpn/ccd.conf";
47my $configccdhost = "${General::swroot}/ovpn/ovpnconfig";
48my $configipsec = "${General::swroot}/vpn/config";
49my $configovpn = "${General::swroot}/ovpn/settings";
50my $val;
51my $field;
52
53&General::readhash("/var/ipfire/ethernet/settings", \%netsettings);
54&General::readhash("${General::swroot}/ovpn/settings", \%ovpnsettings);
55&General::readhash("${General::swroot}/vpn/settings", \%ipsecsettings);
56
57
58&General::readhasharray("$confignet", \%customnetwork);
59&General::readhasharray("$confighost", \%customhost);
60&General::readhasharray("$configgrp", \%customgrp);
61&General::readhasharray("$configccdnet", \%ccdnet);
62&General::readhasharray("$configccdhost", \%ccdhost);
63&General::readhasharray("$configipsec", \%ipsecconf);
64&General::readhasharray("$configsrv", \%customservice);
65&General::readhasharray("$configsrvgrp", \%customservicegrp);
66
67sub get_srv_prot
68{
69 my $val=shift;
992394d5 70 foreach my $key (sort {$a <=> $b} keys %customservice){
2a81ab0d
AM
71 if($customservice{$key}[0] eq $val){
72 if ($customservice{$key}[0] eq $val){
73 return $customservice{$key}[2];
74 }
75 }
76 }
77}
78sub get_srvgrp_prot
79{
80 my $val=shift;
81 my @ips=();
82 my $tcp;
83 my $udp;
84 my $icmp;
992394d5 85 foreach my $key (sort {$a <=> $b} keys %customservicegrp){
2a81ab0d
AM
86 if($customservicegrp{$key}[0] eq $val){
87 if (&get_srv_prot($customservicegrp{$key}[2]) eq 'TCP'){
88 $tcp=1;
89 }elsif(&get_srv_prot($customservicegrp{$key}[2]) eq 'UDP'){
90 $udp=1;
91 }elsif(&get_srv_prot($customservicegrp{$key}[2]) eq 'ICMP'){
92 $icmp=1;
93 }
94 }
95 }
96 if ($tcp eq '1'){push (@ips,'TCP');}
97 if ($udp eq '1'){push (@ips,'UDP');}
98 if ($icmp eq '1'){push (@ips,'ICMP');}
99 my $back=join(",",@ips);
100 return $back;
101
102}
103
104
105sub get_srv_port
106{
107 my $val=shift;
108 my $field=shift;
109 my $prot=shift;
992394d5 110 foreach my $key (sort {$a <=> $b} keys %customservice){
2a81ab0d
AM
111 if($customservice{$key}[0] eq $val){
112 if($customservice{$key}[2] eq $prot){
113 return $customservice{$key}[$field];
114 }
115 }
116 }
117}
118sub get_srvgrp_port
119{
120 my $val=shift;
121 my $prot=shift;
122 my $back;
123 my $value;
124 my @ips=();
992394d5 125 foreach my $key (sort {$a <=> $b} keys %customservicegrp){
2a81ab0d
AM
126 if($customservicegrp{$key}[0] eq $val){
127 if ($prot ne 'ICMP'){
128 $value=&get_srv_port($customservicegrp{$key}[2],1,$prot);
129 }elsif ($prot eq 'ICMP'){
130 $value=&get_srv_port($customservicegrp{$key}[2],3,$prot);
131 }
132 push (@ips,$value) if ($value ne '') ;
133 }
134 }
135 if($prot ne 'ICMP'){
136 if ($#ips gt 0){$back="-m multiport --dports ";}else{$back="--dport ";}
137 }elsif ($prot eq 'ICMP'){
138 $back="--icmp-type ";
139 }
140
141 $back.=join(",",@ips);
142 return $back;
143}
144sub get_ipsec_net_ip
145{
146 my $val=shift;
147 my $field=shift;
992394d5 148 foreach my $key (sort {$a <=> $b} keys %ipsecconf){
2a81ab0d
AM
149 if($ipsecconf{$key}[1] eq $val){
150 return $ipsecconf{$key}[$field];
151 }
152 }
153}
154sub get_ipsec_host_ip
155{
156 my $val=shift;
157 my $field=shift;
992394d5 158 foreach my $key (sort {$a <=> $b} keys %ipsecconf){
2a81ab0d
AM
159 if($ipsecconf{$key}[1] eq $val){
160 return $ipsecconf{$key}[$field];
161 }
162 }
163}
164sub get_ovpn_n2n_ip
165{
166 my $val=shift;
167 my $field=shift;
992394d5 168 foreach my $key (sort {$a <=> $b} keys %ccdhost){
2a81ab0d
AM
169 if($ccdhost{$key}[1] eq $val){
170 return $ccdhost{$key}[$field];
171 }
172 }
173}
174sub get_ovpn_host_ip
175{
176 my $val=shift;
177 my $field=shift;
992394d5 178 foreach my $key (sort {$a <=> $b} keys %ccdhost){
2a81ab0d
AM
179 if($ccdhost{$key}[1] eq $val){
180 return $ccdhost{$key}[$field];
181 }
182 }
183}
184sub get_ovpn_net_ip
185{
186
187 my $val=shift;
188 my $field=shift;
992394d5 189 foreach my $key (sort {$a <=> $b} keys %ccdnet){
2a81ab0d
AM
190 if($ccdnet{$key}[0] eq $val){
191 return $ccdnet{$key}[$field];
192 }
193 }
194}
195sub get_grp_ip
196{
197 my $val=shift;
198 my $src=shift;
992394d5 199 foreach my $key (sort {$a <=> $b} keys %customgrp){
2a81ab0d
AM
200 if ($customgrp{$key}[0] eq $val){
201 &get_address($customgrp{$key}[3],$src);
202 }
203 }
204
205}
206sub get_std_net_ip
207{
208 my $val=shift;
ddcec9d3 209 my $con=shift;
2a81ab0d
AM
210 if ($val eq 'ALL'){
211 return "0.0.0.0/0.0.0.0";
212 }elsif($val eq 'GREEN'){
213 return "$netsettings{'GREEN_NETADDRESS'}/$netsettings{'GREEN_NETMASK'}";
214 }elsif($val eq 'ORANGE'){
215 return "$netsettings{'ORANGE_NETADDRESS'}/$netsettings{'ORANGE_NETMASK'}";
216 }elsif($val eq 'BLUE'){
217 return "$netsettings{'BLUE_NETADDRESS'}/$netsettings{'BLUE_NETMASK'}";
62fc8511 218 }elsif($val eq 'RED'){
ddcec9d3 219 return "0.0.0.0/0 -o $con";
2a81ab0d
AM
220 }elsif($val =~ /OpenVPN/i){
221 return "$ovpnsettings{'DOVPN_SUBNET'}";
222 }elsif($val =~ /IPsec/i){
223 return "$ipsecsettings{'RW_NET'}";
5d7faa45
AM
224 }elsif($val eq 'IPFire'){
225 return ;
2a81ab0d
AM
226 }
227}
228sub get_net_ip
229{
230 my $val=shift;
992394d5 231 foreach my $key (sort {$a <=> $b} keys %customnetwork){
2a81ab0d
AM
232 if($customnetwork{$key}[0] eq $val){
233 return "$customnetwork{$key}[1]/$customnetwork{$key}[2]";
234 }
235 }
236}
237sub get_host_ip
238{
239 my $val=shift;
240 my $src=shift;
992394d5 241 foreach my $key (sort {$a <=> $b} keys %customhost){
2a81ab0d
AM
242 if($customhost{$key}[0] eq $val){
243 if ($customhost{$key}[1] eq 'mac' && $src eq 'src'){
244 return "-m mac --mac-source $customhost{$key}[2]";
245 }elsif($customhost{$key}[1] eq 'ip' && $src eq 'src'){
246 return "$customhost{$key}[2]";
247 }elsif($customhost{$key}[1] eq 'ip' && $src eq 'tgt'){
248 return "$customhost{$key}[2]";
249 }elsif($customhost{$key}[1] eq 'mac' && $src eq 'tgt'){
250 return "none";
251 }
252 }
253 }
254}
255
256return 1;