Chinaunix首页 | 论坛 | 博客
  • 博客访问: 303840
  • 博文数量: 58
  • 博客积分: 2763
  • 博客等级: 少校
  • 技术积分: 731
  • 用 户 组: 普通用户
  • 注册时间: 2008-09-04 19:07
文章分类

全部博文(58)

文章存档

2011年(55)

2009年(1)

2008年(2)

分类: LINUX

2011-08-21 17:36:15

linux 访问控制
说到访问控制那就不得不先说说防火墙了。
所谓防火墙指的是一个由软件和硬件设备组合而成、在内部网和外部网之间、专用网与公共网之间的界面上构造的保护屏障.是一种获取安全性方法的形象说法,它是一种计算机硬件和软件的结合,使Internet与Intranet之间建立起一个安全网关(Security Gateway),从而保护内部网免受非法用户的侵入,防火墙主要由服务访问规则、验证工具、包过滤和应用网关4个部分组成,
防火墙类型:基于工作的层次不同可分为:
  网络层防火墙
  代理服务器(应用层网关)
基于纯软件的iptables
前身是ipfirewall,要想生效就必须放到内核中
之后是ipchains 可以定义多条规则,形成一条列
最后是iptables  定义规则的工具,本身并不是防火墙
iptables/netfilter:网络过滤器/网络防火墙的工作框架
iptables写规则的工具,netfilter工作在内核,让规则生效。
----------------------------------------------------------
NetFilter定义了五个位置:五个内置的规则链,如图所示。
内置的5个规则链chains:
   PREROUTING:路由前
   input:数据包的流入接口
   forward:转发接口
   output:从内部网络出来的接口
   postrouting:路由后
   
防火墙策略: 通 (防火墙的门默认是关着的,必须定义谁能进出)
  堵 (防火墙的门默认是开着的,必须定义谁不能进出)
3个表:
filter(过滤):允许/不允许
nat:地址转换
mangle:修改报文原数据
 
iptables中的3表5链
---------------------------------------------------------------

表:来定义从一个链上不同的规则,自上而下依次过滤
对于过滤:只能做在3个链上:input,forward,output
nat:prerouting,output,postrouting
mangle:prerouting,input,forward,output,postrouting
只有使用iptables才能写进链上。写进就会立即生效。

匹配规则范围越小的越往上放。
跳转机制,就是指在该表中定义指向另一个表。在另一个表中查看匹配规则,若没有匹配的规则,则重新回到该表中继续匹配之后的规则。

-------------------------------------------------------------------------
如何写规则:
iptables写规则的工具,netfilter工作在内核,让规则生效。
iptables [-t table] command    chain       vritiria  -j
 filter              在那个链上操作   匹配标准    指定处理机制
 nat
 mangle
先来举一个简单的例子,让你有一个总体性的把握。然后在具体细化。
在filter表中添加一条规则:
#iptables -t filter -A INPUT -s 172.16.0.0/16 -p udp --dport 53 -j DROP
在filter表中替换一条规则:
#iptables -t filter -R INPUT -s 1 172.16.0.0/16 -p udp --dport 53 -j DROP
查看iptables所定义的规则,如果你不加表则默认是filter表
#iptables -L -n 查看定义的规则
#iptables -L -n -v 查看规则的详细信息
--------------------------------------------------------------
表上面我已经介绍过了,这里就不多说了。
command:
对于链管理命令
-p    ,设定默认策略,门是关的还是开的。通和堵
  #iptables -p INPUT {DROP|ACCEPT}
-F    ,flush ,规则链清空
  #iptables -t nat -F PREROUTING   清空那个表的哪个链
-N    ,new ,创建一个链
  #iptables -N inbound_tcp_web  被其他表的链指向
-X      ,删除用户自定义的空链
-E  ,给用户自定义的链重命名。
-Z ,用于清空链默认规则和其他链中的计数器的
------------------------
规则管理命令
-A  ,在当前链的最后追加链
 #iptables -A INPUT -s 172.16.0.0、16 -p udp --dport 53 -j ACCEPT
-I  ,插入链,后跟数字,表示插入第几条链。1 就表示插入第一条链。则原来的1变为2,2变为3...
 #iptables -I INPUT 1 -s 172.16.0.0、16 -p udp --dport 53 -j ACCEPT
-R ,修改规则,后跟数字,表示替换第几条规则
 #iptables -R INPUT 1 -s 172.16.0.0、16 -p tcp --dport 80 -j ACCEPT
-D num,删除第几条规则。
 #iptables -D INPUT 1,默认删除filter表的INPUT链的第一条规则
------------------------
查看命令
-L   查看
 -n  ,数字的方式查看
 -v ,查看详细信息,-vv,-vvv越详细
 -x  ,精确值,不做单位换算
 --line-numblers ,显示行号。
-----------------------------------------
匹配标准:
(1)通用匹配:
-s    ,做源地址匹配,不能使用主机名,使用IP,NETOWORK/MASK,加!表示取反
-d    ,做目标地址匹配,
-p    ,用于匹配协议的
 {tcp|udp|icmp}
-i    ,数据的流入接口,后面接网卡
-o    ,数据的流出接口
(2)扩展匹配:对于特定功能的扩张
 隐含扩展:对特定协议扩展
-p tcp 
 --dport ,目标端口   0-65535
 --sport ,源端口
 --tcp-flags ,检查的标志位 必须为1的标志位。跟两个参数,第一个参数表示标志,第二个参数表示为1的标志。
 六个标志:SYN,ACK,FIN,PSH,RST,URG
--tcp-flags syn,ack,fin,rst syn  ,就表示syn必须为1,其他的为0。整个就表示匹配tcp连接第一次握手建立。可以简写为--syn
-p udp
 --dport
 --sport
-p icmp
 --icmp-type
    两种类型:
  echo-request 8匹配ping出去的数据包
  echo-reply 0 响应的数据包
 显式扩展
  各扩展模块
  -p tcp -m multiport --dports 21,23,80多端口扩展
-------------------------------------------------------
-j Action
  DROP 悄悄丢弃
  REJECT 明确拒绝
  ACCEPT 接受
  custom_chain 转向自定义的链
  DNAT
  SNAT
  MASQUERADE 源地址伪装
  REDIRECT   主要实现端口重定向
  MARK
  RETURN     如果自定义的链没有匹配在返回 
----------------------------------------------------------------
来自172.16网段的主机访问172.16.100.1的基于tcp的22端口都允许
#iptables -t filter -A INPUT -s 172.16.0.0/16 -d 172.16.100.1 -p tcp --dport 22 -j ACCEPT

#iptables -t filter -A INPUT -s 172.16.100.1 -d 172.16.0.0/16 -p tcp --sport 22 -j ACCEPT
------------------------------------------------------------------------
三次握手:
我们可以通过状态检测来定义规则
4种状态:
第一次为全新连接NEW,syn为1,ack,rst,fin=0
第二三次为已建立的连接ESTABLISHED。
相关联的连接RELATED
其他的则为无法识别的连接的INVALID
#iptables  -R INPUT 2 -s 172.16.0.0/16 -d 172.16.100.1 -p tcp --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT
#iptables  -R OUTPUT 1 -m state --state ESTABLISHED -j ACCEPT

-------------------------------
允许ping
#iptables -A OUTPUT -p icmp --icmp-type 8 -j ACCEPT
#iptables -A INPUT -p icmp --icmp-type 0 -j ACCEPT
允许127网段的
#iptables -A INPUT -s 127.0.0.1 -d 127.0.0.1 -j ACCEPT
#iptables -A OUTPUT -s 127.0.0.1 -d 127.0.0.1 -j ACCEPT
要想开机生效
#service iptables save
保存在/etc/sysconfig/iptables
使用命令,追加:
#iptables-save > /etc/sysconfig/iptables
生效:
#iptables-restore < /etc/sysconfig/iptables

-------------------------------------------------------
源地址转换,目标地址转换
 
(1) 源地址转换
 
    例如内网用户想访问外网的web服务,必须在出去内网,进入外网之时将自己的ip转换为可以在公网上使用的ip,只有这样才能够实现通信。
例如上图:我将来自192.168.0.0/24网段主机的ip都转换为123.18.1.30。
#iptables -t nat -A POSTROUTING -s 192.168.10.0/24 -p tcp --dport 80 -j SNAT --to-source 123.18.1.30
若地址是动态获取的,则使用地址伪装
MASQUERADE
#iptables -t nat -A POSTROUTING -s 192.168.10.0/24 -j MASQUERADE
----------------------------------------------------------
 
(2)目标地址转换
当内网有web服务时,外网用户想要访问内网的web服务。则需要将外网ip转换为内网使用的ip。
#iptables -t nat -A PREROUTING -d 123.18.1.30 -p tcp --dport 80 -j DNAT --to-destination 192.168.0.15
 
常用模块的使用,
 
connlimit  允许多少个并发连接
   --connlimit -above n  对超过n个的连接,采取措施
--------------------------------------------------- 
iprange
   --src-range ip-ip
   --dst-range ip-ip
   
#iptables -A FORWARD -m iprange --src-range 172.16.100.1-172.16.100.100 --dst-range 172.16.0.1-172.16.0.5 -p tcp --dport 80 -j ACCEPT
   
--------------------------------------------------- 
limit
   --limit rate     平均速率限定  
   --limit-burst number    
--------------------------------------------------- 
mac
   --mac-source 跟你的防火墙在同一个网络的原MAC
---------------------------------------------------- 
multiport
   --source-ports
   --destination-ports
   --potrs  
#iptables -A FORWARD -p tcp -m multiport --destination-ports 22,80,110,25 -m iprange --src-range 172.16.0.1-172.16.0.100 -m state --state NEW,ESTABLISHED -j ACCEPT
--------------------------------------------------------   
 string 搜索匹配字符
   --algo bm|kmp
   --from offset
   --to offset
   --string pattern
#iptables -A FORWARD -m string --string "qq.com" --algo bm -j REJECT
----------------------------------------------------------- 
time 设定时间
   --timestart value
   --timestop value
   --days listofdays
   --datestart date
   --datestop date
   -m time --timestart  --timestop
 ---------------------------------------------------------------  
LOG
   --log-prefix 加上前缀
#iptables -A INPUT -d 172.16.100.1 -p tcp --dport 22 -m limit --limit 6/minute -j LOG --log-prefix "IPtables SSHD:"
--------------------------------------------------------------
REJECT
   --reject-with type
      icmp-net-unreachable
      icmp-host-unreachable
      icmp-port-unreachable
      icmp-proto-unreachable
--------------------------------------------------------------      
     
ftp
由于ftp在传输数据时,服务器会产生一个大于1023的随机端口。因此你很难用端口指定的方法来设置ftp,因此我们可以使用状态检测,使用相关联的连接来设置。
 #iptables -A INPUT -d 172.16.100.1 -p tcp --dport 21 -m state --state NEW,ESTABLISHED -j ACCEPT 
   
相关联的状态检测:
在设置ftp时,你需要加上两个模块,分别为ip_conntrack_ftp,ip_nat_ftp
 安装这两个模块:  
  # modprobe ip_conntrack_ftp
  # modprobe ip_nat_ftp
   
#iptables -A INPUT -d 172.16.100.1 -p tcp -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
阅读(1547) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~