标签:组成 基础 通信 tput 关闭 用户 状态 发送 tin
防火墙,工作在主机或网络的边缘。对进出本主机或网络段的数据报文,根据规则做匹配,根据匹配的结果做相应的处理。是一种隔离技术,实现内网以及外网传输控制,最大限度阻止黑客破坏企业网络,加强企业网络安全,基于本机内核中的TCP/IP协议栈内核
按照作用对象分类
按照实现方式分类
Centos7上使用的防火墙为firewall,Centos 6上为iptables,firewall基于iptables进行封装,防火墙组成包括两部分:iptables与netfilter,iptables是用于用户定义防火墙规则的工具,netfilter是工作于内核中,对网络层的数据包进行过滤,实现用户定义的规则
iptables的表
iptables的链
各个表上分布的链
规则链的顺序
规则匹配:
链上规则编写次序注意事项:
流程图
iptables命令(Centos6)
用于指定匹配规则
iptables的控制
格式:iptables [-t 表名] 选项 [链名] [条件] [-j 动作]
规则的查看
-L #列出指定链上的所有规则,后面紧跟要查看的链
-n #以数字格式显示地址和端口号(不反解)
-v #显示详细信息
-vv #更加详细信息
-t 表名#查看指定的表
--line-numbers #显示行号
Chain INPUT (policy ACCEPT 0 packets, 0 bytes) #INPUT链
num pkts bytes target prot opt in out source destination
1 277 20728 ACCEPT all -- * * 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED
2 0 0 ACCEPT icmp -- * * 0.0.0.0/0 0.0.0.0/0
3 0 0 ACCEPT all -- lo * 0.0.0.0/0 0.0.0.0/0
4 0 0 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:22
5 0 0 REJECT all -- * * 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited
#num 行号 pkts 数据包数量 bytes 字节数 target 对应的动作
#prot 协议端口号 opt 选项 in 数据包流入的网卡 out 数据包流出的网卡
#source 源地址 destination 目标地址 地址全为0表示anywhere,是默认规则
Chain FORWARD (policy ACCEPT 0 packets, 0 bytes) #FORWARD链
num pkts bytes target prot opt in out source destination
1 0 0 REJECT all -- * * 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited
Chain OUTPUT (policy ACCEPT 164 packets, 21024 bytes) #OUTPUT链
num pkts bytes target prot opt in out source destination
#未指定表所以默认只显示filter表中的链
#常见动作
#ACCEPT:允许通过
#DROP:直接丢弃,不给出任何回应
#REJECT:拒绝通过,必要时会给出提示
#REDIRECT:端口重定向
#LOG:记录日志信息,然后传给下条规则继续匹配
#DNAT:目标地址转换
#SNAT:源地址转换
#MASQUERADE:地址伪装
#使用-j指定动作
清空规则
-F #清空所有规则
设置默认规则
-P #设置默认规则(大写)
表示将filter表(默认指定)中的INPUT链上所有匹配到默认规则的数据包丢弃
添加规则
-A #在链的末尾添加规则
表示允许来自192.168.10.0网段访问192.168.10.120主机的数据包在filter表的INPUT链通过,-A将该规则追加在链的末尾(规则匹配时从上到下匹配,要注意规则的顺序)
-I 链名 [N]#讲规则插入链的指定位置省略表示插入第一行
修改规则
-R #修改规则
删除规则
-D #删除规则(指定链名和行号)
保存规则
将规则保存至指定文件中
将iptables配置保存至/root/iptables.bak文件中
![image-20191107161831552](https://img2018.cnblogs.com/blog/1241092/201911/1241092-20191107220928853-88579266.png)
使用时,将配置从文件中读取出来
使用命令永久保存
相当于iptables-save > /etc/sysconfig/iptables ,重启后会自动重载规则
规则的匹配条件设置
[!]-s <IP|NETADDR> #指定报文中源IP的地址范围,!表示取反
[!]-d <IP|NETADDR> #指定报文中目的IP的地址范围
iptables -I INPUT 2 -s 192.168.10.0/24 -d 192.168.10.120 -j ACCEPT
#-s 192.168.10.0/24 源地址为192.168.10.0网段 掩码位24
#-d 192.168.10.120 目的地址为192.168.10.120
[!]-p 协议名 #指定报文中的协议
iptables -I INPUT -s 192.168.10.1 -d 192.168.10.120 -p 22 -j ACCEPT
#-p 指定协议端口号或协议名如:tcp、udp、icmp
[!]-i 网卡名 #指定报文中流入接口网卡,仅用于PREROUTING,INTPUT,FORWARD链
[!]-o 网卡名 #指定报文中流出接口网卡,仅用于FORWARD,OUTPUT,POSTROUTING链
iptables -I INPUT -i eth0 -j DROP
#从eth0网卡进入的数据包全部丢弃
iptables -A OUTPUT -o eth0 -j DROP
#从eth0网卡发出的数据包全部丢弃
扩展的规则匹配
需要对应扩展模块的支持
模块存放位置/lib64/xtable/*.so
使用扩展的匹配规则时需要-m选项(部分扩展匹配选项与-p配合使用时可以省略-m)
--dport PORT 目标端口匹配,可以单个端口,可以是连续的端口如:22:25表示22、23、24、25、80端口
--sport PORT 源端口匹配,同dport
iptables -A OUTPUT -p udp --sport 445:450 -j ACCEPT
#主机源udp端口为445/446/447/448/449/450的允许通过
iptables -A OUTPUT -p udp --dport 8080:8090 -j DROP
#拒绝目标主机位udp端口8080~8090之间的所有数据包
--tcp-flags LIST1 LIST2 #标记位匹配,LIST1为检测的标记位,LIST2表示为1的标记位
iptables -A INPUT -p tcp --tcp-flags SYN,ACK SYN -j DROP
#拒绝SYN为1ACK为0的请求
iptables -A INPUT -p tcp --tcp-flags ALL SYN,RST -j DROP
#所有标志为中SYN为1其余为0的拒绝
#可用标记位
# SYN 同步; 表示开始会话请求
# ACK 应答
# FIN 结束、结束会话
# RST 复位、中断一个连接
# PSH 推送、数据包立即发送
# URG 紧急
# ALL 指选定所有的标记
# NONE 指未选定任何标记
-p icmp --icmp-type #icmp类型匹配
iptables -A INPUT -d 192.168.10.120 -p icmp --icmp-type 8 -j DROP
#拒绝对主机192.168.10.120发起的ping请求
iptables -A INPUT -s 192.168.10.120 -p icmp --icmp-type 0 -j ACCEPT
#允许主机192.168.10.120向外发出的ping应答通过
#icmp type
# 0 ping应答
# 8 ping请求
注:详细ICMP类型参考004ICMP-type对应表
multiport #匹配离散方式指定的多个端口,最多15个
iptables -A OUTPUT -p udp -m multiport --sport 1024:1030,1096 -j ACCEPT
#允许源端口为udp的1024~1030和1096的数据包通过
iptables -A OUTPUT -p udp -m multiport --sport 1024:1030,1096 -m multiport --dport 80:85,8080:8085 -j ACCEPT
#允许源端口为udp的1024~1030和1096且目标端口为udp的80~85和8080~8085端口的数据包访问
- -m iprange #匹配连续的ip地址范围
![image-20191107201317022](https://img2018.cnblogs.com/blog/1241092/201911/1241092-20191107220924861-278427492.png)
![image-20191107201349317](https://img2018.cnblogs.com/blog/1241092/201911/1241092-20191107220924612-954619567.png)
```shell
iptables -A INPUT -m iprange --src-range 192.168.10.111-192.168.10.130 -j ACCEPT
#允许源地址为192.168.10.111~192.168.10.130范围内的主机通过
iptables -A INPUT -m iprange --dst-range 192.168.20.110-192.168.20.130 -j ACCEPT
#允许目的地址为192.168.20.110~192.168.20.130范围内的主机通过
#-m iprange --src-range #指定连续的源ip地址范围
#-m iprange --dst-range #指定连续的目的ip地址范围
-m time #匹配时间或日期
iptables -A INPUT -d 192.168.10.110 -m time --timestart 00:00 --timestop 05:00 -j DROP
#主机192.168.10.110在0点到5点禁止被访问
iptables -A INPUT -s 192.168.10.110 -m time --datestart 2019-11-07 --datestop 2019-11-08 -j DROP
#主机192.168.10.110在2019年11月7号到2019年11月8号禁止访问其他主机
#--datestart 起始日期 日期格式为YYYY[-MM[-DD[Thh[:mm[:ss]]]]]
#--datestop 结束日期
#--timestart 起始时间 时间格式为hh:mm[:ss]
#--timestop 结束时间
#--weekdays 指定固定的天,Mon,Tue,Wed,Thu,Fri,Sat,Sun 或 1 to 7
-m string #对明文字符进行匹配
iptables -A INPUT -d 192.168.10.110 -m string --algo kmp --string "fuck" -j DROP
#拒绝访问192.168.10.110主机的数据中包含敏感词的数据包
#--algo <bm|kmp> 指定字符串匹配的算法
#[!]--string 指定匹配的字符,!取反
#[!] --hex-string 16进制字符,!取反
-m connlimit #对单个ip发起的请求数量进行匹配
iptables -A INPUT -d 192.168.10.110 -p tcp --dport 22 -m connlimit --connlimit-above 3 -j DROP
#192.168.10.110主机的tcp22端口只允许同时建立3个连接,超出的请求包均被丢弃
#--connlimit-upto 匹配请求数小于等于某个值时执行动作(centos-6不支持)
#--connlimit-above 匹配请求数大于3时执行动作
-m limit #对响应的速率进行匹配
iptables -A INPUT -d 192.168.10.110 -p tcp --dport 22 -m limit --limit-burst 5 --limit 10/minute -j ACCEPT
#对主机192.168.10.110的tcp22号端口的请求空闲时最大为5个,每分钟最多增加10个范围内的请求允许通过
#--limit-burst 空闲峰值数量
#--limit NUM/minute 单位时间增长速率
-m state #对连接的状态进行匹配
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
#对连接状态为已建立连接或与已建立连接有关的请求允许通过
#可以使用的状态类型包括:
# NEW 主机连接目标主机,在目标主机上看到的第一个想要连接的包
# ESTABLISHED 主机已与目标主机进行通信,判断标准只要目标主机回应了第一个包,就进入该状态。
# RELATED 主机已与目标主机进行通信,目标主机发起新的链接方式,例如ftp
# INVALID 无效的封包,例如数据破损的封包状态
# UNTRACKED 没有被跟踪的
标签:组成 基础 通信 tput 关闭 用户 状态 发送 tin
原文地址:https://www.cnblogs.com/lastyear/p/11816081.html