红联Linux门户
Linux帮助

iptables规则,请大家帮我看下是不是有问题.非常感谢!

发布时间:2009-03-25 14:34:42来源:红联作者:lightwing
大家好.
公司服务器刚刚换成linux的.本人之前都没接触过linux.
对IPTABLES一点都不了解.
这两天看了一些教程还是晕晕的..呵,所以从网上搜了一些规则,自己组织了一

下.
但是不知道这样子是不是有问题..
服务器上有web服务,SSH,FTP,email,mysql. 除了mysql的端口不允许外网来联

外,其他服务的端口都是开放的.还有就是要是10秒内发起超过50个新连接就限


下面是我从到处找来的并组织了一下,麻烦各位大侠们帮我看看这些规则起不起

作用.是不是有什么问题,还有哪些安全性没考虑过去的.

#声明IPTABLES变量并赋值
IPTABLES= /sbin/iptables

/sbin/depmod -a

/sbin/modprobe ip_tables
/sbin/modprobe ip_conntrack
/sbin/modprobe iptable_filter
/sbin/modprobe iptable_managle
/sbin/modprobe iptable_nat
/sbin/modprobe ipt_state
/sbin/modprobe ipt_limit

#设置默认的INPUT策略
$IPTABLES -t filter -P INPUT -p ALL -j DROP
$IPTABLES -t filter -P FORWARD -p ALL -j DROP
$IPTABLES -t filter -P OUTPUT -p ALL -j ACCEPT

$IPTABLES -N ratelimit

#关闭不安全的端口
$IPTABLES -A OUTPUT -p tcp --sport 31337:31340 -j DROP
$IPTABLES -A OUTPUT -p tcp --dport 31337:31340 -j DROP

# SSH: 22, FTP: 21, http: 80, https:443, smtp:110, pop3:25, imap: 143
$IPTABLES -t filter -A INPUT -m state --state ESTABLISHED,RELATED -j

ACCEPT
$IPTABLES -t filter -A INPUT -m state --state NEW -p tcp -m recent -

-update -- rsource --secnods 10 --hitcount 50 -j DROP
$IPTABLES -t filter -A INPUT -m state --state NEW -p tcp -m recent -

-set -- rsource -j ACCEPT
$IPTABLES -t filter -A INPUT -p tcp --syn -m multiport --dport

80,143,443,21,22,25,110 -j ratelimit

$IPTABLES -A ratelimit -p tcp -m state NEW -m recent --update --

rsource --seconds 3600 -j DROP
$IPTABLES -A ratelimit -p tcp -m state --state NEW -m hashlimit --

hashlimit 10/sec --haslimit-burst 50 --hashlimit-mode dstip --

hashlimit-name badguy -j return
文章评论

共有 4 条评论

  1. bsxdy 于 2009-08-02 23:07:49发表:

    你先拒绝所有 然后根据你自己需要在开端口和服务不就完了 不用这么麻烦吧!

  2. chenzhj 于 2009-05-13 11:12:51发表:

    关闭不必要的端口就不用了吧。你建一个默认的iptables -P tab_name drop

  3. angel.wing 于 2009-05-06 22:17:46发表:

    - - 刚看楼上的回错了 原来回这儿了啊 呵呵

  4. lovemmlzy 于 2009-05-03 17:37:22发表:

    楼主 85030455发表于 2009/4/28 09:44
    iptables 基本语法
    iptables 语法概述

    iptables -A 添加规则 (在最后一条规则后添加)
    -I 添加规则 (默认在第一条规则前添加,可输入指定的规则号)
    -D 删除规则 (可匹配条件,也可指定规则号)
    -R 替换规则 (可替换内容)
    -F 清空规则
    -P 设置默认规则 (默认允许或拒绝)
    -L 列出规则

    匹配条件:
    -i 入口
    -o 出口
    -i <匹配数据进入的网络接口>
    例如:
    -i eth0
    匹配是否从网络接口 eth0 进来

    -i ppp0
    匹配是否从网络接口 ppp0 进来

    -o 匹配数据流出的网络接口
    例如:
    -o eth0
    -o ppp0


    -s 源地址
    -d 目的地址
    -s <匹配来源地址>
    可以是 IP、NET、DOMAIN,也可空(任何地址)
    例如:
    -s 192.168.0.1 匹配来自 192.168.0.1 的数据包
    -s 192.168.1.0/24 匹配来自 192.168.1.0/24 网络的数据包
    -s 192.168.0.0/16 匹配来自 192.168.0.0/16 网络的数据包

    -d <匹配目的地址>
    可以是 IP、NET、DOMAIN,也可以空
    例如:
    -d 202.106.0.20 匹配去往 202.106.0.20 的数据包
    -d 202.106.0.0/16 匹配去往 202.106.0.0/16 网络的数据包
    -d www.abc.com 匹配去往域名 www.abc.com 的数据包


    -p 协议类型
    可以是 TCP、UDP、ICMP 等,也可为空
    例如:
    -p tcp
    -p udp
    -p icmp --icmp-type 类型
    ping: type 8 pong: type 0


    --sport 源端口
    --dport 目的端口
    --sport <匹配源端口>
    可以是个别端口,可以是端口范围
    例如:
    --sport 1000 匹配源端口是 1000 的数据包
    --sport 1000:3000 匹配源端口是 1000-3000 的数据包(含1000、3000)
    --sport :3000 匹配源端口是 3000 以下的数据包(含 3000)
    --sport 1000: 匹配源端口是 1000 以上的数据包(含 1000)

    --dport <匹配目的端口>
    可以是个别端口,可以是端口范围
    例如:
    --dport 80 匹配源端口是 80 的数据包
    --dport 6000:8000 匹配源端口是 6000-8000 的数据包(含6000、8000)
    --dport :3000 匹配源端口是 3000 以下的数据包(含 3000)
    --dport 1000: 匹配源端口是 1000 以上的数据包(含 1000)

    -m multiport --d/sport 多个端口

    注意:--sport 和 --dport 必须配合 -p 参数使用

    动作(处理方式):

    ACCEPT
    -j ACCEPT
    通过,允许数据包通过本链而不拦截它.类似 Cisco 中 ACL 里面的 permit

    例如:
    iptables -A INPUT -j ACCEPT
    允许所有访问本机 IP 的数据包通过

    DROP
    -j DROP
    丢弃,阻止数据包通过本链而丢弃它
    类似 Cisco 中 ACL 里的 deny

    例如:
    iptables -A FORWARD -s 192.168.80.39 -j DROP
    阻止来源地址为 192.168.80.39 的数据包通过本机

    SNAT
    -j SNAT --to IP[-IP][:端口-端口](nat 表的 POSTROUTING 链)
    源地址转换,SNAT 支持转换为单 IP,也支持转换到 IP 地址池
    (一组连续的 IP 地址)
    例如:
    iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -j SNAT --to 1.1.1.1
    将内网 192.168.0.0/24 的原地址修改为 1.1.1.1,用于 NAT

    iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -j SNAT --to 1.1.1.1-1.1.1.10


    DNAT
    -j DNAT --to IP[-IP][:端口-端口](nat 表的 PREROUTING 链)
    目的地址转换,DNAT 支持转换为单 IP,也支持转换到 IP 地址池
    (一组连续的 IP 地址)
    例如:
    iptables -t nat -A PREROUTING -i ppp0 -p tcp --dport 80 -j DNAT --to 192.168.0.1
    把从 ppp0 进来的要访问 TCP/80 的数据包目的地址改为 192.168.0.1

    iptables -t nat -A PREROUTING -i ppp0 -p tcp --dport 81 -j DNAT --to 192.168.0.2:80
    iptables -t nat -A PREROUTING -i ppp0 -p tcp --dport 80 -j DNAT --to 192.168.0.1-192.168.0.10


    MASQUERADE
    -j MASQUERADE
    动态源地址转换(动态 IP 的情况下使用)

    例如:
    iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -j MASQUERADE
    将源地址是 192.168.0.0/24 的数据包进行地址伪装


    -m :一些 iptables 的模块,主要常?的有:
    state :状态

    --state :数据包的状态,主要有:
    INVALID :无效的数据包,例如?料损坏的数据包
    ESTABLISHED:已经连接的数据包;
    RELATED :与本机发送的数据包相关的连接

    举例:只要已建立或相关的数据包包就予以通过,只要是不合法封包就丢弃
    iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
    iptables -A INPUT -m state --state INVALID -j DROP