Chinaunix首页 | 论坛 | 博客
  • 博客访问: 5762035
  • 博文数量: 675
  • 博客积分: 20301
  • 博客等级: 上将
  • 技术积分: 7671
  • 用 户 组: 普通用户
  • 注册时间: 2005-12-31 16:15
文章分类

全部博文(675)

文章存档

2012年(1)

2011年(20)

2010年(14)

2009年(63)

2008年(118)

2007年(141)

2006年(318)

分类: LINUX

2009-10-25 14:42:30

由于项目实验需求,需要只能针对国内主机提供服务,这就需要有一份国内IP地址的列表。

首先需要得到国内的IP列表,我们通过apnic查到国内的IP列表。


可以写一个简单的脚本:
# wget -q -O - | grep cn | awk '{print $5}' > cn.txt
这样cn.txt中就是所有的国内网段。

然后写了一个fw.sh的脚本,里面INPUT的默认处理策略是DROP,然后允许局域网地址和部分公网地址的访问,允许远程管理网段的22端口访问,然后就是ACCEPT国内的IP列表。

#!/bin/sh

IPT=/sbin/iptables
LOCAL_RANGE=192.168.1.0/24
INET_RANGE=1.2.3.0/24
REMOTE_ADMIN_RANGE=4.3.2.0/24

#Clean The Old Tables
for TABLE in filter nat mangle ; do
    $IPT -t $TABLE -F
        $IPT -t $TABLE -X
done

$IPT -P INPUT DROP
$IPT -P OUTPUT ACCEPT
$IPT -A INPUT -s $LOCAL_RANGE -j ACCEPT
$IPT -A INPUT -s $INET_RANGE -j ACCEPT
$IPT -A INPUT -p tcp -s $REMOTE_ADMIN_RANGE --dport 22 -j ACCEPT
$IPT -A INPUT -p tcp --dport 22 -j DROP


#Enable TCP SYN Cookie Protection
echo 1 > /proc/sys/net/ipv4/tcp_syncookies

########################################################
#Stealth Scans and TCP State Flags

#All of the bits are cleared
$IPT -A INPUT -p tcp --tcp-flags ALL NONE -j DROP

#SYN and FIN are both set
$IPT -A INPUT -p tcp --tcp-flags SYN,FIN SYN,FIN -j DROP

#SYN and RST are both set
$IPT -A INPUT -p tcp --tcp-flags SYN,RST SYN,RST -j DROP

#FIN and RST are both set
$IPT -A INPUT -p tcp --tcp-flags FIN,RST FIN,RST -j DROP

#FIN is the only bit set,without the expected accompanying ACK
$IPT -A INPUT -p tcp --tcp-flags ACK,FIN FIN -j DROP

#PSH is the only bit set,without the expected accompanying ACK
$IPT -A INPUT -p tcp --tcp-flags ACK,PSH PSH -j DROP

#URG is the only bit set,without the expected accompanying ACK
$IPT -A INPUT -p tcp --tcp-flags ACK,URG URG -j DROP

#############################################################
# ICMP Control and Status Message

$IPT -A INPUT --fragment -p icmp -j DROP
$IPT -A OUTPUT --fragment -p icmp -j DROP

###########################################################
#Using Connection State to by-pass Rule Checking

$IPT -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
$IPT -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

$IPT -A INPUT -m state --state INVALID -j DROP
$IPT -A OUTPUT -m state --state INVALID -j DROP

###########################################################
#China NetRange
# wget -c
# grep cn country-ipv4.lst | awk '{print $5}' > cn.txt
while read iprange
do
    $IPT -A INPUT -s $iprange -j ACCEPT
done < cn.txt


2010-03-12:
最近在看翻墙工具“西厢计划”的时候,发现了ipset和xtables-addones这两个好东西,其实进行国家网段限制,xtables-addones之前有一个geoip的模块做这个事情,也可以使用Ipset将国内的网段做成一个set,这样规则数就大大的减少了;-)
ipset的思想比较简单,就是将相同target规则的match条件放到一个set中,一般采用hash方法,这样查询就是O(1)的了,一个报文查询规则的时候,只需要判断IP地址是否在这个set中就可以了,如果满足对应的match条件,就执行相应的target。
由于将查找从list遍历改为了hash查找,时间复杂度从O(n)降到了O(1),系统跑起来就流畅多了;-)

#!/bin/sh

ipset -N CHINA nethash --hashsize 20000 --probes 2
###########################################################
#China NetRange
# wget -c
# grep cn country-ipv4.lst | awk '{print $5}' > cn.txt
while read iprange
do
    ipset -A CHINA $iprange
done < cn.txt

iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -A INPUT -m set --match-set CHINA src -j ACCEPT
iptables -A OUTPUT -m set --match-set CHINA dst -j ACCEPT

不过很杯具的是,实验平台上的机器上装的RHEL都太老了,需要升级才能够使用ipset和xtables;-(
阅读(6799) | 评论(0) | 转发(0) |
0

上一篇:也谈C语言变长参数

下一篇:试用pypcap

给主人留下些什么吧!~~