存档

文章标签 ‘iptables’

透明DNS解译设定限制网络访问(Linux+iptables+bind)

2009年7月2日 1 条评论

实现目的
1.linux网关用iptables配置DNS拦截,记录全部机器的DNS请求(什么时候上了什么网站)
2.利用DNS欺骗禁止用户防问部分网站 将需禁止的网站域名指向一个错误的IP地址

方法
1.将所有进入网关的DNS请求,都转向本机的53端口,这样,既使内网PC使了其它的DNS服务器,最终也是由网关解析。
一条iptables的指令即可
iptables -t nat -A PREROUTING -p udp –dport 53 -j REDIRECT –to-port 53

2.DNS设置
bind的设置文件named.conf,设定将请示转发到ISP的DNS,比如说深圳电信的DNS服务器202.96.128.68; 202.96.134.133
设定要禁止用户防问网站test.com
设定查询记录记在/var/named/query.log,查看此记录可以看到用户上了那些网站
记得将目录/var/named的属主改成named chown -R named:named /var/named 否则无法生成/var/named/query.log

[root@gw ~]# cat /etc/named.conf
// Default named.conf generated by install of bind-9.2.4-30.el4

options {
directory “/var/named”;
dump-file “/var/named/data/cache_dump.db”;
statistics-file “/var/named/data/named_stats.txt”;
forwarders { 202.96.128.68; 202.96.134.133; };
};

zone “test.com” IN {
type master;
file “test.com.zone”;
};

logging{
channel query_log {
file “query.log” versions 3 size 20m;
severity info;
print-time yes;
print-category yes;
};
category queries {
query_log;
};
};

域指定文件将*.test.com指向127.0.0.1
cat /var/named/test.com.zone
$ttl 1D
@ IN SOA test.com. root.test.com. (

1053891162
3H
15M
1W
1D )

IN NS test.com.
IN MX 5 test.com.
www IN A 127.0.0.1
* IN A 127.0.0.1

启动bind
/etc/init.d/named start

执行IP转发
iptables -t nat -A PREROUTING -p udp –dport 53 -j REDIRECT –to-port 53

看看日志如下
[root@gw ~]# !ta
tail -f /var/named/query.log
Jun 08 16:46:18.930 queries: client 192.168.10.193#55856: query: updatem.360safe.com IN A
Jun 08 16:46:19.311 queries: client 192.168.10.182#61239: query: policy.store.qq.com IN A
Jun 08 16:46:20.329 queries: client 192.168.10.182#54165: query: route.store.qq.com IN A
Jun 08 16:46:20.784 queries: client 192.168.10.182#65321: query: xanewp.photo.qq.com IN A
Jun 08 16:46:20.790 queries: client 192.168.10.182#58162: query: app.photo.qq.com IN A
Jun 08 16:46:21.089 queries: client 192.168.10.177#65300: query: www.microsoft.com IN A
Jun 08 16:46:22.939 queries: client 192.168.10.182#64573: query: s21.photo.store.qq.com IN A
Jun 08 16:46:23.182 queries: client 192.168.10.182#52749: query: s17.photo.store.qq.com IN A
Jun 08 16:46:23.266 queries: client 192.168.10.204#51395: query: user.qzone.qq.com IN A
Jun 08 16:46:24.440 queries: client 192.168.10.204#56676: query: pingfore.qq.com IN A
Jun 08 16:46:24.770 queries: client 192.168.10.204#57851: query: users.qzone.qq.com IN A
Jun 08 16:46:24.839 queries: client 192.168.10.204#50360: query: base.qzone.qq.com IN A
Jun 08 16:46:24.843 queries: client 192.168.10.204#61001: query: taotao.qq.com IN A
Jun 08 16:46:24.883 queries: client 192.168.10.204#53403: query: ic.qzone.qq.com IN A
Jun 08 16:46:25.176 queries: client 192.168.10.204#64821: query: qlogo4.store.qq.com IN A
Jun 08 16:46:25.426 queries: client 192.168.10.204#60886: query: g.qzone.qq.com IN A
Jun 08 16:46:26.435 queries: client 192.168.10.204#60875: query: vip.qzone.qq.com IN A
Jun 08 16:46:26.730 queries: client 192.168.10.204#53668: query: cityapi.qzone.qq.com IN A
Jun 08 16:46:27.227 queries: client 192.168.10.204#61486: query: daren4.store.qq.com IN A
Jun 08 16:46:27.235 queries: client 192.168.10.197#55670: query: profile.qshop.qq.com IN A
Jun 08 16:46:27.335 queries: client 192.168.10.204#64822: query: broadcast.qq.com IN A
Jun 08 16:46:27.626 queries: client 192.168.10.202#56066: query: qzone-client.qq.com IN A

在客户端测试结果,我的NB的DNS是设为202.96.128.68
C:\Documents and Settings\li>nslookup www.test.com
*** Can’t find server name for address 202.96.128.68: Non-existent domain
*** Can’t find server name for address 202.96.134.133: Non-existent domain
*** Default servers are not available
Server: UnKnown
Address: 202.96.128.68

Name: www.test.net
Address: 127.0.0.1

C:\Documents and Settings\li>nslookup 12134.test.com
*** Can’t find server name for address 202.96.128.68: Non-existent domain
*** Can’t find server name for address 202.96.134.133: Non-existent domain
*** Default servers are not available
Server: UnKnown
Address: 202.96.128.68

Name: 12134.test.com
Address: 127.0.0.1

原文:http://www.opvps.com/?p=320

分类: linux相关 标签: , ,

iptables在防火墙应用方面的简单教程(第2版)

2009年4月13日 没有评论

#首先全部允许数据包通过,防止默认丢包的话下面删除规则造成数据包全部丢掉
#允许所有进来的包
iptables -P INPUT ACCEPT
#允许所有出去的包
iptables -P OUTPUT ACCEPT

#初始化iptables 清空所有规则和组
#删除所有规则
iptables -F
#删除所有组
iptables -X

#这里才是正式开始配置iptables
#创建新的定义firewall_in
iptables -N firewall_in

#指定firewall_in组应用到INPUT chain,类似于应用组
iptables -A INPUT -j firewall_in

#指定firewall_in组应用到FORWARD chain,类似于应用组。
iptables -A FORWARD -j firewall_in

#这里开始增加规则,这里例子里规则都是添加到firewall_in组
#localhost数据包全部允许通过
iptables -A firewall_in -i lo -j ACCEPT

#所有已经建立连接的数据包全部通过
iptables -A firewall_in -m state –state RELATED,ESTABLISHED -j ACCEPT

#所有地址开放tcp 80端口
iptables -A firewall_in -p tcp -m tcp –dport 80 -j ACCEPT

#ping数据包允许每秒通过1个
iptables -A firewall_in -p icmp -m limit –limit 1/s –limit-burst 10 -j ACCEPT

#向10.1.1.0/255.255.255.0网段开放eth0网卡上面并且目的ip地址为10.1.1.1的22端口(这是一个功能示例:网卡、协议类型、源地址组、目的地址、目的端口都有体现)
iptables -A firewall_in -i eth0 -p tcp -m tcp -s 10.1.1.0/255.255.255.0 -d 10.1.1.1 –dport 22 -j ACCEPT

#下面这2行是ftp server的pasv模式开放示例,因为ftp的pasv模式端口是随机打开的所以需要另外设置ftp server的pasv端口范围为60000-60004
iptables -A firewall_in -p tcp -m tcp -s 10.1.1.2 –dport 21 -j ACCEPT
iptables -A firewall_in -p tcp -m tcp -s 10.1.1.2 –dport 60000:60004 -j ACCEPT

#丢弃不符合规则的其它tcp和udp数据包,如果处于调试的最好先不要用这2行,万一规则错了就麻烦了
iptables -A firewall_in -p tcp -m tcp -j DROP
iptables -A firewall_in -p udp -m udp -j DROP

#清除规则匹配数据包计数信息
iptables -Z

#禁止所有进来的包,iptables是从上往下匹配的,如果有符合的话就结束匹配了,这里丢弃和上面规则里面的丢弃相比更加彻底。
#同样如果处于调试的最好先不要用这2行,万一规则错了就麻烦了
iptables -P INPUT DROP

#应许所有出去的包,这个防火墙只是简单的进行入站包的过滤,如果需要出站包也要过滤话可以给OUTPUT chain单独一个组然后把参考上面把出站规则写到对应的组里
iptables -P OUTPUT ACCEPT

#最后保存iptables,这样重启后也能应用
/etc/init.d/iptables save

虽然iptables可以通过命令进行修改插入和删除操作,但是这里极不推荐新手这样来修改iptables,我推荐大家是把我上面的这样的命令(去掉注释)保存下来,一方面是做好记录,另一方面在下次修改的时候可以很方便的修改文本,然后把命令全部粘贴进命令行就行。

另外查看目前iptables的内容指令:
iptables -L -vn

分类: linux相关 标签:

使用iptables防止ssh暴力猜解

2009年3月7日 没有评论

基于端口,使用iptables的connlimit模块

iptables -I INPUT -p tcp –syn –dport 22 -m connlimit –connlimit-above 2 -j REJECT

一条指令即可以搞掂, –connlimit-above 2表示只允许一个客户开启二个会话,与sshd_config 设置的区别,sshd_config只能设定一个用户最多尝试几次密码

同样也可以设定web服务访问设限

iptables -I INPUT -p tcp –syn –dport 80 -m connlimit –connlimit-above 30 -j REJECT
这样即可

分类: linux相关 标签:

Linux下iptables在防火墙应用方面的简单教程

2005年11月29日 没有评论

外面网站上搜到的都不是说的很明白
所以自己学的时候,做了些笔记。放上来大家讨论讨论

删除所有规则
iptables -F

删除所有定义
iptables -X

创建新的定义firewall_in,类似于组概念
iptables -N firewall_in

删除定义firewall_in里第一条规则
iptables -D firewall_in 1

指定firewall_in定义应用到INPUT chain,类似于应用组
iptables -A INPUT -j firewall_in

创建一条规则在firewall_in组
iptables -A firewall_in -i eth0 -p tcp -m tcp -s 10.1.1.0/255.255.255.0 -d 10.1.1.1 –dport 22 –syn -j ACCEPT

插入一条规则在firewall_in组第一条
iptables -I firewall_in 1 -p udp -m udp -s 10.0.0.1 –sport 53 -d 10.1.1.1 -j ACCEPT

保存规则已备下次重启使用
/etc/init.d/iptables save

示例
iptables -F
iptables -X
iptables -N firewall_in
iptables -A INPUT -j firewall_in

iptables -A firewall_in -i eth0 -p tcp -m tcp -s 10.1.1.0/255.255.255.0 –dport 22 –syn -j ACCEPT

iptables -A firewall_in -i lo -j ACCEPT
iptables -A firewall_in -p udp -m udp -s 10.0.0.1 –sport 53 -j ACCEPT
iptables -A firewall_in -p tcp -m tcp –syn -j REJECT
iptables -A firewall_in -p udp -m udp -j REJECT

上面的示例的作用是清空当前所有iptables规则和定义然后创建规则:

允许10.1.1.0/255.255.255.0访问本机22(ssh)端口和与IP为10.0.0.1的dns服务器进行查询域名
其他所有入站通讯一律REJECT掉,也可以用DROP,区别是REJECT会返回一个ICMP包告知源地址访问失败,DROP则直接把包丢弃掉

应为与dns进行查询的时候会有dns的数据包从53端口进来,所以要开dns服务器到本机的53端口否则dns查询会失败

一开始我一直用的

iptables -A firewall_in -j DROP

结果发现只要一加所有包都给drop了,看来iptables对-p all -s any -d any 的优先权比较高,不是按照规则顺序只要匹配的放行的,要整个规则都过一边才防行。

iptables -A firewall_in -p tcp -m tcp –syn -j REJECT
iptables -A firewall_in -p udp -m udp -j REJECT

分类: 只谈技术 标签: