您的位置:首页 > 运维架构 > 网站架构

如何对某些门户网站进行过滤?

2010-03-06 21:33 459 查看
**********************************************************************************
(一)基于状态检测的iptables
下面以vsftpd,htttpd两个服务来做验证.
假设有三台虚拟机,一台作为当地主机Locate(192.168.10.2,网关指向192.168.100.1),一台作为远程机Remote(192.168.100.2,网关指向192.168.10.1),另一台作为Firewall(两块网卡,内网网卡:192.168.10.1,外网网卡:192.168.100.1)将Firewall开启路由功能,此时将配置好实验环境,全网段均能ping通。
【注意:开启路由,需编辑/etc/sysctl.conf文件使net.ipv4.ip_forward = 1,可以用sysctl –p使其立即生效,再使用命令cat /proc/sys/net/ipv4/ip_forward查看其值是否为1,若为1则已开启】
***************************************************
Httpd:
1. 安装http服务并开启之。
yum install httpd
service httpd start
chkconfig httpd on(将其加入开机自启队列中,以后开机就能自动启动)
Locate:vim /etc/www/html/index.html(编辑web的默认网页,当别人访问时,会出现网页中的内容)
【假设网页的内容为:Welcome,this is 192.168.10.2】
elinks 192.168.10.2(访问本机的Web网页) 此时,将会出现Welcome,this is 192.168.10.2。
Remote:elinks 192.168.10.2,同样会出现内容为:Welcome,this is 192.168.10.2的网页。
2. 好了,上面测试成功,说明我们的实验环境已搭建成功web服务也已经开启,下面让我们演示基于状态检测的服务。
1.)iptables -P FORWARD DROP
此时Remote和Locate间将不能通信,ping和web服务等所有其他服务均不支持。
2.)为了能让Remote和Locate间进行通信,我们需要在Firewall上设置规则:
iptables -A FORWARD -p icmp --icmp-type 8 -j ACCEPT
iptables -A FORWARD -p icmp --icmp-type 0 -j ACCEPT
此时Remote和Locate间将能互相ping通,但web服务仍然不能使用。
3.)为了能让Remote能访问Locate上的网页,则需添加规则:
iptables -A FORWARD -s 192.168.100.0/24 -d 192.168.10.0/24 -p tcp --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT(进来的规则)
iptables -A FORWARD -d 192.168.100.0/24 -s 192.168.10.0/24 -p tcp --sport 80 -m state --state ESTABLISHED -j ACCEPT(出去的规则)
在Remote上执行:elinks 192.168.100.2(即访问Locate的web服务,此时将能进行web访问)Remote上会出现Welcome,this is 192.168.10.2内容的网页。【但此时,Locate却不能访问Remote上的网页,原因很简单,我们没有添加规则,因为我们将默认都改为拒绝】

查看添加的规则:
[root@station30 ~]# iptables -L -n
Chain INPUT (policy ACCEPT)
target prot opt source destination

Chain FORWARD (policy DROP)
target prot opt source destination
ACCEPT icmp -- 0.0.0.0/0 0.0.0.0/0 icmp type 8
ACCEPT icmp -- 0.0.0.0/0 0.0.0.0/0 icmp type 0
ACCEPT tcp -- 192.168.100.0/24 192.168.10.0/24 tcp dpt:80 state NEW,ESTABLISHED
ACCEPT tcp -- 192.168.10.0/24 192.168.100.0/24 tcp spt:80 state ESTABLISHED

Chain OUTPUT (policy ACCEPT)
target prot opt source destination
[root@station30 ~]#
***************************************************++++++++++++++++++++++++++++++++++++++++++++++
好了,到此,这个实验测试已经完毕。下面让我们将还用上面搭建的实验环境还进行下一个实验,即vsftpd。
1. 安装并启动vsftpd:
yum install vsftpd
service vsftpd start(开启vsftpd服务)
chkconfig vsftpd on(将其加入开机启动行列,以后每次开机都能自动开启)
2.)因为上个实验中我们已经将FORWARD的默认规则改为拒绝,即:iptables -P FORWARD DROP,所以当在Remote上执行lftp 192.168.10.2时,将会显示无法连接,无法使用ftp服务。
3.)此时,我们需要添加规则:
iptables -A FORWARD -s 192.168.100.0/24 -d 192.168.10.0/24 -p tcp --dport 21 -m state --state NEW,ESTABLISHED -j ACCEPT(控制连接中进去的规则)
iptables -A FORWARD -d 192.168.100.0/24 -s 192.168.10.0/24 -p tcp --sport 21 -m state --state ESTABLISHED -j ACCEPT(控制连接中出去的规则)
iptables -A FORWARD -m state --state ESTABLISHED, RELATED -j ACCEPT(数据连接中所有的规则)
此时可以查看我们配置的规则:
[root@station30 ~]# iptables -L -n --line-numbers
Chain INPUT (policy ACCEPT)
num target prot opt source destination

Chain FORWARD (policy DROP)
num target prot opt source destination
1 ACCEPT icmp -- 0.0.0.0/0 0.0.0.0/0 icmp type 8
2 ACCEPT icmp -- 0.0.0.0/0 0.0.0.0/0 icmp type 0
ALGO name bm TO 65535
3 ACCEPT tcp -- 192.168.100.0/24 192.168.10.0/24 tcp dpt:80 state NEW,ESTABLISHED
4 ACCEPT tcp -- 192.168.10.0/24 192.168.100.0/24 tcp dpt:80 state ESTABLISHED
5 ACCEPT tcp -- 192.168.100.0/24 192.168.10.0/24 tcp dpt:21 state NEW,ESTABLISHED
6 ACCEPT tcp -- 192.168.10.0/24 192.168.100.0/24 tcp spt:21 state ESTABLISHED
8 ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED

Chain OUTPUT (policy ACCEPT)
num target prot opt source destination
[root@station30 ~]#
Remote:lftp 192.168.10.2(此时我们应该登上ftp服务,若登录失败,我们应该检查模块是否加载,若没加载,则应考虑加载ftp模块,命令如下:modprobe ip_conntrack_ftp
再次连接,应该能显示目录.
此时实验结束,但应注意的是ftp服务,要先通过三字握手进行连接(控制连接,用21号端口),然后进行数据传输时,要用到多个端口。我们只需匹配一条规则即可:iptables -A FORWARD -m state --state ESTABLISHED, RELATED -j ACCEPT
************************************************************
NEW: SYN=1, FIN ACK RST=0
ESTABLISHED: ACK=1
RELATED: FTP中会用到
INVALID
(二)基于STRING的匹配

下面我们可以通过关键字匹配来拒绝访问某个网站,这里我们还以上面的httpd和vsftpd实验来验证。
1.我们在Locate上再编写一个网页,假设为index2.html
vim /var/www/html/index2.html
+++++++++++++++++++++++++++++++++++++++
Hello,Welcome to here !

There is a string "sex"...

++++++++++++++++++++++++++++++++++++++
在Remote上进行测试:elinks 192.168.10.2,此时会出现一个网页,网页的内容为:

+++++++++++++++++++++++++++++++++++++++Hello,Welcome to here !There is a string "sex"...++++++++++++++++++++++++++++++++++++++
说明访问web网页没有问题,那么对于色情网站我们如何拒绝呢?(可以通过设置关键字来拒绝访问的网站)下面我们将通过关键字匹配来拒绝访问某些网站……
1.)基于上面的httpd实验,我们可以先查看配置的规则:然后再添加规则来拒绝访问某些网站。
查看配置的规则:
[root@station30 ~]# iptables -L -n --line-numbers
Chain INPUT (policy ACCEPT)
num target prot opt source destination

Chain FORWARD (policy DROP)
num target prot opt source destination
1 ACCEPT icmp -- 0.0.0.0/0 0.0.0.0/0 icmp type 8
2 ACCEPT icmp -- 0.0.0.0/0 0.0.0.0/0 icmp type 0
ALGO name bm TO 65535
3 ACCEPT tcp -- 192.168.100.0/24 192.168.10.0/24 tcp dpt:80 state NEW,ESTABLISHED
4 ACCEPT tcp -- 192.168.10.0/24 192.168.100.0/24 tcp dpt:80 state ESTABLISHED
5 ACCEPT tcp -- 192.168.100.0/24 192.168.10.0/24 tcp dpt:21 state NEW,ESTABLISHED
6 ACCEPT tcp -- 192.168.10.0/24 192.168.100.0/24 tcp spt:21 state ESTABLISHED
8 ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED

Chain OUTPUT (policy ACCEPT)
num target prot opt source destination
[root@station30 ~]#
2.)通过在Firewall上添加新规则:
iptables -I FORWARD 3 -m string --string "sex" --algo bm -j DROP(只要有关键字“sex”,将都被拒绝访问)
【--alog 指定字符串匹配算法,bm或kmp】
Remote:elinks 192.168.10.2/index2.html
[root@station30 ~]# iptables -L -n --line-numbers
Chain INPUT (policy ACCEPT)
num target prot opt source destination

Chain FORWARD (policy DROP)
num target prot opt source destination
1 ACCEPT icmp -- 0.0.0.0/0 0.0.0.0/0 icmp type 8
2 ACCEPT icmp -- 0.0.0.0/0 0.0.0.0/0 icmp type 0
3 DROP all -- 0.0.0.0/0 0.0.0.0/0 STRING match "sex" ALGO name bm TO 65535
4 ACCEPT tcp -- 192.168.100.0/24 192.168.10.0/24 tcp dpt:80 state NEW,ESTABLISHED
5 ACCEPT tcp -- 192.168.10.0/24 192.168.100.0/24 tcp dpt:80 state ESTABLISHED
6 ACCEPT tcp -- 192.168.100.0/24 192.168.10.0/24 tcp dpt:21 state NEW,ESTABLISHED
7 ACCEPT tcp -- 192.168.10.0/24 192.168.100.0/24 tcp spt:21 state ESTABLISHED
8 ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED

Chain OUTPUT (policy ACCEPT)
num target prot opt source destination
此时,页面显示Request sent,一直无法访问,此时已被拒绝。
2. 通过vsftpd来测试,还是基于上面的环境
1.)查看配置的规则:
[root@station30 ~]# iptables -L -n --line-numbers
Chain INPUT (policy ACCEPT)
num target prot opt source destination

Chain FORWARD (policy DROP)
num target prot opt source destination
1 ACCEPT icmp -- 0.0.0.0/0 0.0.0.0/0 icmp type 8
2 ACCEPT icmp -- 0.0.0.0/0 0.0.0.0/0 icmp type 0
3 DROP all -- 0.0.0.0/0 0.0.0.0/0 STRING match "sex" ALGO name bm TO 65535
4 ACCEPT tcp -- 192.168.100.0/24 192.168.10.0/24 tcp dpt:80 state NEW,ESTABLISHED
5 ACCEPT tcp -- 192.168.10.0/24 192.168.100.0/24 tcp dpt:80 state ESTABLISHED
6 ACCEPT tcp -- 192.168.100.0/24 192.168.10.0/24 tcp dpt:21 state NEW,ESTABLISHED
7 ACCEPT tcp -- 192.168.10.0/24 192.168.100.0/24 tcp spt:21 state ESTABLISHED
8 ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED

Chain OUTPUT (policy ACCEPT)
num target prot opt source destination
先将上面实验中添加的拒绝信息删除(目的是为了对比添加规则前后的情况)
删除第三条规则:iptables -D FORWARD 3
[root@station30 ~]# iptables -L -n --line-numbers
Chain INPUT (policy ACCEPT)
num target prot opt source destination

Chain FORWARD (policy DROP)
num target prot opt source destination
1 ACCEPT icmp -- 0.0.0.0/0 0.0.0.0/0 icmp type 8
2 ACCEPT icmp -- 0.0.0.0/0 0.0.0.0/0 icmp type 0
3 ACCEPT tcp -- 192.168.100.0/24 192.168.10.0/24 tcp dpt:80 state NEW,ESTABLISHED
4 ACCEPT tcp -- 192.168.10.0/24 192.168.100.0/24 tcp dpt:80 state ESTABLISHED
5 ACCEPT tcp -- 192.168.100.0/24 192.168.10.0/24 tcp dpt:21 state NEW,ESTABLISHED
6 ACCEPT tcp -- 192.168.10.0/24 192.168.100.0/24 tcp spt:21 state ESTABLISHED
7 ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED

Chain OUTPUT (policy ACCEPT)
num target prot opt source destination
[root@station30 ~]#
Locate:cd /var/ftp/pub/
vim string-test
内容:+++++++++++++++++++++++++
Hello,Welcome..........
Here is 192.168.10.2
There is a string "sex".
+++++++++++++++++++++++++
Remote:lftp 192.168.10.2
[natasha@station30 ~]$ lftp 192.168.10.2
lftp 192.168.10.2:~> ls
drwxr-xr-x 2 0 0 4096 Feb 27 17:12 pub
lftp 192.168.10.2:/> cd
cd ok, cwd=/
lftp 192.168.10.2:/> cd p
cd: Access failed: 550 Failed to change directory. (/p)
lftp 192.168.10.2:/>
lftp 192.168.10.2:/>
lftp 192.168.10.2:/> by
[natasha@station30 ~]$
[natasha@station30 ~]$ lftp 192.168.10.2
lftp 192.168.10.2:~> ls
drwxr-xr-x 2 0 0 4096 Feb 27 17:12 pub
lftp 192.168.10.2:/> cd pub/
lftp 192.168.10.2:/pub> ls
-rw-r--r-- 1 0 0 74 Feb 23 07:45 issue
-rw-r--r-- 1 0 0 73 Feb 23 07:45 issue.net
-rw-r--r-- 1 0 0 96 Feb 27 16:46 string-test
lftp 192.168.10.2:/pub>
lftp 192.168.10.2:/pub> get string-test
96 bytes transferred
lftp 192.168.10.2:/pub>
可以下载文件string-test
2.)添加拒绝规则:
iptables -I FORWARD 5 -m string --string "sex" --algo kmp -j DROP
查看规则:
[root@station30 ~]# iptables -L -n --line-numbers
Chain INPUT (policy ACCEPT)
num target prot opt source destination

Chain FORWARD (policy DROP)
num target prot opt source destination
1 ACCEPT icmp -- 0.0.0.0/0 0.0.0.0/0 icmp type 8
2 ACCEPT icmp -- 0.0.0.0/0 0.0.0.0/0 icmp type 0
3 ACCEPT tcp -- 192.168.100.0/24 192.168.10.0/24 tcp dpt:80 state NEW,ESTABLISHED
4 ACCEPT tcp -- 192.168.10.0/24 192.168.100.0/24 tcp dpt:80 state ESTABLISHED
5 DROP all -- 0.0.0.0/0 0.0.0.0/0 STRING match "sex" ALGO name kmp TO 65535
6 ACCEPT tcp -- 192.168.100.0/24 192.168.10.0/24 tcp dpt:21 state NEW,ESTABLISHED
7 ACCEPT tcp -- 192.168.10.0/24 192.168.100.0/24 tcp spt:21 state ESTABLISHED
8 ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED

Chain OUTPUT (policy ACCEPT)
num target prot opt source destination
[root@station30 ~]#
此时,在Remote上:
[root@station30 ~]# lftp 192.168.10.2
lftp 192.168.10.2:~> ls
drwxr-xr-x 2 0 0 4096 Feb 27 17:12 pub
lftp 192.168.10.2:/> cd pub/
lftp 192.168.10.2:/pub> ls
-rw-r--r-- 1 0 0 74 Feb 23 07:45 issue
-rw-r--r-- 1 0 0 73 Feb 23 07:45 issue.net
-rw-r--r-- 1 0 0 96 Feb 27 16:46 string-test
lftp 192.168.10.2:/pub> get string-test
`string-test` at 0 (0%) [Receiving data]
下载被拒绝
若将string-test该名为sex.txt,则再次尝试,将无法列举文件:
Locate:cd /var/ftp/pub/
mv string-tes sex.txt
Remote:[root@station30 ~]# lftp 192.168.10.2
lftp 192.168.10.2:~> cd pub/
lftp 192.168.10.2:/pub> ls
` ls ` at 0 [Receiving data]
此时,将无法列举文件

******************************************************
(三) Connlimit(连接限制)
******************************************************
Eg:iptables –A INPUT -p tcp –syn syn=1,fin ack rst=0 --dport 22 -m connlimit --connlimit-above 2 -j REJECT(每个客户机最多允许两个ssh连接)
(四)基于时间的访问
******************************************************
iptables -I FORWARD 5 -m time --timestart 1:00 --timestop 2:00 -j DROP(处于一点和两点之间的服务均不能访问)
******************************************************
(五)基于多端口的访问
假设本地主机(IP:192.168.0.112)为服务器,并且对外只开放ssh,smtp,以及http服务,那么规则应为:
iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables –A INPUT –d 192.168.0.112 –p tcp –m multiport –destination-ports 22,25,80 NEW,ESTABLISHED –j ACCEPT
iptables –A OUTPUT –s 192.168.0.112 –p tcp –m multiport --source-ports 22,25,80 –m state –state ESTABLISHED –j ACCEPT
假设端口为连续的可用:隔开,例如:20到21号端口,
(20:21)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: