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