网络资源访问控制(iptables

iptables Linux 内核集成的 IP 信息包过滤系统。

如果 Linux 系统连接到因特网或 LAN、服务器或连接 LAN 和因特网的代理服务器,那么有利于在 Linux 系统上更好地控制 IP 信息包过滤和防火墙配置。

一种防火墙是一种非常有效地网络安全模式,通过它可以隔离风险区域与安全区域的连接,同时不会妨碍对风险区的访问。

一般firewall都可以达到以下几个目的:

可以显示进入内部网络的用户并过滤掉不安全的非法用户服务。

②防止***者接近防御设施,多了一道防御。

③限定用户访问特殊网络

④为监视internet安全提供方便

防火墙一般分为三类:硬件防火墙(UnixLinux等),软件防火墙(checkpointiptables等),芯片防火墙等。

目前防火墙产品非常之多,划分的标准也比较杂。 主要分类如下: 
1. 从软、硬件形式上分为 软件防火墙和硬件防火墙以及芯片级防火墙。 
2.从防火墙技术分为 包过滤型应用代理型两大类。
3.从防火墙结构分为 单一主机防火墙、路由器集成式防火墙和分布式防火墙三种。 
4. 按防火墙的应用部署位置分为 边界防火墙、个人防火墙和混合防火墙三大类。 
5. 按防火墙性能分为 百兆级防火墙和千兆级防火墙两类。

防火墙在做信息包过滤决定时,也有一定的规则,这些规则存储在专用的信息包过滤表中,而这些表集成在 Linux 内核中。在信息包过滤表中,规则被分组放在我们所谓的链(chain)中。而netfilter/iptables IP 信息包过滤系统是一款功能强大的工具,可用于添加、编辑和移除规则。

    Iptablesnetfilter模块关系

linux下面的防火墙并不是一个服务,而是一个加载到内核中的模块。这个模块就是netfilter模块(网络过滤模块),我们使用iptables工具来管理这个netfilter模块。可以说netfilter就是iptables防火墙。。。。

下面是netfilter模块里的表和链

    wKiom1Z7U8ryyuTtAAEYxqYdm6s839.jpg

 filter表适用于局域网内部,也是默认的表主要和主机自身有关,主要负责防火墙功能 过滤本机流入流出的数据包

nat表负责内网和外网的转换解析等。

mangle表一般是做科研用的。

input   :负责过滤所有目标地址是本机地址的数据包,就是过滤进入主机的数据包;

forward  :负责转发流经主机但不进入本机的数据包,和NAT关系很大;

output   :负责处理源地址的数据包,就是对本机发出的数据包;

wKiom1Z7VAWj1qm4AAJZxwBihU0109.jpg 

这些.ko的模块就是iptables进行加载的模块。实际上真正的防火墙是netfilter,而iptables只是管理这些模块的一个程序。

    netfilter模块不是一个服务,而是一个内核模块,是一个内核机制只能运行在OSI2.3.4层即数据链路层,网络层和传输层

仅能检查数据包的包头。

iptables的图形化

wKiom1Z7VDTi86SKAAHDQcOisPQ317.jpg 

防火墙是不能关闭的禁用防火墙只是将里面系统默认的条目清除。

wKioL1Z7VHnyeD0qAAEfmO8uPAo765.jpg 

记住:配置完防火墙一定要保存否则一旦重启之前所做的策略就会不存在。并且为了安全起见最好写一条策略就save一下。

wKioL1Z7VKORWdEHAAD2KKDpXx4561.jpg 

关于iptables的访问控制规则是一个次序的列表:

当数据包要经过iptables防火墙,首先读取第一条策略,如果第一条策略匹配,则执行,不再读取下面的策略。如果第一条策略没有匹配,则读取第二条策略,如果匹配到第二条策略,则执行,不再读取下面的策略。如果数据包没有匹配到任何策略,则匹配默认策略。默认策略是允许或者拒绝可以由用户自己定义。

    DROP:强制

    REJECT:警告强制

    ACCEPT:允许

    LOG不会匹配任何链接的策略,日志(写入所有策略之前)。

用户自定义链

系统默认的是ACCEPT

wKiom1Z7VK_yGx5MAADbVtpUcKw579.jpg 

所以在写accept策略的时候第一条必须是ERJRCT

下面是一些写策略时的一些参数:

iptables命令中定义其所做的操作时,可使用一下参数:

-L :显示所选链的所有策略

-A:在所选择的链最尾部添加一条新的策略

-D:从所选链中删除策略

-R:替换所选中的链里指定的策略

-I:从所选链中指定策略前面插入一条新的策略

-F:清空所选链的策略,如果不指定,清空所有

-Z:将所选链的所有计数器归零。

-N:根据用户指定的名字建立新的链

-L :显示所选链的所有策略

-A在所选择的链最尾部添加一条新的策略

-D:从所选链中删除策略

-R:替换所选中的链里指定的策略

-I:从所选链中指定策略前面插入一条新的策略

-F:清空所选链的策略,如果不指定,清空所有

-Z:将所选链的所有计数器归零。

-N:根据用户指定的名字建立新的链

-X:删除指定用户自定义链

-E:对自定义链进行重命名

-P:为链设置默认策略

在使用上述操作时还可以配合一下参数使用:

-v:该参数使输出的内容详细化

-x:使-L输出时的计数器显示准确的数值

-n:将IP地址和端口以数值的形式显示

--line-numbers:在显示策略时,输入序号

--modprobe:指定iptables探测并装载使用的模块

iptables -L   查看详细信息

iptables -A (所有策略最后)

iptables -I 插入(缺省策略最前)

iptables -L --line-numbers

Iptables D  删除一个防火墙条目

 

wKiom1Z7VQeCxt_NAACPIv42nUU397.jpg 

匹配主机

-s:来源地址          192.168.0.0/24

-d:目标地址          192.168.0.1

网络接口

-i lo          从接口进来的

-o eth1     从接口出去的

选择

-i eth0 !-s  192.168.0.0/24  

iptables -A INPUT ‘!’-s 192.168.0.0/24 -j REJECT

接端口并且接协议

-p tcp --dport 80   访问我的目标端口为80的并且协议为tcp

-p udp --sport 53  访问源端口为53的并且协议为udp

下面我们来进行具体的策略操作

1.阻止源ip地址为192.168.1.56到本机的所有udp通信

iptables  -A  INPUT  -P   udp   -s  192.168.1.56   -j  REJECT service iptables save

写过策略一定要service iptables save

2. 阻止源IP地址为192.168.1.56到本机的所有非TCP通信

iptables  -A  INPUT  -P tcp -s  192.169.0.100 service iptables save

3. 阻止目标IP地址为192.168.1.57的所有通信

iptales  -A OUTPUT  -d 192.168.1.57 -j REJECT


 

4. 阻止目标IP地址属于192.168.1.0/24网段的所有通信

 

iptables  -A  OUTPUT   -d 192.168.1.0/24  -j REJECT



5. 阻止从eth0进入到源IP地址为192.168.1.57的所有通信

iptables  -A  INPUT  -I  eth0  -s 192.168.1.57  -j REJECT



6. 阻止从eth0发出的目标IP地址为192.168.1.57的所有通信

iptables  -A  OUTPUT  -o eth0 -d 192.168.1.57 -j  REJECT


7. 阻止源端口大于等于1000且小于等于1024的所有TCP通信

Iptables  -A    INPUT  -p   tcp  -m multiport  --sport  1000,1024 –j  REJECT


8. 阻止源端口为10001024的所有TCP通信

iptables  -A OUTPUT  -P  tcp  -m multiport  --dport   1000,1024 –j REJECT


9. 阻止目标端口为10001024的所有TCP通信

iptables  -A INPUT -s  192.168.0.0/24  -p  tcp  --dport 25  -j  accept
iptables  -A INPUT   -s   192.168.1.0/24


10. 允许192.168.0.0/24的计算机可以访问mailserver,拒绝192.168.1.0/24的网络访问mailserver

iptables -A INPUT -s 192.168.0.0/24 -p tcp -m multiport --dport 25,110 -i eth0 -j REJECT


11. 拒绝192.168.0.10访问192.168.1.10的访问FTPserver

iptables -A FORWARD -s 192.168.0.10 -d 192.168.1.10 -p tcp --dport 21 -j REJECT

12拒绝防火墙访问192.168.0.100SSH

iptables -A OUTPUT -d 192.168.0.100 -p tcp --dport ssh -j REJECT

iptables nat负责网络地址转换,来源于目的IP地址和端口的转换,一般用于共享上网或特殊端口的转换服务

snat    :地址转换

dnat    :标地址转换

pnat    :标端口转换

状态跟踪

NEW: 第一次发起请求的连接状态

ESTABLISHED: 已建立三次握手的连接

RELATED: 服务器回应的数据包状态

INVALID: 无效的数据包状态

mangle 表:将报文拆开来并修改报文标志位,最后封装起来

5个检查点(内置链)

·PREROUTING

·INPUT

·FORWORD

·OUTPUT

·POSTROUTING    

多条链整合起来叫做表

根据上下文自己分析下这条策略的含义

-A OUTPUT -p tcp -m tcp --sport 2000:65535 -m connlimit --connlimit-above 200 --connlimit-mask 32 --connlimit-saddr -j REJECT --reject-with tcp-reset


 

状态检测的包过滤
-m state 
   --state {NEW,ESTATBLISHED,INVALID,RELATED}  指定检测那种状态
-m multiport 指定多端口号
      --sport
      --dport
      --ports
-m iprange 指定IP
      --src-range ip-ip
      --dst-range ip-ip
-m connlimit 连接限定
      --comlimit-above # 限定大连接个数
-m limit 现在连接速率,也就是限定匹配数据包的个数
      --limit  指定速率
      --limit-burst # 峰值速率,最大限定
-m string 按字符串限定
      --algo bm|kmp  指定算法bmkmp
      --string "STRING" 指定字符串本身