0a15064a97244a17ff53102f794141e6b3bc62c4
[librecmc/librecmc-fossil.git] /
1 #!/bin/ash
2
3 iptables="/usr/sbin/iptables"
4 ip6tables="/usr/sbin/ip6tables"
5 network_profile="$(cat /etc/enigmabox/network-profile)"
6
7 # define interfaces
8 [[ "$network_profile" == "alix" ]] && internal_interfaces="eth1 eth2"
9 [[ "$network_profile" == "apu" ]] && internal_interfaces="eth0 eth1"
10 [[ "$network_profile" == "raspi" ]] && internal_interfaces="eth0"
11
12
13
14 ################################################################################
15 # init
16 ################################################################################
17
18 # reset all
19 $iptables -F
20 $iptables -t nat -F
21
22 # defaults
23 $iptables -P INPUT DROP
24 {{#if_missioncontrol}}$iptables -P OUTPUT DROP{{/if_missioncontrol}}
25 {{^if_missioncontrol}}$iptables -P OUTPUT ACCEPT{{/if_missioncontrol}}
26 $iptables -P FORWARD DROP
27
28 ################################################################################
29 # define interfaces + address groups
30 ################################################################################
31
32 # loopback
33 $iptables -A INPUT -i lo -j ACCEPT
34 $iptables -A OUTPUT -o lo -j ACCEPT
35
36 $iptables -X internal-services
37 $iptables -N internal-services
38 $iptables -A internal-services -p tcp --dport 22 -j ACCEPT      # ssh
39 $iptables -A internal-services -p tcp --dport 25 -j ACCEPT      # smtp
40 $iptables -A internal-services -p udp --dport 53 -j ACCEPT      # allow dns requests to tinyproxy
41 $iptables -A internal-services -p udp --dport 67:68 -j ACCEPT   # dhcp server
42 $iptables -A internal-services -p tcp --dport 80 -j ACCEPT      # webinterface
43 $iptables -A internal-services -p tcp --dport 110 -j ACCEPT     # pop3
44 $iptables -A internal-services -p tcp --dport 143 -j ACCEPT     # imap
45 $iptables -A internal-services -p udp --dport 5060 -j ACCEPT    # voip phone
46 $iptables -A internal-services -p tcp --dport 8117 -j ACCEPT    # renew notice
47 $iptables -A internal-services -p tcp --dport 8080 -j ACCEPT    # grandstream phone provisioning
48 $iptables -A internal-services -p tcp --dport 8888 -j ACCEPT    # tinyproxy
49 $iptables -A internal-services -p icmp -m limit --limit 10/second -j ACCEPT     # icmp
50
51 $iptables -X internal-in
52 $iptables -N internal-in
53 for interface in $internal_interfaces; do
54     $iptables -A internal-in -i "$interface" -j internal-services
55 done
56
57 $iptables -X internal-out
58 $iptables -N internal-out
59 for interface in $internal_interfaces; do
60     $iptables -A internal-out -o "$interface" -j ACCEPT
61 done
62
63 $iptables -X peering-servers
64 $iptables -N peering-servers
65 {{#peerings}}
66 $iptables -A peering-servers --dst {{ip}} -j ACCEPT
67 {{/peerings}}
68
69 {{#missioncontrol}}
70 $iptables -A peering-servers --dst {{ip}} -j ACCEPT
71 {{/missioncontrol}}
72
73 ################################################################################
74 # general rules
75 ################################################################################
76
77 # syncookies
78 echo 1 > /proc/sys/net/ipv4/tcp_syncookies
79
80 # allow related and established
81 $iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
82 $iptables -A OUTPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
83
84 ################################################################################
85 # input
86 ################################################################################
87
88 # allow internal interfaces
89 $iptables -A INPUT -j internal-in
90
91 {{#if_allow_peering}}
92 # peering port
93 $iptables -A INPUT -p udp --dport {{peering_port}} -j ACCEPT
94 {{/if_allow_peering}}
95
96 ################################################################################
97 # output
98 ################################################################################
99
100 $iptables -A OUTPUT -o tun0 -j ACCEPT   # that is needed for dnsmasq to make dns requests
101 $iptables -A OUTPUT -j peering-servers
102 $iptables -A OUTPUT -j internal-out     # asterisk needs this
103
104 ################################################################################
105 # forward
106 ################################################################################
107
108 # NAT
109 $iptables -A POSTROUTING -t nat -o tun0 -j MASQUERADE
110
111 for interface in $internal_interfaces; do
112
113     # MTU fix
114     $iptables -A FORWARD -i "$interface" -p tcp -m tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu
115
116     # allow forwarding for internal_interfaces, but not for others
117     $iptables -A FORWARD -i "$interface" -o tun0 -j ACCEPT
118     $iptables -A FORWARD -i tun0 -o "$interface" -m state --state RELATED,ESTABLISHED -j ACCEPT
119
120 done
121
122 {{#if_display_expiration_notice}}
123 # show renew notice if subscription has expired
124 for interface in $internal_interfaces; do
125     $iptables -t nat -A PREROUTING -i "$interface" -p tcp --dport 80 -j REDIRECT --to-port 8117
126 done
127 {{/if_display_expiration_notice}}
128
129
130
131 ################################################################################
132 # IPv6
133 ################################################################################
134
135 ################################################################################
136 # init
137 ################################################################################
138
139 # reset all
140 $ip6tables -F
141 $ip6tables -t nat -F
142
143 # defaults
144 $ip6tables -P INPUT DROP
145 $ip6tables -P OUTPUT DROP
146 $ip6tables -P FORWARD DROP
147
148 ################################################################################
149 # define interfaces + address groups
150 ################################################################################
151
152 # loopback
153 $ip6tables -A INPUT -i lo -j ACCEPT
154 $ip6tables -A OUTPUT -o lo -j ACCEPT
155
156 $ip6tables -X internal-in
157 $ip6tables -N internal-in
158 for interface in $internal_interfaces; do
159     $ip6tables -A internal-in -i "$interface" -j ACCEPT
160 done
161
162 $ip6tables -X internal-out
163 $ip6tables -N internal-out
164 for interface in $internal_interfaces; do
165     $ip6tables -A internal-out -o "$interface" -j ACCEPT
166 done
167
168 $ip6tables -X friends-services
169 $ip6tables -N friends-services
170 $ip6tables -A friends-services -p tcp --dport 25 -j ACCEPT      # smtp
171 $ip6tables -A friends-services -p tcp --dport 5060 -j ACCEPT    # asterisk
172 $ip6tables -A friends-services -p udp --dport 5060 -j ACCEPT    # asterisk
173 $ip6tables -A friends-services -p udp -m udp --dport 10000:20000 -j ACCEPT  # rtp
174 $ip6tables -A friends-services -p ipv6-icmp -m limit --limit 10/second -j ACCEPT # icmp
175
176 $ip6tables -X friends-in
177 $ip6tables -N friends-in
178 {{#addresses}}
179 $ip6tables -A friends-in -i tun0 --src {{ipv6}} -j friends-services
180 {{/addresses}}
181
182 ################################################################################
183 # general rules
184 ################################################################################
185
186 # allow related and established
187 $ip6tables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
188 $ip6tables -A OUTPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
189
190 # allow ping
191 $ip6tables -A INPUT -p ipv6-icmp -m limit --limit 10/second -j internal-in
192
193 ################################################################################
194 # input
195 ################################################################################
196
197 # allow friends
198 $ip6tables -A INPUT -j friends-in
199
200 {{#if_global_availability}}
201 # allow ping
202 $ip6tables -A INPUT -i tun0 -p ipv6-icmp -m limit --limit 10/second -j ACCEPT
203
204 # allow calls from everyone
205 $ip6tables -A INPUT -i tun0 -p tcp --dport 5060 -j ACCEPT
206 $ip6tables -A INPUT -i tun0 -p udp --dport 5060 -j ACCEPT
207
208 # RTP - the media stream
209 # (related to the port range in /etc/asterisk/rtp.conf)
210 $ip6tables -A INPUT -i tun0 -p udp -m udp --dport 10000:20000 -j ACCEPT
211
212 # allow emails from everyone
213 $ip6tables -A INPUT -i tun0 -p tcp --dport 25 -j ACCEPT
214 {{/if_global_availability}}
215
216 {{#if_teletext_enabled}}
217 # teletext
218 $ip6tables -A INPUT -i tun0 -p tcp --dport 3838 -j ACCEPT
219 #$ip6tables -A INPUT -i tun0 -p tcp --sport 3838 -j ACCEPT - test that
220 {{/if_teletext_enabled}}
221
222 {{#if_webserver_enabled}}
223 # hypesite
224 $ip6tables -A INPUT -i tun0 -p tcp --dport 80 -j ACCEPT
225 {{/if_webserver_enabled}}
226
227 # allow webserver access from LAN
228 $ip6tables -A INPUT -p tcp --dport 80 -j internal-in
229
230 ################################################################################
231 # output
232 ################################################################################
233
234 # allow OUTPUT for tun0
235 $ip6tables -A OUTPUT -o tun0 -j ACCEPT
236
237 # allow router advertisements
238 #$ip6tables -A OUTPUT -p ipv6-icmp -j internal-out
239
240 ################################################################################
241 # forward
242 ################################################################################
243
244 # NAT
245 $ip6tables -A POSTROUTING -t nat -o tun0 -j MASQUERADE
246
247 for interface in $internal_interfaces; do
248
249     # allow hype access
250     $ip6tables -A FORWARD -i "$interface" -o tun0 -j ACCEPT
251     $ip6tables -A FORWARD -i tun0 -o "$interface" -m state --state RELATED,ESTABLISHED -j ACCEPT
252
253 done
254
255 # EOF