Contents
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 ... ... ...