Dernière activité 1701363500

Révision beb00ae94ebc098343cf811f7bbe5f0d479bac0c

digitalocean.sh Brut
1#!/bin/bash
2
3set -euo pipefail
4
5DIR="$(cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd)"
6. "$DIR/shared.sh"
7
8echo "Updating packages"
9apt-update
10apt-upgrade
11
12echo "Adding user ubuntu"
13user_add_sudo ubuntu
14usermod -s /usr/bin/zsh ubuntu
15cp /root/.zshrc /home/ubuntu/.zshrc
16chown ubuntu:ubuntu /home/ubuntu/.zshrc
17
18echo "Hardening ssh"
19apt-install openssh-server
20cat > /etc/ssh/sshd_config <<EOM
21AuthorizedKeysFile .ssh/authorized_keys
22ClientAliveInterval 180
23Subsystem sftp /usr/lib/openssh/sftp-server
24UseDNS no
25PermitRootLogin no
26UsePAM yes
27
28KexAlgorithms curve25519-sha256@libssh.org
29Protocol 2
30HostKey /etc/ssh/ssh_host_ed25519_key
31PasswordAuthentication no
32ChallengeResponseAuthentication no
33PubkeyAuthentication yes
34Ciphers chacha20-poly1305@openssh.com,aes256-gcm@openssh.com,aes128-gcm@openssh.com,aes256-ctr,aes192-ctr,aes128-ctr
35MACs hmac-sha2-512-etm@openssh.com,hmac-sha2-256-etm@openssh.com,umac-128-etm@openssh.com,hmac-sha2-512,hmac-sha2-256,umac-128@openssh.com
36EOM
37
38cat > /etc/ssh/ssh_config <<EOM
39Host *
40 KexAlgorithms curve25519-sha256@libssh.org,diffie-hellman-group-exchange-sha256
41 PasswordAuthentication no
42 ChallengeResponseAuthentication no
43 PubkeyAuthentication yes
44 HostKeyAlgorithms ssh-ed25519-cert-v01@openssh.com,ssh-rsa-cert-v01@openssh.com,ssh-ed25519,ssh-rsa
45 Ciphers chacha20-poly1305@openssh.com,aes256-gcm@openssh.com,aes128-gcm@openssh.com,aes256-ctr,aes192-ctr,aes128-ctr
46 MACs hmac-sha2-512-etm@openssh.com,hmac-sha2-256-etm@openssh.com,umac-128-etm@openssh.com,hmac-sha2-512,hmac-sha2-256,umac-128@openssh.com
47 UseRoaming no
48EOM
49systemctl restart ssh
50
51echo "Setting up firewall"
52mkdir -p /etc/iptables
53cat > /etc/iptables/rules.v4 <<EOM
54*nat
55:PREROUTING ACCEPT [0:0]
56:INPUT ACCEPT [0:0]
57:OUTPUT ACCEPT [0:0]
58:POSTROUTING ACCEPT [0:0]
59COMMIT
60*filter
61:INPUT ACCEPT [0:0]
62:FORWARD DROP [0:0]
63:OUTPUT ACCEPT [0:0]
64:DOCKER-USER - [0:0]
65:icmp-routing -
66:logdrop-0 -
67
68-A DOCKER-USER -i eth0 -m conntrack --ctstate NEW -j logdrop-0
69-A DOCKER-USER -j RETURN
70
71-A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
72-A INPUT -i lo -m comment --comment "Allow loopback connections" -j ACCEPT
73-A INPUT -p icmp -m comment --comment "Allow Ping to work as expected" -j ACCEPT
74-A INPUT -i eth0 -p tcp --dport 22 -j ACCEPT
75-A INPUT -p udp --sport 67 --dport 68 -j ACCEPT
76-A INPUT -p udp -m multiport --dports 60000:61000 -j ACCEPT
77-A INPUT -i eth0 -j logdrop-0
78
79-A FORWARD -i eth0 -j logdrop-0
80
81-A logdrop-0 -m limit --limit 1/second -j LOG
82-A logdrop-0 -j DROP
83COMMIT
84EOM
85
86cat > /etc/iptables/rules.v6 <<EOM
87*filter
88:INPUT ACCEPT [0:0]
89:FORWARD ACCEPT [0:0]
90:OUTPUT ACCEPT [0:0]
91
92# Allow all loopback (lo0) traffic and reject traffic
93# to localhost that does not originate from lo0.
94-A INPUT -i lo -j ACCEPT
95-A INPUT ! -i lo -s ::1/128 -j REJECT
96
97# Below are the rules which are required for your IPv6 address to be properly allocated
98-A INPUT -p icmpv6 --icmpv6-type router-advertisement -m hl --hl-eq 255 -j ACCEPT
99-A INPUT -p icmpv6 --icmpv6-type neighbor-solicitation -m hl --hl-eq 255 -j ACCEPT
100-A INPUT -p icmpv6 --icmpv6-type neighbor-advertisement -m hl --hl-eq 255 -j ACCEPT
101-A INPUT -p icmpv6 --icmpv6-type redirect -m hl --hl-eq 255 -j ACCEPT
102
103# Allow ICMP
104-A INPUT -p icmpv6 -j ACCEPT
105
106# Allow inbound traffic from established connections.
107-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
108
109# Log what was incoming but denied (optional but useful).
110-A INPUT -m limit --limit 5/min -j LOG --log-prefix "ip6tables_INPUT_denied: " --log-level 7
111
112# Reject all other inbound.
113-A INPUT -j REJECT
114
115# Log any traffic that was sent to you
116# for forwarding (optional but useful).
117-A FORWARD -m limit --limit 5/min -j LOG --log-prefix "ip6tables_FORWARD_denied: " --log-level 7
118
119# Reject all traffic forwarding.
120-A FORWARD -j REJECT
121
122COMMIT
123EOM
124save_firewall
125
126echo "Installing docker"
127apt-install \
128 apt-transport-https \
129 ca-certificates \
130 curl \
131 gnupg-agent \
132 software-properties-common
133
134curl -fsSL https://download.docker.com/linux/ubuntu/gpg | gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
135echo \
136 "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \
137 $(lsb_release -cs) stable" | tee /etc/apt/sources.list.d/docker.list > /dev/null
138
139apt-update
140apt-install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
141
142groupadd docker || true
143usermod -aG docker ubuntu
144
145systemctl enable docker
146
147echo "Installing packages"
148apt-install unzip amazon-ecr-credential-helper gosu build-essential zsh fontconfig python3-pip libnss3-tools
149
150echo "Installing Homebrew"
151user-mkdir /home/linuxbrew/.linuxbrew
152gosu ubuntu /bin/bash -c "NONINTERACTIVE=1 USER=ubuntu $(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
153echo 'eval "$(/home/linuxbrew/.linuxbrew/bin/brew shellenv)"' >> /home/ubuntu/.bashrc
154echo 'eval "$(/home/linuxbrew/.linuxbrew/bin/brew shellenv)"' >> /home/ubuntu/.zshrc
155chown ubuntu:ubuntu /home/ubuntu/.bashrc
156chown ubuntu:ubuntu /home/ubuntu/.zshrc
157
158echo "Installing github cli"
159user-brew install gh
160
161echo "Installing mkcert"
162user-brew install mkcert
163
164pushd /home/ubuntu
165
166echo "Installing lastversion"
167gosu ubuntu /bin/bash -c "USER=ubuntu pip3 install lastversion"
168
169popd
170
171echo "Installing ansible"
172pip3 install ansible
173
174echo "Enable user-ssh-key firstboot script"
175systemctl enable user-ssh-key
176
177echo "Enable multiarch service"
178systemctl enable multiarch
179
180echo "Installing aws cli"
181curl -fsSL "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
182unzip awscliv2.zip
183./aws/install
184rm awscliv2.zip
185rm -rf ./aws
186
187echo "Installing brew packages"
188user-brew install bat starship hub git-delta fzf ripgrep jq neovim git-lfs fd exa
189
190echo "Installing et"
191add-apt-repository -y ppa:jgmath2000/et
192apt-update
193apt-install et
194systemctl enable et
195
196user-mkdir /home/ubuntu/.docker
197cat << EOF > /home/ubuntu/.docker/config.json
198{
199 "credHelpers": {
200 "786715713882.dkr.ecr.us-east-1.amazonaws.com" : "ecr-login",
201 "public.ecr.aws": "ecr-login"
202 }
203}
204EOF
205
206echo "Making zsh the default shell"
207sudo sed -i 's/DSHELL=\/bin\/bash/DSHELL=\/usr\/bin\/zsh/' /etc/adduser.conf
208
209echo "Provisioning complete!"
210