Project

General

Profile

Actions

Firewall OpenBSD on PCEngines APU

DISCLAIMER: This is not a step by step guide.

This is a toolbox on various config files, scripts (like prometheus startup scripts, sounds on boot...) and various tips (adding hardware power button).

Install an OpenBSD image

Getting the OpenBSD image

The list of the mirrors is here: https://www.openbsd.org/ftp.html
Get the last version, here 6.5

wget ftp://ftp.irisa.fr/pub/mirrors/OpenBSD/6.5/amd64/install65.fs

Write the image to an USB Key

My usb key is on /dev/sde

dd if=install65.fs of=/dev/sde bs=1M

Boot USB & install

Select the tty output in 115200 on com0

SeaBIOS (version rel-1.12.0.1-0-g393dc9c)

Press F10 key now for boot menu

Booting from Hard Disk...
Using drive 0, partition 3.
Loading......
probing: pc0 com0 com1 com2 com3 mem[639K 1918M a20=on] 
disk: hd0+ hd1+*
>> OpenBSD/amd64 BOOT 3.43
boot> stty com0 115200
boot> set tty com0
switching console to com>> OpenBSD/amd64 BOOT 3.43
boot>

Replying to answears

Welcome to the OpenBSD/amd64 6.5 installation program.
(I)nstall, (U)pgrade, (A)utoinstall or (S)hell? I

Terminal type? [vt220]
System hostname? (short form, e.g. 'foo') cerbere
Password for root account? (will not echo) 
Password for root account? (again) 
Start sshd(8) by default? [yes] 
Change the default console to com0? [yes] 
Available speeds are: 9600 19200 38400 57600 115200.
Which speed should com0 use? (or 'done') [115200] 
Setup a user? (enter a lower-case loginname, or 'no') [no] 
Since no user was setup, root logins via sshd(8) might be useful.
WARNING: root is targeted by password guessing attacks, pubkeys are safer.
Allow root ssh login? (yes, no, prohibit-password) [no] yes

Available disks are: sd0 sd1.
Which disk is the root disk? ('?' for details) [sd0] 
No valid MBR or GPT.
Use (W)hole disk MBR, whole disk (G)PT or (E)dit? [whole] 

80% /
10% swap
10% /var/log

Configuration

/etc/sysctl.conf

net.inet.ip.forwarding=1
net.inet.gre.allow=1

/root/.profile

export PS1="\H|\t|:\w\\$"                                                                                                                                               

umask 022

#export LS_OPTIONS='--color=auto'
alias ls='/usr/local/bin/colorls -G'
alias ll='ls -l'
alias l='ls -lA'
alias d="du --max-depth=1 -h"
#alias carp='ifconfig carp |grep -e "MASTER" -e "BACKUP" && ifconfig -g carp'

# Some more alias to avoid making mistakes:
alias rm='rm -i'
alias cp='cp -i'
alias mv='mv -i'
alias df='df -h'
alias b='echo "\n IP BLACKLISTED\n========================================================";pfctl -t BLACKLIST -T show;echo "\n TOP 10 states\n========================================================";pfctl -sS |sort -nrk4 |head -n 10 '
echo
echo "________________________________________________________________________"
echo
who
echo "________________________________________________________________________"
echo
last -n 20
echo "________________________________________________________________________"
echo
uptime
echo "________________________________________________________________________"

/home/sacha/.profile

# $OpenBSD: dot.profile,v 1.5 2018/02/02 02:29:54 yasuoka Exp $
#
# sh/ksh initialization

PATH=$HOME/bin:/bin:/sbin:/usr/bin:/usr/sbin:/usr/X11R6/bin:/usr/local/bin:/usr/local/sbin:/usr/games
export PATH HOME TERM

export PS1="\H|\t|:\w\\$"

alias ls='colorls -G'
alias ll='ls -l'
alias l='ls -lA'
alias d="du --max-depth=1 -h"

# Some more alias to avoid making mistakes:
alias rm='rm -i'
alias cp='cp -i'
alias mv='mv -i'
alias df='df -h'

echo " _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _"
echo
echo -n "     " && uname -a
echo
echo " _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _"
echo
w
echo " _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _"
echo && echo


/etc/ssh/sshd_config

Port 55555
PasswordAuthentication no
ChallengeResponseAuthentication no
  • Ajouter le réseau local sur em2 sour la forme 10.10.département/24

/etc/dhcpd.conf

En fonction du réseau local, exemple:

subnet 10.10.79.0 netmask 255.255.255.0 {
  range 10.10.79.100 10.10.79.199;
  default-lease-time 600;
  max-lease-time 7200;
  option subnet-mask 255.255.255.0;
  option broadcast-address 10.10.79.255;
  option routers 10.10.79.254;
  option domain-name-servers 10.10.79.254, 185.233.100.100;
  option domain-name "niort.rosedor.fr";
}
echo 'dhcpd_flags="em2"' >>/etc/rc.conf.local

/etc/resolv.conf

search brest.openlux.fr 
nameserver 10.10.79.254
lookup file bind

/etc/ntpd.conf

# $OpenBSD: ntpd.conf,v 1.14 2015/07/15 20:28:37 ajacoutot Exp $
#
# See ntpd.conf(5) and /etc/examples/ntpd.conf

#listen on 172.16.1.254 
servers fr.pool.ntp.org

Some music with the buzzer

  • Exemples:
echo -e "l4mn<b.>e8a2mspg+e8c+f+8b2" > /dev/speaker
echo -e "<cd<a#~<a#>f" > /dev/speaker
echo "o2 AAA ml o2l8F P16 o3l16C o2 l4A  l8F o3P16l16C o2 l4A p4 o3 EEE ml l8F P16 o3l16C o2 l4A- l8F o3P16l16C o2 l4A"  > /dev/speaker
echo -e "ec" > /dev/speaker
echo -e "t255l8c.f.afc~c.f.afc~c.f.afc.f.a..f.~c.f.afc~c.f.afc~c.f.afc~c.f.." > /dev/speaker
echo -e "<cd<a#~<a#>f" > /dev/speaker
echo -e "t240<cfcfgagaa#b#>dc<a#a.~fg.gaa#.agagegc.~cfcfgagaa#b#>dc<a#a.~fg.gga.agfgfgf.">/dev/speaker
echo -e "t255cf8f8edc<a>~cf8f8edd#e~ce8cdce8cd.<a>c8c8c#def8af8" > /dev/speaker
echo -e "olcega.a8f>cd2bgc.c8dee2" > /dev/speaker
echo -e "msl16oldcd4mll8pcb-agf+4.g4p4<msl16dcd4mll8pa.a+f+4p16g4" > /dev/speaker
echo -e "l2b.f+.p16a.c+.p l4mn<b.>e8a2mspg+e8c+f+8b2" > /dev/speaker

Beatles
"T255O3< < L2 A > > > L4 C# < A B > L2 C#.L2 N0 L4 C# < L2 B A F#A B A F# L1 E.< < L2 A > > > L4 C# < A B > L2 C#.L2 N0 L4 C# < L2 B A L2 F#.> L4 C# < L2 B A L1 B B L1 N0< < L2 A > > > L4 C# < L2 B > L2 C# < L2 A.> L4 C# < A B > L2 C#.< < L2 A > > > L4 C# < L2 B > C# < L2 A.L4 N0 A L2 B AL2 N0 > L2 C# < B A N0L4 F# A B E A B D A B A G# F# E"

sw
"t136 mn o3 l8 ddgfe-dc o2 b-ag o3 d2. l12 ddd l8 g4 p4 p2 p2 t236 l6 o2 ddd l2 ml g o3 dd mn l6 c o2 ba l2 o3 ml gdd mn l6 c o2 ba ml l2 o3 gdd mn l6 c o2 b o3 c l2 ml o2 a1a4 p4 mn t236 l6 o2 ddd l2 ml g o3 dd mn l6 c o2 ba l2 o3 ml gdd mn l6 c o2 ba ml l2 o3 gdd mn l6 c o2 b o3 c l2 ml o2 a1a4 p4 mn t136 mn o3 l8 p4 mn o2 l8 d4 e4.e o3c o2 bag l12 gab l8 a8. e16f+4d8. d e4.e o3 c o2 bag o3 d8.o2   a16 ml a4a4 mn d4 e4.e O3 c o2 bag l12 gaba8. e16 f+4 o3 d8. d16 l16   g8. fe-8. d c8. o2 b-a8. g o3 d2 t236 l6 o2 ddd l2 ml g o3 dd mn l6 c o2 ba l2 o3 ml gdd mn l6 c o2 ba ml l2 o3 gdd mn l6 co2 b o3c l2 ml o2a1a4 p4 mn t236 l6 o2 ddd l2 ml g o3 dd mn l6 c o2 ba l2 o3 ml gdd mn l6 c o2ba ml l2 o3gdd mn l6 co2bo3c l2 ml o2a1a4 p4 mn l6 o3 mn ddd ml l1 gggg4 p4 p4 mn l12 dddg2"

Reveille: t255l8c.f.afc~c.f.afc~c.f.afc.f.a..f.~c.f.afc~c.f.afc~c.f.afc~c.f..
Close Encounters: <cd<a#~<a#>f
Lord of the Dance (aka Simple Gifts): t240<cfcfgagaa#b#>dc<a#a.~fg.gaa#.agagegc.~cfcfgagaa#b#>dc<a#a.~fg.gga.agfgfgf.
Loony Toons theme: t255cf8f8edc<a>~cf8f8edd#e~ce8cdce8cd.<a>c8c8c#def8af8
standard villain's entrance music: mst200o2ola.l8bc.~a.~>l2d#
a trope from 'The Right Stuff' score by Bill Conti: olcega.a8f>cd2bgc.c8dee2
opening bars of Bach's Toccata and Fugue in D Minor": msl16oldcd4mll8pcb-agf+4.g4p4<msl16dcd4mll8pa.a+f+4p16g4
opening bars of the theme from Star Trek Classic: l2b.f+.p16a.c+.p l4mn<b.>e8a2mspg+e8c+f+8b2


My musics:

echo 'echo -e "<cd<a#~<a#>f" > /dev/speaker' >> /etc/rc.local
echo '"O3L30cO4L30cO5L30cO5L30g" > /dev/speaker' >> /etc/rc.local

Unbound

Duno why the config file is in var ? Creating a symling to found it

ln -s /var/unbound/etc/unbound.conf /etc/unbound.conf
# $OpenBSD: unbound.conf,v 1.14 2018/12/16 20:41:30 tim Exp $

server:
        interface: 127.0.0.1
        interface: 172.16.1.254
        #interface: 127.0.0.1@5353      # listen on alternative port
#       interface: ::1
        do-ip6: no

        # override the default "any" address to send queries; if multiple
        # addresses are available, they are used randomly to counter spoofing
        #outgoing-interface: 192.0.2.1
        #outgoing-interface: 2001:db8::53

        access-control: 0.0.0.0/0 refuse
        access-control: 127.0.0.0/8 allow
        access-control: 172.16.1.254/16 allow 
        access-control: ::0/0 refuse
        access-control: ::1 allow

        hide-identity: yes
        hide-version: yes

        # Uncomment to enable DNSSEC validation.
        #
        #auto-trust-anchor-file: "/var/unbound/db/root.key"
        #val-log-level: 2

        # Uncomment to synthesize NXDOMAINs from DNSSEC NSEC chains
        # https://tools.ietf.org/html/rfc8198
        #
        #aggressive-nsec: yes

        # Serve zones authoritatively from Unbound to resolver clients.
        # Not for external service.
        #
        #local-zone: "local." static
        #local-data: "mycomputer.local. IN A 192.0.2.51"
        #local-zone: "2.0.192.in-addr.arpa." static
        #local-data-ptr: "192.0.2.51 mycomputer.local"

        # UDP EDNS reassembly buffer advertised to peers. Default 4096.
        # May need lowering on broken networks with fragmentation/MTU issues,
        # particularly if validating DNSSEC.
        #
        #edns-buffer-size: 1480

        # Use TCP for "forward-zone" requests. Useful if you are making
        # DNS requests over an SSH port forwarding.
        #
        #tcp-upstream: yes

remote-control:
        control-enable: yes
        control-interface: /var/run/unbound.sock

# Use an upstream forwarder (recursive resolver) for some or all zones.
#
#forward-zone:
#       name: "."                               # use for ALL queries
#       forward-addr: 192.0.2.53                # example address only
#       forward-first: yes                      # try direct if forwarder fails
rcctl enable unbound
rcctl start unbound

Install Prometheus node exporter

pkg_add go git gmake python-3.6 colorls gnuwatch mtr pftop curl bash 
ln -s /usr/local/bin/python3 /usr/local/bin/python
cd /home/sacha
go get github.com/prometheus/node_exporter
cd /home/sacha/go/src/github.com/prometheus/node_exporter
gmake
mv node_exporter /usr/local/bin/
script de démarage: /etc/rc.d/node_exporter
vim /etc/login.conf
(...)
node_exporter:\
  :tc=daemon:
cap_mkdb /etc/login.conf
groupadd -g 2222 _node_exporter
useradd -u 2222 -g 2222 -c "Prometheus Node Exporter agent" -d /var/empty -s /sbin/nologin -L node_exporter _node_exporter
  • /etc/rc.d/node_exporter
#!/bin/sh
#

daemon="/usr/local/bin/node_exporter"
node_exporter_textfile_dir="/var/node_exporter"
daemon_flags="--collector.textfile.directory==${node_exporter_textfile_dir}"
daemon_user="_node_exporter"
daemon_group="_node_exporter"

. /etc/rc.d/rc.subr

pexp="${daemon}.*"
rc_bg=YES
rc_reload=NO

rc_pre() { 
    if ! id ${daemon_user}; then
        groupadd _node_exporter
        useradd -g _node_exporter -c "Prometheus Node Exporter agent"\
        -d /var/empty -s /sbin/nologin -L node_exporter _node_exporter
    fi
    if [ ! -d ${node_exporter_textfile_dir} ]; then
        install \
            -d \
            -o ${daemon_user} \
            -g ${daemon_group} \
            -m 1755 \
            ${node_exporter_textfile_dir}
    fi
}

rc_start() {
    ${rcexec} "${daemon} ${daemon_flags} < /dev/null 2>&1"
}

rc_cmd $1
chmod 0755 /etc/rc.d/node_exporter
chown root:wheel /etc/rc.d/node_exporter

rcctl enable node_exporter
rcctl start node_exporter

Firewall

touch /etc/BLACKLIST
vi /etc/WHITELIST

Standard: 1 ADSL

#######################################################
#         Firewall PF - OpenBSD -                     #
# -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- #
# V1.0 - 20190612                                     #
#######################################################


#-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-#
#               MACROS                  #
#-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-#

#-----------------------------------------#
#               Interfaces                #
#-----------------------------------------#
#=====----> ADSL
ADSL       = "pppoe0"


#=====----> LAN
LAN             = "em2"
LAN_VoIP        = "em3"

#-----------------------------------------#
#               Hosts                     #
#-----------------------------------------#


#-----------------------------------------#
#       W H I T E  L I S T                #
#-----------------------------------------#
table <WHITELIST> persist file "/etc/WHITELIST"

#-----------------------------------------#
#       B L A C K  L I S T                #
#-----------------------------------------#
table <BLACKLIST> counters persist file "/etc/BLACKLIST"

#-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-#
#               OPTIONS                 #
#-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-#
set loginterface $ADSL

#set optimization aggressive
set block-policy drop

set skip on lo0 


#-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-#
#               LOG                     #
#-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-#
match log all


#-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-#
#               NORMALISATION           #
#-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-#

# Nettoyer les paquets entrant
match in scrub (reassemble tcp random-id)

#-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-#
#                NAT                    #
#-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-#
match out on $ADSL inet from ($LAN:network) to any nat-to ($ADSL)

#-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-#
#               FILTRAGE                #
#-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-#
block log all

#-----------------------------------------#
#               Anti-Flood                #
#-----------------------------------------#
#NOFLOOD ="synproxy state (source-track rule max-src-conn 500, max-src-conn-rate 50/10, overload <BLACKLIST> flush global)"
NOFLOOD ="keep state (source-track rule, max-src-states 100)"

block in log quick on $ADSL from no-route to any
block out log quick on $ADSL from no-route to any
block in log quick on $ADSL from any to 255.255.255.255

#-----------------------------------------#
#               Blacklists                #
#-----------------------------------------#
block in quick from <BLACKLIST>

block in log quick on $ADSL inet proto icmp from any to any icmp-type redir
block in log quick on $ADSL inet6 proto icmp6 from any to any icmp6-type redir

#-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-#
#               Anti-spoof                  #
#-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-#
antispoof log quick for $ADSL label "antispoof"

#---------------------------------------#
#               ICMP                    #
#---------------------------------------#
pass inet proto icmp all icmp-type { echorep, echoreq, timex, unreach }

#---------------------------------------#
#               Trace Route             #
#---------------------------------------#
pass in on { $LAN } proto udp from any to any port 33433 >< 33626 keep state

#---------------------------------------#
#               WHITELIST               #
#---------------------------------------#
pass in quick on $ADSL proto tcp from <WHITELIST> to any port 55555 

#---------------------------------------#
#                 LAN                   #
#---------------------------------------#

#=====----> Firewall to Lan
pass out on $LAN inet to $LAN:network


#=====----> ssh LAN
pass in quick on $LAN proto tcp from $LAN:network to $LAN port 55555
#pass in quick proto tcp from any to port 55555

#=====----> dns
pass in quick on $LAN proto udp from $LAN:network to $LAN port 53 

#=====----> dhcp
pass in quick on $LAN inet from $LAN:network to 255.255.255.255 

#=====----> Permit Lan to output
pass in on $LAN inet from $LAN:network to any

pass out on $LAN inet from $LAN:network to any


#---------------------------------------#
#            ACCEPT OUTGOING            #
#---------------------------------------#
pass out on $ADSL

Power button

https://www.conrad.ch/de/p/sci-r13-81a-05bk-drucktaster-125-v-ac-0-5-a-1-x-aus-ein-tastend-1-st-701074.html
https://www.conrad.ch/de/p/konfektionierte-litze-polzahl-gesamt-2-rastermass-2-54-mm-741213-1-st-741213.html

Updated by sacha 7 months ago · 5 revisions