Netfilter/Iptables(以下简称Iptables)是unix/linux自带的一款优秀且开放源代码的完全自由的基于包过滤的防火墙工具,它的功能十分强大,使用非常灵活,可以对流入和流出服务器的数据包进行很精细的控制.特别是它可以在一台非常低的硬件配置服务器上跑的非常好。iptables是linux2.4及2.6内核中集成的服务,其功能与安全性比其老一蜚ipfwadm,ipchains 强大的多,iptables主要工作在0SI七层的二、三、四层,如果重新编译内核,iptables也可以支持 7 层控制(squid代理+iptables)。

四表五链:

表\链 INPUT FORWARD  OUTPUT  PREROUTING   POSTROUTING
Filter(过滤流入流出主机的数据包) × ×
NAT(负责网络地址转换,即来源与目的的ip地址和port的转换) × ×
Managle(主要负责修改数据包中特殊的路由标记,如TTL、TOS、MARK等)
raw(RAW表可以应用在那些不需要做nat的情况下,以提高性能。如大量访问的web服务器,可以让80端口不再让iptables做数据包的链接跟踪处理,以提高用户的访问速度) × × ×

说明: √表示对应的表有该链,× 表示无。

iptables工作流程小结

1、防火墙是一层层过滤的。实际是按照配置规则的顺序从上到下,从前到后进行过滤的。

2、如果匹配上了规则,即明确表明是阻止还是通过,此时数据包就不在向下匹配新规则了。

3、如果所有规则中没有明确表明是阻止还是通过这个数据包,也就是没有匹配上规则,向下进行匹配,直到匹配默认规则得到明确的阻止还是通过。

4、防火墙的默认规则是对应链的所有的规则执行完以后才会执行的(最后执行的规则)

iptables的优化配置原则

1、尽可能不给服务器配置外网ip ,可以通过代理转发或者通过防火墙映射.并发不是特别大情况有外网ip,可以开启防火墙服务;

2、大并发的情况,不能开iptables,影响性能,利用硬件防火墙提升架构安全。

一般用到的功能

1、NAT功能

  1)局域网上网共享(路由和网关),使用NAT的POSTROUTING链。

  2)外部IP和端口映射为内部IP和端口(DMZ功能),使用NAT的PREROUTING链

2、FILTER功能,即防火墙功能FILTER INPUT FORWARD

  主要应用就是主机服务器防火墙,使用FILTER的INPUT链

iptables参数说明

参数 参数说明
显示相关参数  
-n/--numeric 以数字的方式显示地址或端口信息
-L/ --list 列出一个链或所有链中的规则信息
--list-rules/-S Print the rules in a chain or all chains
--line-number 当列出规则信息时,打印规则行号
-v 显示详细信息,可以叠加
-h 显示帮助信息
初始化相关参数  
iptables -F 清除所有规则,不会处理默认的规则
iptables -X 删除用户自定义的链
iptables -Z 链的计数器清零(数据包计数器与数据包字节计数器)
配置常用参数  
-t 表名称 指定配置哪个表,指定配置表名称。
--append/-A 链名称 附加或追加上相应规则策略,到指定链(链名称必须大写),默认将配置的规则插入到最后一条。
--check/-C Check for the existence of a rule
--insert/-I 链名称 插入相应规则策略,到指定链上,默认将配置的规则插入到第一条(可以根据规则序号插入到指定位置)--封IP地址使用。
--delete/-D 链名称 删除指定的规则(可以根据规则序号进行删除)
--replace/-R Replace rule rulenum (1 = first) in chain
-P  接(大写)链名称 改变链上的最终默认规则策略
--new/-N 创建新的用户定义链
-p 协议名称 指定规则的协议名称 all tcp udp icmp
--dport 指定匹配的目标端口信息
--sport 指定匹配的源端口信息
-j 动作 匹配数据包后的动作
ACCEPT 允许
DROP 丢弃(没有响应)
REJECT 拒绝(回应请求者明确的拒绝)
MASQUERADE 伪装上网时使用
SNAT 共享地址上网
DNAT 目的地址改写
-i    [!] --in-interface 在INPUT链配置规则中,指定从哪一个网卡接口进入的流量(只能配置在INPUT链上)
-o   [!] --out-interface 在OUTPUT链配置规则中,指定从哪一个网接口出去的流量(只能配置在OUTPUT链上)
-s   [!] --source 指定源IP地址或源网段信息
-d   [!] --destination 指定目标IP地址或目标网段信息
扩展参数  
-m 模块 表示增加扩展,匹配功能扩展匹配(可以加载扩展参数)
multiport 实现不连续多端口扩展匹配
icmp 使用icmp的扩展
state 状态模块扩展
--icmp-type 只有类型8是真正会影响ping,或者也可以采用any;了解很多icmp类型iptables -p icmp -h
--limit n/{second/minute/hour} 指定时间内的请求速率”n”为速率,后面为时间分别为:秒分 时
--limit-burst [n] 在同一时间内允许通过的请求”n”为数字,不指定默认为5
--exact/-x 扩展数字(显示精确数值)

配置实例一:配置22/ssh端口访问控制规则

iptables -A INPUT -p tcp --dport 22 -j DROP     # 禁止所有人访问22端口
iptables -I INPUT -p tcp --dport 22 -j ACCEPT   # 恢复连接方法
iptables -I INPUT 2 -p tcp --dport 22 -j ACCEPT # 通过插入指定行号信息,指定将规则插入到第几行
iptables -D INPUT -p tcp --dport 22 -j ACCEPT   # 删除指定规则
iptables -D INPUT 2                             # 根据规则行号,删除相应的规则

只允许10.0.0.1的ip通过ssh连接这台服务器

iptables -I INPUT -s 10.0.0.1 -p tcp --dport 22 -j ACCEPT 

配置实例二:禁止网段连入(禁止172.16.1.0网段访问172.16.1.188)

iptables -A INPUT  -s 172.16.1.0/24 -d 172.16.1.188  -j DROP

配置实例三:禁止某个172.16.1.0网段访问服务器主机的22端口

iptables -A INPUT -s 172.16.1.0/24 -d 172.16.1.188  -p tcp --dport 22 -j DROP

配置实例四:除10.0.0.0网段可以进行连接服务器主机意外,其余网段都禁止

iptables -A INPUT -s 10.0.0.0/24 -d 172.16.1.8  -j ACCEPT

配置实例五:测试匹配列举端口范围

iptables -A INPUT -p tcp --dport 22:80 -j DROP # 设置连续多端口控制策略
iptables -A INPUT -p tcp -m multiport --dport 22,80 -j DROP # 设置不连续多端口控制策略

配置实例六:匹配ICMP类型

指定类型禁止icmp

iptables -A INPUT -p icmp --icmp-type 8
iptables -A INPUT -p icmp --icmp-type 8 -j DROP
iptables -A INPUT -p icmp -m icmp --icmp-type any -j ACCEPT
iptables -A FORWARD -s 192.168.1.0/24 -p icmp -m icmp --icmp-type any -j ACCEPT 

说明:只有类型8是真正会影响ping,或者也可以采用any;了解很多icmp类型iptables -p icmp -h

最新文章

  1. yum info 查不到nginx下载info的问题
  2. [游戏学习22] MFC 井字棋 双人对战
  3. JavaScript的循环语句
  4. springmvc的系统学习之配置方式
  5. AOJ 0558 Cheese
  6. tomcat部署应用的几种方式
  7. MFC对话框
  8. oracle常见为题汇总,以及一个简单数据连接操作工厂
  9. 加密解密,CryptoStream()的使用
  10. vbox安装mac os x
  11. form表单action=""的作用
  12. vim的颜色修改,高亮设置。
  13. Android Studio Gradle Configuration Errors总结
  14. 超详细的PDF Expert的注释功能介绍
  15. java.util.regex包下的Pattern类和Matcher类的使用总结
  16. 导出数据到EXL表格中
  17. git 分支 branch 操作
  18. Vue 下拉列表 组件模板
  19. Java 中long类型转换成为int类型时可能会出错的地方
  20. Delphi RAD Berlin OutputDebugString 输出调试信息

热门文章

  1. css实现单行、多行文本超出显示省略号
  2. 原生 JS实现一个简单分页插件
  3. hivesql-一个表中的数据不在另一个表中
  4. PHP swoole UDP服务端和客户端
  5. 在项目中使用Swagger接口说明
  6. CSS3 box-sizing:content-box | border-box
  7. simple queue(简单队列)
  8. Android学习_7/26
  9. java jsp基础介绍
  10. What makes a good feature