On Sat, Aug 02 2014 at 09:01, Nick Holland wrote:
> On 08/01/14 08:12, Claer wrote:
> > On Mon, Jul 28 2014 at 07:23, Nick Holland wrote:
> ...
> >>  I'll leave you to develop the script.
> 
> >> My design philosophy:
> >> 1) No additional hw, other than the two firewalls.
> >> 2) EITHER machine should be able to act as master.
> >> 3) EITHER machine should be able to provide all the info to rebuild the
> >> failed machine.
> >> 4) Change control is good, just not how managers usually like to
> >> implement it.
> >> 5) uses no other packages (rsync to move pf.conf around?  I don't think
> >> that's needed)
> > 
> > Could you share it please ?
> 
> well, no, in large part because I left the employment of that employer
> rather suddenly, and it seems I didn't save a copy of THAT script,
> though I do have some notes that will help (my DNS version).  (and yes,
> it's legit -- it wasn't a software company, and I had an understanding
> with the people that hired me that I could use any of the stuff I wrote
> however I wished.  The person who escorted me out I'm sure would
> disagree, but he got escorted out shortly afterwards.  BTW: if you ever
> find yourself being escorted out of a job for doing what you are
> confident is right, a great line is to politely ask, "would you like me
> to deactivate my accounts, as you don't have anyone else left here to
> do it?"  That's when the yelling began).
> 
> Here are some code snippits that might be useful.  Nothing magical here,
> but there are a few tidbits I had to work out, but be forewarned, I
> probably did it the hard way (I'm proud of the ssh diff between two
> boxes, but that probably means I made it way too difficult.  This script
> is completely untested, I'm sure it won't work as is, and you get to
> provide your own error handling.  I'd call what I did an "administration
> script" not a "user application".
> I'm assuming you have sudo access, and are SSH'ing to the first firewall
> with -A (agent forwarding) and have key access on both systems.
> 
> # start.  Note the lack of #!/bin/sh, I'm not calling this a 
> # complete script!
> 
> TMPLOG="/tmp/~config.log"
> 
> # /backup was a file system on a second disk in each FW.
> CHGLOG="/backup/changelog/`date "+%Y-%m-%d-%H%M%S"`.diff"
> 
> # Figure out who I am and who my partner machine is.
> # Our name -- easy.
> HERE=`hostname -s`
> # Other machine's name.  Assumption: machine names are in the form
> # *1 and *2, so that swapping the 1 and 2 will indicate the other machine.
> # This is a non-trivial assumption...but it works for us - fwa-1 <-> fwa-2
> OTHER=`echo $HERE |tr 12 21`
> 
> # Generate a temp file with the diff between the old and new
> # file.  Should probably be with mktemp, but as there is a lack
> # of locking to protect against multiple users, there are bigger
> # issues here.
> echo %% Change by ${LOGNAME}@${HERE} on `date`: >$TMPLOG
> echo >>$TMPLOG
> echo >>$TMPLOG
> 
> ssh $OTHER "sudo cat /etc/pf.conf" | sudo diff -u - /etc/pf.conf >>$TMPLOG
> 
> # Toss a marker to indicate when the change file was first made.
> touch ${TMPLOG}.tag
> chmod 664 ${TMPLOG}.tag  # makes it easier for other admins to delete.
> 
> # Call up editor
> vi -c ":3" $TMPLOG
> 
> # If the temp log file is not newer than the .tag file, it apparently wasn't
> # edited, which means the commit was aborted.  Bail.  Note: IIRC, there were
> # some rough edges here.
> if [ ! $TMPLOG -nt ${TMPLOG}.tag ]; then
>    echo
>    echo
>    echo "**     Sync with $OTHER aborted!!     **"
>    echo  "NOTE: DNS servers are likely out of sync!"
>    echo
>    rm $TMPLOG ${TMPLOG}.tag
>    exit
> fi
> 
> Save the change log HERE.
> mv $TMPLOG $CHGLOG
> 
> # Copy stuff over to $OTHER server
> echo Syncing with other server
> scp $CHGLOG $OTHER:$CHGLOG
> scp /etc/pf.conf $OTHER:/tmp/pf.conf 
> ssh $OTHER "sudo mv /tmp/pf.conf /etc"
> 
> # install. you DID test this, right?  Note the lack of error handling!
> ssh $OTHER "sudo pfctl -f /etc/pf.conf"
> 
> rm ${TMPLOG}.tag
> 
> 
> That's pretty much the strategy.  Lots of site specific assumptions,
> lots of things that could be done better in the script.  As noted,
> one major flaw is the handling when two admins are making
> changes at the same time, but then, at this site, the two of us were
> both familiar with the OpenBSD ways, and always tried to get an "ok"
> from the other before making a change, which ensured that we both
> knew a change was coming.  Its handling of issues like admin A starts
> but never finishes the update, then B comes along and does an update
> are crude, but if you write your own, you know what the errors mean.
> 
> If I were doing this again, I'd probably put in some kind of
> comparison of hostname.carp* files, as we found if those are not in
> sync ugly things happened.  
> 
> My favorite part, though is the changes are almost self-documenting,
> so easy that the administrator won't object, and having the change
> diff stuffed in your face is just an overall good plan, I think.
> And, to find why a particular line was made, use "grep" to find
> when the line was changed/added, and look at the commit message.
> 
> I've been told I should use rcs or cvs or similar...but I really
> prefer the "one change per file" and all text file format.

Thanks a lot for the time you invested to write such email. I have
the basics to write my own script now. 

Best regards,

Claer

Reply via email to