Trying to setup two ethernet cards with two websites
I tried your suggestions below and yes, I finally have two websites working on the same box. Simplifying things does indeed work.
Is there a way to, by default drop everything on the output chain, but insert a rule to allow only http requests that were initialed by a client to either website?
Or if my input rules are sufficient, do I really need to do anything on the output chain other than let everthing out?
Thanks,
Justin
Quoted 1 line
Quoted 1 line
Quoted 1 line
Roy Sigurd Karlsbakk <[email protected]> 12/31 1:49 PM >>>
Quoted 1 line · JUSTIN GERRY
I am attempting to setup two websites with two ip address, each one
on
Quoted 4 lines
a
different ethernet card/interface.It only seems to work for the first rule (first listed ip address)
that
Quoted 5 lines
gets matched up, so I can get one website to work but not the other.
How
do I write this so it covers both address and allows httpd to go to either interface or either address? Can I write a single rule to
match
Quoted 12 lines
a
range of ip addresses (.93 and .94) instead of writing one for each individual address?This is what I have so far for testing.....
IF1="eth0"
IF2="eth1"
IP2="172.30.12.93"
IP1="172.30.12.94"
UNPRIVPORTS="1024:65535"
Quoted 6 lines
iptables -F
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT DROPiptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
the two below...
Quoted 1 line
iptables -A INPUT -i $IF1 -p tcp --sport $UNPRIVPORTS -d $IP1
--dport
Quoted 2 lines
80 -m state --state NEW -j ACCEPT
iptables -A INPUT -i $IF2 -p tcp --sport $UNPRIVPORTS -d $IP2
--dport
Quoted 1 line
80 -m state --state NEW -j ACCEPT
...are included in these two, so you won't need both. You probably don't want those below, as they accept anything regardless to state.
Quoted 1 line
iptables -A INPUT -i $IF1 -p tcp --sport $UNPRIVPORTS -d $IP1
--dport
Quoted 2 lines
80 -j ACCEPT
iptables -A INPUT -i $IF2 -p tcp --sport $UNPRIVPORTS -d $IP2
--dport
Quoted 1 line
80 -j ACCEPT
are these really nessecary? with -P DROP, this'll deny any outgoing connections at all, regardless of protocol. It'll even drop ICMP packets, something you probably don't want.
Quoted 4 lines
iptables -A OUTPUT -o $IF2 -p tcp ! --syn -s $IP2 --sport 80 --dport $UNPRIVPORTS -j ACCEPT
iptables -A OUTPUT -o $IF1 -p tcp ! --syn -s $IP1 --sport 80 --dport $UNPRIVPORTS -j ACCEPT
To allow for multiple hosts in a rule, you can specify a mask (or number of bits). For instance:
# iptables -s 10.0.0.0/31 will match 10.0.0.0 and 10.0.0.1. .93 and .94, however, overlaps this and needs to be allowed for specifically.
so - try first with -P OUTPUT -j ACCEPT, and no rules in the OUTPUT chain. It shouldn't be any problem then.
roy
Quoted 7 lines · JUSTIN GERRY
I tried your suggestions below and yes, I finally have two websites working on the same box. Simplifying things does indeed work.
Is there a way to, by default drop everything on the output chain, but insert a rule to allow only http requests that were initialed by a client to either website?
Quoted 5 lines
Or if my input rules are sufficient, do I really need to do anything on the output chain other than let everthing out?
Thanks,
Justin
If you trust that nothing on the box is or ever will connect that you don't want to, then output chain can just have an ACCEPT policy. If you want to lock down to make it harder for a trojan or such to communicate back from the box, you can set a DROP policy, then:
iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
will let traffic back out in response to client requests, but not let the box initiate any connections. If this tighter firewall still allows the needed connections, why open up any further? I'd suggest you might want to log dropped output traffic, though, to see what DOES try to get out. Depending on your usage and plans, you might want to open a few outbounds, like traceroute, ping, CVS, http, or ftp access FROM the box if you want to use these services when logged into the box, for updating software etc. Of course you can just allow those connections when needed, and the rest of the time go with DROP policy and the EST/REL rule above.
j
Quoted 6 lines
If you trust that nothing on the box is or ever will connect that you don't want to, then output chain can just have an ACCEPT policy. If you want to lock down to make it harder for a trojan or such to communicate back from the box, you can set a DROP policy, then:
iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
just remember to allow incoming ICMP. Please? ICMP _is_ an integral part of IP, and shouldn't be blocked out! You can do
iptables -I INPUT -p icmp -j REJECT --reject-with echo-reply
to answer all pings to hosts behind with echo reply (just fake it) in case you're afraid of anyone scanning you.
you might add a -limit as well to prevent them DoSing you (man iptables)
roy
Quoted 14 lines
will let traffic back out in response to client requests, but not let the box initiate any connections. If this tighter firewall still allows the needed connections, why open up any further? I'd suggest you might want to log dropped output traffic, though, to see what DOES try to get out. Depending on your usage and plans, you might want to open a few outbounds, like traceroute, ping, CVS, http, or ftp access FROM the box if you want to use these services when logged into the box, for updating software etc. Of course you can just allow those connections when needed, and the rest of the time go with DROP policy and the EST/REL rule above.
j
Quoted 10 lines · Roy Sigurd Karlsbakk
Quoted 7 lines
If you trust that nothing on the box is or ever will connect that you don't want to, then output chain can just have an ACCEPT policy.
If you
want to lock down to make it harder for a trojan or such to communicate back from the box, you can set a DROP policy, then:iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
just remember to allow incoming ICMP. Please? ICMP _is_ an integral part of IP, and shouldn't be blocked out!
The RELATED state does just this. If you allow absolutely nothing in but tcp 80 and established, and absolutely nothing out but established, only the port 80 request and reply will get through. If you also allow related out then so long as an 'established' connection exists then supplementary connections are accepted as well, like ICMP fragmentation control stuff. The only /initial/ connection allowed in this mini-scenario is to destination port 80 with TCP, but once that connection is flowing then the server would be allowed to send related packets to the same client, even other ports or protocols, and they will get through regardless of whether they are explicitly accepted or explicitly dropped by the firewall. That is the basic purpose of the RELATED state. It's extended with helpers too consider things like FTP data to be related to FTP control, and the NAT functions are extended as well, but the whole idea of RELATED is to let through stuff that is, well, related.
j