网络资源访问控制(iptables) iptables 是Linux 内核集成的 IP 信息包过滤系统。 如果 Linux 系统连接到因特网或 LAN、服务器或连接 LAN 和因特网的代理服务器,那么有利于在 Linux 系统上更好地控制 IP 信息包过滤和防火墙配置。 一种防火墙是一种非常有效地网络安全模式,通过它可以隔离风险区域与安全区域的连接,同时不会妨碍对风险区的访问。 一般firewall都可以达到以下几个目的: ①可以显示进入内部网络的用户并过滤掉不安全的非法用户和服务。 ②防止入侵者接近防御设施,多了一道防御。 ③限定用户访问特殊网络 ④为监视internet安全提供方便 防火墙一般分为三类:硬件防火墙(Unix,Linux等),软件防火墙(checkpoint,iptables等),芯片防火墙等。 目前防火墙产品非常之多,划分的标准也比较杂。 主要分类如下:
1. 从软、硬件形式上分为 软件防火墙和硬件防火墙以及芯片级防火墙。
2.从防火墙技术分为 “包过滤型”和“应用代理型”两大类。
3.从防火墙结构分为 < 单一主机防火墙、路由器集成式防火墙和分布式防火墙三种。
4. 按防火墙的应用部署位置分为 边界防火墙、个人防火墙和混合防火墙三大类。
5. 按防火墙性能分为 百兆级防火墙和千兆级防火墙两类。 防火墙在做信息包过滤决定时,也有一定的规则,这些规则存储在专用的信息包过滤表中,而这些表集成在 Linux 内核中。在信息包过滤表中,规则被分组放在我们所谓的链(chain)中。而netfilter/iptables IP 信息包过滤系统是一款功能强大的工具,可用于添加、编辑和移除规则。 Iptables与netfilter模块关系 在linux下面的防火墙并不是一个服务,而是一个加载到内核中的模块。这个模块就是netfilter模块(网络过滤模块),我们使用iptables工具来管理这个netfilter模块。可以说netfilter就是iptables防火墙。。。。 下面是netfilter模块里的表和链 filter表适用于局域网内部,也是默认的表,主要和主机自身有关,主要负责防火墙功能 过滤本机流入流出的数据包。 nat表负责内网和外网的转换解析等。 mangle表一般是做科研用的。 input :负责过滤所有目标地址是本机地址的数据包,就是过滤进入主机的数据包; forward :负责转发流经主机但不进入本机的数据包,和NAT关系很大; output :负责处理源地址的数据包,就是对本机发出的数据包; 这些.ko的模块就是iptables进行加载的模块。实际上真正的防火墙是netfilter,而iptables只是管理这些模块的一个程序。 netfilter模块不是一个服务,而是一个内核模块,是一个内核机制只能运行在OSI的2.3.4层即数据链路层,网络层和传输层 仅能检查数据包的包头。 iptables的图形化 防火墙是不能关闭的禁用防火墙只是将里面系统默认的条目清除。 记住:配置完防火墙一定要保存否则一旦重启之前所做的策略就会不存在。并且为了安全起见最好写一条策略就save一下。 关于iptables的访问控制规则是一个次序的列表: 当数据包要经过iptables防火墙,首先读取第一条策略,如果第一条策略匹配,则执行,不再读取下面的策略。如果第一条策略没有匹配,则读取第二条策略,如果匹配到第二条策略,则执行,不再读取下面的策略。如果数据包没有匹配到任何策略,则匹配默认策略。默认策略是允许或者拒绝可以由用户自己定义。 DROP:强制 REJECT:警告强制 ACCEPT:允许 LOG: 不会匹配任何链接的策略,日志(写入所有策略之前)。 用户自定义链 系统默认的是ACCEPT 所以在写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 删除一个防火墙条目
匹配主机 -s:来源地址 192.168.0.0/24 -d:目标地址 192.168.0.1 网络接口 -i lo 从接口进来的 -o eth1 从接口出去的 反向选择 -i eth0 ‘!’-s 192.168.0.0/24 1
| 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通信 1
| 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通信 1
| iptables -A INPUT -P tcp -s 192.169.0.100 service iptables save
|
3. 阻止目标IP地址为192.168.1.57的所有通信 1
| iptales -A OUTPUT -d 192.168.1.57 -j REJECT
|
4. 阻止目标IP地址属于192.168.1.0/24网段的所有通信
1
| iptables -A OUTPUT -d 192.168.1.0/24 -j REJECT
|
5. 阻止从eth0进入到源IP地址为192.168.1.57的所有通信 1
| iptables -A INPUT -I eth0 -s 192.168.1.57 -j REJECT
|
6. 阻止从eth0发出的目标IP地址为192.168.1.57的所有通信 1
| iptables -A OUTPUT -o eth0 -d 192.168.1.57 -j REJECT
|
7. 阻止源端口大于等于1000且小于等于1024的所有TCP通信 1
| Iptables -A INPUT -p tcp -m multiport --sport 1000,1024 –j REJECT
|
8. 阻止源端口为1000和1024的所有TCP通信 1
| iptables -A OUTPUT -P tcp -m multiport --dport 1000,1024 –j REJECT
|
9. 阻止目标端口为1000和1024的所有TCP通信 1
2
| 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 1
| 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 1
| iptables -A FORWARD -s 192.168.0.10 -d 192.168.1.10 -p tcp --dport 21 -j REJECT
|
12,拒绝防火墙访问192.168.0.100的SSH 1
| 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 多条链整合起来叫做表 根据上下文自己分析下这条策略的含义 1
| -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 指定算法bm或kmp
--string "STRING" 指定字符串本身
|