Linux防火墙与iptables命令
- 防火墙概念
- 一、Firewalld与iptables简介
- 1.1Firewalld
- 1.2Firewalld、iptables
- 二、iptables
- 2.1四表
- 2.2五链
- 2.3四表和五链的关系
- 2.4操作表
- 2.5操作链
- 2.6匹配条件
- 2.7处理动作
- 2.8iptables基本用法
- 三、扩展匹配条件(模块匹配)
- 3.1iprange模块
- 3.2time模块
- 3.3connlimit模块
- 3.4string模块
- 3.5limit模块
- 3.6tcp-flags模块
- 3.7state模块
- 四、防火墙规则的永久保存
- 五、示例
防火墙概念
防火墙是指设置在不同网络与网络安全域之间的一系列部件的组合,也是不同安全域之间信息的唯-出口。通过监测、限制并更改跨越防火墙的数据流,尽可能地对外屏蔽网络内部的信息.结构和运行状态,且有选择地接受外部网络访问。在内外网之间架起一道屏障,以避免发生不可预知或潜在的入侵。
Linux的防火墙体系主要工作在网络层.针对TCP/IP数据包实时过滤和限制,属于典型的包过滤防火墙(或称为网络层防火墙)。Linux 系统的防火墙体系基于内核编码实现,具有非常稳定的性能和高效率,也因此获得广泛的应用。
操作系统占据内存的空间为内核空间也称为内核态
用户启用的应用程序占用的空间为用户空间 也称为用户态
区分内核空间和用户空间,内核空间比较稳定,用户空间不稳定,隔离开来可以避免系统崩溃
防火墙可以从两个方面进行分类
从逻辑上分类
主机防火墙:针对单个主机进行防护
网络防火墙:处于网络入口或者边缘,针对内外网之间的防护,服务于防火墙背后的本地局域网
从物理上分类
硬件防火墙:在硬件部分实现一部分防火墙功能,性能高,成本高
软件防火墙:应用软件,用于处理运行在硬件平台之上的防火墙,性能低,成本低
一、Firewalld与iptables简介
1.1Firewalld
- 支持网络区域所定义的网络链接以及接口安全等级的动态防火墙管理工具
- 支持IPv4,IPv6防火墙设置以及以太网桥
- 支持服务或应用程序直接添加防火墙规则接口
- 拥有两种配置模式
- 运行时配置(一般测试的时候使用)
- 永久配置
iptables:并不是一个防火墙,而是管理防火墙的工具,相当于一个客户端
netfilter:防火墙“安全框架”
- 位于Linux内核中的包过滤体系
- 称为Linux防火墙的内核态
1.2Firewalld、iptables
- Centos7上默认的防火墙规则管理工具
- 称为Linux防火墙的用户态
区别
对规则的修改 配置文件 防火墙类型
Firewalld:不需要全部刷新策略 /usr/lib/firewalld 动态防火墙
不丢失现行链接 /etc/firewalld
iptables: 需要全部刷新策略 /etc/sysdonfig/iptables 静态防火墙
丢失链接
netfilter/iptables(简称为iptables):组成Linux平台下的包过滤防火墙,与大多数的Linux软件一样,这个包过滤防火墙是免费的,它可以代替昂贵的商业防火墙解决方案,完成封包过滤、封包重定向和网络地址转换(NAT)等功能。
二、iptables
2.1四表
表名 | 对应内核模块 | 作用 |
filter | iptables_filter | 负责过滤功能 |
nat | iptables_nat | 网络地址转换 |
mangle | iptables_mangle | 报文解析和封装 |
raw | iptables_raw | 决定数据包是否被状态跟踪机制处理 |
- 四表的顺序:raw - - - mangle - - - nat - - - filter(优先级次序)
报文发送过来之后首先由raw判断是否要被状态跟踪机制处理,再交给mangle表进行解析和封装,再交给nat表进行地址转换,再交给filter表进行过滤
2.2五链
位置 | 链名 | 说明 |
进路由 | PREROUTING | 对数据包做路由选择前应用此规则链中的规则 |
进系统 | INPUT | 进来的数据包应用此规则链中的规则 |
转发 | FORWARD | 转发数据包时应用此规则链中的规则 |
出系统 | OUTPUT | 出去的数据包应用此规则链中的规则 |
出路由 | POSTROUTING | 对数据包作路由选择后应用此规则链中的规则 |
- 五链的顺序(报文的流向):
PREROUTING - - - FORWARD - - - POSTROUTING(由本机转发的报文)
PREROUTING - - - INPUT(到本机某进程的报文)
OUTPUT - - - POSTROUTING(由本机某进程发出的报文,通常为相应报文)
2.3四表和五链的关系
- 表包含链,链包含规则
表名 | 包含的链 |
raw | PREROUTING、OUTPUT |
mangle | PREROUTING、INPUT、FORWARD、OUTPUT、POSTROUTING |
nat | PREROUTING、OUTPUT、POSTROUTING(在centos7上还有INPUT链) |
filter | INPUT、FORWARD、OUTPUT |
iptables命令
链上面的规则:根据指定的匹配条件来尝试匹配每个流经该链的报文,一旦匹配成功,则由规则后面指定的处理动作进行处理
2.4操作表
- 用法:-t 后面跟表名(raw/mangle/nat/filter)
一般不加 -t 选择表默认为filter表
2.5操作链
常用选项
选项 | 说明 |
-L | 列出所有的链上的规则(也可以-t加表名,列出指定表上的规则) |
-n | ip地址和端口号以数字形式显示 |
-I # | 在指定链的第#个位置添加规则(不指定#的话默认在第一个) |
-A | 在指定链的尾部添加规则 |
-D | 删除匹配规则 |
-F | 删除指定链上的规则(不指定的话默认为全部链) |
-N | 创建用户自定义链 |
-X | 删除指定的用户自定义链 |
-P | 修改指定链的默认规则(不指定链的话默认为全部链) |
-R | 修改规则 |
-Z | 将指定链的计数器清零(不指定默认为所有链) |
2.6匹配条件
- 常见的匹配条件
选项 | 作用 |
-s 地址 | 匹配源地址 |
-d 地址 | 匹配目标地址 |
-p | 匹配协议(tcp/udp/icmp……不选默认全部) |
- -sport | 匹配源端口(22/23/25/80……) |
- -dport | 匹配目标端口(22/23/25/80……) |
-o interface | 匹配出口网卡,作用链:OUTPUT、POSTROUTING |
-i interface | 匹配入口网卡 ,作用链:PREROUTING、INPUT、FORWARD |
2.7处理动作
- 常用处理动作
用法: - j + 动作名
动作名 | 作用 |
ACCEPT | 允许 |
REJECT | 拒绝,并且做出回应 |
DROP | 直接丢弃,不做任何回应 |
SNAT | 源地址转换 |
DNAT | 目标地址转换 |
LOG | 记录一下,不作任何回应,交给下一条规则处理 |
- iptables -nvL ——查看全部链上的详细规则
- iptables -nvL --line-numbers ——给每条链上的规则加上序号
2.8iptables基本用法
iptables -t 表(raw/mangle/nat/filter) -I/A/R/D/P 前面所选表对应的链(首部/尾部/指定序号修改/指定序号删除/修改默认规则) -s/d 地址ip (源地址/目标地址,多个地址用“,”隔开,不选择默认全部) --sport/dport 端口号(源端口/目标端口,不选默认全部) -p 协议(不选默认全部) -j 处理动作
**图片转自小萝卜的博客
- 示例
[root@localhost ~]# iptables -t filter -nvL //查看filter表上的所有规则信息,-n 显示ip地址,-v显示详细信息
Chain INPUT (policy ACCEPT 167 packets, 16397 bytes)
pkts bytes target prot opt in out source destination
0 0 DROP all -- * * 192.168.136.135 0.0.0.0/0
0 0 DROP all -- * * 192.168.136.0 0.0.0.0/0
Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
Chain OUTPUT (policy ACCEPT 79 packets, 8989 bytes)
pkts bytes target prot opt in out source destination
0 0 DROP all -- * * 192.168.136.0 0.0.0.0/0
[root@localhost ~]# iptables -F //清空表上的所有规则,没有选表,默认为filter表
[root@localhost ~]# iptables -nvL //查看filter上的所有规则
Chain INPUT (policy ACCEPT 6 packets, 432 bytes)
pkts bytes target prot opt in out source destination
Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
Chain OUTPUT (policy ACCEPT 4 packets, 448 bytes)
pkts bytes target prot opt in out source destination
[root@localhost ~]# iptables -nvL --line-numbers //查看全部规则详细显示,并且带上序号
字段含义
pkts:对应规则匹配到的报文个数。
bytes:对应规则匹配到的报文大小总和。
target :前面提到的target的特殊值,动作,规则匹配成功后要采取的措施。
prot – 协议:tcp, udp, icmp等
opt:规则对应的选项。
in:数据包由哪个接口流入,(可以设置通过哪块网卡流入的报文,需要匹配当前规则)
out:数据包由哪个接口流出,(可以设置通过哪块网卡流出的报文,需要匹配当前规则)
source – 数据包的源IP地址,或网段
destination – 数据包的目标IP地址,或网段
三、扩展匹配条件(模块匹配)
- 用法:-m 加模块名 加模块对应选项
常见模块
3.1iprange模块
指定ip地址段,使用该模块就代替了 -s/d 选项
选项 | 说明 |
- -src-range | 后面跟源地址范围 |
- -dst-range | 后面跟目标地址范围 |
- 示例
[root@localhost ~]# iptables -I INPUT -m iprange --src-range 192.168.136.127-192.168.136.254 -j DROP //在filter表的INPUT链上对来自192.168.136.127-192.168.136.254这个网段报文全部丢弃DROP
[root@localhost ~]# iptables -nvL
Chain INPUT (policy ACCEPT 6 packets, 432 bytes)
pkts bytes target prot opt in out source destination
0 0 DROP all -- * * 0.0.0.0/0 0.0.0.0/0 source IP range 192.168.136.127-192.168.136.254
Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
Chain OUTPUT (policy ACCEPT 3 packets, 568 bytes)
pkts bytes target prot opt in out source destination
[root@localhost ~]# ping 192.168.136.128 //从192.168.136.130主机无法ping通上面有规则的主机
PING 192.168.136.128 (192.168.136.128) 56(84) bytes of data.
^C
--- 192.168.136.128 ping statistics ---
4 packets transmitted, 0 received, 100% packet loss, time 3000ms
3.2time模块
根据时间段匹配报文,报文到达的时间在指定范围内,匹配成功,符合规则
选项 | 说明 |
- -timestart | 起始时间,指定时间开始,格式:年-月-日 时:分:秒 |
- -timestop | 结束时间,默认从当前时间开始,格式:年-月-日 时:分:秒 |
- -weekdays | 后面跟数字,多个用逗号隔开,指定星期几 |
- -monthdays | 后面跟数字,多个用逗号隔开,指定几月 |
- 示例
[root@localhost ~]# iptables -I OUTPUT -p tcp --dport 80 -m time --timestart 08:55:00 --timestop 17:00:00 -j REJECT //从08:55:00到17:00:00从80端口过来的报文拒绝访问
[root@localhost ~]# iptables -t filter -I OUTPUT -p TCP --dport 8080 -m time --datestart 2019-04-20 --datestop 2019-04-21 -j REJECT //从2019-04-20到2019-04-21从8080端口过来的报文拒绝女访问
[root@localhost ~]# iptables -nvL --line-numbers //查看全部规则详细情况,并且带上序号
Chain INPUT (policy ACCEPT 8 packets, 576 bytes)
num pkts bytes target prot opt in out source destination
Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
num pkts bytes target prot opt in out source destination
Chain OUTPUT (policy ACCEPT 4 packets, 864 bytes)
num pkts bytes target prot opt in out source destination
1 0 0 REJECT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:8080 TIME starting from 2019-04-20 00:00:00 until date 2019-04-21 00:00:00 reject-with icmp-port-unreachable
2 0 0 REJECT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:80 TIME from 08:55:00 to 17:00:00 reject-with icmp-port-unreachable
3.3connlimit模块
链接限制模块,限定每个ip链接服务器端的数量,即对单个ip的并发链接限制,一般和端口、协议配合使用
选项 | 说明 |
- -connlimit-above # | #为链接上限 |
- -connlimit-mask # | #为网段,以网段限制链接上限,与- -connlimit-above一起使用 |
- 示例
[root@localhost ~]# iptables -t filter -I OUTPUT -p TCP --dport 22 -m connlimit --connlimit-above 2 -j REJECT //从目标22号端口过来的ssh链接遵从tcp协议的最多有两个,多了就拒绝
[root@localhost ~]# iptables -t filter -I OUTPUT -p TCP --dport 22 -m connlimit --connlimit-above 2 --connlimit-mask 24 -j REJECT //从目标22号端口过来的属于24网段的ssh链接遵从tcp协议的最多有两个,多了就拒绝
[root@localhost ~]# iptables -nvL --line-numbers
Chain INPUT (policy ACCEPT 10 packets, 720 bytes)
num pkts bytes target prot opt in out source destination
Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
num pkts bytes target prot opt in out source destination
Chain OUTPUT (policy ACCEPT 6 packets, 896 bytes)
num pkts bytes target prot opt in out source destination
1 0 0 REJECT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:22 #conn/24 > 2 reject-with icmp-port-unreachable
2 0 0 REJECT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:22 #conn/32 > 2 reject-with icmp-port-unreachable
3.4string模块
指定匹配的字符串。如果报文中包含对应的字符串,匹配成功,符合规则
选项 | 说明 |
- -algo | 指定匹配字符串的算法,bm或者kmp,必选选项 |
- - string | 指定需要匹配的字符串,字符串用双引号引用 |
- 示例
[root@localhost ~]# iptables -t filter -I INPUT -m string --algo kmp --string "bit" -j REJECT //碰到带有“bit”敏感字段的报文全部过滤掉
[root@localhost ~]# iptables -nvL --line-numbers
Chain INPUT (policy ACCEPT 9 packets, 680 bytes)
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 STRING match "bit" ALGO name kmp TO 65535 reject-with icmp-port-unreachable
Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
num pkts bytes target prot opt in out source destination
Chain OUTPUT (policy ACCEPT 5 packets, 728 bytes)
num pkts bytes target prot opt in out source destination
3.5limit模块
限制报文到达的速率,可以以秒、分钟、小时、天为单位限制
用法
--limit second/minute/hour/day
10/min 一分钟十个包(平均六秒一个)
10/hour 一小时十个包(平均六分钟一个)
24/day 一天二十四个包(平均一小时一个)
…………
- 示例
[root@localhost ~]# iptables -t filter -I INPUT -m limit --limit 10/min -j ACCEPT //一分钟允许通过十个
[root@localhost ~]# iptables -t filter -A INPUT -p icmp -j REJECT //将icmp协议的报文全部丢弃
[root@localhost ~]# iptables -nvL --line-numbers
[root@localhost ~]# iptables -nvL --line-numbers
Chain INPUT (policy ACCEPT 1 packets, 104 bytes)
num pkts bytes target prot opt in out source destination
1 48 3840 ACCEPT all -- * * 0.0.0.0/0 0.0.0.0/0 limit: avg 10/min burst 5
2 0 0 REJECT icmp -- * * 0.0.0.0/0 0.0.0.0/0 reject-with icmp-port-unreachable
Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
num pkts bytes target prot opt in out source destination
Chain OUTPUT (policy ACCEPT 3 packets, 488 bytes)
num pkts bytes target prot opt in out source destination
*/在INPUT链上的规则有顺序,先是一分钟十个包,满足条件先执行允许通过,不满足条件不做处理交给下一条规则,下一条规则是icmp协议的包不允许通过
[root@localhost ~]# ping 192.168.136.128
PING 192.168.136.128 (192.168.136.128) 56(84) bytes of data.
64 bytes from 192.168.136.128: icmp_seq=1 ttl=64 time=1.74 ms
64 bytes from 192.168.136.128: icmp_seq=2 ttl=64 time=0.885 ms
64 bytes from 192.168.136.128: icmp_seq=3 ttl=64 time=0.339 ms
64 bytes from 192.168.136.128: icmp_seq=4 ttl=64 time=0.338 ms
64 bytes from 192.168.136.128: icmp_seq=5 ttl=64 time=0.524 ms
From 192.168.136.128 icmp_seq=6 Destination Port Unreachable
64 bytes from 192.168.136.128: icmp_seq=7 ttl=64 time=0.322 ms
From 192.168.136.128 icmp_seq=8 Destination Port Unreachable
From 192.168.136.128 icmp_seq=9 Destination Port Unreachable
From 192.168.136.128 icmp_seq=10 Destination Port Unreachable
From 192.168.136.128 icmp_seq=11 Destination Port Unreachable
From 192.168.136.128 icmp_seq=12 Destination Port Unreachable
64 bytes from 192.168.136.128: icmp_seq=13 ttl=64 time=1.37 ms
From 192.168.136.128 icmp_seq=14 Destination Port Unreachable
From 192.168.136.128 icmp_seq=15 Destination Port Unreachable
From 192.168.136.128 icmp_seq=16 Destination Port Unreachable
From 192.168.136.128 icmp_seq=17 Destination Port Unreachable
From 192.168.136.128 icmp_seq=18 Destination Port Unreachable
64 bytes from 192.168.136.128: icmp_seq=19 ttl=64 time=0.290 ms
From 192.168.136.128 icmp_seq=20 Destination Port Unreachable
From 192.168.136.128 icmp_seq=21 Destination Port Unreachable
From 192.168.136.128 icmp_seq=22 Destination Port Unreachable
From 192.168.136.128 icmp_seq=23 Destination Port Unreachable
From 192.168.136.128 icmp_seq=24 Destination Port Unreachable
64 bytes from 192.168.136.128: icmp_seq=25 ttl=64 time=0.774 ms
*/使用其他主机向该主机发送icmp包时可以清楚看到每个五秒通过一个
前五行是在创建令牌,默认为五个,可以修改
3.6tcp-flags模块
该模块也属于tcp模块,匹配tcp报文的头部的标志位,然后根据标志位的实际情况实现访问控制的功能
在网络部分我们讲了三次握手,四次挥手,讲了TCP的包头,这里主要指tcp包头中的标志SYN,ACK,FIN,RST,URG,PSH。
他的匹配规则是:“SYN,ACK,FIN,RST,URG,PSH SYN”,怎么来理解,我们可以把这串字符拆成两部分去理解,第一部为"SYN,ACK,FIN,RST,URG,PSH",第二部分为"SYN"。
第一部分表示:我们需要匹配报文tcp头中的哪些标志位,那么上例的配置表示,我们需要匹配报文tcp头中的6个标志位,这6个标志位分别为为"SYN、ACK、FIN、RST、URG、PSH",我们可以把这一部分理解成需要匹配的标志位列表。
第二部分表示:第一部分的标志位列表中,哪些标志位必须为1,上例中,第二部分为SYN,则表示,第一部分需要匹配的标志位列表中,SYN标志位的值必须为1,其他标志位必须为0。
语法格式: -p tcp -m tcp - -tcp-flags SYN,ACK,FIN,RST,URG,PSH SYN/SYN,ACK(选择前面可以匹配到的标志位)
- 示例
[root@localhost ~]# iptables -t filter -I INPUT -p tcp -m tcp --dport 22 --tcp-flags SYN,ACK,FIN,RST,URG,PSH SYN -j REJECT //匹配在第一次握手的时候就给拒绝
[root@localhost ~]# iptables -t filter -I INPUT -p tcp -m tcp --dport 22 --tcp-flags SYN,ACK,FIN,RST,URG,PSH SYN,ACK -j REJECT //匹配在第二次握手的时候给拒绝
[root@localhost ~]# iptables -nvL --line-numbers
Chain INPUT (policy ACCEPT 8 packets, 576 bytes)
num pkts bytes target prot opt in out source destination
1 0 0 REJECT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:22 flags:0x3F/0x12 reject-with icmp-port-unreachable
2 0 0 REJECT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:22 flags:0x3F/0x02 reject-with icmp-port-unreachable
Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
num pkts bytes target prot opt in out source destination
Chain OUTPUT (policy ACCEPT 4 packets, 704 bytes)
num pkts bytes target prot opt in out source destination
上述命令中的可以匹配到的条件SYN,ACK,FIN,RST,URG,PSH 也可简写为ALL
3.7state模块
可以基于连接追踪功能去查看每一报文当前所处的状态。不论什么协议,客户端第一次访问时,服务器会去内核内存中的追踪表查看他之前是否来过,查不到就证明是第一次来,记录入追踪表,如果查到以前来过就不检查规则,直接允许访问,这称为连接追踪机制。在访问量特别大的场景下,比如负载均衡服务器不建议开启,追踪表最大只能记录6万多的条目,访问数超过就会无法记录出错,导致所有的连接失败
报文的五种状态
状态 | 说明 |
ESTABLISHED | 已建立的连接 |
NEW | 第一次连接时 |
RELATED | 相关链接 |
INVALID | 无法识别的连接 |
UNTRACKED | raw表上关闭连接追踪功能 |
- 示例
[root@localhost ~]# iptables -t filter -I INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT //允许已建立的链接和相关链接继续链接
[root@localhost ~]# iptables -t filter -A INPUT -j REJECT //所有链接全部拒绝
[root@localhost ~]# iptables -nvL --line-numbers
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
num pkts bytes target prot opt in out source destination
1 17 1304 ACCEPT all -- * * 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED
2 0 0 REJECT all -- * * 0.0.0.0/0 0.0.0.0/0 reject-with icmp-port-unreachable
Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
num pkts bytes target prot opt in out source destination
Chain OUTPUT (policy ACCEPT 5 packets, 760 bytes)
num pkts bytes target prot opt in out source destination
*/先匹配第一条规则 保持当前连接和相关链接,然后匹配第二条,不允许任何链接
意思就是除了现在已连接的,其他的链接不允许通过
四、防火墙规则的永久保存
在Linux操作系统中,防火墙的规则都是一次性的,下次重启后就会消失,为了防止重启后带来的问题可以先将规则保存在文件内,在下次重启的时候将规则恢复就可以了
规则的保存与恢复
保存
service iptables save 默认保存在/etc/sysconfig/iptables文件中
iptables-save > 文件路径 也可以重定向到其他文件中
恢复
iptables-restore < 文件路径 将文件中保存的规则加载到防火墙中
防火墙规则配置流程
1.清除原有的规则
iptables -F
2.查看规则
iptables -nvL --line-numbrs
3.添加规则
iptables命令
4.保存规则
Centos7
systemctl stop firewalld 关闭防火墙
systemctl disable firewalld 关闭开机自动启动防火墙
systemctl start firewalld 开启防火墙
systemctl enable firewalld 开启开机自动启动防火墙
五、示例
iptables常用编写规则
1.清空规则
iptables -F
iptables -X
2.在INPUT链上,tcp为ESRANLISHED,RELATED的数据包放行
iptables -t filter -I INPUT -p tcp -m state --state ESRANLISHED,RELATED -j ACCEPT
3.在INPUT链上,tcp为NEW的并且端口号为22的数据包放行
iptables -t filter -A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
4.在OUTPUT链上,tcp为ESRANLISHED,RELATED的数据包放行
iptables -t filter -A OUTPUT -p tcp -m state --state ESRANLISHED,RELATED -j ACCEPT
5.INPUT和OUTPUT默认规则为DROP
iptables -P INPUT,OUTPUT DROP
6.打开本地回环地址访问
iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT
7.不允许其他主机ping本主机
iptables -A INPUT -p icmp -j DROP
iptables -A INPUT -s 192.168.136.130 -j ACCEPT
8.对主机开放DNS(53端口)的访问
iptables -t filter -I INPUT -p tcp -m tcp --dport 53 -j ACCEPT
iptables -A INPUT -p all --sport 53 -j ACCEPT
iptables -A OUTPUT -p all --dport 53 -j ACCEPT
基本服务规则限制
1.限制ssh服务,每个ip地址最多2个链接
iptables -t filter -A INPUT -p tcp -m tcp --dport 22 -m connlimit --connlimit-above 2 -j ACCPET
2.限制web服务(80端口)每个ip地址的最大链接请求数为50,超过则丢弃
iptables -t filter -A INPUT -p tcp -m tcp --dport 80 ! -m connlimit --connlimit-above 50 -j DROP