一台linux主机干这么多活:iptables+DHCP+squid+samba
最近公司扩建了一个新的办公区,规模也就100人左右。
领导有几个要求:
1:不允许坐席上网,但是允许坐席上几个固定的网站(比如行政区划网)。
2:允许办公室的后勤人员上网。
3:允许坐席拨×××连接总部腾讯通。
公司拉的10M光纤,从光电设备出来后没有路由器。
 
 
我做了两个方案:
     1:利用squid做个透明代理,然后做个DHCP分配IP地址给坐席。
            squid负责控制端口跟网站
     2:利用linux自带的iptables作为防火墙,控制端口,所有坐席的IP的包直接DROP。
           利用squid给坐席代理,简单的那种,用IE上网。后勤部门则有iptables直接开放。
            利用iptables开放×××端口给所有IP地址,这样,公司里的任意一台电脑都能拨×××了。
       后来想了想,还是第二种方案比较好。
 
于是就做了第二个方案:
        由于公司的设备有限,只能拿有限的资源来干最多的活(相信大多数公司都是这样的)
        找了个台式机,配置一般般,买了块100M网卡。
        安装linux,我用的是CentOS5.5  把etho第一块网卡配上内网的IP地址:10.2.0.1
子网掩码:255.255.255.0  网关:10.2.0.1 
第二块网卡:eth1:192.168.0.9(假设的外网IP地址)子网掩码:255.255.255.0 网关:192.168.0.1(假设的网关,真是网关跟IP地址跟运营商要就OK了)DNS:电信的填电信的,网通的填网通的不做解释了。
          输入route命令,查看下路由信息,查看default gateway是多少,是不是外网的IP地址,如果是的话那就ok了,不是的话就设置成外网的网关,不然是出不去的。
          正好你的机器就你内网的网关也就是10.2.0.1所以我感觉内网gateway可以忽略。
 
          都设置好以后 用这台机器分别ping 外网和内网网段,看看能不能ping通。都ping同了,在看看坐席上的电脑(随便找个,设置个10.2.0.*锻的IP,netmask 255.255.255.0, gateway 10.2.0.1)能不能ping通10.2.0.1-------都通了,就开始设置防火墙规则。
 
      ---->    首先开启内核转发的功能:方法有好几种
      1:echo "echo 1 >/proc/sys/net/ipv4/ip_forward" >> /etc/rc.d/rc.local--后面这个是加入到开机启动,因为重启后ip_forward这个文件自动会变成0,不是1
      2:vi /etc/sysctl.conf    把net.ipv4.ip_forward =1   <--把0改成1
          然后运行 sysctl.conf -p立即生效
 
     ------>清空防火墙规则
iptables -F
iptables -X
iptables -Z
--------->设置链的默认规则
iptables -P INPUT DROP
iptables -P OUTPUT ACCEPT
iptables -P FORWARD DROP
--------->一般防火墙都会开下面两条规则
iptables -A INPUT -i lo -j ACCEPT  ---回环端口打开
iptables -A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT---已连接和已配置的规则允许
iptables -A POSTROUTING -s 10.2.0.0/255.255.0.0 -o eth1 -j SNAT --to-source 192.168.0.9
让内网的用户通过192.168.0.9出去。
 
这样这台电脑就相当于一个路由器了,而且有个强大的iptables防火墙。
 
我是用FORWARD链控制内网上网的,例如:办公室电脑IP地址为10.2.0.3
那就添加规则:iptables -A FORWARD -s 10.2.0.3 -j ACCEPT这样这台电脑就可以上网了。
------------>再装上DHCP给坐席分配IP地址。
挂载光盘 mount /dev/cdrom /mnt
到mnt目录下找到挂载的光盘,找到dhcp安装包,直接用rpm安装就ok了。
初级的dhcp的配置很简单,只要分配个IP地址,DNS就可以了。
 
---------------->安装代理软件squid,也是找光盘的rpm包,我装的是64为的,把那两个64位的包装上就ok了。
这里说一下,为什么要用squid而不是直接用防火墙打开某个网站的访问权限?
原因是这样的:
 
                假如:我用防火墙开放了EMS的官方网站,我只需要在iptables上配上一条规则就可以访问了
               iptables -A FORWARD -s 10.2.0.0/16 -d 0.0.0.0 (pingEMS得到的IP地址) -j ACCEPT
               就可以了,坐席访问EMS一点问题也没有。但是有的网站挂的广告,你的IP地址可能就没有包括连接广告的IP,这样网页打开速度会非常满,举个例子:www.xzqh.org,这个网站就是,挂了N多谷歌广告。
------------->安装完后在/etc/squid/squid.conf里配置相关信息。
             比如设置内存大小,缓存大小,缓存位置,acl访问规则控制
http_port 3128 //设置监听的IP与端口号
cache_mem 64 MB //
设置内存缓冲的大小
cache_dir ufs /var/spool/squid 2000 16 256 //
设置硬盘缓冲大小
dns_nameservers 192.168.0.254? //设置DNS服务器地址,一般可以不设置,默认使用服务器自己设置的dns
cache_access_log /var/log/squid/access.log //
设置访问日志文件
cache_log /var/log/squid/cache.log //
设置缓存日志文件
cache_store_log /var/log/squid/store.log //
设置存储缓存对象的状态记录文件
visible_hostname squid //
设置squid主机名称
cache_mgr it@test.com
 //设置管理员邮箱
acl all src 0.0.0.0/0.0.0.0 //
设置访问控制列表
比如要让坐席访问EMS网站就这样写
acl EMS(--自己起名字)dstdomain .ems.com.cn--注意EMS前有个点
http_access allow EMS(对应上面起的名字)
重启squid就可以访问EMS网站了,当然要在IE或者其他浏览器上设置代理才行
http_access allow all //
设置访问权限
这样,squid一般代理就做好了,如果你需要使用透明代理,那就另找资料看看。
 
 
他们需要个共享服务器,直接在这上面配了个简单的samba~唉
累死我了。
终于折腾完了。
其实文件服务器用windows的就非常不错,可惜,我还是相信linux的稳定性。
这样我就少网这边跑两趟,倒是剩了不少事。
 
 
 
文中若有不对的地方,欢迎指出!