免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 919 | 回复: 0
打印 上一主题 下一主题

ip tables学习 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-09-24 10:54 |只看该作者 |倒序浏览
系统环境与网络规化
先了解一下公司的环境,公司利用2M ADSL专线上网,电信分配公用IP为218.4.62.12/29,网关为218.4.62.13 ,公司有电脑五十多台,使用DHCP,IP是192.168.2.XXX,DHCP Server建在iptables Server上;另公司有一电脑培训中心,使用指定固定IP,IP为192.168.20.XXX,为了更加快速的浏览网页,我们架了一台Squid Server,所有电脑通过Squid Server浏览网页,公司还另有一台WEB Server+Mail Server+Ftp Server。其IP为218.4.62.18。以上电脑和服务器要求全架在防火墙内。我们规化如下:
                                网络配线图
如图所示,Iptables Server上有三块网卡,eth0上加有二个IP,218.4.62.14和218.4.62.18。
其中218.4.62.14为共享上网,218.4.62.18为WEB Server专用,Eth1的IP为192..168.2.9;为了使培训中心PC与公司PC之间互不访问,所以直接从Iptables Server接到Switch-B,eth2接至Switch-A,连接培训中心PC和Squid Server, Web Server。
网络规化好了后,就开始装服务器了,Iptables Server 用的系统为Redhat Linux V7.3。在装服务器时要注意选上防火墙的安装包。
IPTABLES基础
Iptables语法:
   Iptables [-t TABLE] ACTION [PATTERN] [-j TARGET]
TABLE:
有filter,nat,mangle;若无指定,预设为filter table.
ACTION(对Chains执行的动作):
ACTION    说明
-L Chain    显示Chain中的所有规则
-A Chain    对Chain新增一条规则
-D Chain    删除Chain中的一条规则
-I Chain    在Chain中插入一条规则
-R Chain    替换Chain中的某一条规则
-P Chain    对Chain设定的预设的Policy
-F Chain    清除Chain中的所有规则
-N Chain    自订一个Chain
-X    清除所有的自订Chain
CHAINS:
Iptables 有五条默认的Chains(规则链),如下表:
Chains    发生的时机
PREROUTING    数据包进入本机后,进入Route Table前
INPUT    数据包通过Route Table后,目地为本机
OUTPUT    由本机发出,进入Route Table前
FORWARD    通过Route Table后,目地不是本机时
POSTROUTING    通过Route Table后,送到网卡前
PATTERN(设定条件部份):
参数    内容    说明
-p    Protocol    通讯协议,如tcp,udp,icmp,all等。。。
-s    Address    指定的Source Address为Address
-d    Address    指定的Destination Address为Address
-I    Interface    指定数据包进入的网卡
-o    Interface    指定数据包输出的网卡
-m    Match    指定高级选项,如mac,state,multiport等。。。
TARGET(常用的动作):
TARGET    说明
ACCEPT    让这个数据包通过
DROP    丢弃数据包
RETURN    不作对比直接返回
QUEUE    传给User-Space的应用软件处理这个数据包
SNAT    nat专用:转译来源地址
DNAT    nat专用:转译目地地址
MASQUERADE    nat专用:转译来源地址成为NIC的MAC
REDIRECT    nat专用:转送到本机的某个PORT
用/etc/rc.d/init.d/iptables save可在/etc/sysconfig/中产生一iptables文件,大家可以看到,它有三个*号开始的行,其每一个以*号开始的行对应一个table,以COMMIT表示此table 的结束。可将要定的规则加入到对应的table中,如下:
[root@jiaoyuang init.d]# ./iptables saveSaving current rules to /etc/sysconfig/iptables:           [  OK  ][root@jiaoyuang init.d]# cat /etc/sysconfig/iptables
# Generated by iptables-save v1.2.4 on Sat Sep 28 16:51:22 2002
*mangle
:PREROUTING ACCEPT [61522:8074850]
:OUTPUT ACCEPT [1079:79301]
COMMIT
# Completed on Sat Sep 28 16:51:22 2002
# Generated by iptables-save v1.2.4 on Sat Sep 28 16:51:22 2002
*nat
:PREROUTING ACCEPT [31850:5091703]
:POSTROUTING ACCEPT [20:1240]
:OUTPUT ACCEPT [12:776]
COMMIT
# Completed on Sat Sep 28 16:51:22 2002
# Generated by iptables-save v1.2.4 on Sat Sep 28 16:51:22 2002
*filter
:INPUT ACCEPT [61444:8070296]
:FORWARD ACCEPT [34:1984]
:OUTPUT ACCEPT [1079:79301]
COMMIT
安装并启动IPTABLES
在安装RedHat Linux V7.3后,iptables就已经被安装了,但默认启动的是ipchains。你在安装时所定义的一些规则也在/etc/sysconfig/ipchains中被定义。我们需要将其停止,才能启动iptables(注意:虽然不停止ipchains也可以启动iptables,但这时iptables并没有真正的起作用。Ipchains和iptables是两个防火墙,你只能选择一个)。
service ipchains stop (停止ipchains)
chkconfig --level 2345 ipchains off  (使ipchains系统启动时不自动启动)
chkconfig --level 2345 iptables on   (使iptables 在系统启动时自动启动)
vi /etc/rc.d/rc.local         (编辑rc.local,将下面四行加到最后)
ifconfig eth0 add 218.4.62.18 netmask 255.255.255.248
modprobe ip_conntrack_ftp
modprobe ip_nat_ftp
echo “1” > /proc/sys/net/ipv4/ip_forward
(第一行是在eth0上再加一个IP:218.4.62.18,因在安装时只能设一个IP:218.4.62.14。Ip_conntrack_ftp 和ip_nat_ftp为iptables运得必须的两个模块;最后一行为使开启服务器IP转发功能。)
(如果你将iptables的模块加到了内核中,以上第二,三行可省略。)
配置DHCP Server,以便让公司PC自动获得IP和网关,网关为192.168.2.9。具体的方法请参见相关资料,本文不作详述。
reboot
重新启动服务器后,Iptables 就已经开始运行了。
配置IPTABLES
对iptables 有了一个基本的了解后,我们就可以来配置我们的服务器了。首先要发布我们的WEB Server,将以下二行加入/etc/sysconfig/iptables中的nat table内:
-A PREROUTING -d 218.4.62.18 -j DNAT --to-destination 192.168.20.254
-A POSTROUTING -s 192.168.2.254 -j SNAT --to-source 218.4.62.18
第一行为将至服务器的所有目地地址为218.4.62.18的包都NAT为192.168.2.254,第二行为将至服务器的所有源地址为192.168.2.254的包为NAT到218.4.62.18。请把WEB Server 的网关设为192.168.20.9。
下面我们将所有从服务器共享出去的包都SNAT为218.4.62.14,就可完成共享上网的功能了:
-A POSTROUTING -s 192.168.0.0/16 -j SNAT --to-source 218.4.62.14
   
   将下面的规则加入到/etc/sysconfig/iptables中的filter tables内:
   
-A INPUT -p icmp -m icmp --icmp-type 8 -m limit --limit 6/min --limit-burst 2 -j ACCEPT
-A INPUT -p icmp -m icmp --icmp-type 8 -j REJECT --reject-with icmp-port-unreachable
   
   以上两行是为了防止Dos攻击做的一个简单的处理,大家对于各种攻击可做出相应的处理。
-A INPUT –i eth0 –m state –state ESTABLISHED,RELATED –j ACCEPT-A INPUT –i eth0 –j DROP
   
    以上两行是做了一个INPUT状态防火墙的处理,其主要作用为防止外部的连接和攻击,因其接受ESTABLISHED,RELATED状态(一个包分为NEW,ESTABLISHED,RELATED,INVALID四种状态)的包,故又不妨碍从本机出去的连接。
   
由于并不是所有的电脑都可以上网,所以还要对共享上网的电脑做一个限制:
IP限制:
-A FORWARD –s 192.168.2.0/29 –p udp –m multiport –port 53 –j ACCEPT
-A FORWARD –s 192.168.2.0/29 –p tcp –m multiport –port 3128,110,25 –j ACCEPT
-A FORWARD –s 192.168.20.253 –j ACCEPT
充许192.168.2.0~192.168.2.7和192.168.20.253(squid server)的电脑可上网和发邮件。3128是squid server的proxy port。我们用它去共享上网,110为pop3,25为smtp。Udp的53为DNS所要的port。不过由于使用的是DHCP,可能每次得到的IP都不一样,所以我们就要用下面一种MAC限制的方法了。
MAC 限制:
-A FORWARD –m mac -–mac XX:XX:XX:XX:XX:XX –p udp –m multiport –port 53 –j ACCEPT
-A FORWARD –m mac -–mac XX:XX:XX:XX:XX:XX –p tcp –m multiport –port 3128,110,25 –j ACCEPT
如上就可通过网卡来控制上网了,但现在电脑高手多多,改一个MAC的地址好像也不是什么难事了,怎么办呢?那就用我们的第三种方法吧。
MAC+IP限制:
    更改/etc/dhcpd.conf,如果MAC与IP绑定:
subnet 192.168.2.0
  netmask 255.255.255.0{  
      range 192.168.2.30 192.168.2.230;
      option broadcast-address 192.168.2.255;
      option routers 192.168.2.9;
      option domain-name-servers 212.132.16.163;
      host meeting-room        {
          hardware ethernet 00:50:ba:c8:4b:3a;
          fixed-address 192.168.2.35;
     }}
    我们的Iptables改为:0
-A FORWARD –s 192.168.2.35 –m mac -–mac XX:XX:XX:XX:XX:XX –p udp –m multiport –port 53 –j ACCEPT
-A FORWARD –s 192.168.2.35 –m mac -–mac XX:XX:XX:XX:XX:XX –p tcp –m multiport –port 3128,110,25 –j ACCEPT
  这样做之后,高手也无能为力了,不过公司有位MM是兄台的GF,上班的时候想和她聊聊天,培养培养感情;怎么办呢?我们知道QQ用的是udp的4000端口,如占用则4002,4003。。。那么就如下了:
-A FORWARD –s 192.168.2.35 –m mac -–mac XX:XX:XX:XX:XX:XX –p udp –m multiport –port 53,4000,4001,4002,4003,4004,4005 –j ACCEPT
-A FORWARD –s 192.168.2.35 –m mac -–mac XX:XX:XX:XX:XX:XX –p tcp –m multiport –port 3128,110,25 –j ACCEPT
最后加一句:
-A FORWARD –s 192.168.0.0/16 –j DROP
  
    由于前面应该开的都开了,所以最后全部禁止。呵呵,到此大功告成。
   
总结
世界上没有绝对安全的防火墙,安全永远是相对的。配置iptables的思路是先ACCEPT再DROP。共享上网的办法还有一个就是用iptables server的Owner,但由于linux没有像win2k那样的验证模式,在验证owner时有些困难。本人正在测试,但目前还没有比较好的解决办法,哪位兄弟搞定的话请Mail小弟,小弟将不胜感激。值得注意的是在做NAT时,客户端的网关一定要是iptagles的IP。
如本文有什么地方有错误,还请各位朋友告知
用Linux+iptables构建防火墙实例
很早的时候写的一篇东东,现在帖出来,希望对大家有点用:)
用Linux+iptables构建防火墙实例
作者:阿辉 (
huimail@21cn.com
)
前言
用Linux+iptables做防火墙具有很高的灵活性和稳定性(老兄我的防火墙自从做了之后还一直没有重启过),但安装和设定起来比较麻烦,而且容易出错,本文旨在用为公司做防火墙的实例,让大家对Linux+iptables做防火墙的安装和配置有一个大致的了解,希望能起到抛砖引玉的作用。
系统环境与网络规化
先了解一下公司的环境,公司利用2M ADSL专线上网,电信分配公用IP为218.4.62.12/29,网关为218.4.62.13 ,公司有电脑五十多台,使用DHCP,IP是192.168.2.XXX,DHCP Server建在iptables Server上;另公司有一电脑培训中心,使用指定固定IP,IP为192.168.20.XXX,为了更加快速的浏览网页,我们架了一台Squid Server,所有电脑通过Squid Server浏览网页,公司还另有一台WEB Server+Mail Server+Ftp Server。其IP为218.4.62.18。以上电脑和服务器要求全架在防火墙内。我们规化如下:
                                网络配线图
如图所示,Iptables Server上有三块网卡,eth0上加有二个IP,218.4.62.14和218.4.62.18。
其中218.4.62.14为共享上网,218.4.62.18为WEB Server专用,Eth1的IP为192..168.2.9;为了使培训中心PC与公司PC之间互不访问,所以直接从Iptables Server接到Switch-B,eth2接至Switch-A,连接培训中心PC和Squid Server, Web Server。
网络规化好了后,就开始装服务器了,Iptables Server 用的系统为Redhat Linux V7.3。在装服务器时要注意选上防火墙的安装包。
IPTABLES基础
Iptables语法:
   Iptables [-t TABLE] ACTION [PATTERN] [-j TARGET]
TABLE:
有filter,nat,mangle;若无指定,预设为filter table.
ACTION(对Chains执行的动作):
ACTION    说明
-L Chain    显示Chain中的所有规则
-A Chain    对Chain新增一条规则
-D Chain    删除Chain中的一条规则
-I Chain    在Chain中插入一条规则
-R Chain    替换Chain中的某一条规则
-P Chain    对Chain设定的预设的Policy
-F Chain    清除Chain中的所有规则
-N Chain    自订一个Chain
-X    清除所有的自订Chain
CHAINS:
Iptables 有五条默认的Chains(规则链),如下表:
Chains    发生的时机
PREROUTING    数据包进入本机后,进入Route Table前
INPUT    数据包通过Route Table后,目地为本机
OUTPUT    由本机发出,进入Route Table前
FORWARD    通过Route Table后,目地不是本机时
POSTROUTING    通过Route Table后,送到网卡前
PATTERN(设定条件部份):
参数    内容    说明
-p    Protocol    通讯协议,如tcp,udp,icmp,all等。。。
-s    Address    指定的Source Address为Address
-d    Address    指定的Destination Address为Address
-I    Interface    指定数据包进入的网卡
-o    Interface    指定数据包输出的网卡
-m    Match    指定高级选项,如mac,state,multiport等。。。
TARGET(常用的动作):
TARGET    说明
ACCEPT    让这个数据包通过
DROP    丢弃数据包
RETURN    不作对比直接返回
QUEUE    传给User-Space的应用软件处理这个数据包
SNAT    nat专用:转译来源地址
DNAT    nat专用:转译目地地址
MASQUERADE    nat专用:转译来源地址成为NIC的MAC
REDIRECT    nat专用:转送到本机的某个PORT
用/etc/rc.d/init.d/iptables save可在/etc/sysconfig/中产生一iptables文件,大家可以看到,它有三个*号开始的行,其每一个以*号开始的行对应一个table,以COMMIT表示此table 的结束。可将要定的规则加入到对应的table中,如下:
[root@jiaoyuang init.d]# ./iptables saveSaving current rules to /etc/sysconfig/iptables:           [  OK  ][root@jiaoyuang init.d]# cat /etc/sysconfig/iptables
# Generated by iptables-save v1.2.4 on Sat Sep 28 16:51:22 2002
*mangle
:PREROUTING ACCEPT [61522:8074850]
:OUTPUT ACCEPT [1079:79301]
COMMIT
# Completed on Sat Sep 28 16:51:22 2002
# Generated by iptables-save v1.2.4 on Sat Sep 28 16:51:22 2002
*nat
:PREROUTING ACCEPT [31850:5091703]
:POSTROUTING ACCEPT [20:1240]
:OUTPUT ACCEPT [12:776]
COMMIT
# Completed on Sat Sep 28 16:51:22 2002
# Generated by iptables-save v1.2.4 on Sat Sep 28 16:51:22 2002
*filter
:INPUT ACCEPT [61444:8070296]
:FORWARD ACCEPT [34:1984]
:OUTPUT ACCEPT [1079:79301]
COMMIT
安装并启动IPTABLES
在安装RedHat Linux V7.3后,iptables就已经被安装了,但默认启动的是ipchains。你在安装时所定义的一些规则也在/etc/sysconfig/ipchains中被定义。我们需要将其停止,才能启动iptables(注意:虽然不停止ipchains也可以启动iptables,但这时iptables并没有真正的起作用。Ipchains和iptables是两个防火墙,你只能选择一个)。
service ipchains stop (停止ipchains)
chkconfig --level 2345 ipchains off  (使ipchains系统启动时不自动启动)
chkconfig --level 2345 iptables on   (使iptables 在系统启动时自动启动)
vi /etc/rc.d/rc.local         (编辑rc.local,将下面四行加到最后)
ifconfig eth0 add 218.4.62.18 netmask 255.255.255.248
modprobe ip_conntrack_ftp
modprobe ip_nat_ftp
echo “1” > /proc/sys/net/ipv4/ip_forward
(第一行是在eth0上再加一个IP:218.4.62.18,因在安装时只能设一个IP:218.4.62.14。Ip_conntrack_ftp 和ip_nat_ftp为iptables运得必须的两个模块;最后一行为使开启服务器IP转发功能。)
(如果你将iptables的模块加到了内核中,以上第二,三行可省略。)
配置DHCP Server,以便让公司PC自动获得IP和网关,网关为192.168.2.9。具体的方法请参见相关资料,本文不作详述。
reboot
重新启动服务器后,Iptables 就已经开始运行了。
配置IPTABLES
对iptables 有了一个基本的了解后,我们就可以来配置我们的服务器了。首先要发布我们的WEB Server,将以下二行加入/etc/sysconfig/iptables中的nat table内:
-A PREROUTING -d 218.4.62.18 -j DNAT --to-destination 192.168.20.254
-A POSTROUTING -s 192.168.2.254 -j SNAT --to-source 218.4.62.18
第一行为将至服务器的所有目地地址为218.4.62.18的包都NAT为192.168.2.254,第二行为将至服务器的所有源地址为192.168.2.254的包为NAT到218.4.62.18。请把WEB Server 的网关设为192.168.20.9。
下面我们将所有从服务器共享出去的包都SNAT为218.4.62.14,就可完成共享上网的功能了:
-A POSTROUTING -s 192.168.0.0/16 -j SNAT --to-source 218.4.62.14
   
   将下面的规则加入到/etc/sysconfig/iptables中的filter tables内:
   
-A INPUT -p icmp -m icmp --icmp-type 8 -m limit --limit 6/min --limit-burst 2 -j ACCEPT
-A INPUT -p icmp -m icmp --icmp-type 8 -j REJECT --reject-with icmp-port-unreachable
   
   以上两行是为了防止Dos攻击做的一个简单的处理,大家对于各种攻击可做出相应的处理。
-A INPUT –i eth0 –m state –state ESTABLISHED,RELATED –j ACCEPT-A INPUT –i eth0 –j DROP
   
    以上两行是做了一个INPUT状态防火墙的处理,其主要作用为防止外部的连接和攻击,因其接受ESTABLISHED,RELATED状态(一个包分为NEW,ESTABLISHED,RELATED,INVALID四种状态)的包,故又不妨碍从本机出去的连接。
   
由于并不是所有的电脑都可以上网,所以还要对共享上网的电脑做一个限制:
IP限制:
-A FORWARD –s 192.168.2.0/29 –p udp –m multiport –port 53 –j ACCEPT
-A FORWARD –s 192.168.2.0/29 –p tcp –m multiport –port 3128,110,25 –j ACCEPT
-A FORWARD –s 192.168.20.253 –j ACCEPT
充许192.168.2.0~192.168.2.7和192.168.20.253(squid server)的电脑可上网和发邮件。3128是squid server的proxy port。我们用它去共享上网,110为pop3,25为smtp。Udp的53为DNS所要的port。不过由于使用的是DHCP,可能每次得到的IP都不一样,所以我们就要用下面一种MAC限制的方法了。
MAC 限制:
-A FORWARD –m mac -–mac XX:XX:XX:XX:XX:XX –p udp –m multiport –port 53 –j ACCEPT
-A FORWARD –m mac -–mac XX:XX:XX:XX:XX:XX –p tcp –m multiport –port 3128,110,25 –j ACCEPT
如上就可通过网卡来控制上网了,但现在电脑高手多多,改一个MAC的地址好像也不是什么难事了,怎么办呢?那就用我们的第三种方法吧。
MAC+IP限制:
    更改/etc/dhcpd.conf,如果MAC与IP绑定:
subnet 192.168.2.0
  netmask 255.255.255.0{  
      range 192.168.2.30 192.168.2.230;
      option broadcast-address 192.168.2.255;
      option routers 192.168.2.9;
      option domain-name-servers 212.132.16.163;
      host meeting-room        {
          hardware ethernet 00:50:ba:c8:4b:3a;
          fixed-address 192.168.2.35;
     }}
    我们的Iptables改为:0
-A FORWARD –s 192.168.2.35 –m mac -–mac XX:XX:XX:XX:XX:XX –p udp –m multiport –port 53 –j ACCEPT
-A FORWARD –s 192.168.2.35 –m mac -–mac XX:XX:XX:XX:XX:XX –p tcp –m multiport –port 3128,110,25 –j ACCEPT
  这样做之后,高手也无能为力了,不过公司有位MM是兄台的GF,上班的时候想和她聊聊天,培养培养感情;怎么办呢?我们知道QQ用的是udp的4000端口,如占用则4002,4003。。。那么就如下了:
-A FORWARD –s 192.168.2.35 –m mac -–mac XX:XX:XX:XX:XX:XX –p udp –m multiport –port 53,4000,4001,4002,4003,4004,4005 –j ACCEPT
-A FORWARD –s 192.168.2.35 –m mac -–mac XX:XX:XX:XX:XX:XX –p tcp –m multiport –port 3128,110,25 –j ACCEPT
最后加一句:
-A FORWARD –s 192.168.0.0/16 –j DROP
  
    由于前面应该开的都开了,所以最后全部禁止

本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u/31035/showart_388837.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP