All of lore.kernel.org
 help / color / mirror / Atom feed
* ESTABILISHED connections are not that estabilished
@ 2005-07-27 16:10 Gioele Barabucci
  2005-07-27 18:52 ` Gioele Barabucci
  2005-07-28  9:52 ` Gioele Barabucci
  0 siblings, 2 replies; 7+ messages in thread
From: Gioele Barabucci @ 2005-07-27 16:10 UTC (permalink / raw)
  To: netfilter

In my logs I often find reports of dropped input packets from my DNS:53 or
dropped output packets generated from localhost:25 to other mail servers.

They look like these:
  iptables INPUT DROP IN=eth0 OUT= SRC=69.93.28.254 DST=myIP LEN=70 TOS=0x00
PREC=0x00 TTL=54 ID=0 DF PROTO=UDP SPT=53 DPT=4156 LEN=50

  iptables OUTPUT DROP IN= OUT=eth0 SRC=myIP DST=219.136.64.239 LEN=87
TOS=0x00 PREC=0x00 TTL=64 ID=44757 DF PROTO=TCP SPT=25 DPT=3062 WINDOW=5840
RES=0x00 ACK PSH FIN URGP=0

I thought these connections should be handled by

iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

and not dropped by the default policy. The logs show that this is not true.
Why are these packets dropped?

-- 
Gioele <dev@gioelebarabucci.com>



^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: ESTABILISHED connections are not that estabilished
  2005-07-27 16:10 ESTABILISHED connections are not that estabilished Gioele Barabucci
@ 2005-07-27 18:52 ` Gioele Barabucci
  2005-07-28  4:57   ` curby .
  2005-07-28  9:52 ` Gioele Barabucci
  1 sibling, 1 reply; 7+ messages in thread
From: Gioele Barabucci @ 2005-07-27 18:52 UTC (permalink / raw)
  To: netfilter

Gioele Barabucci wrote:
> In my logs I often find reports of dropped input packets from my DNS:53 or
> dropped output packets generated from localhost:25 to other mail servers.
An example of the DNS issue. I think that the SMTP issue is identical.

This is what happens when I launch 

  $ dig -x 66.70.178.103
  ;; Warning: Message parser reports malformed message packet.
  ;; Truncated, retrying in TCP mode.
  ;; Connection to 209.51.143.76#53(209.51.143.76) for
103.178.70.66.in-addr.arpa. failed: connection refused.
  ;; Connection to 69.93.28.254#53(69.93.28.254) for
103.178.70.66.in-addr.arpa. failed: connection refused.

  iptables OUTPUT DROP IN= OUT=eth0 SRC=myIP DST=209.51.143.76 LEN=60
TOS=0x00 PREC=0x00 TTL=64 ID=2747 DF PROTO=TCP SPT=1025 DPT=53 WINDOW=5840
RES=0x00 SYN URGP=0 OPT (020405B40402080A00008F8F0000000001030301)
  iptables OUTPUT DROP IN= OUT=eth0 SRC=myIP DST=69.93.28.254 LEN=60
TOS=0x00 PREC=0x00 TTL=64 ID=8196 DF PROTO=TCP SPT=1026 DPT=53 WINDOW=5840
RES=0x00 SYN URGP=0 OPT (020405B40402080A00008FF40000000001030301)
  iptables OUTPUT DROP IN= OUT=eth0 SRC=myIP DST=209.51.143.76 LEN=60
TOS=0x00 PREC=0x00 TTL=64 ID=2749 DF PROTO=TCP SPT=1025 DPT=53 WINDOW=5840
RES=0x00 SYN URGP=0 OPT (020405B40402080A000090BB0000000001030301)
  iptables OUTPUT DROP IN= OUT=eth0 SRC=myIP DST=69.93.28.254 LEN=60
TOS=0x00 PREC=0x00 TTL=64 ID=8198 DF PROTO=TCP SPT=1026 DPT=53 WINDOW=5840
RES=0x00 SYN URGP=0 OPT (020405B40402080A000091200000000001030301)


but then
  $ dig netfilter.org
  ;; QUESTION SECTION:
  ;netfilter.org.                 IN      A
  
  ;; ANSWER SECTION:
  netfilter.org.          43200   IN      A       213.95.27.115

and iptables don't drop any packets.

Obviously I have these broad rules for output

iptables -A OUTPUT -p udp --dport nameserver -j ACCEPT
iptables -A OUTPUT -p tcp --dport nameserver -j ACCEPT

-- 
Gioele <dev@gioelebarabucci.com>



^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: ESTABILISHED connections are not that estabilished
  2005-07-27 18:52 ` Gioele Barabucci
@ 2005-07-28  4:57   ` curby .
  0 siblings, 0 replies; 7+ messages in thread
From: curby . @ 2005-07-28  4:57 UTC (permalink / raw)
  To: Gioele Barabucci; +Cc: netfilter

Since no one replied yet, I'll try a few stabs at debugging.

DNS by default uses UDP for most things, so your DNS servers might
simply be rejecting TCP requests.  That said, why are they even
getting to the server and being refused there if the firewall is
dropping the packets?

You might try starting with a very simple ruleset and see if you can
pinpoint where the problem occurs, especially if this is a personal
computer and not a large installation.  For example, just allow DNS in
a stateless fashion, then introduce stateful rules.  Keep track of
packet counters in iptables as you test to see which rules fire. 
Hopefully this helps, though I'm being rather vague because I don't
know too many details and am rather new myself.


^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: ESTABILISHED connections are not that estabilished
  2005-07-27 16:10 ESTABILISHED connections are not that estabilished Gioele Barabucci
  2005-07-27 18:52 ` Gioele Barabucci
@ 2005-07-28  9:52 ` Gioele Barabucci
  2005-07-28 10:41   ` /dev/rob0
  1 sibling, 1 reply; 7+ messages in thread
From: Gioele Barabucci @ 2005-07-28  9:52 UTC (permalink / raw)
  To: netfilter

Gioele Barabucci wrote:
> In my logs I often find reports of dropped input packets from my DNS:53 or
> dropped output packets generated from localhost:25 to other mail servers.
> Why are these packets dropped?
I attach my simple iptables rules

  iptables -F
  iptables -X
  
  echo "Default policies"
  iptables -P INPUT DROP
  iptables -P OUTPUT DROP
  iptables -P FORWARD DROP # just for fun, I don't do any routing
  
  echo "Exceptions for OUTPUT"
  iptables -A OUTPUT -o lo -j ACCEPT
  iptables -A OUTPUT -p udp --dport nameserver -j ACCEPT
  iptables -A OUTPUT -p tcp --dport nameserver -j ACCEPT
  iptables -A OUTPUT -p tcp --dport smtp -j ACCEPT
  iptables -A OUTPUT -p icmp -j ACCEPT
  iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
  
  echo "Exceptions for INPUT"
  iptables -A INPUT -i lo -j ACCEPT
  iptables -A INPUT -p tcp --dport ssh -j ACCEPT
  iptables -A INPUT -p tcp --dport smtp -j ACCEPT
  iptables -A INPUT -p tcp --dport pop3 -j ACCEPT
  iptables -A INPUT -p tcp --dport imap -j ACCEPT
  iptables -A INPUT -p tcp --dport http -j ACCEPT
  iptables -A INPUT -p icmp -j ACCEPT
  iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
  
  echo "Logging"
  iptables -A INPUT -m limit --limit 3/second --limit-burst 5 -i ! lo -j LOG
--log-level "debug" --log-ip-options --log-tcp-options --log-prefix
'iptables INPUT DROP '
  iptables -A INPUT -m limit --limit 3/second --limit-burst 5 -i ! lo -j
ULOG --ulog-prefix 'iptables INPUT DROP '
  iptables -A OUTPUT -m limit --limit 3/second --limit-burst 5 -o ! lo -j
LOG --log-level "debug" --log-ip-options --log-tcp-options --log-prefix
'iptables OUTPUT DROP '

  echo "REJECT for outgoing packets"
  iptables -A OUTPUT -j REJECT # reject, don't DROP outgoing packets


-- 
Gioele <dev@gioelebarabucci.com>



^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: ESTABILISHED connections are not that estabilished
  2005-07-28  9:52 ` Gioele Barabucci
@ 2005-07-28 10:41   ` /dev/rob0
  2005-07-28 22:04     ` Gioele Barabucci
  0 siblings, 1 reply; 7+ messages in thread
From: /dev/rob0 @ 2005-07-28 10:41 UTC (permalink / raw)
  To: netfilter

Gioele Barabucci wrote:
>>In my logs I often find reports of dropped input packets from my DNS:53 or
>>dropped output packets generated from localhost:25 to other mail servers.
>>Why are these packets dropped?

I have a theory and a suggestion.

>   iptables -P OUTPUT DROP

Bad idea (see below.)

>   iptables -P FORWARD DROP # just for fun, I don't do any routing

Good idea. Even if not routing it doesn't hurt to take these out at the 
firewall level.

>   iptables -A OUTPUT -p udp --dport nameserver -j ACCEPT
>   iptables -A OUTPUT -p tcp --dport nameserver -j ACCEPT

Theory:
# iptables -vA OUTPUT -p tcp --dport nameserver
   tcp opt -- in * out *  0.0.0.0/0  -> 0.0.0.0/0  tcp dpt:42
# iptables -vA OUTPUT -p tcp --dport domain
   tcp opt -- in * out *  0.0.0.0/0  -> 0.0.0.0/0  tcp dpt:53
I cannot see into your /etc/services, but mine resolves "nameserver" to 
"42". (R.I.P., D. Adams.)

>   echo "Logging"
>   iptables -A INPUT -m limit --limit 3/second --limit-burst 5 -i ! lo -j LOG
> --log-level "debug" --log-ip-options --log-tcp-options --log-prefix
> 'iptables INPUT DROP '
>   iptables -A INPUT -m limit --limit 3/second --limit-burst 5 -i ! lo -j
> ULOG --ulog-prefix 'iptables INPUT DROP '
>   iptables -A OUTPUT -m limit --limit 3/second --limit-burst 5 -o ! lo -j
> LOG --log-level "debug" --log-ip-options --log-tcp-options --log-prefix
> 'iptables OUTPUT DROP '

Whoa, that is a lot of logging! What do you expect to find in all that? 
Why LOG and ULOG both?

>   echo "REJECT for outgoing packets"
>   iptables -A OUTPUT -j REJECT # reject, don't DROP outgoing packets

It's cleaner to limit this to "-p tcp".


Suggestion: OUTPUT filtering is a bad idea. Carefully crafted rules to 
limit what your daemons can do with -m owner might slightly enhance 
security. General OUTPUT filtering only guarantees that things won't 
work well.

Why are you doing it? What is the benefit you think you are getting? 
This sounds like a single user machine, from the fact that there's no 
routing. Who are you limiting with OUTPUT rules? Yourself?

I would do OUTPUT -p ACCEPT and eliminate the OUTPUT rules. I'd also do 
away with the logging, or at least tightly curtail it. I usually only 
log for specific short-term reasons (troubleshooting a problem.) I'd 
include a "-m state --state INVALID -j DROP" rule for good measure. 
Finally, I'd move your --state rules to the top.

At that point everything would be working as you expect, and you would 
have a very tight firewall.
-- 
     mail to this address is discarded unless "/dev/rob0"
     or "not-spam" is in Subject: header


^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: ESTABILISHED connections are not that estabilished
  2005-07-28 10:41   ` /dev/rob0
@ 2005-07-28 22:04     ` Gioele Barabucci
  2005-07-31 18:20       ` /dev/rob0
  0 siblings, 1 reply; 7+ messages in thread
From: Gioele Barabucci @ 2005-07-28 22:04 UTC (permalink / raw)
  To: netfilter

/dev/rob0 wrote:
> Gioele Barabucci wrote:
> Theory:
> # iptables -vA OUTPUT -p tcp --dport nameserver
>    tcp opt -- in * out *  0.0.0.0/0  -> 0.0.0.0/0  tcp dpt:42
> # iptables -vA OUTPUT -p tcp --dport domain
>    tcp opt -- in * out *  0.0.0.0/0  -> 0.0.0.0/0  tcp dpt:53
> I cannot see into your /etc/services, but mine resolves "nameserver" to
> "42". (R.I.P., D. Adams.)
Yes, you're right. Lucky nameserver/udp is an alias for domain/udp so some
connections went without problem.
Now that I fixed these rules, the "dig -x" problem is solved, but I can
still see DROPped packed for INPUT and OUTPUT.

>>   echo "Logging"
> Whoa, that is a lot of logging! What do you expect to find in all that?
> Why LOG and ULOG both?
Debugging stage :)

> Suggestion: OUTPUT filtering is a bad idea.
>
> Why are you doing it? What is the benefit you think you are getting?
> This sounds like a single user machine, from the fact that there's no
> routing. Who are you limiting with OUTPUT rules? Yourself?
This is a public server and I fear that some of its daemons could be used to
gain user access to the machine. None of my daemon runs as root, so if
someone get in, it will get only user privs.
I think that DROPping OUTPUT ensures that nobody will ever open the server
to the outside or use the server to connect somewhere. Am I wrong? I'm
pretty new to server management so I want to be sure that I am playing
safe.

-- 
Gioele <dev@gioelebarabucci.com>



^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: ESTABILISHED connections are not that estabilished
  2005-07-28 22:04     ` Gioele Barabucci
@ 2005-07-31 18:20       ` /dev/rob0
  0 siblings, 0 replies; 7+ messages in thread
From: /dev/rob0 @ 2005-07-31 18:20 UTC (permalink / raw)
  To: netfilter

Gioele Barabucci wrote:
>>Suggestion: OUTPUT filtering is a bad idea.
>>
>>Why are you doing it? What is the benefit you think you are getting?
>>This sounds like a single user machine, from the fact that there's no
>>routing. Who are you limiting with OUTPUT rules? Yourself?
> 
> This is a public server and I fear that some of its daemons could be used to
> gain user access to the machine. None of my daemon runs as root, so if
> someone get in, it will get only user privs.
> I think that DROPping OUTPUT ensures that nobody will ever open the server
> to the outside or use the server to connect somewhere. Am I wrong? I'm

Not entirely. I did say (in text you snipped) this: "Carefully crafted 
rules to limit what your daemons can do with -m owner might slightly 
enhance security."

And yes, you're going to slow down an attacker with that if he's gotten 
shell access. Will it stop him from getting out? I doubt it. You allow 
ICMP out, and RELATED,ESTABLISHED in and out. I'm not sure how RELATED 
is figured (I hope someone will fill us in on the details) but I bet a 
"ping -q host.fqdn &> /dev/null" would allow outbound access to any 
services on host.fqdn. And anything they might need from the host they 
rode in on is accessible: if not RELATED, through ssh.

Furthermore, having a hostile user with shell access doesn't prevent 
privilege escalation exploits. Twice I've been asked by machine owners 
(with shell access) to restore their lost root access. Each time it was 
simple and straightforward. Once, I guessed the root password. The other 
time, I dropped to a shell from a SUID binary.

That said, your garden variety script kiddie isn't going to work that 
hard at it, and attack slowdowns often equate to security. I once left a 
guessable password on a guessable account name on a small virtual host 
(user-mode Linux.) Sure enough, the ssh bots got in. The lastlog caused 
the limited disk space to fill up and the kernel process crashed. I 
examined the system from the host and determined that no privilege 
escalation had occurred. They logged in and didn't know what to do 
because there was no apache, PHP, sendmail: the commonly used tools.

Sure, go ahead and work on it. Eventually I might try experimenting with 
some OUTPUT rules too. It won't hurt if you can allow your daemons to do 
only what they need -- but allow them *everything* they need. You might 
want to use a -m owner rule to allow your own user account out, at least 
while you're logged in.

But a better approach overall ... and this is what I do ... is to 
restrict services which might conceivably (or directly) provide a shell. 
SSH should only allow in secret keys, no password authentication. IMAP 
and POP3 should use virtual accounts and not provide access to the $HOME 
of the system user for the virtual accounts. (And do require secure 
authentication ... TLS, or force the use of IMAPS/POP3S.) It might not 
hurt to disable your apache userdir_module. (There might be other ways 
to harden apache too ... I don't specialise in that.)
-- 
     mail to this address is discarded unless "/dev/rob0"
     or "not-spam" is in Subject: header


^ permalink raw reply	[flat|nested] 7+ messages in thread

end of thread, other threads:[~2005-07-31 18:20 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2005-07-27 16:10 ESTABILISHED connections are not that estabilished Gioele Barabucci
2005-07-27 18:52 ` Gioele Barabucci
2005-07-28  4:57   ` curby .
2005-07-28  9:52 ` Gioele Barabucci
2005-07-28 10:41   ` /dev/rob0
2005-07-28 22:04     ` Gioele Barabucci
2005-07-31 18:20       ` /dev/rob0

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.