|
以下是我潜心配置的基于动态机制iptables防火墙脚本,和透明squid的配置方法.
都是我的机器上正在使用的绝对没问题.
iptables脚本如下:
#! /bin/bash
#Enable Ip_forward
echo 1 > /proc/sys/net/ipv4/ip_forward
echo "Starting iptables......."
#Preparing .......
echo "preparing..........."
modprobe ip_nat_ftp
modprobe ip_conntrack_ftp
#flush all
echo "Flushing .........."
iptables -F
iptables -X
iptables -t nat -F
iptables -t nat -X
#DROP all filter and Enable others
echo "Droping.............."
iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -P FORWARD DROP
iptables -t nat -P PREROUTING ACCEPT
iptables -t nat -P POSTROUTING ACCEPT
iptables -t nat -P OUTPUT ACCEPT
#INPUT
echo "Preparing INPUT.................."
iptables -A INPUT -m state --state ESTABLISHED -j ACCEPT
iptables -A INPUT -i lo -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A INPUT -i eth1 -s 192.168.0.0/24 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A INPUT -i eth0 -p tcp ! --syn -m state --state NEW -j DROP
iptables -A INPUT -i eth0 -s ! 192.168.0.0/24 -d 192.168.0.0/24 -j DROP
iptables -A INPUT -j MIRROR
#OUTPUT
echo "Preparing OUTPUT..............."
iptables -A OUTPUT -m state --state NEW,ESTABLISHED -j ACCEPT
#FORWARD
echo "Preparing FORWARD...................."
iptables -A FORWARD -i eth0 -m state --state ESTABLISHED -j ACCEPT
iptables -A FORWARD -i eth1 -s 192.168.0.0/24 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A FORWARD -i eth0 -p tcp ! --syn -m state --state NEW -j DROP
iptables -A FORWARD -i eth0 -s ! 192.168.0.0/24 -d 192.168.0.0/24 -j DROP
#NAT
echo "Preparing NAT..............."
iptables -t nat -A PREROUTING -s 192.168.0.0/24 -i eth1 -p tcp --dport 80 -j REDIRECT --to-ports 7788
iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -o eth0 -j MASQUERADE
#ftp
echo "About Ftp Preparing................."
iptables -A INPUT -p tcp --sport 1024: --dport 1024: -m state --state ESTABLISHED -j ACCEPT
iptables -A OUTPUT -p tcp --sport 1024: --dport 1024: -m state --state ESTABLISHED,RELATED -j ACCEPT
如想直接使用,按如下步骤:
1. touch /etc/rc.d/firewall
2. 将以上内容写入firewall文件
3. chmod u+x /etc/rc.d/firewall
4. 在/etc/rc.d/rc.local文件的末尾加入
"/etc/rc.d/firewall"
squid配置为透明代理的方法:
注意:squid的默认配置文件无法正常使用且被设置为poxy
模式.
在sauid.conf(一般在/etc/squid/squid.conf)的末尾加入
httpd_accel_host virtual
httpd_accel_port 80
httpd_accel_with_proxy on
httpd_accel_uses_host_header on
cache_effective_user squid
cache_effective_group squid
更改http_port 7788 (我使用的端口,默认是3128,你也可以该为其他的)
visible_hostname NO1.proxy (你可以随便设)
关闭除80以外的所有端口,之所以这样因为iptables拥有更强大的控制能力,没必要用suid来作防火墙,做法如下:
acl Safe_ports port 80 # http
#acl Safe_ports port 21 # ftp
#acl Safe_ports port 53
#acl Safe_ports port 443 563 # https, snews
#acl Safe_ports port 70 # gopher
#acl Safe_ports port 210 # wais
#acl Safe_ports port 1025-65535 # unregistered ports
#acl Safe_ports port 280 # http-mgmt
#acl Safe_ports port 488 # gss-http
#acl Safe_ports port 591 # filemaker
#acl Safe_ports port 777 # multiling http
acl CONNECT method CONNECT
照我的该就行
接下来是关键:
acl our_networks src 192.168.0.0/24 (改为你的客户端的网段)
http_access allow our_networks
很多人在照搬别人的用http_access allow all 省事,但很不安全,建议不采用.
通过以上配置可以实现局域网对外的透明访问,且有效的防范,
风险.所有的网页浏览都由squid负责,其它由iptables负责.
特别注意,如客户端不能上网一定是你没设首选dns或设的不对,这里设的可不是防火墙的内网ip而是isp的dns地址
以上的设置数据包完全安我所设计的流动,我是用ehtereal和
ip_conntrack记录分析过的.
欢迎大家指正问题,大家一起提高 |
|