From: Krunk <krunkalot@hotpop.com>
To: netfilter@lists.netfilter.org
Subject: Curious problem with my iptable rules.....detailed post inside, help appreciated.
Date: Fri, 16 Apr 2004 18:35:18 -0500 [thread overview]
Message-ID: <1082158518.4759.40.camel@james> (raw)
Setup:
I have one external NIC (ppp0) and two internal NIC's (eth1, eth2). I
also have two rule sets. The first a bare minimum "get it up and going
script" I used for testing and my main rule set.
Problem:
After a fresh start-up if I initialize my basic rule set everything
works perfectly. If I than initialize my main rule set (which deletes
all chains and flushes all rules) it still works perfectly. However if I
initialize my main script first. eth1 can access the internet, but eth2
cannot. All internal connections are still up everyone can ping everyone
else, etc., etc. Even odder is if I clear all rules and Policies and
delete all chains than load the bare minimum script, it doesn't work
either. The only thing I've found is to do a hard reboot (which makes me
get that funny feeling like I've done something sacreligious, hehe),
load the minimum and than load the main script.
I would very much appreciate if anyone could troubleshoot my scripts.
Thanks in advance.
#######Begin minimum script ########
1 #!/bin/bash
2 IPTABLES='/sbin/iptables'
3
4 # Set interface values
5 EXTIF='ppp0'
6 INTIF1='eth1'
7 INTIF2='eth2'
8
9 # enable ip forwarding in the kernel
10 /bin/echo 1 > /proc/sys/net/ipv4/ip_forward
11
12 # flush rules and delete chains
13 iptables -F
14 iptables -X
15
16 # enable masquerading to allow LAN internet access
17 $IPTABLES -t nat -A POSTROUTING -o $EXTIF -j MASQUERADE
18
19 # forward LAN traffic from $INTIF1 to Internet interface $EXTIF
20 $IPTABLES -A FORWARD -i $INTIF1 -o $EXTIF -m state --state NEW,ESTABLISHED -j ACCEPT
21
22 # forward LAN traffic from $INTIF2 to Internet interace $EXTIF
23 $IPTABLES -A FORWARD -i $INTIF2 -o $EXTIF -m state --state NEW,ESTABLISHED -j ACCEPT
24
25 #echo -e " - Allowing access to the SSH server"
26 $IPTABLES -A INPUT --protocol tcp --dport 22 -j ACCEPT
27
28 #echo -e " - Allowing access to the HTTP server"
29 $IPTABLES -A INPUT --protocol tcp --dport 80 -j ACCEPT
30
31 # block out all other Internet access on $EXTIF
32 $IPTABLES -A INPUT -i $EXTIF -m state --state NEW,INVALID -j DROP
33 $IPTABLES -A FORWARD -i $EXTIF -m state --state NEW,INVALID -j DROP
########Begin Main Script########
1 #!/bin/bash
2 # rc.fwsoho: SOHO IP Tables rule set
3 # Copyright 2003 Bob Toxen. All rights reserved.
4 # See book "Real World Linux Security 2nd ed" for terms of use
5
6 # uncomment to output all commands executed
7 #set -v
8
9 # External interface
10 EXTIF=ppp0
11 # Internal interface
12 INTIF1=eth1
13 INTIF2=eth2
14
15 # Loop device/localhost
16 LPDIF=lo
17 LPDIP=127.0.0.1
18 LPDMSK=255.0.0.0
19 LPDNET="$LPDIP/$LPDMSK"
20
21 # Text tools variables
22 IPT='/sbin/iptables'
23 IFC='/sbin/ifconfig'
24 G='/bin/grep'
25 SED='/bin/sed'
26
27 # Last but not least, the users
28
29 # Deny than accept: this keeps holes from opening up
30 # while we close ports and such
31
32 $IPT -P INPUT DROP
33 $IPT -P OUTPUT DROP
34 $IPT -P FORWARD DROP
35
36 $IPT -t nat -P PREROUTING DROP
37 $IPT -t nat -P POSTROUTING DROP
38 $IPT -t nat -P OUTPUT DROP
39
40 # Flush all existing chains and erase personal chains
41 CHAINS=`cat /proc/net/ip_tables_names 2>/dev/null`
42 for i in $CHAINS;
43 do
44 $IPT -t $i -F
45 done
46
47 for i in $CHAINS;
48 do
49 $IPT -t $i -X
50 done
51
52 echo 1 > /proc/sys/net/ipv4/tcp_syncookies
53 echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts
54
55 # Source Address Verification
56 for f in /proc/sys/net/ipv4/conf/*/rp_filter; do
57 echo 1 > $f
58 done
59 # Disable IP source routing and ICMP redirects
60 for f in /proc/sys/net/ipv4/conf/*/accept_source_route; do
61 echo 0 > $f
62 done
63 for f in /proc/sys/net/ipv4/conf/*/accept_redirects; do
64 echo 0 > $f
65 done
66
67 echo 1 > /proc/sys/net/ipv4/ip_forward
68
69
70 # Setting up external interface environment variables
71 EXTIP="`$IFC $EXTIF|$G addr:|$SED 's/.*addr:\([^ ]*\) .*/\1/'`"
72 #EXTBC="`$IFC $EXTIF|$G Bcast:|$SED 's/.*Bcast:\([^ ]*\) .*/\1/'`"
73 EXTBC="255.255.255.255"
74 EXTMSK="`$IFC $EXTIF|$G Mask:|$SED 's/.*Mask:\([^ ]*\)/\1/'`"
75 EXTNET="$EXTIP/$EXTMSK"
76 echo "EXTIP=$EXTIP EXTBC=$EXTBC EXTMSK=$EXTMSK EXTNET=$EXTNET"
77
78 # Due to absence of EXTBC I manually set it to 255.255.255.255
79 # this (hopefully) will server the same purpose
80
81
82 # Setting up environment variables for internal interface one
83 INTIP1="`$IFC $INTIF1|$G addr:|$SED 's/.*addr:\([^ ]*\) .*/\1/'`"
84 INTBC1="`$IFC $INTIF1|$G Bcast:|$SED 's/.*Bcast:\([^ ]*\) .*/\1/'`"
85 INTMSK1="`$IFC $INTIF1|$G Mask:|$SED 's/.*Mask:\([^ ]*\)/\1/'`"
86 INTNET1="$INTIP1/$INTMSK1"
87 echo "INTIP1=$INTIP1 INTBC1=$INTBC1 INTMSK1=$INTMSK1 INTNET1=$INTNET1"
88
89 #Setting up environment variables for internal interface two
90 INTIP2="`$IFC $INTIF2|$G addr:|$SED 's/.*addr:\([^ ]*\) .*/\1/'`"
91 INTBC2="`$IFC $INTIF2|$G Bcast:|$SED 's/.*Bcast:\([^ ]*\) .*/\1/'`"
92 INTMSK2="`$IFC $INTIF2|$G Mask:|$SED 's/.*Mask:\([^ ]*\)/\1/'`"
93 INTNET2="$INTIP2/$INTMSK2"
94 echo "INTIP2=$INTIP2 INTBC2=$INTBC2 INTMSK2=$INTMSK2 INTNET2=$INTNET2"
95
96 #INITIP="$INTIP1 $INTIP2"
97 #INTBC="$INTBC1 $INTBC2"
98 #INTMSK="$INTMSK1 $INTMSK2"
99 #INTNET="$INTNET1 $INTNET2"
100
101 # We are now going to create a few custom chains that will result in
102 # logging of dropped packets. This will enable us to avoid having to
103 # enter a log command prior to every drop we wish to log. The
104 # first will be first log drops the other will log rejects.
105
106 # Do not complain if chain already exists (so restart is clean)
106 # Do not complain if chain already exists (so restart is clean)
107 $IPT -N DROPl 2> /dev/null
108 $IPT -A DROPl -j LOG --log-prefix 'DROPl:'
109 $IPT -A DROPl -j DROP
110
111 $IPT -N REJECTl 2> /dev/null
112 $IPT -A REJECTl -j LOG --log-prefix 'REJECTl:'
113 $IPT -A REJECTl -j REJECT
114
115 # Now we are going to accept all traffic from our loopback device
116 # if the IP matches any of our interfaces.
117
118 $IPT -A INPUT -i $LPDIF -s $LPDIP -j ACCEPT
119 $IPT -A INPUT -i $LPDIF -s $EXTIP -j ACCEPT
120 $IPT -A INPUT -i $LPDIF -s $INTIP1 -j ACCEPT
121 $IPT -A INPUT -i $LPDIF -s $INTIP2 -j ACCEPT
122
123 # Added to enable cups management: lo to lo communication
124 $IPT -A OUTPUT -o $LPDIF -d $LPDIP -j ACCEPT
125 $IPT -A INPUT -i $LPDIF -s $LPDIP -j ACCEPT
126
127 # Blocking Broadcasts
128 $IPT -A INPUT -i $EXTIF -d $EXTBC -j DROPl
129 $IPT -A INPUT -i $INTIF1 -d $INTBC1 -j DROPl
130 $IPT -A INPUT -i $INTIF2 -d $INTBC2 -j DROPl
131 $IPT -A OUTPUT -o $EXTIF -d $EXTBC -j DROPl
132 $IPT -A OUTPUT -o $INTIF1 -d $INTBC1 -j DROPl
133 $IPT -A OUTPUT -o $INTIF2 -d $INTBC2 -j DROPl
134 $IPT -A FORWARD -o $EXTIF -d $EXTBC -j DROPl
135 $IPT -A FORWARD -o $INTIF1 -d $INTBC1 -j DROPl
136 $IPT -A FORWARD -o $INTIF2 -d $INTBC2 -j DROPl
137
138 # Block WAN access to internal network
139 # This also stops nefarious crackers from using our network as a
140 # launching point to attack other people
141 # iptables translation:
142 # "if input going into our external interface does not originate from our isp assigned
143 # ip address, drop it like a hot potato
144
145 $IPT -A INPUT -i $EXTIF -d ! $EXTIP -j DROPl
146
147 # Now we will block internal addresses originating from anything but our
148 # two predefined interfaces.....just remember that if you jack your
149 # your laptop or another pc into one of these NIC's directly, you'll need
150 # to ensure that they either have the same ip or that you add a line explicitly
151 # that IP as well
152
153 # Interface one/internal net one
154 $IPT -A INPUT -i $INTIF1 -s ! $INTNET1 -j DROPl
155 $IPT -A OUTPUT -o $INTIF1 -d ! $INTNET1 -j DROPl
156 $IPT -A FORWARD -i $INTIF1 -s ! $INTNET1 -j DROPl
157 $IPT -A FORWARD -o $INTIF1 -d ! $INTNET1 -j DROPl
158
159 # Interface two/internal net two
160 $IPT -A INPUT -i $INTIF2 -s ! $INTNET2 -j DROPl
161 $IPT -A OUTPUT -o $INTIF2 -d ! $INTNET2 -j DROPl
162 $IPT -A FORWARD -i $INTIF2 -s ! $INTNET2 -j DROPl
163 $IPT -A FORWARD -o $INTIF2 -d ! $INTNET2 -j DROPl
164
165 # An additional Egress check
166
167 $IPT -A OUTPUT -o $EXTIF -s ! $EXTNET -j DROPl
168
169 # Block outbound ICMP (except for PING)
170
171 $IPT -A OUTPUT -o $EXTIF -p icmp \
172 --icmp-type ! 8 -j DROPl
173 $IPT -A FORWARD -o $EXTIF -p icmp \
174 --icmp-type ! 8 -j DROPl
175
176 # COMmon ports:
177 # 0 is tcpmux; SGI had vulnerability, 1 is common attack
178 # 13 is daytime
179 # 98 is Linuxconf
180 # 111 is sunrpc (portmap)
181 # 137:139, 445 is Microsoft
182 # SNMP: 161,2
183 # Squid flotilla: 3128, 8000, 8008, 8080
184 # 1214 is Morpheus or KaZaA
185 # 2049 is NFS
186 # 3049 is very virulent Linux Trojan, mistakable for NFS
187 # Common attacks: 1999, 4329, 6346
188 # Common Trojans 12345 65535
189 COMBLOCK="0:1 13 98 111 137:139 161:162 445 1214 1999 2049 3049 4329 6346 3128 8000 8008 8080 12345 65535"
190
191 # TCP ports:
192 # 98 is Linuxconf
193 # 512-5!5 is rexec, rlogin, rsh, printer(lpd)
194 # [very serious vulnerabilities; attacks continue daily]
195 # 1080 is Socks proxy server
196 # 6000 is X (NOTE X over SSH is secure and runs on TCP 22)
197 # Block 6112 (Sun's/HP's CDE)
198 TCPBLOCK="$COMBLOCK 98 512:515 1080 6000:6009 6112"
199
200 # UDP ports:
201 # 161:162 is SNMP
202 # 520=RIP, 9000 is Sangoma
203 # 517:518 are talk and ntalk (more annoying than anything)
204 UDPBLOCK="$COMBLOCK 161:162 520 123 517:518 1427 9000"
205
206 echo -n "FW: Blocking attacks to TCP port"
207 for i in $TCPBLOCK;
208 do
209 echo -n "$i "
210 $IPT -A INPUT -p tcp --dport $i -j DROPl
211 $IPT -A OUTPUT -p tcp --dport $i -j DROPl
211 $IPT -A OUTPUT -p tcp --dport $i -j DROPl
212 $IPT -A FORWARD -p tcp --dport $i -j DROPl
213 done
214 echo ""
215
216 echo -n "FW: Blocking attacks to UDP port "
217 for i in $UDPBLOCK;
218 do
219 echo -n "$i "
220 $IPT -A INPUT -p udp --dport $i -j DROPl
221 $IPT -A OUTPUT -p udp --dport $i -j DROPl
222 $IPT -A FORWARD -p udp --dport $i -j DROPl
223 done
224 echo ""
225 # ftp and irc tracking
226 #MODULES="ip_nat_ftp ip_conntrack_ftp ip_conntrack_irc ip_nat_irc"
227 #for i in $MODULES;
228 #do
229 # echo "Inserting module $i"
230 # modprobe $i
231 #done
232
233 #iptables -A OUTPUT -p tcp --dport 873 -o $INTIF -i $EXTIF1 -j ACCEPT
234
235 # Defining some common chat clients and services. Remove these from your accepted list
236 # for better security.
237 IRC=ircd
238 MSN=1863
239 ICQ=5190
240 NFS="111 2049 32764 32765 32766 32767 32768 sunrpc"
241 RPCRQUOTAD=32764
242
243 # We have to sync!!
244 PORTAGE=rsync
245 OpenPGP_HTTP_Keyserver=11371
246 # 8000:8100--> Somafm streaming audio
247
248 # All services ports are read from /etc/services
249
250 TCPSERV="domain ssh http https ftp ftp-data mail pop3 pop3s imap3 imaps imap2 time $PORTAGE $IRC $MSN $ICQ $OpenPGP_HTTP_Keyserver courier 8000:8100" 251 UDPSERV="domain time ntp"
252
253 echo -n "FW: Allowing inside systems to use service:"
254 for i in $TCPSERV;
255 do
256 echo -n "$i"
257 $IPT -A OUTPUT -o $EXTIF -p tcp -s $EXTIP \
258 --dport $i --syn -m state --state NEW -j ACCEPT
259 $IPT -A FORWARD -i $INTIF1 -p tcp -s $INTNET1 \
260 --dport $i --syn -m state --state NEW -j ACCEPT
261 $IPT -A FORWARD -i $INTIF2 -p tcp -s $INTNET2 \
262 --dport $i --syn -m state --state NEW -j ACCEPT
263 done
264 echo ""
265
266 echo -n "FW: Allowing inside systems to use service:"
267 for i in $UDPSERV;
268 do
269 echo -n "$i"
270 $IPT -A OUTPUT -o $EXTIF -p udp -s $EXTIP \
271 --dport $i -m state --state NEW -j ACCEPT
272 $IPT -A FORWARD -i $INTIF1 -p udp -s $INTNET1 \
273 --dport $i -m state --state NEW -j ACCEPT
274 $IPT -A FORWARD -i $INTIF2 -p udp -s $INTNET2 \
275 --dport $i -m state --state NEW -j ACCEPT
276 done
277 echo ""
278
279 # Allow to ping out
280 $IPT -A OUTPUT -o $EXTIF -p icmp -s $EXTIP \
281 --icmp-type 8 -m state --state NEW -j ACCEPT
282 $IPT -A FORWARD -i $INTIF1 -p icmp -s $INTNET1 \
283 --icmp-type 8 -m state --state NEW -j ACCEPT
284 $IPT -A FORWARD -i $INTIF2 -p icmp -s $INTNET2 \
285 --icmp-type 8 -m state --state NEW -j ACCEPT
286
287 # Allow firewall to ping internal systems
288 $IPT -A OUTPUT -o $INTIF1 -p icmp -s $INTNET1 \
289 --icmp-type 8 -m state --state NEW -j ACCEPT
290 $IPT -A OUTPUT -o $INTIF2 -p icmp -s $INTNET2 \
291 --icmp-type 8 -m state --state NEW -j ACCEPT
292
293 #$IPT -A INPUT -i $EXTIF -p tcp --dport 22 \
294 # --syn -m state --state NEW -j ACCEPT
295
296 # $IPT -A INPUT -i $EXTIF -p tcp -s pentacorp.com/24 --dport 22 \
297 # --syn -m state --state NEW -j ACCEPT
298 # $IPT -A INPUT -i $EXTIF -p tcp -s chemwiz.state.edu --dport 22 \
299 # --syn -m state --state NEW -j ACCEPT
300
301
302 # Allow Bittorrent conncetions:
303 #echo "Alowing connections by bittorrents"
304 #$IPT -A FORWARD -i $EXTIF -p tcp --dport 6881:6889 -j ACCEPT
305 #echo ""
306
307
308 # Connect only from hardened systems
309 # (hopefully only those running Linux or Unix hardened as per the book)
310 $IPT -A INPUT -i $INTIF1 -p tcp --dport 22 \
311 --syn -m state --state NEW -j ACCEPT
312 $IPT -A INPUT -i $INTIF2 -p tcp --dport 22 \
313 --syn -m state --state NEW -j ACCEPT
314
315 # Connect only to hardened systems
316 # (hopefully only those running Linux or Unix hardened as per the book)
317 # $IPT -A OUTPUT -o $INTIF -p tcp --dport 22 \
318 # -d 10.0.0.42 --syn -m state --state NEW -j ACCEPT
319 INTNET="$INTNET1 $INTNET2"
320 echo "Enabling local network CUPS printing"
321
322 for i in $INTNET
323 do
324 $IPT -A INPUT -s $i -p tcp --dport 631 -j ACCEPT
325 $IPT -A INPUT -s $i -p udp --dport 631 -j ACCEPT
326
327 $IPT -A OUTPUT -s $i -p tcp --dport 631 -j ACCEPT
328 $IPT -A OUTPUT -s $i -p udp --dport 631 -j ACCEPT
329 done
330 echo ""
331
332
333 #BITTORRENT="6890 6891 6892 6893 6894 6895 6896 6897 6898 6899"
334 #echo "Enabling bittorrent sharing"
335 #for i in $BITTORRENT
336 #do
337 # $IPT -t nat -A PREROUTING -i $EXTIF -p tcp --dport \
338 # $BITTORRENT -j DNAT --to-destination 192.168.1.77:$BITTORRENT
339 # $IPT -A FORWARD -s $INTIP -p tcp --dport 192.168.1.77 -j ACCEPT
340 #
341 # $IPT -t nat -A PREROUTING -i $EXTIF -p tcp --dport \
342 # $BITTORRENT -j DNAT --to-destination 192.168.2.77:$BITTORRENT
343 # $IPT -A FORWARD -s $INTIP -p tcp --dport 192.168.2.77 -j ACCEPT
344 #done
345
346
347
348 $IPT -t nat -A PREROUTING -j ACCEPT
349 #$IPT -t nat -A POSTROUTING -o $EXTIF -s $INTNET1 -j SNAT --to $EXTIP
350 #$IPT -t nat -A POSTROUTING -o $EXTIP -s $INTNET2 -j SNAT --to $EXTIP
351 # Comment out next line (that has "MASQUERADE") to not NAT internal network
352 $IPT -t nat -A POSTROUTING -o $EXTIF -s $INTNET1 -j MASQUERADE
353 $IPT -t nat -A POSTROUTING -o $EXTIF -s $INTNET2 -j MASQUERADE
354 $IPT -t nat -A POSTROUTING -j ACCEPT
355 $IPT -t nat -A OUTPUT -j ACCEPT
356
357 $IPT -A INPUT -p tcp --dport auth --syn -m state --state NEW -j ACCEPT
358
359 iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
360 iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
361 iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
362
363 # Log & block whatever is left
364 $IPT -A INPUT -j DROPl
365 $IPT -A OUTPUT -j REJECTl
366 $IPT -A FORWARD -j DROPl
next reply other threads:[~2004-04-16 23:35 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2004-04-16 23:35 Krunk [this message]
2004-04-17 19:09 ` Curious problem with my iptable rules.....detailed post inside, help appreciated Rob Sterenborg
2004-04-18 18:10 ` Krunk
2004-04-18 19:47 ` Curious problem with my iptable rules.....detailed postinside, " Rob Sterenborg
2004-04-18 22:59 ` Krunk
2004-04-19 0:11 ` Curious problem with my iptable rules.....detailed postinside,help appreciated Rob Sterenborg
2004-04-19 1:58 ` Krunk
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1082158518.4759.40.camel@james \
--to=krunkalot@hotpop.com \
--cc=netfilter@lists.netfilter.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox