防火墙之iptables工具

防火墙之IPTABLES

防火墙分类(实现划分、范围划分、协议划分)

  • 硬件防火墙
  • 软件防火墙
  • 主机防火墙
  • 网络防火墙
  • 下四层防火墙
  • 应用层防火墙

linux内核集成于2.4往后版本

  • 由Netfilter组件提供
  • 实现功能的软件之一:Iptables

netfilter 中的hook

  • input
  • outpu
  • forword
  • prerouting
  • postrouting

数据流向

  • 流入:到本地用户空间
  • 流出:访问外部web
  • 穿过:转发数据包

iptables对应hook的表chain

  • filter、nat、mangle、raw、security
  • filter表:过滤规则表,根据预定义的规则过滤符合条件的数据包
  • nat表:network address translation 地址转换规则表
  • mangle:修改数据标记位规则表
  • raw:关闭启用的连接跟踪机制,加快封包穿越防火墙速度
  • security:用于强制访问控制(MAC)网络规则,由Linux安全模块(如 SELinux)实现

动作

  • ACCEPT、DORP、REJECT...
详细动作:
 RETURN:#返回调用链
 REDIRECT:#端口重定向
 LOG:#记录日志,dmesg
 MARK:#做防火墙标记
 DNAT:#目标地址转换
 SNAT:#源地址转换
 MASQUERADE:#地址伪装
 自定义链

规则rule

  • 语法:

-t filter 默认可省略,故后面未填写的都为 -t filter


iptables -t [filter] -A [INPUT] -s [192.168.47.106] -j [DORP]

iptables -t [表] -A  附加链  -s 规则 -j 满足规则的处理动作
 

# 指定表
-t table #指定表raw, mangle, nat, [filter]默认

# 子命令
N:#new, 自定义一条新的规则链
-E:#重命名自定义链;引用计数不为0的自定义链不能够被重命名,也不能被删除
-X:#delete,删除自定义的空的规则链
-P:#Policy,设置默认策略;对filter表中的链而言,其默认策略有:
ACCEPT:#接受
DROP:#丢弃

# 查看选项
-L:#list, 列出指定鏈上的所有规则,本选项须置后
-n:#numberic,以数字格式显示地址和端口号
-v:#verbose,详细信息
-vv #更详细
-x:#exactly,显示计数器结果的精确值,而非单位转换后的易读值
--line-numbers:#显示规则的序号
-S #selected,以iptables-save 命令格式显示链上规则


# 规则管理类
A:#append,追加
-I:#insert, 插入,要指明插入至的规则编号,默认为第一条
-D:#delete,删除 (1) 指明规则序号(2) 指明规则本身
-R:#replace,替换指定链上的指定规则编号 然后添加修改后的规则
-F:#flush,清空指定的规则链
-j:#targetname [per-target-options] 前面的**动作**
-Z:#zero,置零包大小, iptables的每条规则都有两个计数器,(1) 匹配到的报文的个数 (2) 匹配到的所有报文的大小之和

例:
iptables -A INPUT  -s 192.168.47.119 -j REJECT
iptables -I INPUT  -s 192.168.47.120 -j ACCEPT
iptables -D INPUT 2 ,第二种 (iptables -D INPUT -s 192.168.47.120 -j ACCEPT)
iptables -R INPUT 2 -i lo -j REJECT 

基本匹配条件

  • 基本匹配条件:无需加载模块,由iptables/netfilter自行提供


 -s, --source address[/mask][,...]:#源IP地址或范围
 -d, --destination address[/mask][,...]:#目标IP地址或范围
 -p, --protocol protocol:#指定协议,可使用数字如0(all)protocol: tcp, udp, icmp, icmpv6, udplite,esp, ah, sctp, mh or "all" 参看:/etc/protocols
  -i, --in-interface name:#报文流入的接口;只能应用于数据报文流入环节,只应用于INPUT、FORWARD、PREROUTING链
  -o, --out-interface name:#报文流出的接口;只能应用于数据报文流出的环节,只应用于FORWARD、OUTPUT、POSTROUTING链 
 
 例:
 iptables -A INPUT  -s 192.168.47.119 -j REJECT
 iptables -A INPUT  -p tcp/icmp... -j REJECT 
 iptables -A INPUT  -i lo/eth0... -j REJECT
 
 

扩展的匹配规则(使用模块)

  • 使用帮助 man iptables-extensions
  • 模式: 隐式扩展,显示扩展,且如果没有该模块,需要自己加载模块才能生效
  • 隐式: 使用特定协议,即可不使用-m 指定特定模块

例如: tcp udp ...协议
tcp:
--tcp-flags SYN,ACK,FIN,RST SYN #表示要检查的标志位为SYN,ACK,FIN,RST四个,其中SYN必须为1,余下的必须为0
--tcp-flags SYN,ACK,FIN,RST SYN,ACK 
--tcp-flags ALL ALL
--tcp_flags ALL NONE


实例:iptables I INPUT 2 -p tcp --tcp-flags SYN,ACK,FIN,RST SYN  -j DROP (第一次握手的包)
  • 显式:使用-m 后调用模块,然后更上模块需要的参数

例如: time,string...等
time:
--datestart YYYY[-MM[-DD[Thh[:mm[:ss]]]]] 日期
--datestop YYYY[-MM[-DD[Thh[:mm[:ss]]]]]
--timestart hh:mm[:ss] 时间
--timestop hh:mm[:ss]
--monthdays day[,day...] 每个月的几号
--weekdays day[,day...] 星期几,1 – 7 分别表示星期一到星期日

实例:
iptabes -I INPUT 3 -m time --timestart 4:00 --timestop 6:00 -j ACCPET #(在中午午休时间允许访问12点到2点,这里使用TUC时区,需要减8个小时)

关于设置白名单机制

  • iptables -I INPUT (最后一条的位置例5) -j DROP (设置除了已允许的能够访问之外,其余都不能访问)

防Dos 攻击:

  • iptables -A INPUT -d 172.16.100.10 -p tcp --dport 80 -m connlimit --connlimit-above 1000 -j REJECT ( 在访问数量超过1000次80 端口后就拒绝访问 )

优化

1. 安全放行所有入站和出站的状态为ESTABLISHED状态连接,建议放在第一条
2. 谨慎放行入站的新请求
3. 有特殊目的限制访问功能,要在放行规则之前加以拒绝
4. 同类规则(访问同一应用),匹配范围小的放在前面,用于特殊处理
5. 不同类的规则(访问不同应用),匹配范围大的放在前面
6. 应该将那些可由一条规则能够描述的多个规则合并为一条
7. 设置默认策略,建议白名单(只放行特定连接)

规则保存

  • 默认生命周期 :kerenl存活期间
  • iptables-save > /etc/iptables.conf (保存规则方法)
  • iptables-restore < /etc/iptables.conf (添加文件的规则方法,-n 不清除原有规则)
posted @ 2019-12-25 13:48  猫九x  阅读(417)  评论(0编辑  收藏  举报