设为首页 收藏本站
查看: 812|回复: 0

[经验分享] Linux+Layer7+Iptables+Squid

[复制链接]

尚未签到

发表于 2018-12-26 09:21:08 | 显示全部楼层 |阅读模式
Linux+Layer7+Iptables+Squid

  案例配置:
  

  公司有三个部门
  工程部门 192.168.30.10--192.168.30.20
  软件部门 192.168.30.21--192.168.30.30
  经理办 192.168.30.31--192.168.30.40
  DMZ  192.168.40.0/24
  上班时间 (周一---周五 08:00--20:00)
  环境要求:
  1、工程部门上班时间ftp 【192.168.1.166】 允许, qq http 迅雷不允许使用,下班后无限制
  2、软件部门上班时间运行http但是不允许非法站点sina ,不允许使用迅雷 ,连接数 最多3个 不允
  许聊天,不允许使用pplive ,不允许看图片 下班后无限制。
  3、经理办公室 http qq 都可以,下班后无限制
  4、dmz区域rdp server 服务器进行发布

  试验环境说明:
1、服务器操作系统:RedHat Enterprise Linux 5(内核:2.6.18)
2、防火墙:Linux+Layer7+Iptables+Squid
3、DMZ
  软件环境:
  http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.25.19.tar.bz2
  http://www.netfilter.org/projects/iptables/files/iptables-1.4.2.tar.bz2
  http://ie.archive.ubuntu.com/sourceforge/l/l7/l7-filter/netfilter-layer7-v2.20.tar.gz
  http://ie.archive.ubuntu.com/sourceforge/l/l7/l7-filter/l7-protocols-2008-10-04.tar.gz

  因为Linux系统中的Iptables工具无法对应用层的应用来进行过滤,如:qq,迅雷,电驴等等,所以需要结合额外的工具。Layer7是在Linux上面的一个防火墙模块,它可以在Iptables上实现七层过滤,但遗憾的是Layer7这个项目在2009年时就停止了。在Linux上面firewall是基于内核模块实现的,所以我们要想起用layer7模块就必须编译内核。
  一、升级Linux内核
  由于防火墙采用的是RedHat Enterprise Linux 5,系统内核是2.6.18,要将其升级到2.6.25,并且打
  上Layer7层的协议补丁。
  1、合并kernel+layer7补丁
  #tar jxvf linux-2.6.25.19.tar.gz2 -C /usr/src/
  #tar zxvf netfilter-layer7-v2.20.tar.gz -C /usr/src/
  #cd /usr/src/linux-2.6.25.19/
  #patch-p1 < /usr/src/netfilter-layer7-v2.20/kernel-2.6.25-layer7-2.20.patch

  2、配置新内核
  #cp /boot/config-2.6.18-164.el5 .config //使用旧的内核配置
  #make menuconfig

   //配置内核时,在“Networking ---> Networking Options---> Network Packet filtering framework (Netfilter) ”处主要注意两个地方:
    1) ---> Core Netfilter Configuration
      //将“Netfilter connection tracking suport (NEW)”选择编译为模块(M),需选取此项才能看到layer7支持的配置。
      //将layer7、string、state、time、IPsec、iprange、connlimit……等编译成模块,根据需要自己可以自由选择。
    2) ---> IP: Netfilter Configuration
      //将“IPv4 connection tracking support (requirefor NAT)”编译成模块。
      //将“Full NAT”下的“MASQUERADEtarget support”和“REDIRECT target support”编译成模块。
  

    3、编译及安装模块、新内核
  #make && make modules_install && make install
  //编译安装成后后,重启选择使用新的内核(2.6.25.19)引导系统
  注意:由于是在2.6.18的内核中进行编译的,所以在重启的GRUB菜单中重新选择到新的系统2.6.25中。

  二、重新编译iptables
  1、卸载系统自带的iptables
  首先将系统自带的iptables的服务控制脚本备份一下,留给源码安装的iptables
  #cp /etc/init.d/iptables /etc/init.d/iptables.bak
  #rpm -e iptables --nodeps
  

  2、源码安装iptables+layer7补丁
  #tar jxvf iptables-1.4.2.tar.bz2 -C/usr/src/
  #cd /usr/src/netfilter-layer7-v2.20/iptables-1.4.1.1-for-kernel-2.6.20forward/
  # cplibxt_layer7.c libxt_layer7.man /usr/src/iptables-1.4.2/extensions/
  

  3、编译安装
  #cd /usr/src/iptables-1.4.2/
  #./configure --prefix=/ --with-ksource=/usr/src/linux-2.6.25.19
  #make && make install
  

  4、安装l7-protocols模式包
  #tar zxvf l7-protocols-2008-10-04.tar.gz-C /etc/
  #mv /etc/l7-protocols-2008-10-04/etc/l7-protocols
  #mv /etc/init.d/iptables.bak /etc/init.d/iptables

  要想知道Layer7到底支持哪些协议,可以在Layer7的解压目录中的Protocols中查看。

  三、配置防火墙的网络环境
  1、添加三块网卡,分别连接到LAN 、DMZ、WAN
  eth0网卡连接到LAN,eth1网卡连接到DMZ,eth2连接到WAN。在本试验中,eth2是192.168.1.0/24的网络连接到外网。
  eth0—》192.168.30.1
  eth1—》192.168.40.1
  eth2—》192.168.1.138,网关—》192.168.1.1


  2、配置DNS
  #vim /etc/resolve.conf
3、打开防火墙路由转发功能

  #vim /etc/sysctl.conf  //修改第七行
  #sysclt -p  //重新加载配置文件

  或者
  #echo “1” >/proc/sys/net/ipv4/ip_forward
  3、测试网络连通性。

  四、添加Iptables访问策略
  #iptables –t nat –A POSTROUTING –o eth2 –j MASQUERADE
  //使LAN内的用户可以通过NAT访问外网
  #iptables -t filter -P  INPUT   DROP
  #iptables -t filter -P  OUTPUT  DROP
  #iptables -t filter -P  FORWARD  DROP
  //以上三条命令,是将filter表中的三个控制链设为拒绝。
1、工程部策略控制:

  a、ftp访问控制:
  ① # iptables -t filter –A FORWARD –m iprange --src-range 192.168.30.10-192.168.30.20 -m time --timestart 08:00 --timestop 20:00 --weekdays Mon,Tue,Wed,Thu,Fri -p tcp --dport21 –d 192.168.1.166 -j ACCEPT
  //允许工程部主机访问192.168.1.166的ftp站点的请求出去
  ② # iptables -t filter -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
  //允许返回的状态是:ESTABLISHED,RELATED的包通过,以后添加的策略最好在该策略之前。

  因为ftp的连接通信分为:主动模式和被动模式。所以以上的两条命令,只是能够允许ftp的21号连接控制的数据通过,但是数据控制无法通过。

  ③ # modprobe  ip_nat_ftp
  //调用系统中的模块,来允许ftp之间的通信。为了使用方便可以将该命令写入开机脚本中,# echo “modprobe ip_nat_ftp” >> /etc/rc.local。如果没有这个模块,你就不得不多写几条控制语句了。
  ④ # iptables -t filter - I FORWARD -2 -m iprange --src-range 192.168.30.10-192.168.30.20 -m time --timestart 08:00 --timestop 20:00 --weekdays Mon,Tue,Wed,Thu,Fri -p tcp --dport 20 -j ACCEPT
  //允许连接ftp服务器的20号端口
  ⑤ # iptables -t filter - I FORWARD -2 -m iprange --dst-range 192.168.30.10-192.168.30.20 -m time --timestart 08:00 --timestop 20:00 --weekdays Mon,Tue,Wed,Thu,Fri -p tcp --sport 20 -j ACCEPT
  //允许ftp服务器通过20号端口向客户端返回信息
  ⑥ ftp测试
  首先要确保外网内有一个ftp服务器,本实验中的ftp是192.168.1.166,是通过软件Server-U软件,在Windows平台上实现的,关于ftp的搭建可以参考本人的相关博客。

  b、QQ策略控制
  ④ #iptables -t filter -I FORWARD 2 -m iprange --src-range 192.168.30.10-192.168.30.20 -m time --timestart 08:00 --timestop 20:00 --weekdays Mon,Tue,Wed,Thu,Fri -m layer7 --l7proto qq -j  DROP
  //在第二条规则前面添加一条策略,用来控制工程部使用QQ,只能使用l7中的定义的七层协议。
  c、迅雷策略控制
  ⑤ #iptables -t filter -I FORWARD 2 -m iprange --src-range 192.168.30.10-192.168.30.20 -m time --timestart 08:00 --timestop 20:00 --weekdays Mon,Tue,Wed,Thu,Fri -m layer7 --l7proto xunlei -j  DROP
  //在第二条规则前面添加一条策略,用来控制工程部使用迅雷。

⑥ #iptables–t filter -I FORWARD 2 -s 192.168.2.0/24 -o eth2 -m time --timestart 20:01  --timestop 07:59 -j ACCEPT
//下班后无限制
2、软件部门策略控制
a、非法站点的访问控制策略
  因为非法站点一般都是基于域名的,这里可以使用l7中的string模块,也可以使用Squid代理服务器来实现。允许http服务时,要注意DNS服务也要通过。
  

  ① # iptables -t filter -I FORWARD 2 -m iprange  --src-range 192.168.30.21-192.168.30.40 -m time --timestart 08:00 --timestop 20:00 --weekdays Mon,Tue,Wed,Thu,Fri -p udp --dport 53 -j ACCEPT
  //允许DNS数据包通过。

  方法一:通过l7模块来实现
  ① # iptables -t filter -I FORWARD 2 -m iprange --src-range 192.168.30.21-192.168.30 -m time --timestart 08:00 --timestop 20:00 --weekdays Mon,Tue,Wed,Thu,Fri -m string“sina” –algo bm -j DROP
  //工作时间内,不允许访问sina站点
  ② # iptables -t filter -I FORWARD 2 -m iprange  --src-range 192.168.30.21-192.168.30.30 -m time --timestart 08:00 --timestop 20:00 --weekdaysMon,Tue,Wed,Thu,Fri -p tcp --dport 80 -j ACCEPT
  //允许http服务可以通过
  方法二:通过Squid代理服务器来控制
  #rpm -ivh  squid-2.6.STABLE21-3.el5.i386.rpm
  //使用rpm包安装Squid服务器
  #chkconfig  squid start  //启动Squid服务
  #chkconfig  squid on   //将squid服务添加到开机启动
  ① # iptables -t nat -A PREROUTING -i eth0 -p tcp --dport80 -j REDIRECT --to-ports 3128
  //将内网中访问80端口的请求重定向到3128端口
  ② 由于Squid的默认规则是拒绝所有,所以手动设置策略
  # vim/etc/squid/squid.conf

  acl soft src 192.168.30.21-192.168.30.30/255.255.255.255
  //定义软件部的IP地址
  acl worktime time MTWHF 08:00-20:00
  //定义工作时间
  http_accessallow soft worktime
  //允许软件部在工作时间内的请求通过

  http_port3128 transparent
  //实现squid的透明代理
  ② # iptables -t filter -A INPUT -i eth0 -p tcp --dport 3128 -j ACCEPT
  //允许3128端口的请求从eth0端口进入
  ③ # iptables -t filter -A OUTPUT –o eth0 -p tcp --sport 3128 -j ACCEPT
  //允许3128端口的回应信息从eth0端口出去
  ④ # iptables -t filter -A OUTPUT -m state --state ESTABLISHED -j ACCEPT
  //允许回应信息通过
  ⑤ # iptables -t filter -A OUTPUT -o eth2 -p tcp –dport 80 -j ACCEPT
  //当Squid缓存中没有用户所要的信息时,squid就自己去向外网中的web服务器请求信息,所以应该允许代理服务器的http请求。
  ⑥ # iptables -t filter -A OUTPUT -o eth2 -p udp --dport 53 -j ACCEPT
  //当Squid缓存中没有用户所要的信息时,squid就自己去向外网中的web服务器请求信息,所以应该允许代理服务器的DNS请求。
  ⑦ # iptables -t filter -A INPUT -m state --state ESTABLISHED -j ACCEPT
  //允许返回的回应信息的进入
  
//定义一个acl,控制软件部访问sina


  //关于squid的访问控制策略使用,请参考本人的相关博客。
  b、QQ策略控制
  ⑨ #iptables -t filter -I FORWARD 2 -m iprange --src-range 192.168.30.21-192.168.30.30 -m time --timestart 08:00 --timestop 20:00 --weekdays Mon,Tue,Wed,Thu,Fri -m layer7 --l7proto qq -j  DROP
  //在第二条规则前面添加一条策略,用来控制工程部使用QQ,只能使用l7中的定义的七层协议。
  c、迅雷策略控制
  ⑩ #iptables -t filter -I FORWARD 2 -m iprange --src-range 192.168.30.21-192.168.30.30 -m time --timestart 08:00 --timestop 20:00 --weekdays Mon,Tue,Wed,Thu,Fri -m layer7 --l7proto xunlei -j  DROP
  //在第二条规则前面添加一条策略,用来控制工程部使用迅雷。
  d、最大连接数的控制
  iptables-I FORWARD 2 -m iprange --src-range 192.168.30.21-192.168.30.30 -mtime--timestart 08:00 --timestop 20:00 --weekdays Mon,Tue,Wed,Thu,Fri -p tcp --syn--dport 80 -m connlimit --connlimit-above 3 -j DROP
  //也可以使用squid来现在最大连接数
  1、经理办公室访问策略控制
  1、允许http
  a
  # iptables-A FORWARD -m iprange --src-range 192.168.30.31-192.168.30.40 -mtime--timestart 08:00 --timestop 20:00 --weekdays Mon,Tue,Wed,Thu,Fri -p udp--dport 53 -j ACCEPT
  //允许DNS
  b
  #iptables -A FORWARD -m iprange --src-range 192.168.30.31-192.168.30.40 -mtime--timestart 08:00 --timestop 20:00 --weekdays Mon,Tue,Wed,Thu,Fri -p tcp--dport 80 -j ACCEPT
  2、允许QQ
  #iptables -A FORWARD -m iprange --src-range 192.168.30.31-192.168.30.40 -mtime--timestart 08:00 --timestop 20:00 --weekdays Mon,Tue,Wed,Thu,Fri -m layer7--l7proto qq -j ACCEPT
  2、DMZ区域内的rdp服务器发布到外网中
  说明:DMZ区域内的服务器中要安装rdp服务,可以使用Redhat,本实验使用的是Windows7。
  1、# iptables -t nat -A PREROUTING -d 192.168.1.138 -p tcp --dport 3389 -j DNAT --to 192.168.40.10
  2、# ipables -t filter -I FORWARD 1 -i eth1 -d 192.168.40.10 -p tcp --dport 3389 -j ACCEPT



  说明:以上使用的软件包下载地址--》http://yunpan.cn/QbQdBXIkkIujH




运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-655923-1-1.html 上篇帖子: squid 日志分析sarg 下篇帖子: Squid-7773725
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表