1126fc02596d0a094aa5ea85f2a4b720c38dcf7e
[ongolaboy.git] / scripts / parefeu / firewall.bangui
1 #!/bin/sh
2
3 modprobe ip_tables
4 modprobe ip_nat_ftp
5 modprobe ip_nat_irc
6 modprobe iptable_filter
7 modprobe iptable_nat
8 modprobe ip_conntrack_ftp
9
10 IPT="/sbin/iptables"
11 IPF="$IPT -t filter"
12 IPN="$IPT -t nat"
13 IPM="$IPT -t mangle"
14
15 # Des constantes
16 NET_FAI=77.70.183.120/29
17 NET_DMZ=192.168.10.0/24
18 NET_RPV_BANGUI=10.39.0/20
19 NET_RPV_AUF=10.0.0/8
20 NET_MONTREAL=199.84.140.0/24
21 NET_USAGER=192.168.10.0/24
22
23 IP_WEB=192.168.10.4
24 IP_DNS=192.168.10.2
25 IP_MAIL=192.168.10.2
26 IP_VOIP=192.168.10.5 #XXX
27
28 NAT_USAGER=77.70.183.124
29 NAT_RPV=77.70.183.124
30 NAT_DMZ_DNS=77.70.183.125
31 NAT_DMZ_MAIL=77.70.183.125
32 NAT_DMZ_WEB=77.70.183.125
33
34 IF_INTERNET="eth0"
35 IF_DMZ="eth2"
36 IF_RPV="eth1"
37 IF_USAGER="eth3"
38 IF_IPSEC="ipsec0"
39
40
41 # on efface tout
42 $IPF -F INPUT
43 $IPF -F FORWARD
44 $IPF -F OUTPUT
45 $IPN -F PREROUTING
46 $IPN -F POSTROUTING
47 $IPM -F FORWARD
48
49
50 # par defaut on ferme tout (sauf en sortie)
51 $IPF -P INPUT DROP
52 $IPF -P FORWARD DROP
53 $IPF -P OUTPUT ACCEPT
54
55 #commmuniction en localhost
56 $IPF  -A INPUT -i lo -j ACCEPT
57 $IPF  -A OUTPUT -o lo -j ACCEPT
58
59 #full accès vers montréal
60 $IPF -A FORWARD -d $NET_MONTREAL -j ACCEPT
61
62 #Pas de sortie en port 25 excepté sur la messagerie interne
63 $IPF -A OUTPUT -p tcp -d $IP_MAIL --dport 25 -j ACCEPT
64 $IPF -A OUTPUT -p tcp --dport 25 -j DROP
65
66 # on accepte les flux en cours
67 $IPF -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
68 $IPF -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
69
70 # on accepte toujours les pings
71 $IPF -A INPUT -p icmp  --icmp-type echo-request \
72         -m limit --limit 5/second -j ACCEPT
73 $IPF -A FORWARD -p icmp   --icmp-type echo-request \
74         -m limit --limit 5/second -j ACCEPT
75
76 ##ssh sur le firewall
77 $IPF -A INPUT -p tcp --dport 22 -m state --state NEW -j ACCEPT
78
79 ## le reste avec des chaines perso
80 # En provenance de l'extérieur pour le parefeu
81 $IPF -N from-outside
82 $IPF -A INPUT -i $IF_INTERNET -j from-outside
83
84 $IPF -N ScanD
85 $IPF -A ScanD -m limit --limit 1/s -j LOG \
86         --log-prefix "[Port Scan?]DROP "
87 $IPF -A ScanD -j DROP
88
89 $IPF -A from-outside -p tcp --tcp-flags ALL NONE -j ScanD
90 $IPF -A from-outside -p tcp --tcp-flags SYN,FIN SYN,FIN -j ScanD
91 $IPF -A from-outside -p tcp --tcp-flags SYN,RST SYN,RST -j ScanD
92 $IPF -A from-outside -p tcp --tcp-flags FIN,RST FIN,RST -j ScanD
93 $IPF -A from-outside -p tcp --tcp-flags ACK,FIN FIN -j ScanD
94 $IPF -A from-outside -p tcp --tcp-flags ACK,PSH PSH -j ScanD
95 $IPF -A from-outside -p tcp --tcp-flags ACK,URG URG -j ScanD
96
97 $IPF -N DDoS 
98 $IPF -A DDoS -m limit --limit 5/s --limit-burst 10 -j RETURN
99 $IPF -A DDoS -j LOG --log-prefix "[DOS Attack/SYN Scan?]DROP "
100 $IPF -A DDoS -j DROP
101
102 $IPF -A from-outside -p tcp --tcp-flags SYN,RST,ACK SYN -j DDoS
103
104 $IPF -A from-outside -d 255.255.255.255 -m limit --limit 1/s -j LOG --log-prefix "[INPUT Broadcast]DROP "
105 $IPF -A from-outside -d 255.255.255.255 -j DROP
106
107
108 # FORWARD en provenance de la DMZ
109 $IPF -N from-dmz
110 $IPF -A FORWARD -i $IF_DMZ -j from-dmz
111 $IPF -A from-dmz ! -o $IF_INTERNET -j ACCEPT
112
113 $IPF -A from-dmz -s $IP_VOIP -p udp --dport 4569 -j ACCEPT
114 $IPF -A from-dmz -s $IP_VOIP -p tcp --dport 4569 -j ACCEPT
115
116 $IPF -N dmz-internet
117 $IPF -A from-dmz -o $IF_INTERNET -j dmz-internet
118
119 $IPF -A dmz-internet -s $IP_DNS -p udp --dport 53 -j ACCEPT
120 $IPF -A dmz-internet -s $IP_DNS -p tcp -m state --STATE NEW \
121         --dport 53 -j ACCEPT
122
123 $IPF -A dmz-internet -s $IP_MAIL -p tcp -m multiport \
124         --dport  25,587 -j ACCEPT
125
126 $IPF -A dmz-internet -s $IP_WEB -p tcp -m state --state NEW \
127         --dport 80 -j ACCEPT
128
129 # FORWARD en direction de la DMZ
130 $IPF -N to-dmz
131 $IPF -A FORWARD -o $IF_DMZ -j to-dmz
132
133 $IPF -A to-dmz -d $IP_DNS -p udp --dport 53 -j ACCEPT
134 $IPF -A to-dmz -d $IP_DNS -p tcp -m state --state NEW \
135         --dport 53 -j ACCEPT
136
137 $IPF -A to-dmz -d $IP_MAIL -p tcp -m state --state NEW \
138         -m multiport --dport 25,143,587,993 -j ACCEPT
139
140 $IPF -A to-dmz -d $IP_WEB -p tcp -m state --state NEW \
141         -m multiport --dport 80,443 -j ACCEPT
142
143 $IPF -A to-dmz -d $IP_VOIP -p tcp -m state --state NEW \
144         --dport 4569 -j ACCEPT
145 $IPF -A to-dmz -d $IP_VOIP -p udp --dport 4569 -j ACCEPT
146
147 # FORWARD vers montréal
148 $IPF -N to-montreal
149 $IPF -A FORWARD -o $IF_IPSEC -j to-montreal
150
151 $IPF -A to-montreal -i $IF_RPV -j ACCEPT
152
153 $IPF -A to-montreal -i $IF_DMZ -p tcp -m state --state NEW \
154         --dport 53 -s $IP_DNS -j ACCEPT
155 $IPF -A to-montreal -i $IF_DMZ -p udp --dport 53 -j ACCEPT
156
157 $IPF -A to-montreal -j LOG --log-prefix " TROU RPV: "
158 $IPF -A to-montreal -j REJECT
159
160
161 #En provenance du RPV interne, en FORWARD
162 $IPF -N from-inside-rpv
163 $IPF -A FORWARD -i $IF_RPV -j from-inside-rpv
164
165 for TCP in 20 21 22 80 110 123 220 443 587 993 995 3690 5222 \
166         5223 5050 6667 11371 8443 9418
167 do
168         $IPF -A from-inside-rpv -o $IF_INTERNET -p tcp --dport $TCP \
169                 -m state --state NEW -j ACCEPT
170 done
171
172 #En provenance du LAN, en FORWARD
173 $IPF -N from-inside
174 $IPF -A FORWARD -i $IF_USAGER -j from-inside
175
176 for TCP in 20 21 22 80 110 123 220 443 587 993 995 3690 5222 \
177         5223 5050 6667 11371 8443 9418
178 do
179         $IPF -A from-inside -o $IF_INTERNET -p tcp --dport $TCP \
180                 -m state --state NEW -j ACCEPT
181 done
182
183
184
185 # Table NAT , chain : PREROUTING
186 $IPN -A PREROUTING -i $IF_INTERNET -p udp -d $NAT_DMZ_DNS \
187         --dport 53  -j DNAT --to-destination $IP_DNS
188
189 $IPN -A PREROUTING -i $IF_INTERNET -p tcp -m state --state NEW \
190         -d $NAT_DMZ_MAIL -m multiport --dport 25,143,587,993 \
191         -j DNAT --to-destination $IP_MAIL
192
193 $IPN -A PREROUTING -i $IF_INTERNET -p tcp -m state --state NEW \
194         -d $NAT_DMZ_WEB -m multiport --dport 80,443 \
195         -j DNAT --to-destination $IP_WEB
196
197
198
199 # Table NAT , chain : POSTROUTING
200 $IPN -A POSTROUTING -s $IP_DNS -o $IF_INTERNET -j SNAT \
201         --to-source $NAT_DMZ_DNS
202
203 $IPN -A POSTROUTING -s $IP_MAIL -o $IF_INTERNET -j SNAT \
204         --to-source $NAT_DMZ_MAIL
205
206 $IPN -A POSTROUTING -s $IP_WEB -o $IF_INTERNET -j SNAT \
207         --to-source $NAT_DMZ_WEB
208
209 $IPN -A POSTROUTING -s $NET_USAGER -o $IF_INTERNET -j SNAT \
210         --to-source $NAT_USAGER
211 $IPN -A POSTROUTING -s $NET_RPV_BANGUI -o $IF_INTERNET -j SNAT \
212         --to-source $NAT_RPV