]> git.ipfire.org Git - ipfire-2.x.git/blob - html/cgi-bin/tripwire.cgi
Tripwire Gui integrierto>
[ipfire-2.x.git] / html / cgi-bin / tripwire.cgi
1 #!/usr/bin/perl
2 #
3 # IPFire CGIs
4 #
5 # This code is distributed under the terms of the GPL
6 #
7 # (c) The IPFire Team
8
9 use strict;
10 # enable only the following on debugging purpose
11 use warnings;
12 use CGI::Carp 'fatalsToBrowser';
13
14 require '/var/ipfire/general-functions.pl';
15 require "${General::swroot}/lang.pl";
16 require "${General::swroot}/header.pl";
17
18 my %tripwiresettings = ();
19 my %checked = ();
20 my %netsettings = ();
21 my $message = "";
22 my $errormessage = "";
23 my @Logs = qx(ls /var/ipfire/tripwire/report/);
24 my $Log =$Lang::tr{'no log selected'};
25
26 ############################################################################################################################
27 ################################################# Tripwire Default Variablen ################################################
28
29 $tripwiresettings{'ROOT'} = '/usr/sbin';
30 $tripwiresettings{'POLFILE'} = '/var/ipfire/tripwire/tw.pol';
31 $tripwiresettings{'DBFILE'} = '/var/ipfire/tripwire/$(HOSTNAME).twd';
32 $tripwiresettings{'REPORTFILE'} = '/var/ipfire/tripwire/report/$(HOSTNAME)-$(DATE).twr';
33 $tripwiresettings{'SITEKEYFILE'} = '/var/ipfire/tripwire/site.key';
34 $tripwiresettings{'LOCALKEYFILE'} = '/var/ipfire/tripwire/$(HOSTNAME)-local.key';
35 $tripwiresettings{'EDITOR'} = '/usr/bin/vi';
36 $tripwiresettings{'LATEPROMPTING'} = 'false';
37 $tripwiresettings{'LOOSEDIRECTORYCHECKING'} = 'false';
38 $tripwiresettings{'MAILNOVIOLATIONS'} = 'false';
39 $tripwiresettings{'EMAILREPORTLEVEL'} = '3';
40 $tripwiresettings{'REPORTLEVEL'} = '3';
41 $tripwiresettings{'MAILMETHOD'} = 'SENDMAIL';
42 $tripwiresettings{'SMTPHOST'} = 'ipfire.myipfire.de';
43 $tripwiresettings{'SMTPPORT'} = '25';
44 $tripwiresettings{'SYSLOGREPORTING'} = 'false';
45 $tripwiresettings{'MAILPROGRAM'} = '/usr/sbin/sendmail -oi -t';
46 $tripwiresettings{'SITEKEY'} = 'IPFire';
47 $tripwiresettings{'LOCALKEY'} = 'IPFire';
48 $tripwiresettings{'ACTION'} = '';
49
50 ############################################################################################################################
51 ######################################################### Tripwire HTML Part ###############################################
52
53 &Header::showhttpheaders();
54 &Header::getcgihash(\%tripwiresettings);
55 &Header::openpage('Tripwire', 1, '');
56 &Header::openbigbox('100%', 'left', '', $errormessage);
57
58 ############################################################################################################################
59 ############################################### Tripwire Config Datei erstellen ############################################
60
61 if ($tripwiresettings{'ACTION'} eq $Lang::tr{'save'})
62 {
63 system("/usr/local/bin/tripwirectrl readconfig");
64 open (FILE, ">${General::swroot}/tripwire/tw.cfg") or die "Can't save tripwire config: $!";
65 flock (FILE, 2);
66
67 print FILE <<END
68
69 ROOT =$tripwiresettings{'ROOT'}
70 POLFILE =$tripwiresettings{'POLFILE'}
71 DBFILE =$tripwiresettings{'DBFILE'}
72 REPORTFILE =$tripwiresettings{'REPORTFILE'}
73 SITEKEYFILE =$tripwiresettings{'SITEKEYFILE'}
74 LOCALKEYFILE =$tripwiresettings{'LOCALKEYFILE'}
75 EDITOR =$tripwiresettings{'EDITOR'}
76 LATEPROMPTING =$tripwiresettings{'LATEPROMPTING'}
77 LOOSEDIRECTORYCHECKING =$tripwiresettings{'LOOSEDIRECTORYCHECKING'}
78 MAILNOVIOLATIONS =$tripwiresettings{'MAILNOVIOLATIONS'}
79 EMAILREPORTLEVEL =$tripwiresettings{'EMAILREPORTLEVEL'}
80 REPORTLEVEL =$tripwiresettings{'REPORTLEVEL'}
81 MAILMETHOD =$tripwiresettings{'MAILMETHOD'}
82 SMTPHOST =$tripwiresettings{'SMTPHOST'}
83 SMTPPORT =$tripwiresettings{'SMTPPORT'}
84 SYSLOGREPORTING =$tripwiresettings{'SYSLOGREPORTING'}
85 MAILPROGRAM =$tripwiresettings{'MAILPROGRAM'}
86
87 END
88 ;
89 close FILE;
90
91 &General::writehash("${General::swroot}/tripwire/settings", \%tripwiresettings);
92 system("/usr/local/bin/tripwirectrl lockconfig");
93 }
94
95 ############################################################################################################################
96 ################################################## Sicherheitsabfrage für CGI ##############################################
97
98 if ($tripwiresettings{'ACTION'} eq 'globalreset')
99 {
100 print <<END
101 <br />
102 <table width='95%' cellspacing='0'>
103 <tr><td bgcolor='${Header::table1colour}' colspan='2' align='center'><b>$Lang::tr{'resetglobals'}</b>
104 <tr><td colspan='2' align='center'><font color=red>$Lang::tr{'defaultwarning'}<br /><br /></font></td></tr>
105 <tr><td align='right' width='50%'><form method='post' action='$ENV{'SCRIPT_NAME'}'>
106 $Lang::tr{'yes'} <input type='image' alt='$Lang::tr{'yes'}' src='/images/edit-redo.png' />
107 <input type='hidden' name='ACTION' value='globalresetyes' /></form></td>
108 <td align='left' width='50%'><form method='post' action='$ENV{'SCRIPT_NAME'}'>
109 <input type='image' alt='$Lang::tr{'no'}' src='/images/dialog-error.png' /> $Lang::tr{'no'}
110 <input type='hidden' name='ACTION' value='cancel' /></form></td>
111 </tr>
112 </table>
113 END
114 ;
115 }
116
117 if ($tripwiresettings{'ACTION'} eq 'generatepolicypw')
118 {
119 print <<END
120 <br />
121 <table width='95%' cellspacing='0'>
122 <tr><td bgcolor='${Header::table1colour}' colspan='2' align='center'><b>$Lang::tr{'generatepolicy'}</b>
123 <tr><td colspan='2' align='center'><font color=red>$Lang::tr{'tripwirewarningpolicy'}<br /><br /></font></td></tr>
124 <tr><td align='left' width='40%'><form method='post' action='$ENV{'SCRIPT_NAME'}'>$Lang::tr{'sitekey'}</td><td align='left'><input type='password' name='SITEKEY' value='$tripwiresettings{'SITEKEY'}' size="30" /></td></tr>
125 <tr><td align='right' width='50%'>
126 $Lang::tr{'yes'} <input type='image' alt='$Lang::tr{'yes'}' src='/images/edit-redo.png' />
127 <input type='hidden' name='ACTION' value='generatepolicy' /></form></td>
128 <td align='left' width='50%'><form method='post' action='$ENV{'SCRIPT_NAME'}'>
129 <input type='image' alt='$Lang::tr{'no'}' src='/images/dialog-error.png' /> $Lang::tr{'no'}
130 <input type='hidden' name='ACTION' value='cancel' /></form></td>
131 </tr>
132 </table>
133 END
134 ;
135 }
136
137 if ($tripwiresettings{'ACTION'} eq 'policyresetpw')
138 {
139 print <<END
140 <br />
141 <table width='95%' cellspacing='0'>
142 <tr><td bgcolor='${Header::table1colour}' colspan='2' align='center'><b>$Lang::tr{'resetpolicy'}</b>
143 <tr><td colspan='2' align='center'><font color=red>$Lang::tr{'tripwirewarningpolicy'}<br /><br /></font></td></tr>
144 <tr><td align='left' width='40%'><form method='post' action='$ENV{'SCRIPT_NAME'}'>$Lang::tr{'sitekey'}</td><td align='left'><input type='password' name='SITEKEY' value='$tripwiresettings{'SITEKEY'}' size="30" /></td></tr>
145 <tr><td align='right' width='50%'>
146 $Lang::tr{'yes'} <input type='image' alt='$Lang::tr{'yes'}' src='/images/edit-redo.png' />
147 <input type='hidden' name='ACTION' value='resetpolicyyes' /></form></td>
148 <td align='left' width='50%'><form method='post' action='$ENV{'SCRIPT_NAME'}'>
149 <input type='image' alt='$Lang::tr{'no'}' src='/images/dialog-error.png' /> $Lang::tr{'no'}
150 <input type='hidden' name='ACTION' value='cancel' /></form></td>
151 </tr>
152 </table>
153 END
154 ;
155 }
156
157 if ($tripwiresettings{'ACTION'} eq 'updatedatabasepw')
158 {
159 print <<END
160 <br />
161 <table width='95%' cellspacing='0'>
162 <tr><td bgcolor='${Header::table1colour}' colspan='2' align='center'><b>$Lang::tr{'updatedatabase'}</b>
163 <tr><td colspan='2' align='center'><font color=red>$Lang::tr{'tripwirewarningdatabase'}<br /><br /></font></td></tr>
164 <tr><td align='left' width='40%'><form method='post' action='$ENV{'SCRIPT_NAME'}'>$Lang::tr{'localkey'}</td><td align='left'><input type='password' name='LOCALKEY' value='$tripwiresettings{'LOCALKEY'}' size="30" /></td></tr>
165 <tr><td align='right' width='50%'><form method='post' action='$ENV{'SCRIPT_NAME'}'>
166 $Lang::tr{'yes'} <input type='image' alt='$Lang::tr{'yes'}' src='/images/edit-redo.png' />
167 <input type='hidden' name='ACTION' value='updatedatabaseyes' /></form></td>
168 <td align='left' width='50%'><form method='post' action='$ENV{'SCRIPT_NAME'}'>
169 <input type='image' alt='$Lang::tr{'no'}' src='/images/dialog-error.png' /> $Lang::tr{'no'}
170 <input type='hidden' name='ACTION' value='cancel' /></form></td>
171 </tr>
172 </table>
173 END
174 ;
175 }
176 if ($tripwiresettings{'ACTION'} eq 'keyreset')
177 {
178 print <<END
179 <br />
180 <table width='95%' cellspacing='0'>
181 <tr><td bgcolor='${Header::table1colour}' colspan='2' align='center'><b>$Lang::tr{'keyreset'}</b>
182 <tr><td colspan='2' align='center'><font color=red>$Lang::tr{'tripwirewarningkeys'}<br /><br /></font></td></tr>
183 <tr><td align='right' width='50%'><form method='post' action='$ENV{'SCRIPT_NAME'}'>
184 $Lang::tr{'yes'} <input type='image' alt='$Lang::tr{'yes'}' src='/images/edit-redo.png' />
185 <input type='hidden' name='ACTION' value='keyresetyes' /></form></td>
186 <td align='left' width='50%'><form method='post' action='$ENV{'SCRIPT_NAME'}'>
187 <input type='image' alt='$Lang::tr{'no'}' src='/images/dialog-error.png' /> $Lang::tr{'no'}
188 <input type='hidden' name='ACTION' value='cancel' /></form></td>
189 </tr>
190 </table>
191 END
192 ;
193 }
194
195 if ($tripwiresettings{'ACTION'} eq 'generatekeys')
196 {
197 print <<END
198 <br />
199 <table width='95%' cellspacing='0'>
200 <tr><td bgcolor='${Header::table1colour}' colspan='2' align='center'><b>$Lang::tr{'generatekeys'}</b>
201 <tr><td colspan='2' align='center'><font color=red>$Lang::tr{'tripwirewarningkeys'}<br /><br /></font></td></tr>
202 <tr><td align='right' width='50%'><form method='post' action='$ENV{'SCRIPT_NAME'}'>
203 $Lang::tr{'yes'} <input type='image' alt='$Lang::tr{'yes'}' src='/images/edit-redo.png' />
204 <input type='hidden' name='ACTION' value='generatekeysyes' /></form></td>
205 <td align='left' width='50%'><form method='post' action='$ENV{'SCRIPT_NAME'}'>
206 <input type='image' alt='$Lang::tr{'no'}' src='/images/dialog-error.png' /> $Lang::tr{'no'}
207 <input type='hidden' name='ACTION' value='cancel' /></form></td>
208 </tr>
209 </table>
210 END
211 ;
212 }
213
214 ############################################################################################################################
215 ######################################################## Tripwire Funktionen ###############################################
216
217 if ($tripwiresettings{'ACTION'} eq 'globalresetyes'){system("/usr/local/bin/tripwirectrl globalreset");}
218 if ($tripwiresettings{'ACTION'} eq 'generatekeysyes'){system("/usr/local/bin/tripwirectrl keys $tripwiresettings{'SITEKEY'} $tripwiresettings{'LOCALKEY'}");$tripwiresettings{'SITEKEY'} = 'IPFire';$tripwiresettings{'LOCALKEY'} = 'IPFire';}
219 if ($tripwiresettings{'ACTION'} eq 'keyresetyes'){system("/usr/local/bin/tripwirectrl keys IPFire IPFire");$tripwiresettings{'SITEKEY'} = 'IPFire';$tripwiresettings{'LOCALKEY'} = 'IPFire';}
220 if ($tripwiresettings{'ACTION'} eq 'resetpolicyyes'){system("/usr/local/bin/tripwirectrl resetpolicy tripwiresettings{'SITEKEY'}");$tripwiresettings{'SITEKEY'} = 'IPFire';}
221 if ($tripwiresettings{'ACTION'} eq 'generatepolicyyes'){system("/usr/local/bin/tripwirectrl generatepolicy $tripwiresettings{'SITEKEY'}");$tripwiresettings{'SITEKEY'} = 'IPFire';}
222 if ($tripwiresettings{'ACTION'} eq 'updatedatabaseyes'){system("/usr/local/bin/tripwirectrl updatedatabase $tripwiresettings{'LOCALKEY'}");$tripwiresettings{'LOCALKEY'} = 'IPFire';}
223 if ($tripwiresettings{'ACTION'} eq 'generatereport'){system("/usr/local/bin/tripwirectrl generatereport");}
224
225 ############################################################################################################################
226 ##################################################### Tripwire globale Optionen ############################################
227
228 &Header::openbox('100%', 'center', 'Tripwire');
229 print <<END
230 <hr />
231 <br />
232
233 <form method='post' action='$ENV{'SCRIPT_NAME'}'>
234 <table width='95%' cellspacing='0'>
235 <tr bgcolor='${Header::table1colour}'><td colspan='2' align='left'><b>$Lang::tr{'basic options'}</b></td></tr>
236 <tr><td align='left' width='40%'>$Lang::tr{'emailreportlevel'}</td><td align='left'><input type='text' name='EMAILREPORTLEVEL' value='$tripwiresettings{'EMAILREPORTLEVEL'}' size="30" /></td></tr>
237 <tr><td align='left' width='40%'>$Lang::tr{'reportlevel'}</td><td align='left'><input type='text' name='REPORTLEVEL' value='$tripwiresettings{'REPORTLEVEL'}' size="30" /></td></tr>
238 <tr><td align='left' width='40%'>$Lang::tr{'mailmethod'}</td><td align='left'><input type='text' name='MAILMETHOD' value='$tripwiresettings{'MAILMETHOD'}' size="30" /></td></tr>
239 <tr><td align='left' width='40%'>$Lang::tr{'smtphost'}</td><td align='left'><input type='text' name='SMTPHOST' value='$tripwiresettings{'SMTPHOST'}' size="30" /></td></tr>
240 <tr><td align='left' width='40%'>$Lang::tr{'smtpport'}</td><td align='left'><input type='text' name='SMTPPORT' value='$tripwiresettings{'SMTPPORT'}' size="30" /></td></tr>
241 <tr><td align='left' width='40%'>$Lang::tr{'mailprogramm'}</td><td align='left'><input type='text' name='MAILPROGRAM' value='$tripwiresettings{'MAILPROGRAM'}' size="30" /></td></tr>
242 </table>
243 <br />
244 <table width='10%' cellspacing='0'>
245 <tr><td align='center'><form method='post' action='$ENV{'SCRIPT_NAME'}'>
246 <input type='hidden' name='ACTION' value=$Lang::tr{'save'} />
247 <input type='image' alt='$Lang::tr{'save'}' src='/images/media-floppy.png' /></form></td>
248 <td align='center'><form method='post' action='$ENV{'SCRIPT_NAME'}'>
249 <input type='hidden' name='ACTION' value='globalreset' />
250 <input type='image' alt='$Lang::tr{'reset'}' src='/images/reload.gif' /></form></td>
251 <td align='center'><form method='post' action='$ENV{'SCRIPT_NAME'}'>
252 <input type='hidden' name='ACTION' value='globalcaption' />
253 <input type='image' alt='$Lang::tr{'caption'}' src='/images/help-browser.png' /></form></td></tr>
254 </table>
255 </from>
256 END
257 ;
258 if ($tripwiresettings{'ACTION'} eq 'globalcaption')
259 {
260 print <<END
261 <br />
262 <table width='95%' cellspacing='0'>
263 <tr><td align='center' colspan='2'><b>$Lang::tr{'caption'}</b></td></tr>
264 <tr><td align='right' width='33%'><img src='/images/media-floppy.png' /></td><td align='left'>$Lang::tr{'save settings'}</td></tr>
265 <tr><td align='right' width='33%'><img src='/images/reload.gif' /></td><td align='left'>$Lang::tr{'restore settings'}</td></tr>
266 </table>
267 END
268 ;
269
270 }
271
272 &Header::closebox();
273
274 ############################################################################################################################
275 ################################################### Tripwire Init Policy and keygen ########################################
276
277 &Header::openbox('100%', 'center', $Lang::tr{'generate tripwire keys and init'});
278 print <<END
279 <hr />
280 <br />
281
282 <form method='post' action='$ENV{'SCRIPT_NAME'}'>
283 <table width='95%' cellspacing='0'>
284 <tr bgcolor='${Header::table1colour}'><td colspan='2' align='left'><b>$Lang::tr{'keys'}</b></td></tr>
285 <tr><td align='left' width='40%'>$Lang::tr{'sitekey'}</td><td align='left'><input type='password' name='SITEKEY' value='$tripwiresettings{'SITEKEY'}' size="30" /></td></tr>
286 <tr><td align='left' width='40%'>$Lang::tr{'localkey'}</td><td align='left'><input type='password' name='LOCALKEY' value='$tripwiresettings{'LOCALKEY'}' size="30" /></td></tr>
287 </table>
288 <br />
289 <table width='10%' cellspacing='0'>
290 <tr><td align='center'><form method='post' action='$ENV{'SCRIPT_NAME'}'>
291 <input type='hidden' name='ACTION' value='generatekeys'/>
292 <input type='image' alt='$Lang::tr{'generatekeys'}' src='/images/system-lock-screen.png' /></form></td>
293 <td align='center'><form method='post' action='$ENV{'SCRIPT_NAME'}'>
294 <input type='hidden' name='ACTION' value='keyreset' />
295 <input type='image' alt='$Lang::tr{'reset'}' src='/images/reload.gif' /></form></td>
296 <td align='center'><form method='post' action='$ENV{'SCRIPT_NAME'}'>
297 <input type='hidden' name='ACTION' value='keycaption' />
298 <input type='image' alt='$Lang::tr{'caption'}' src='/images/help-browser.png' /></form></td></tr>
299 </table>
300 </from>
301 END
302 ;
303 if ($tripwiresettings{'ACTION'} eq 'keycaption')
304 {
305 print <<END
306 <br />
307 <table width='95%' cellspacing='0'>
308 <tr><td align='center' colspan='2'><b>$Lang::tr{'caption'}</b></td></tr>
309 <tr><td align='right' width='33%'><img src='/images/system-lock-screen.png' /></td><td align='left'>$Lang::tr{'generatekeys'}</td></tr>
310 <tr><td align='right' width='33%'><img src='/images/reload.gif' /></td><td align='left'>$Lang::tr{'keyreset'}</td></tr>
311 </table>
312 END
313 ;
314
315 }
316 &Header::closebox();
317
318 ############################################################################################################################
319 ################################################# Tripwire general functions ###############################################
320
321 &Header::openbox('100%', 'center', $Lang::tr{'tripwire functions'});
322 print <<END
323 <hr />
324 <br />
325
326 <table width='95%' cellspacing='0'>
327 <tr><td align='center'><form method='post' action='$ENV{'SCRIPT_NAME'}'>
328 <input type='hidden' name='ACTION' value='generatepolicypw'/>
329 <input type='image' alt='$Lang::tr{'generatepolicy'}' src='/images/document-new.png' /></form></td>
330 <td align='center'><form method='post' action='$ENV{'SCRIPT_NAME'}'>
331 <input type='hidden' name='ACTION' value='policyresetpw' />
332 <input type='image' alt='$Lang::tr{'resetpolicy'}' src='/images/reload.gif' /></form></td>
333 <td align='center'><form method='post' action='$ENV{'SCRIPT_NAME'}'>
334 <input type='hidden' name='ACTION' value='generatereport' />
335 <input type='image' alt='$Lang::tr{'generatereport'}' src='/images/document-properties.png' /></form></td>
336 <td align='center'><form method='post' action='$ENV{'SCRIPT_NAME'}'>
337 <input type='hidden' name='ACTION' value='updatedatabasepw' />
338 <input type='image' alt='$Lang::tr{'updatedatabase'}' src='/images/network-server.png' /></form></td>
339 <td align='center'><form method='post' action='$ENV{'SCRIPT_NAME'}'>
340 <input type='hidden' name='ACTION' value='policycaption' />
341 <input type='image' alt='$Lang::tr{'caption'}' src='/images/help-browser.png' /></form></td></tr>
342 </table>
343 END
344 ;
345 if ($tripwiresettings{'ACTION'} eq 'policycaption')
346 {
347 print <<END
348 <br />
349 <table width='95%' cellspacing='0'>
350 <tr><td align='center' colspan='2'><b>$Lang::tr{'caption'}</b></td></tr>
351 <tr><td align='right' width='33%'><img src='/images/document-new.png' /></td><td align='left'>$Lang::tr{'generatepolicy'}</td></tr>
352 <tr><td align='right' width='33%'><img src='/images/reload.gif' /></td><td align='left'>$Lang::tr{'resetpolicy'}</td></tr>
353 <tr><td align='right' width='33%'><img src='/images/document-properties.png' /></td><td align='left'>$Lang::tr{'generatereport'}</td></tr>
354 <tr><td align='right' width='33%'><img src='/images/network-server.png' /></td><td align='left'>$Lang::tr{'updatedatabase'}</td></tr>
355 </table>
356 END
357 ;
358
359 }
360 &Header::closebox();
361
362 ############################################################################################################################
363 ####################################################### Tripwire Init Policy ###############################################
364
365 &Header::openbox('100%', 'center', $Lang::tr{'tripwire reports'});
366 print <<END
367 <hr />
368 <br />
369 <form method='post' action='$ENV{'SCRIPT_NAME'}'>
370 <table width='95%' cellspacing='0'>
371 <tr><td bgcolor='${Header::table1colour}' colspan='3' align='left'><b>$Lang::tr{'log view'}</b></td></tr>
372 <tr><td colspan='3' align='left'><br /></td></tr>
373 <tr><td align='left'><select name='LOG' style="width: 500px">
374 END
375 ;
376 foreach my $log (@Logs) {chomp $log;print"<option value='$log'>$log</option>";}
377 print <<END
378
379 </select></td><td align='left'><input type='hidden' name='ACTION' value='showlog' /><input type='image' alt='view Log' src='/images/format-justify-fill.png' /></td></tr>
380 </table>
381 </form>
382 END
383 ;
384 if ($tripwiresettings{'ACTION'} eq 'showlog')
385 {
386 $Log = qx(/usr/local/bin/tripwirectrl tripwirelog $tripwiresettings{'LOG'});
387 #$Log=~s/\n/<br \/>/g;
388 #$Log=~s/\t/.... /g;
389 print <<END
390 <table width='95%' cellspacing='0'>
391 <tr><td><br /></td></tr>
392 <tr><td><pre>LOG - $Log </pre></td></tr>
393 <tr><td><br /></td></tr>
394 <tr><td align=center>$tripwiresettings{'LOG'}</td></tr>
395 </table>
396 END
397 ;
398
399 }
400
401 &Header::closebox();
402
403 &Header::closebigbox();
404 &Header::closepage();