论坛风格切换切换到宽版
  • 1131阅读
  • 9回复

[问题求助]请教iptables如何只让给定的ip和mac上网? [复制链接]

上一主题 下一主题
离线绯闻.
 
发帖
2135
C币
-604579
威望
374
贡献值
1
银元
-2
铜钱
4727
人人网人气币
0
只看楼主 倒序阅读 使用道具 楼主  发表于: 2009-05-01
现在我有一台redhat 9.0,两块网卡,eth0和ppp0,其中ppp0是adsl拨号,现在我已经通过iptables使局域网所有机器都能上网,但.是有很多非法的用户也能通过设置网关的方法来上网.,现在有这样的需求,只有指定的10个ip(与mac绑定)可以上网,其余都不让上网.,但是可以访问服务器,应当如何写这个脚本?我是这样写的,但是好像不行:.虚拟主机
iptables -P FORWA.RD DROP.
iptables -A FORWARD -s 192.168.0.2 -m -mac --mac-source xxxhttp://upload.bbs.csuboy.com/Mon_1004/126_6968_df017f5679398c9.gif[/img]xhttp://upload.bbs.csuboy.com/Mon_1004/126_6968_df017f5679398c9.gif[/img]xhttp://upload.bbs.csuboy.com/Mon_1004/126_6968_df017f5679398c9.gif[/img]xhttp://upload.bbs.csuboy.com/Mon_1004/126_6968_df017f5679398c9.gif[/img]x -j ACCEPThttp://upload.bbs.csuboy.com/Mon_1004/126_6968_df017f5679398c9.gif[/img]          婚庆
iptables -A FORWARD -s 192.168.0.3 -m -mac --mac-source xxxhttp://upload.bbs.csuboy.com/Mon_1004/126_6968_df017f5679398c9.gif[/img]xhttp://upload.bbs.csuboy.com/Mon_1004/126_6968_df017f5679398c9.gif[/img]xhttp://upload.bbs.csuboy.com/Mon_1004/126_6968_df017f5679398c9.gif[/img]xhttp://upload.bbs.csuboy.com/Mon_1004/126_6968_df017f5679398c9.gif[/img]x -j ACCEPThttp://upload.bbs.csuboy.com/Mon_1004/126_6968_df017f5679398c9.gif[/img][成人用品]
……
请问高手应当如何使用呢?

评价一下你浏览此帖子的感受

精彩

感动

搞笑

开心

愤怒

无聊

灌水
离线zcl8840.
发帖
1904
C币
-193754
威望
357
贡献值
1
银元
-2
铜钱
4354
人人网人气币
0
只看该作者 沙发  发表于: 2010-04-13
iptables -A INPUT -m mac  --mac  xxxxxxx -j ACCEPT

就可以

离线loveshu1216.
发帖
2038
C币
-60922
威望
346
贡献值
1
银元
-2
铜钱
4442
人人网人气币
0
只看该作者 板凳  发表于: 2010-04-13
你的包回来以后怎么办?
回来以后就变成
iptables -A FORWARD -d 192.168.0.2 -mac --mac-source ............

首先绑定ip和mac地址,其次直接过滤ip就可以,或者干脆直接过滤mac地址

在有些系统中有这样的需求,希望内部网中的某几个IP地址连接互联网,而又希望这些IP地址不被非法用户盗用。可以通过下面的解决办法实现:

    首先使用ipchains或者iptables来设定只允许合法的IP地址连出。

    对于合法IP建立IP/Mac捆绑。要讨论这个问题我们首先需要了解ARP协议的工作原理,arp协议是地址解析协议(Address Resolution Protocol)的缩写,其作用及工作原理如下:

    在底层的网络通信中,两个节点想要相互通信,必须先要知道源与目标的MAC地址。为了让系统能快速地找到一个远程节点的MAC地址,每一个本地的内核都保存有一个即时的查询表(称为ARP缓存)。ARP中有影射远程主机的IP地址到其对应的MAC地址的一个列表。地址解析协议(ARP)缓存是一个常驻内存的数据结构,其中的内容是由本地系统的内核来管理和维护的。默认的情况下,ARP缓存中保留有最近十分钟本地系统与之通信的节点的IP地址(和对应的MAC地址)。

    当一个远程主机的MAC地址存在于本地主机的ARP 缓存中,转换远程节点的IP地址为MAC地址不会遇到问题。然而在许多情况下,远程主机的MAC地址并不存在于本地的ARP缓存中,系统会怎么处理呢?在知道一个远程主机的IP地址,但是MAC地址不在本地的ARP缓存中的时候,以下的过程用来获取远程节点的MAC地址:本地主机发送一个广播包给网络中的所有的节点,询问是否有对应的IP地址。一个节点(只有一个)会回答这个ARP广播信息。在回应的信息包里就会包含有这个远程主机的MAC地址。在收到这个返回包后,本地节点就会在本地ARP缓存中记录远程节点的MAC地址。

    如果我们将IP/MAC对应关系建立为固定的,也就是对那些合法IP地址建立静态的MAC对应关系,那么即使非法用户盗用了IP地址linux路由器在回应这些IP发出的连接请求时则不会通过arp协议询问其mac地址而是使用Linux建立的静态MAC地址、发出应答数据这样盗用IP者则不会得到应答数据从而不能使用网络服务。

    建立静态IP/MAC捆绑的方法是:建立/etc/ethers文件,其中包含正确的IP/MAC对应关系,格式如下:

192.168.2.32 08:00:4E:B0:24:47

    然后再/etc/rc.d/rc.local最后添加:arp -f即可

    2.4内核的iptables可以对IP和Mac同时进行限定,使用该功能对合法IP的规则同时限定IP地址和Mac地址即可。

发帖
2155
C币
-60173
威望
418
贡献值
1
银元
0
铜钱
4869
人人网人气币
0
只看该作者 地板  发表于: 2010-04-13
我用的就是眼皮猪的方法,只是为了提高处理效能,在FORWARD链的第一句放行了所有已经建立的连接,只有新发起的请求才进行IP检测,通过统计数据可以看出只有很少的数据包穿过CHKIP链;同样为了提高效能,采用了分层的处理结构,也就是说单独定义了CHKIP链,只在需要的时候才查询IP。

#! /bin/bash



/sbin/modprobe ip_conntrack_ftp

/sbin/modprobe ip_nat_ftp

/sbin/iptables -P INPUT DROP

/sbin/iptables -P OUTPUT ACCEPT

/sbin/iptables -P FORWARD DROP

/sbin/iptables -N RATELIMIT

/sbin/iptables -N CHKIP



# allow the third handshake

/sbin/iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT



# NAT

/sbin/iptables -t nat -A POSTROUTING -s 172.16.0.0/16 -o ppp0 -j MASQUERADE



# Redirect to CHKIP

/sbin/iptables -A FORWARD -s 172.16.1.0/24 -i eth1 -o ppp0 -j CHKIP

/sbin/iptables -A FORWARD -p icmp -j ACCEPT



# CHKIP to allow autherised IP

/sbin/iptables -A CHKIP -s 172.16.1.106/32 -j ACCEPT

/sbin/iptables -A CHKIP -s 172.16.1.10/32 -j ACCEPT

/sbin/iptables -A CHKIP -s 172.16.1.188/32 -j ACCEPT

/sbin/iptables -A CHKIP -s 172.16.1.119/32 -j ACCEPT

/sbin/iptables -A CHKIP -s 172.16.1.88/32 -j ACCEPT

/sbin/iptables -A CHKIP -s 172.16.1.208/32 -j ACCEPT

/sbin/iptables -A CHKIP -s 172.16.1.232/32 -j ACCEPT

/sbin/iptables -A CHKIP -s 172.16.1.64/32 -j ACCEPT

/sbin/iptables -A CHKIP -j DROP



# Prevent Deny of Sevice attack.

# Syn-flood protection:

iptables -A RATELIMIT -p tcp --syn -m limit --limit 1/s -j ACCEPT

# Furtive port scanner:

iptables -A RATELIMIT -p tcp --tcp-flags SYN,ACK,FIN,RST RST -m limit --limit 1/s -j ACCEPT

# Ping of death:

iptables -A RATELIMIT -p icmp --icmp-type echo-request -m limit --limit 1/s -j ACCEPT



# enable packet forwarding

echo 1 >; /proc/sys/net/ipv4/ip_forward
复制代码

统计信息

Chain FORWARD (policy DROP 56 packets, 22225 bytes)

pkts bytes target     prot opt in     out     source               destination

7627K 3517M ACCEPT     all  --  *      *       0.0.0.0/0            0.0.0.0/0          state RELATED,ESTABLISHED

140K   11M CHKIP      all  --  eth1   *       172.16.1.0/24        0.0.0.0/0



Chain CHKIP (2 references)

pkts bytes target     prot opt in     out     source               destination

   42  2057 ACCEPT     all  --  *      *       172.16.1.106         0.0.0.0/0

    0     0 ACCEPT     all  --  *      *       172.16.1.10          0.0.0.0/0

    0     0 ACCEPT     all  --  *      *       172.16.1.188         0.0.0.0/0

59141 5951K ACCEPT     all  --  *      *       172.16.1.119         0.0.0.0/0

15670  876K ACCEPT     all  --  *      *       172.16.1.88          0.0.0.0/0

    0     0 ACCEPT     all  --  *      *       172.16.1.208         0.0.0.0/0

    0     0 ACCEPT     all  --  *      *       172.16.1.232         0.0.0.0/0

  338 22881 ACCEPT     all  --  *      *       172.16.1.64          0.0.0.0/0

83700 6693K DROP       all  --  *      *       0.0.0.0/0            0.0.0.0/0
复制代码

离线sfcq.
发帖
1976
C币
-199261
威望
356
贡献值
1
银元
-2
铜钱
4517
人人网人气币
0
只看该作者 4楼 发表于: 2010-04-13
lyking:

       你先像双眼皮的猪那样绑定了ip和mac么?绑定了以后是不是只用ip或者只用mac就能限制?不需要二者同时限制?

离线joo.
发帖
1980
C币
-235833
威望
395
贡献值
1
银元
-1
铜钱
4431
人人网人气币
0
只看该作者 5楼 发表于: 2010-04-13
限制一个就可以了...
不过如果你不绑定的话,可以只需要用mac限制就可以了...
arp表在
/proc/net/arp里边可以看的到,如果没有你想要的ip的话
ping一下它就有啦...

离线qwer20.
发帖
2210
C币
-60177
威望
375
贡献值
1
银元
-3
铜钱
4907
人人网人气币
0
只看该作者 6楼 发表于: 2010-04-13
iptables -P FORWARD DROP
iptables -A FORWARD -s 192.168.0.169 -j ACCEPT

发现不行啊!

离线dummy111.
发帖
1989
C币
-605070
威望
359
贡献值
4
银元
0
铜钱
4426
人人网人气币
0
只看该作者 7楼 发表于: 2010-04-13
我是先将IP和MAC绑定,再限制IP的。也可已直接限制IP,将完整的防火墙配置贴上来看看。

离线zhao123.
发帖
2061
C币
-152305
威望
408
贡献值
1
银元
-2
铜钱
4662
人人网人气币
0
只看该作者 8楼 发表于: 2010-04-13
服务器两块网卡eth0局域网,ppp0拨号ADSL,比如现在需要让192.168.0.169等10个ip可以无限制上网并无限制访问服务器(示例只给一个),其余ip可以无限制访问服务器,我是这么做的
1.生成/etc/ethers,内容如下
192.168.0.169 00:02:E3:50:C4:01
2./etc/rc.d/rc.local最后一行加上
arp -f
3.编写脚本/etc/rc.d/init.d/iptables,内容如下:
#!/bin/sh
#
# chkconfig: 2345 08 92
# description: Starts and stops iptables

OPT_=$1

start(){
  /bin/echo "$0 : (start)"
  /bin/echo 1 >; /proc/sys/net/ipv4/ip_forward
  /sbin/iptables -F
  /sbin/iptables -P FORWARD DROP
  /sbin/iptables -A FORWARD -s 192.168.0.169 -j ACCEPT
  /sbin/iptables -t nat -F
  /sbin/iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE
}

stop(){
  /bin/echo "$0 : (stop)"
  /sbin/iptables -t nat -F
  /sbin/iptables -F
  /bin/echo 0 >; /proc/sys/net/ipv4/ip_forward
}

case "$OPT_" in
  start)
    start
    ;;
  stop)
    stop
    ;;
  *)
    /bin/echo ''
    /bin/echo "Usage: $0 [start|stop]"
    /bin/echo "       Invalid argument ==>; \"${OPT_}\""
    /bin/echo ''
    ;;
esac
exit 0

但是发现谁都不能上网了,包括这个192.168.0.169,但都能访问服务器,去掉红色的两行后,都能访问internet了,很奇怪

离线ljhddzyj.
发帖
2034
C币
-193449
威望
384
贡献值
1
银元
-1
铜钱
4502
人人网人气币
0
只看该作者 9楼 发表于: 2010-04-13
第一行:FORWARD链默认全部DROP
第二行:只允许源地址为192.168.0.169的出去

既然默认都 drop啦,那么192.168.0.169的包的确是可以出去,但是返回的server响应的包怎么办?也通不过呀....


访问服务器只跟INPUT链和OUTPUT链有关系,跟forward没关系...
快速回复
限100 字节
如果您在写长篇帖子又不马上发表,建议存为草稿
 
上一个 下一个