diff options
Diffstat (limited to 'contrib')
-rw-r--r-- | contrib/peer2anonet/Makefile | 32 | ||||
-rw-r--r-- | contrib/peer2anonet/README | 73 | ||||
-rwxr-xr-x | contrib/peer2anonet/configure | 12 | ||||
-rwxr-xr-x[-rw-r--r--] | contrib/peer2anonet/peer2anonet | 286 |
4 files changed, 191 insertions, 212 deletions
diff --git a/contrib/peer2anonet/Makefile b/contrib/peer2anonet/Makefile deleted file mode 100644 index b3d0ee5..0000000 --- a/contrib/peer2anonet/Makefile +++ /dev/null @@ -1,32 +0,0 @@ -#!/usr/bin/make -f - -install-deb: - make clean - rm -rf DEBIAN/peer2anonet *.deb - mkdir DEBIAN/peer2anonet - mkdir DEBIAN/peer2anonet/DEBIAN - mkdir DEBIAN/peer2anonet/usr - mkdir DEBIAN/peer2anonet/usr/bin - mkdir DEBIAN/peer2anonet/etc - mkdir DEBIAN/peer2anonet/etc/peer2anonet - cp DEBIAN/control DEBIAN/peer2anonet/DEBIAN/control - cp peer2anonet DEBIAN/peer2anonet/usr/bin/peer2anonet - chmod +x DEBIAN/peer2anonet/usr/bin/peer2anonet - DEBIAN/configure - dpkg-deb --build DEBIAN/peer2anonet - dpkg -i DEBIAN/peer2anonet.deb - rm -rf DEBIAN/peer2anonet DEBIAN/peer2anonet.deb - -install: - make clean - make uninstall - cp peer2anonet /usr/bin/peer2anonet - chmod +x /usr/bin/peer2anonet - mkdir /etc/peer2anonet - ./configure - -uninstall: - rm -rf /usr/bin/peer2anonet /etc/peer2anonet - -clean: - rm -rf DEBIAN/peer2anonet DEBIAN/peer2anonet.deb diff --git a/contrib/peer2anonet/README b/contrib/peer2anonet/README index 04feabb..c68fc2d 100644 --- a/contrib/peer2anonet/README +++ b/contrib/peer2anonet/README @@ -1,82 +1,21 @@ -SYNOPSIS: - # Generate Keys: - quicktun.keypair</dev/random - - # Interactive prompt: - peer2anonet - - # Accept pipe from file: - peer2anonet < autoconfig.txt - - # Accept netcat pipe: - nc -l 1337 | peer2anonet - - # Send a netcat pipe: - nc 1337 192.168.1.0 < autoconfig.txt - DESCRIPTION: peer2anonet is an autoconfiguration utility to easily establish a - peering session with BGP on anonet2. - -LICENSE: - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. + peering session with BGP on AnoNet2. DEPENDS ON: quicktun, bird, daemontools(non-deb), bash -INSTALL AND UNINSTALL: - ****************************************************************** - * PEER2ANONET CAN AND WILL OVERWRITE /service AND /services, TO * - * INCLUDE FILES WITHIN THOSE DIRECTORIES. PLEASE CREATE BACKUPS * - * BEFORE INSTALLING AND USING PEER2ANONET AT ANY TIME! * - ****************************************************************** - - To install, `cd' to the extracted peer2anonet folder. - Issue the following commands as root: - - make install - - To uninstall peer2anonet, as root do: +USAGE: - make uninstall + --configure generate a new local configuration and exit - To compile/install a .deb package, as root do: + --update regenerate peer configurations - make install-deb + --configure-peer generate a new peer configuration and update -USAGE: - You may execute peer2anonet and answer configuration questions - via interface or pipe a file containing the new peering - session's specifications to the executable. peer2anonet has - some security checks but it is highly recommended you check - a autoconfig file manually before using to prevent malicious - attacks. An autoconfig file should be in the following format: - Plain text file, one block of data per line, no spaces, and - without including the following '<-- comments'. + --rm-peer remove a peer configuration and update -================== Not Actual Line on File ============================ -anon <--your peer's alias -11.22.33.44 <--your peer's remote ip -1.2.3.4 <--your peer's anonet ip -4321 <--your peer's client port -1234 <--your peer's asn -3c6e0b8a9c15224a8228b9a98ca1531d <--your peer's public key -================== Not Actual Line on File ============================ - At your discretion, you may exclude the public key from the - bottom of an autoconfig file and post installation of your new - peer service, peer2anonet will prompt foor it. diff --git a/contrib/peer2anonet/configure b/contrib/peer2anonet/configure deleted file mode 100755 index d9a574d..0000000 --- a/contrib/peer2anonet/configure +++ /dev/null @@ -1,12 +0,0 @@ -#!/bin/bash -read -p "Enter your anonet network: " P2A_NET -read -p "Enter your anonet router: " P2A_ROUTE -read -p "Enter your anonet asn: " P2A_ASN -read -p "Enter your anonet ip: " P2A_IP - -echo '' >/etc/peer2anonet/p2a.conf - -echo "P2A_NET=\"$P2A_NET\"" >>/etc/peer2anonet/p2a.conf -echo "P2A_ROUTE=\"$P2A_ROUTE\"" >>/etc/peer2anonet/p2a.conf -echo "P2A_ASN=\"$P2A_ASN\"" >>/etc/peer2anonet/p2a.conf -echo "P2A_IP=\"$P2A_IP\"" >>/etc/peer2anonet/p2a.conf diff --git a/contrib/peer2anonet/peer2anonet b/contrib/peer2anonet/peer2anonet index 4bbb164..7b01f24 100644..100755 --- a/contrib/peer2anonet/peer2anonet +++ b/contrib/peer2anonet/peer2anonet @@ -1,75 +1,119 @@ #!/bin/bash -######################################################################### -# We need to check for root privileges: if [[ $(id -u) != 0 ]]; then - echo "peer2anonet: error: root privileges required." - exit 1 + echo "error: root privileges required." + exit 1 fi -######################################################################### -# We need to source our peer2anonet variables -source /etc/peer2anonet/p2a.conf +USAGE(){ + echo -e '\npeer2anonet:' + echo -e '\n --configure generate a new local configuration and exit' + echo -e '\n --update regenerate peer configurations' + echo -e '\n --configure-peer generate a new peer configuration and update' + echo -e '\n --rm-peer remove a peer configuration and update\n' + exit 0 + } -######################################################################### -# We need to see if service(s) directories exist: +mkdir -p /service mkdir -p /services mkdir -p /services/bird -mkdir -p /service - -######################################################################### -# We need to get info for the new peering and BGP session: -read -p "Enter your peer's name/interface: " PEERNAME -read -p "Enter your peer's remote ip: " REMOTEIP -read -p "Enter your peer's anonet ip: " PEERIP -read -p "Enter your peer's remote port: " PEERPORT -read -p "Enter your peer's asn: " PEERASN -read -p "Enter your peer's public key: " PUBKEY - -######################################################################### -# Do some security checks on variables: -TEST[0]=$PEERNAME; TEST[1]=$REMOTEIP; TEST[2]=$PEERIP - TEST[3]=$PEERPORT; TEST[4]=$PEERASN - -for((X=0;X<=2;X++)); do -if [[ $(echo ${TEST[$X]} | tr -d 'a-zA-Z0-9._-' | wc -c) -gt 1 ]]; then -echo ${TEST[$X]} | tr -d 'a-zA-Z0-9' | wc -c - echo "peer2anonet: fatal error: unacceptable data: ${TEST[$X]} -" - exit 1 -fi -done - -for((X=3;X<=4;X++)); do -if [[ $(echo ${TEST[$X]} | tr -d '0-9' | wc -c) -gt 1 ]]; then - echo "peer2anonet: fatal error: unacceptable data: ${TEST[$X]} -" - exit 1 +mkdir -p /etc/peer2anonet +mkdir -p /etc/peer2anonet/peers + +if [ -e /etc/peer2anonet/p2a.conf ]; then + source /etc/peer2anonet/p2a.conf +else + echo "peer2anonet: needs --configure prior to usage" + exit 1 fi -done -if [[ $(echo "$PUBKEY" | tr -d 'a-zA-Z0-9' | wc -c) -gt 1 ]]; then - echo "peer2anonet: fatal error: unacceptable data: ${TEST[$X]} -" - exit 1 -fi - -ADDPORT="2$(($PEERASN % 10000))" - -######################################################################### -# We need to check if base files need to be imported to services for bird: -NEW_PROTOCOL=" -protocol bgp $PEERNAME { table AnoNet_routes; - local as $P2A_ASN; - neighbor $PEERIP as $PEERASN; - source address $P2A_IP; - import filter only_AnoNet_ebgp; - export filter only_AnoNet_ebgp_export; -}" - -BIRD_RUN='#!/bin/sh -exec bird -c bird.conf -d' - -BIRD_CONF="function n_AnoNet_mine (prefix arg) { +CONFIGURE(){ + echo -e '\nCONFIGURE:\n' + read -p " Enter your AnoNet subnet: " P2A_NET + read -p " Enter your AnoNet router: " P2A_ROUTE + read -p " Enter your peering ip: " P2A_IP + read -p " Enter your AnoNet asn: " P2A_ASN + echo "P2A_NET=\"$P2A_NET\"">/etc/peer2anonet/p2a.conf + echo "P2A_ROUTE=\"$P2A_ROUTE\"">>/etc/peer2anonet/p2a.conf + echo "P2A_IP=\"$P2A_IP\"">>/etc/peer2anonet/p2a.conf + echo "P2A_ASN=\"$P2A_ASN\"">>/etc/peer2anonet/p2a.conf + echo -e '\npeer2anonet: configured\n' + exit 0 + } + +UPDATE(){ + echo -e '\nUPDATE:\n' + if [[ $(ls /etc/peer2anonet/peers) ]]; then + for PEER in `ls /etc/peer2anonet/peers`; do + if [ -e /etc/peer2anonet/peers/"$PEER"/remote_ip ]; then + if [[ $(echo X`cat /etc/peer2anonet/peers/"$PEER"/remote_ip`) == 'X' ]]; then + echo " error: /etc/peer2anonet/peers/$PEER/remote_ip is void" + exit 1 + fi + else + echo " error: /etc/peer2anonet/peers/$PEER/remote_ip not exists" + exit 1 + fi + + if [ -e /etc/peer2anonet/peers/"$PEER"/peering_ip ]; then + if [[ $(echo X`cat /etc/peer2anonet/peers/"$PEER"/peering_ip`) == 'X' ]]; then + echo " error: /etc/peer2anonet/peers/$PEER/peering_ip is void" + exit 1 + fi + else + echo " error: /etc/peer2anonet/peers/$PEER/peering_ip not exists" + exit 1 + fi + + if [ -e /etc/peer2anonet/peers/"$PEER"/port ]; then + if [[ $(echo X`cat /etc/peer2anonet/peers/"$PEER"/port`) == 'X' ]]; then + echo " error: /etc/peer2anonet/peers/$PEER/port is void" + exit 1 + fi + else + echo " error: /etc/peer2anonet/peers/$PEER/port not exists" + exit 1 + fi + + if [ -e /etc/peer2anonet/peers/"$PEER"/asn ]; then + if [[ $(echo X`cat /etc/peer2anonet/peers/"$PEER"/asn`) == 'X' ]]; then + echo " error: /etc/peer2anonet/peers/$PEER/asn is void" + exit 1 + fi + else + echo " error: /etc/peer2anonet/peers/$PEER/asn not exists" + exit 1 + fi + + if [ -e /etc/peer2anonet/peers/"$PEER"/pubkey ]; then + if [[ $(echo X`cat /etc/peer2anonet/peers/"$PEER"/pubkey`) == 'X' ]]; then + echo " error: /etc/peer2anonet/peers/$PEER/pubkey is void" + exit 1 + fi + else + echo " error: /etc/peer2anonet/peers/$PEER/pubkey not exists" + exit 1 + fi + + if [ -e /etc/peer2anonet/peers/"$PEER"/seckey ]; then + if [[ $(echo X`cat /etc/peer2anonet/peers/"$PEER"/seckey`) == 'X' ]]; then + echo " error: /etc/peer2anonet/peers/$PEER/seckey is void" + exit 1 + fi + else + echo " error: /etc/peer2anonet/peers/$PEER/seckey not exists" + exit 1 + fi + done + else + echo " error: peering configurations not exists" + exit 1 + fi + + echo '#!/bin/bash +bird -c bird.conf -d' > /services/bird/run + chmod +x /services/bird/run + + echo "function n_AnoNet_mine (prefix arg) { if arg ~ [ $P2A_NET/24+ ] then return true; return false; }; @@ -116,26 +160,28 @@ protocol device { protocol direct direct_AnoNet_routes { table AnoNet_routes; interface \"eth0\"; import filter only_AnoNet; -}" - - - -test -e /services/bird/bird.conf || echo "$BIRD_CONF" > /services/bird/bird.conf -test -e /services/bird/run || echo "$BIRD_RUN" > /services/bird/run -chmod +x /services/bird/run -echo "$NEW_PROTOCOL" >> /services/bird/bird.conf -test -L /services/bird && rm -r /service/bird -test -L /service/bird || ln -s /services/bird /service/ - -######################################################################### -# We need to check if this peering session already exists: -test -e /services/"$PEERNAME" && rm -r /services/"$PEERNAME" -mkdir -p /services/"$PEERNAME" - +}" > /services/bird/bird.conf + + for PEER in `ls /etc/peer2anonet/peers`; do + mkdir -p /services/"$PEER" + PEERNAME="$PEER" + REMOTEIP=`cat /etc/peer2anonet/peers/"$PEER"/remote_ip` + PEERIP=`cat /etc/peer2anonet/peers/"$PEER"/peering_ip` + PEERPORT=`cat /etc/peer2anonet/peers/"$PEER"/port` + PEERASN=`cat /etc/peer2anonet/peers/"$PEER"/asn` + PUBKEY=`cat /etc/peer2anonet/peers/"$PEER"/pubkey` + SECKEY=`cat /etc/peer2anonet/peers/"$PEER"/seckey` + + echo " +protocol bgp $PEERNAME { table AnoNet_routes; + local as $P2A_ASN; + neighbor $PEERIP as $PEERASN; + source address $P2A_IP; + import filter only_AnoNet_ebgp; + export filter only_AnoNet_ebgp_export; +}" >> /services/bird/bird.conf -######################################################################### -# Create files to configure the new peering session: -echo "#!/bin/sh + echo "#!/bin/bash # uncomment if your peer has a dynamic IP # #export REMOTE_FLOAT=1 @@ -147,8 +193,8 @@ echo "#!/bin/sh export REMOTE_ADDRESS=$REMOTEIP export REMOTE_PORT=$PEERPORT -export LOCAL_PORT=$ADDPORT -export PRIVATE_KEY=\"\$(cat seckey)\" +export LOCAL_PORT=2${PEERASN:0:5} +export PRIVATE_KEY=$SECKEY export PUBLIC_KEY=$PUBKEY export TUN_MODE=1 export INTERFACE=ppp-$PEERNAME @@ -173,23 +219,61 @@ export INTERFACE=ppp-$PEERNAME ping -c 1 -I \$INTERFACE $PEERIP -r -w 5 ) & exec /usr/sbin/quicktun.nacltai" > /services/"$PEERNAME"/run -chmod +x /services/"$PEERNAME"/run - -######################################################################### -# Configure and start our new peering session: -test -L "/service/$PEERNAME" && rm -r "/service/$PEERNAME" -ln -s "/services/$PEERNAME" /service/ -echo 'Secret Key Goes Here!' > "/services/$PEERNAME/seckey" -echo "peer2anonet: New peering session configured. -Please place your secret key in: /services/$PEERNAME/seckey - -Some additional options are available in /services/$PEERNAME/run -Please read the comments in the file for details. You may need to -restart the bird daemon. ie, svc -t /service/bird " - - - - + chmod +x /services/"$PEERNAME"/run + test -L "/service/$PEERNAME" || ln -s "/services/$PEERNAME" "/service/$PEERNAME" + svc -d "/service/$PEERNAME" && svc -u "/service/$PEERNAME" + done + test -L /service/bird || ln -s /services/bird /service/bird + echo configure | birdc + } + +CONFIGURE_PEER(){ + echo -e '\nCONFIGURE PEER:\n' + read -p " Enter your peer's name: " PEERNAME + read -p " Enter your peer's remote ip: " REMOTEIP + read -p " Enter your peer's peering ip: " PEERIP + read -p " Enter your peer's remote port: " PEERPORT + read -p " Enter your peer's asn: " PEERASN + read -p " Enter your peer's public key: " PUBKEY + read -p " Enter your private key: " SECKEY + mkdir -p /etc/peer2anonet/peers/"$PEERNAME" + echo $REMOTEIP >/etc/peer2anonet/peers/"$PEERNAME"/remote_ip + echo $PEERIP >/etc/peer2anonet/peers/"$PEERNAME"/peering_ip + echo $PEERPORT >/etc/peer2anonet/peers/"$PEERNAME"/port + echo $PEERASN >/etc/peer2anonet/peers/"$PEERNAME"/asn + echo $PUBKEY >/etc/peer2anonet/peers/"$PEERNAME"/pubkey + echo $SECKEY >/etc/peer2anonet/peers/"$PEERNAME"/seckey + echo -e "\n configured $PEERNAME\n" + } + +RM_PEER(){ + echo -e '\nRM PEER:\n' + read -p " Enter your peer's name: " PEERNAME + if [ -e /etc/peer2anonet/peers/"$PEERNAME" ]; then + rm -r /etc/peer2anonet/peers/"$PEERNAME" + echo + echo -e " removed /etc/peer2anonet/peers/$PEERNAME\n" + else + echo + echo -e " error: /etc/peer2anonet/peers/$PEERNAME not exists\n" + exit 1 + fi + } + + +if [ "$1" == '--configure' ]; then + CONFIGURE +elif [ "$1" == '--update' ]; then + UPDATE +elif [ "$1" == '--configure-peer' ]; then + CONFIGURE_PEER + UPDATE +elif [ "$1" == '--rm-peer' ]; then + RM_PEER + UPDATE +else + USAGE +fi |