Hi Arnoldo:

> I would like to begin by saying that I am a beginner in linux.

Cool, welcome to the community.  We're always happy to help "newbies". 
But let me preface the rest of my comments by saying I'm very concerned
about anybody providing external services (web/ftp/mail/etc) to the
Internet that doesn't have some experience administrating and securing
these services.  Obviously, you have to get experience *somewhere*, but
I'm of the opinion that this is best done in a controlled environment
first, not a hostile one like the Internet.  That said...

> At this time only I have access to my servers (Apache, proftpd, etc)
> inside of my network and I don't get to call them through the internet.  

It's likely that your firewall is closing them.  Whenever
troubleshooting network services, it's best to follow a scientific
method of discovery in determining what's wrong.  Start out by seeing if
the service is already running.  Let's use Apache as the example here. 
As you probably know by now, Apache listens on port 80 as a TCP socket. 
Let's take a look at our network connections and see if anything matches
that:

[EMAIL PROTECTED] ~]$ netstat -vant | grep 80
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN
tcp        0      0 0.0.0.0:8880            0.0.0.0:*               LISTEN
tcp        0      0 0.0.0.0:8025            0.0.0.0:*               LISTEN
tcp        0      0 0.0.0.0:8026            0.0.0.0:*               LISTEN
tcp        0      0 192.168.0.42:32800      164.109.8.55:1723       ESTABLISHED

As we can see, the first line shows us that port 80 is listening on all
available IP addresses (0.0.0.0:80).  That's good, we can see that
Apache (httpd) is running.  You could also do a "ps ax | grep httpd",
but I trust my netstat output more.  ;-)

Well, if we see that Apache is listening on port 80, but we still can't
connect, our best bet would be to confirm that the request is making it
from our client to our server.  Using a terminal/console/xterm, let's
run the tcpdump command to see if we're actually receiving the TCP
connection.  Tcpdump should be installed in /usr/sbin/tcpdump, you might
have to install it if you don't already have it.  In this example, the
client is 192.168.0.10 and the server is 192.168.0.42.  We're testing on
the backend interface (eth1) for now.

[EMAIL PROTECTED] ~]$ sudo tcpdump -ni eth1 port 80

Ok, now while that's waiting, let's go to our client and request the
website.  For this exercise, I'm going to use the command line telnet
from another linux system.

[EMAIL PROTECTED] fuzzy]$ telnet 192.168.0.42 80
Trying 192.168.0.42...
telnet: connect to address 192.168.0.42: Connection refused

What I've done is telnet to the server's port 80 in an effort to connect
to the Apache service.  As we can see, the connection received an
immediate refusal.  Now, let's see what our tcpdump back on the server
reveals...

tcpdump: listening on eth1
13:32:07.810612 192.168.0.10.33763 > 192.168.0.42.http: S
3329145642:3329145642(0) win 5840 <mss 1460,sackOK,timestamp 483794384
0,nop,wscale 0> [tos 0x10]

We're definitely seeing the connection from the client, but that's about
it.  The log shows us a SYN ("S") connection, the first part of the
standard TCP "3-way handshake".  Since we didn't see any SYN/ACK or RST
packets returned, we can safely assume that the Apache service did not
actually receive the request.  Let's focus on the firewall.

Looking at my ruleset (/etc/sysconfig/iptables), I determined that I did
*not* have an entry to allow incoming TCP packets to port 80.  By adding
the following rule (your syntax may differ depending on your setup), we
should be able to allow HTTP traffic to our server:

-A RH-Lokkit-0-50-INPUT -p tcp -m tcp --dport 80 --syn -j ACCEPT

This rule has a number of parameters.  The first part, "A", tells us to
append this rule to an existing chain, "RH-Lokkit-0-50-INPUT".  This was
named as such by the lokkit firewall utility that comes with my Red Hat
system.  The 3rd flag ("-p") matches TCP packets, and the 4th flag
("-m") allows us to load extended modules (options) for TCP, such as
"--dport" (destination port) and "--syn" (SYN packet).  The final part
gives us an action ("-j") to perform (ACCEPT).  To summarize
linguisticly, this rule says "Append a rule to the existing chain named
RH-Lokkit-0-50-INPUT.  Accept TCP packets with a destination of port 80
and the SYN bit turned on".  Ok, let's reload our firewall...

[EMAIL PROTECTED] ~]$ sudo service iptables restart
Flushing all current rules and user defined chains:        [  OK  ]
Clearing all current rules and user defined chains:        [  OK  ]
Applying iptables firewall rules:                          [  OK  ]

Now we'll start tcpdump on our server and try to connect from our client
again:

[EMAIL PROTECTED] ~]$ sudo tcpdump -ni eth1 port 80 and host 192.168.0.42
tcpdump: listening on eth1
14:00:25.713342 192.168.0.10.33769 > 192.168.0.42.http: S
818946521:818946521(0) win 5840 <mss 1460,sackOK,timestamp 483964186
0,nop,wscale 0> [tos 0x10]
14:00:25.713448 192.168.0.42.http > 192.168.0.10.33769: S
485666566:485666566(0) ack 818946522 win 32416 <mss
16220,sackOK,timestamp 5835454 483964186,nop,wscale 0> (DF)
14:00:25.741393 192.168.0.10.33769 > 192.168.0.42.http: . ack 1 win 5840
<nop,nop,timestamp 483964188 5835454> [tos 0x10]


Now you'll probably notice a few things different.  First and foremost,
our client connected successfully!  Yeehaw!  Ok, now let's analyze the
tcpdump output.  You might have noticed that I added a few extra words
to my tcpdump command this time ("and host 192.168.0.42").  This allows
me to filter on the client's IP address, in addition to the port.  This
is very helpful when you need to troubleshoot connections on an
interface that might have other traffic connecting, and you want to see
only that specific traffic from that specific client.

Ok, when we look at our tcpdump capture, we see a series of entries. 
The first is the same we saw before, a SYN ("S") packet.  Next, we see a
SYN/ACK ("S", "ack").  Third, we see the third part of the 3-way
handshake, the final acknowledgement ACK ("ack").  From this point on,
the TCP connection with Apache is established, and we the remaining
packets would be part of the webpage transmission.

I know this explanation has been lengthy, but hopefully this will lead
you on your way to troubleshooting basic- and advanced network problems
on Linux.

> Is it possible two firewalls exist in my system? How can I verify that?

Anything is possible.  George W. Bush is the President of the United
States, after all.  :(  Nevertheless, it's unlikely that you have two
firewalls running.  More likely is that you a) simply haven't allowed
access through your firewall for the services in question, or b) you
did, but a 2nd configuration utility (firestarter?) overwrote part of
your running configuration.

Hope this helps.

-- 
Jason Dixon, RHCE
DixonGroup Consulting
http://www.dixongroup.net


-- 
redhat-list mailing list
unsubscribe mailto:[EMAIL PROTECTED]
https://www.redhat.com/mailman/listinfo/redhat-list

Reply via email to