大家好.
公司服务器刚刚换成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
bsxdy 于 2009-08-02 23:07:49发表:
你先拒绝所有 然后根据你自己需要在开端口和服务不就完了 不用这么麻烦吧!
chenzhj 于 2009-05-13 11:12:51发表:
关闭不必要的端口就不用了吧。你建一个默认的iptables -P tab_name drop
angel.wing 于 2009-05-06 22:17:46发表:
- - 刚看楼上的回错了 原来回这儿了啊 呵呵
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