TinkerBoard Teil1 Homerouter

Hardware

  • TinkerBoard
  • AUKEY CB-H17 USB 3.0 6-Port Hub mit Ladeport, Gigabit Ethernet Port und 12V/3A Netzteiladapter
  • CLASS 10 Micro SD Card

 

OS

Als Betriebsysstem wird TinkerOS 2.0.4 (ein Debian Stretch mit linaro-Overlay) verwendet

Das Image wird wie üblich mittels dd auf eine SD-Card (Class 10) geschrieben

dd if=/home/mig/20171115-tinker-board-linaro-stretch-alip-v2.0.4.img of=/dev/sdb seek=0 bs=16M

Nach dem ersten booten kann das Dateisystem mittels tinker-config auf die gesamte SD „ausgedehnt“ werden

tinker-config ist stark an raspi-config angelehnt und bietet auch Dialoge für Hostname ändern, Dipslay-Options und Overclocking an.

Notwendige Pakete installieren/deinstallieren

apt-get install  iptables iptables-persistant screen dnsmasq

apt-get remove –purge network-manager

Konfiguration

NIC

Namen der Networkinterfaces auf ETH0 (intern) und ETH1 (extern) ändern

Dies kann man gern über das ändern diverser udev-files machen oder gleich mit den systemd Methoden


root@fast:~# cat /etc/systemd/network/10-wired0.link
[Match]
MACAddress=01:23:45:ab:cd:ef

[Link]
Description=onboard_rename_eth0
Name=eth0

root@fast:~# cat /etc/systemd/network/11-wired1.link
[Match]
MACAddress=56:78:90:ab:cd:ef

[Link]
Description=USB to Ethernet Adapter
Name=eth1

Die statische Zuweisung der Ip-Adrssen mache ich hingegen in the old debian Way
Wichtig ist hier das Gateway nur für die externe IP-Adresse zu vergeben


# The loopback network interface
auto lo
iface lo inet loopback

# The primary network interface
allow-hotplug eth0 eth1
iface eth0 inet static
address 10.0.0.1
netmask 255.255.255.0
# gateway 10.1.1.1
iface eth1 inet static
address 192.168.0.137
netmask 255.255.255.0
gateway 192.168.0.138

Firewall

root@fast:~# cat /etc/iptables/rules.v4
# Generated by iptables-save v1.6.0 on Mon May  8 21:16:08 2017
*filter
:INPUT DROP [10:484]
:FORWARD DROP [0:0]
:OUTPUT ACCEPT [2836:299212]
:ICMPFLOOD - [0:0]
:SSHBRUTE - [0:0]
-A FORWARD  -i eth0 -j ACCEPT  
-A FORWARD  -o eth0 -j ACCEPT  
-A INPUT -i lo -j ACCEPT
#rule for dhcp broadcast aus dem internen Netz
-A INPUT -i eth0  -p udp --dport 67:68 --sport  67:68 -j ACCEPT 
-A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A INPUT -m conntrack --ctstate INVALID -j DROP
-A INPUT -s 127.0.0.0/8 ! -i lo -j DROP
-A INPUT -s 10.0.0.0/24 -j ACCEPT
-A INPUT -m addrtype --dst-type BROADCAST -j DROP
-A INPUT -m addrtype --dst-type MULTICAST -j DROP
-A INPUT -m addrtype --dst-type ANYCAST -j DROP
-A INPUT -d 224.0.0.0/4 -j DROP
-A INPUT -p tcp -m multiport --dports 80,443 -m tcp --tcp-flags FIN,SYN,RST,ACK SYN -m conntrack --ctstate NEW -j ACCEPT
-A INPUT -p tcp -m tcp --dport 22 --tcp-flags FIN,SYN,RST,ACK SYN -m conntrack --ctstate NEW -j SSHBRUTE
-A INPUT -p icmp -m icmp --icmp-type 0 -m conntrack --ctstate NEW -j ACCEPT
-A INPUT -p icmp -m icmp --icmp-type 3 -m conntrack --ctstate NEW -j ACCEPT
-A INPUT -p icmp -m icmp --icmp-type 11 -m conntrack --ctstate NEW -j ACCEPT
-A INPUT -p icmp -m icmp --icmp-type 8 -m conntrack --ctstate NEW -j ICMPFLOOD
-A INPUT -p udp -m multiport --dports 135,445 -j DROP
-A INPUT -p udp -m udp --dport 137:139 -j DROP
-A INPUT -p udp -m udp --sport 137 --dport 1024:65535 -j DROP
-A INPUT -p tcp -m multiport --dports 135,139,445 -j DROP
-A INPUT -p udp -m udp --dport 1900 -j DROP
-A INPUT -p udp -m udp --sport 53 -j DROP
-A INPUT -p tcp -m tcp --dport 113 --tcp-flags FIN,SYN,RST,ACK SYN -m conntrack --ctstate NEW -j REJECT --reject-with tcp-reset
-A INPUT -m limit --limit 1/sec --limit-burst 100 -j LOG --log-prefix "iptables[DOS]: "
-A ICMPFLOOD -m recent --set --name ICMP --mask 255.255.255.255 --rsource
-A ICMPFLOOD -m recent --update --seconds 1 --hitcount 6 --rttl --name ICMP --mask 255.255.255.255 --rsource -m limit --limit 1/sec --limit-burst 1 -j LOG --log-prefix "iptables[ICMP-flood]: "
-A ICMPFLOOD -m recent --update --seconds 1 --hitcount 6 --rttl --name ICMP --mask 255.255.255.255 --rsource -j DROP
-A ICMPFLOOD -j ACCEPT
-A SSHBRUTE -m recent --set --name SSH --mask 255.255.255.255 --rsource
-A SSHBRUTE -m recent --update --seconds 300 --hitcount 10 --name SSH --mask 255.255.255.255 --rsource -m limit --limit 1/sec --limit-burst 100 -j LOG --log-prefix "iptables[SSH-brute]: "
-A SSHBRUTE -m recent --update --seconds 300 --hitcount 10 --name SSH --mask 255.255.255.255 --rsource -j DROP
-A SSHBRUTE -j ACCEPT
COMMIT
#natting rules
*nat
:PREROUTING ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A POSTROUTING -o eth1 -j MASQUERADE
COMMIT

Damit die Log Einträge von iptables nicht in dmesg bzw syslog auftauchen sondern in einem eigenen Logfile
erstelle ic eine rsyslogd config

root@fast:~# cat /etc/rsyslog.d/10-iptableslog.conf 
:msg,contains, "iptables[" -/var/log/iptables.log
& ~

Und richte ein logrotate für dieses File ein

root@fast:~# cat /etc/logrotate.d/iptables 
/var/log/iptables.log
{
	rotate 7
	daily
	missingok
	notifempty
	delaycompress
	compress
	postrotate
		invoke-rc.d rsyslog rotate > /dev/null
	endscript
}

SSH

Nachdem der router vom Internet aus erreichbar ist, verbiete ich root login, und Paswort login
natürlich nur nachdem ich mindestens einen Key hinterlegt habe
PermitRootLogin no
PasswordAuthentication no

dnsmasq

als dns und dhcp Server dient dmsmasq

root@fast:~# cat /etc/dnsmasq.d/01-nameserver 
resolv-file=/etc/resolv.dnsmasq.conf
listen-address=127.0.0.1,10.0.0.1
root@fast:~# cat /etc/dnsmasq.d/02-dhcp 
interface=lo
interface=eth0
#dnsrange
dhcp-range=10.0.0.100,10.0.0.250,72h
 
# general DHCP stuff (see RFC 2132)
#
# 1:  subnet masq
# 3:  default router
# 6:  DNS server
# 12: hostname
# 15: DNS domain (unneeded with option 'domain')
# 28: broadcast address
# 42: time server
#
dhcp-authoritative
dhcp-leasefile=/var/lib/misc/dnsmasq.leases

#gateway
dhcp-option=3,10.0.0.1
#dns
dhcp-option=6,10.0.0.1

#reservations
dhcp-host=00:11:22:aa:bb:cc,dm500hd,10.0.0.2
...
...
...

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.