Bläddra i källkod

mesh firewall

Bob Mottram 9 år sedan
förälder
incheckning
5099ec9143
2 ändrade filer med 105 tillägg och 31 borttagningar
  1. 2
    2
      src/freedombone
  2. 103
    29
      src/freedombone-image-customise

+ 2
- 2
src/freedombone Visa fil

432
 TOX_BOOTSTRAP_ID_FILE=/var/lib/tox-bootstrapd/pubkey.txt
432
 TOX_BOOTSTRAP_ID_FILE=/var/lib/tox-bootstrapd/pubkey.txt
433
 # These are some default nodes, but you can replace them with trusted nodes
433
 # These are some default nodes, but you can replace them with trusted nodes
434
 # as you prefer. See https://wiki.tox.im/Nodes
434
 # as you prefer. See https://wiki.tox.im/Nodes
435
-TOX_NODE=
435
+TOX_NODES=
436
 #TOX_NODES=(
436
 #TOX_NODES=(
437
 #  '192.254.75.102,2607:5600:284::2,33445,951C88B7E75C867418ACDB5D273821372BB5BD652740BCDF623A4FA293E75D2F,Tox RELENG,US'
437
 #  '192.254.75.102,2607:5600:284::2,33445,951C88B7E75C867418ACDB5D273821372BB5BD652740BCDF623A4FA293E75D2F,Tox RELENG,US'
438
 #  '144.76.60.215,2a01:4f8:191:64d6::1,33445,04119E835DF3E78BACF0F84235B300546AF8B936F035185E2A8E9E0A67C8924F,sonOfRa,DE'
438
 #  '144.76.60.215,2a01:4f8:191:64d6::1,33445,04119E835DF3E78BACF0F84235B300546AF8B936F035185E2A8E9E0A67C8924F,sonOfRa,DE'
1235
             TLS_TIME_SOURCE2=$(grep "TLS_TIME_SOURCE2" $CONFIGURATION_FILE | awk -F '=' '{print $2}')
1235
             TLS_TIME_SOURCE2=$(grep "TLS_TIME_SOURCE2" $CONFIGURATION_FILE | awk -F '=' '{print $2}')
1236
         fi
1236
         fi
1237
     fi
1237
     fi
1238
-	echo "System type: $SYSTEM_TYPE"
1238
+    echo "System type: $SYSTEM_TYPE"
1239
 }
1239
 }
1240
 
1240
 
1241
 function set_default_onion_domains {
1241
 function set_default_onion_domains {

+ 103
- 29
src/freedombone-image-customise Visa fil

69
 # Whether sites are accessible only within a Tor browser
69
 # Whether sites are accessible only within a Tor browser
70
 ONION_ONLY="no"
70
 ONION_ONLY="no"
71
 
71
 
72
+WIFI_INTERFACE='wlan0'
73
+
72
 enable_eatmydata_override() {
74
 enable_eatmydata_override() {
73
     chroot $rootdir apt-get install --no-install-recommends -y eatmydata
75
     chroot $rootdir apt-get install --no-install-recommends -y eatmydata
74
     if [ -x $rootdir/usr/bin/eatmydata ] && \
76
     if [ -x $rootdir/usr/bin/eatmydata ] && \
391
     echo '</service-group>' >> $rootdir/etc/avahi/services/ssh.service
393
     echo '</service-group>' >> $rootdir/etc/avahi/services/ssh.service
392
 
394
 
393
     # keep the daemon running
395
     # keep the daemon running
394
-	WATCHDOG_SCRIPT_NAME="keepon"
396
+    WATCHDOG_SCRIPT_NAME="keepon"
395
     echo '' >> $rootdir/usr/bin/$WATCHDOG_SCRIPT_NAME
397
     echo '' >> $rootdir/usr/bin/$WATCHDOG_SCRIPT_NAME
396
     echo '# keep avahi daemon running' >> $rootdir/usr/bin/$WATCHDOG_SCRIPT_NAME
398
     echo '# keep avahi daemon running' >> $rootdir/usr/bin/$WATCHDOG_SCRIPT_NAME
397
     echo 'AVAHI_RUNNING=$(pgrep avahi-daemon > /dev/null && echo Running)' >> $rootdir/usr/bin/$WATCHDOG_SCRIPT_NAME
399
     echo 'AVAHI_RUNNING=$(pgrep avahi-daemon > /dev/null && echo Running)' >> $rootdir/usr/bin/$WATCHDOG_SCRIPT_NAME
400
     echo '  echo -n $CURRENT_DATE >> $LOGFILE' >> $rootdir/usr/bin/$WATCHDOG_SCRIPT_NAME
402
     echo '  echo -n $CURRENT_DATE >> $LOGFILE' >> $rootdir/usr/bin/$WATCHDOG_SCRIPT_NAME
401
     echo '  echo " Avahi daemon restarted" >> $LOGFILE' >> $rootdir/usr/bin/$WATCHDOG_SCRIPT_NAME
403
     echo '  echo " Avahi daemon restarted" >> $LOGFILE' >> $rootdir/usr/bin/$WATCHDOG_SCRIPT_NAME
402
     echo 'fi' >> $rootdir/usr/bin/$WATCHDOG_SCRIPT_NAME
404
     echo 'fi' >> $rootdir/usr/bin/$WATCHDOG_SCRIPT_NAME
403
-	chmod +x $rootdir/usr/bin/$WATCHDOG_SCRIPT_NAME
405
+    chmod +x $rootdir/usr/bin/$WATCHDOG_SCRIPT_NAME
404
 }
406
 }
405
 
407
 
406
-function mesh_batman {
408
+mesh_batman() {
407
     chroot "$rootdir" apt-get -y install iproute bridge-utils libnetfilter-conntrack3 batctl
409
     chroot "$rootdir" apt-get -y install iproute bridge-utils libnetfilter-conntrack3 batctl
408
     chroot "$rootdir" apt-get -y install python-dev libevent-dev ebtables python-pip git
410
     chroot "$rootdir" apt-get -y install python-dev libevent-dev ebtables python-pip git
409
     chroot "$rootdir" apt-get -y install wireless-tools rfkill
411
     chroot "$rootdir" apt-get -y install wireless-tools rfkill
412
         echo 'batman_adv' >> $rootdir/etc/modules
414
         echo 'batman_adv' >> $rootdir/etc/modules
413
     fi
415
     fi
414
 
416
 
415
-	if [ -f /usr/local/bin/${PROJECT_NAME}-mesh-batman ]; then
417
+    if [ -f /usr/local/bin/${PROJECT_NAME}-mesh-batman ]; then
416
         cp /usr/local/bin/${PROJECT_NAME}-mesh-batman $rootdir/var/lib/batman
418
         cp /usr/local/bin/${PROJECT_NAME}-mesh-batman $rootdir/var/lib/batman
417
-	else
419
+    else
418
         cp /usr/bin/${PROJECT_NAME}-mesh-batman $rootdir/var/lib/batman
420
         cp /usr/bin/${PROJECT_NAME}-mesh-batman $rootdir/var/lib/batman
419
-	fi
421
+    fi
420
 
422
 
421
     echo '[Unit]' > $rootdir/etc/systemd/system/batman.service
423
     echo '[Unit]' > $rootdir/etc/systemd/system/batman.service
422
     echo 'Description=B.A.T.M.A.N. Advanced' >> $rootdir/etc/systemd/system/batman.service
424
     echo 'Description=B.A.T.M.A.N. Advanced' >> $rootdir/etc/systemd/system/batman.service
435
     chroot "$rootdir" systemctl enable batman
437
     chroot "$rootdir" systemctl enable batman
436
 }
438
 }
437
 
439
 
438
-function mesh_tox_node {
440
+mesh_firewall() {
441
+    TOX_PORT=33445
442
+    ZERONET_PORT=15441
443
+    TRACKER_PORT=6969
444
+    FIREWALL_FILENAME=$rootdir/etc/systemd/system/meshfirewall.service
445
+    MESH_FIREWALL_SCRIPT=/usr/bin/mesh-firewall
446
+
447
+    echo '#!/bin/bash' > $rootdir/$MESH_FIREWALL_SCRIPT
448
+    echo 'iptables -P INPUT ACCEPT' >> $rootdir/$MESH_FIREWALL_SCRIPT
449
+    echo 'ip6tables -P INPUT ACCEPT' >> $rootdir/$MESH_FIREWALL_SCRIPT
450
+    echo 'iptables -F' >> $rootdir/$MESH_FIREWALL_SCRIPT
451
+    echo 'ip6tables -F' >> $rootdir/$MESH_FIREWALL_SCRIPT
452
+    echo 'iptables -t nat -F' >> $rootdir/$MESH_FIREWALL_SCRIPT
453
+    echo 'ip6tables -t nat -F' >> $rootdir/$MESH_FIREWALL_SCRIPT
454
+    echo 'iptables -X' >> $rootdir/$MESH_FIREWALL_SCRIPT
455
+    echo 'ip6tables -X' >> $rootdir/$MESH_FIREWALL_SCRIPT
456
+    echo 'iptables -P INPUT DROP' >> $rootdir/$MESH_FIREWALL_SCRIPT
457
+    echo 'ip6tables -P INPUT DROP' >> $rootdir/$MESH_FIREWALL_SCRIPT
458
+    echo 'iptables -A INPUT -i lo -j ACCEPT' >> $rootdir/$MESH_FIREWALL_SCRIPT
459
+    echo 'iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT' >> $rootdir/$MESH_FIREWALL_SCRIPT
460
+    echo '' >> $rootdir/$MESH_FIREWALL_SCRIPT
461
+    echo '# Make sure incoming tcp connections are SYN packets' >> $rootdir/$MESH_FIREWALL_SCRIPT
462
+    echo 'iptables -A INPUT -p tcp ! --syn -m state --state NEW -j DROP' >> $rootdir/$MESH_FIREWALL_SCRIPT
463
+    echo '' >> $rootdir/$MESH_FIREWALL_SCRIPT
464
+    echo '# Drop packets with incoming fragments' >> $rootdir/$MESH_FIREWALL_SCRIPT
465
+    echo 'iptables -A INPUT -f -j DROP' >> $rootdir/$MESH_FIREWALL_SCRIPT
466
+    echo '' >> $rootdir/$MESH_FIREWALL_SCRIPT
467
+    echo '# Drop bogons' >> $rootdir/$MESH_FIREWALL_SCRIPT
468
+    echo 'iptables -A INPUT -p tcp --tcp-flags ALL ALL -j DROP' >> $rootdir/$MESH_FIREWALL_SCRIPT
469
+    echo 'iptables -A INPUT -p tcp --tcp-flags ALL FIN,PSH,URG -j DROP' >> $rootdir/$MESH_FIREWALL_SCRIPT
470
+    echo 'iptables -A INPUT -p tcp --tcp-flags ALL SYN,RST,ACK,FIN,URG -j DROP' >> $rootdir/$MESH_FIREWALL_SCRIPT
471
+    echo '' >> $rootdir/$MESH_FIREWALL_SCRIPT
472
+    echo '# Incoming malformed NULL packets:' >> $rootdir/$MESH_FIREWALL_SCRIPT
473
+    echo 'iptables -A INPUT -p tcp --tcp-flags ALL NONE -j DROP' >> $rootdir/$MESH_FIREWALL_SCRIPT
474
+    echo '' >> $rootdir/$MESH_FIREWALL_SCRIPT
475
+    echo "iptables -A INPUT -p tcp --dport $TOX_PORT -j ACCEPT" >> $rootdir/$MESH_FIREWALL_SCRIPT
476
+    echo "iptables -A INPUT -i $WIFI_INTERFACE -p udp --dport $ZERONET_PORT -j ACCEPT" >> $rootdir/$MESH_FIREWALL_SCRIPT
477
+    echo "iptables -A INPUT -i $WIFI_INTERFACE -p tcp --dport $ZERONET_PORT -j ACCEPT" >> $rootdir/$MESH_FIREWALL_SCRIPT
478
+    echo "iptables -A INPUT -i $WIFI_INTERFACE -p udp --dport $TRACKER_PORT -j ACCEPT" >> $rootdir/$MESH_FIREWALL_SCRIPT
479
+    echo "iptables -A INPUT -i $WIFI_INTERFACE -p tcp --dport $TRACKER_PORT -j ACCEPT" >> $rootdir/$MESH_FIREWALL_SCRIPT
480
+    echo "iptables -A INPUT -i $WIFI_INTERFACE -p udp --dport 1900 -j ACCEPT" >> $rootdir/$MESH_FIREWALL_SCRIPT
481
+    chmod +x $rootdir/$MESH_FIREWALL_SCRIPT
482
+
483
+    echo '[Unit]' > $FIREWALL_FILENAME
484
+    echo 'Description=Mesh Firewall' >> $FIREWALL_FILENAME
485
+    echo '' >> $FIREWALL_FILENAME
486
+    echo '[Service]' >> $FIREWALL_FILENAME
487
+    echo 'Type=oneshot' >> $FIREWALL_FILENAME
488
+    echo "ExecStart=$MESH_FIREWALL_SCRIPT" >> $FIREWALL_FILENAME
489
+    echo 'RemainAfterExit=no' >> $FIREWALL_FILENAME
490
+    echo '' >> $FIREWALL_FILENAME
491
+    echo 'TimeoutSec=30' >> $FIREWALL_FILENAME
492
+    echo '' >> $FIREWALL_FILENAME
493
+    echo '[Install]' >> $FIREWALL_FILENAME
494
+    echo 'WantedBy=multi-user.target' >> $FIREWALL_FILENAME
495
+    chroot "$rootdir" systemctl enable meshfirewall
496
+}
497
+
498
+mesh_tox_node() {
499
+    TOX_REPO='git://github.com/irungentoo/toxcore.git'
500
+    TOX_COMMIT='73b2144edcfd1ca617e9054479b66ab0c0361a14'
501
+    TOX_BOOTSTRAP_ID_FILE=/var/lib/tox-bootstrapd/pubkey.txt
502
+    # These are some default nodes, but you can replace them with trusted nodes
503
+    # as you prefer. See https://wiki.tox.im/Nodes
504
+    TOX_NODES=
505
+    #TOX_NODES=(
506
+    #  '192.254.75.102,2607:5600:284::2,33445,951C88B7E75C867418ACDB5D273821372BB5BD652740BCDF623A4FA293E75D2F,Tox RELENG,US'
507
+    #  '144.76.60.215,2a01:4f8:191:64d6::1,33445,04119E835DF3E78BACF0F84235B300546AF8B936F035185E2A8E9E0A67C8924F,sonOfRa,DE'
508
+    #)
509
+    iptables -A INPUT -p tcp --dport $TOX_PORT -j ACCEPT
510
+    save_firewall_settings
511
+
439
     chroot "$rootdir" apt-get -y install build-essential libtool autotools-dev
512
     chroot "$rootdir" apt-get -y install build-essential libtool autotools-dev
440
     chroot "$rootdir" apt-get -y install automake checkinstall check git yasm
513
     chroot "$rootdir" apt-get -y install automake checkinstall check git yasm
441
     chroot "$rootdir" apt-get -y install libsodium13 libsodium-dev libcap2-bin
514
     chroot "$rootdir" apt-get -y install libsodium13 libsodium-dev libcap2-bin
543
     if [[ $VARIANT != "mesh" ]]; then
616
     if [[ $VARIANT != "mesh" ]]; then
544
         return
617
         return
545
     fi
618
     fi
619
+    mesh_firewall
546
     mesh_avahi
620
     mesh_avahi
547
-	mesh_batman
548
-
549
-	#MESH_SERVICE='mesh-setup.service'
550
-    #MESH_SETUP_DAEMON=$rootdir/etc/systemd/system/$MESH_SERVICE
551
-
552
-    #echo '[Unit]' > $MESH_SETUP_DAEMON
553
-    #echo 'Description=Initial mesh router configuration' >> $MESH_SETUP_DAEMON
554
-    #echo 'After=syslog.target' >> $MESH_SETUP_DAEMON
555
-    #echo 'After=network.target' >> $MESH_SETUP_DAEMON
556
-    #echo '[Service]' >> $MESH_SETUP_DAEMON
557
-    #echo 'Type=simple' >> $MESH_SETUP_DAEMON
558
-    #echo 'User=root' >> $MESH_SETUP_DAEMON
559
-    #echo 'Group=root' >> $MESH_SETUP_DAEMON
560
-    #echo 'WorkingDirectory=/root' >> $MESH_SETUP_DAEMON
561
-    #echo "ExecStart=/usr/local/bin/${PROJECT_NAME}-image-mesh > /var/log/mesh-setup.log" >> $MESH_SETUP_DAEMON
562
-    #echo '' >> $MESH_SETUP_DAEMON
563
-    #echo 'TimeoutSec=99999' >> $MESH_SETUP_DAEMON
564
-    #echo '' >> $MESH_SETUP_DAEMON
565
-    #echo '[Install]' >> $MESH_SETUP_DAEMON
566
-    #echo 'WantedBy=multi-user.target' >> $MESH_SETUP_DAEMON
567
-
568
-    #chroot "$rootdir" systemctl enable $MESH_SERVICE
621
+    mesh_batman
622
+    #mesh_tox_node
623
+
624
+    MESH_SERVICE='mesh-setup.service'
625
+    MESH_SETUP_DAEMON=$rootdir/etc/systemd/system/$MESH_SERVICE
626
+
627
+    echo '[Unit]' > $MESH_SETUP_DAEMON
628
+    echo 'Description=Initial mesh router configuration' >> $MESH_SETUP_DAEMON
629
+    echo 'After=syslog.target' >> $MESH_SETUP_DAEMON
630
+    echo 'After=network.target' >> $MESH_SETUP_DAEMON
631
+    echo '[Service]' >> $MESH_SETUP_DAEMON
632
+    echo 'Type=simple' >> $MESH_SETUP_DAEMON
633
+    echo 'User=root' >> $MESH_SETUP_DAEMON
634
+    echo 'Group=root' >> $MESH_SETUP_DAEMON
635
+    echo 'WorkingDirectory=/root' >> $MESH_SETUP_DAEMON
636
+    echo "ExecStart=/usr/local/bin/${PROJECT_NAME}-image-mesh > /var/log/mesh-setup.log" >> $MESH_SETUP_DAEMON
637
+    echo '' >> $MESH_SETUP_DAEMON
638
+    echo 'TimeoutSec=99999' >> $MESH_SETUP_DAEMON
639
+    echo '' >> $MESH_SETUP_DAEMON
640
+    echo '[Install]' >> $MESH_SETUP_DAEMON
641
+    echo 'WantedBy=multi-user.target' >> $MESH_SETUP_DAEMON
642
+    chroot "$rootdir" systemctl enable $MESH_SERVICE
569
 }
643
 }
570
 
644
 
571
 # Set to true/false to control if eatmydata is used during build
645
 # Set to true/false to control if eatmydata is used during build