iptables基础配置
Posted lastyear
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了iptables基础配置相关的知识,希望对你有一定的参考价值。
防火墙
IPTABLES
防火墙,工作在主机或网络的边缘。对进出本主机或网络段的数据报文,根据规则做匹配,根据匹配的结果做相应的处理。是一种隔离技术,实现内网以及外网传输控制,最大限度阻止黑客破坏企业网络,加强企业网络安全,基于本机内核中的TCP/IP协议栈内核
按照作用对象分类
- 主机型防火墙 :为单台主机提供防护,保护主机数据安全
- 网络型防火墙 :为整个网络内的主机提供防护,保护网络内的安全
按照实现方式分类
- 软件防火墙:通过软件的形式实现防火墙
- 硬件防火墙:通过硬件的方式实现防火墙
Centos7上使用的防火墙为firewall,Centos 6上为iptables,firewall基于iptables进行封装,防火墙组成包括两部分:iptables与netfilter,iptables是用于用户定义防火墙规则的工具,netfilter是工作于内核中,对网络层的数据包进行过滤,实现用户定义的规则
iptables的表
- 表是链的容器,按照功能划分
- 包括:
- filter:过滤,确认是否放行该数据包。
- mangle:拆解报文,做出修改,封装报文,主要为数据包设置标记
- nat:network address translation 网络地址转换(修改数据包中的源、目标IP地址或端口。)
- raw:关闭nat表上启用的连接追踪机制,确定是否对该数据包进行状态跟踪
- 优先级:filter > mangle > nat > raw
iptables的链
- 规则的容器,按照处理动作划分
- 包括:
- PREROUTING:在进行路由选择前处理数据包
- INPUT:处理入站数据包
- FORWARD:处理转发数据包
- OUTPUT:处理出站数据包
- POSTROUTING:在进行路由选择后处理数据包
各个表上分布的链
- filter:INPUT、FORWARD、OUTPUT
- mangle:PREROUTING、INPUT、OUTPUT、FORWARD、POSTROUTING
- nat:PREROUTING(DNAT)、OUTPUT、POSTROUTING(SNAT)
- raw:PREROUTING、OUTPUT
规则链的顺序
- 流出:OUTPUT-->POSTROUTING
- 流入:PREOUTING-->INPUT
- 转发:PREROUTING-->FORWARD-->POSTROUTING
规则匹配:
- 按顺序从上往下依次检查,匹配即停止
- 若找不到匹配规则,按照该链的默认策略处理
链上规则编写次序注意事项:
- 规则编写的时候,同类(同一应用)规则,匹配范围小的放在上面。
- 不同类规则,访问频率较大的放最上面
- 尽量将可以由一条规则描述的多个规则合并为一条规则
- 设置默认策略
流程图
iptables命令(Centos6)
用于指定匹配规则
iptables的控制
- service iptables start #启动
- service iptables restart #重启
- service iptables stop #关闭
- chkconfig iptables --level 35 off #在3、5级别永久关闭,开机不启动
- chkconfig iptables --level 35 on #在3、5级别开机启动
格式:iptables [-t 表名] 选项 [链名] [条件] [-j 动作]
- 不指定表名时默认为filter表
- 不指定链时默认为所有链
- 除设置默认规则,必须指定匹配条件
- 选项、链名、动作为大写,其余为小写
规则的查看
-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 没有被跟踪的
以上是关于iptables基础配置的主要内容,如果未能解决你的问题,请参考以下文章