五分钟彻底学会iptables防火墙--技术流ken

iptables简介

IPTABLES 是与最新的 3.5 版本 Linux内核集成的 IP 信息包过滤系统。如果 Linux 系统连接到因特网或 LAN、服务器或连接 LAN 和因特网的代理服务器, 则该系统有利于在 Linux 系统上更好地控制 IP 信息包过滤和防火墙配置。

iptables 组件是一种工具,也称为用户空间(userspace),它使插入、修改和除去信息包过滤表中的规则变得容易。除非您正在使用 Red Hat Linux 7.1 或更高版本,否则需要下载该工具并安装使用它。

--摘自360百科

之前已经写过一篇关于iptables的博客《iptables实战案例详解-技术流ken》,例子虽然非常好,但是总结的还不是很到位。

本篇博客将详细讲解iptables的使用规则。希望每个人认真读完本篇博客都可以让iptables成为工作中的强盾。

四表五链

学习iptables提及最多的无非就是四表五链,也许之前你对此早有耳闻,但是没有真正的研究过。下面这些总结将让你简单的记住什么是四表五链。

四表

  • filter表                           过滤数据包(默认表,最常用)
  • Nat表                             用于网络地址转换(IP、端口)
  • Mangle表                      修改数据包的服务类型、TTL、并且可以配置路由实现QOS
  • Raw表                           决定数据包是否被状态跟踪机制处理

五链

  • INPUT链                    进来的数据包应用此规则链
  • OUTPUT链                 外出的数据包应用此规则链
  • FORWARD链              转发数据包时应用此规则链
  • PREROUTING链          对数据包作路由选择前应用此链(所有的数据包进来的时侯都先由这个链处理)
  • POSTROUTING链        对数据包作路由选择后应用此链(所有的数据包出来的时侯都先由这个链处理)

每个表中含有如下链

iptables使用详解

iptables的使用格式如上图所示

table

-t后面跟上你要操作的表

如果不使用-t默认操作的是filter表

-t:指定表名(默认是对filter表进行操作)
有如下四种:
-t filter
-t nat
-t mangle
-t raw

command

即需要执行的命令常用命令操作有-A,-I, -D,-F,-L

-A:追加新规则
-D:删除指定的规则
-I:首部或者指定的位置插入新规则
-F:清空规则
-Z:清空计数器
-P:修改默认规则
-N:自定义一条链
-X:删除自定义的链
-E:修改自定义链的名字
-L;列举出iptables中所配置的规则
-n:如果不用n选项,那么系统会将协议反解为协议名称,这个过程很慢,该选择的作用是就用来实现禁止反解为名称
--line:在行首显示规则编号
-v:显示详细信息(通常用来看计数器)

注意:
规则中的表名、链名要区分大小写

chain

即链,需要指出对哪个表中的哪个链进行操作

表名为小写,链名为大写,严格区分大小写

有如下五种:
INPUT
OUTPUT
FORWARD
PREROUTING
POTROUTING

parameter

即参数,分为通用匹配和扩展匹配

扩展匹配又分为隐式匹配和显示匹配

通用匹配
扩展匹配
  隐式扩展
  显式扩展

target

即目标动作

ACCEPT:  请求被运行,数据包可以通过
DROP:    认定是一个非法请求,将数包悄悄的丢弃
REJECT:  认定是一个非法请求,禁止数据包同行的(带有通知机制)
LOG:     将这次客户端的请求记录到日志中
MARK:    标记一个连接
SNAT:     把数据包中的源地址部分替换为指定的IP
DNAT:     修改数据包中的目的IP

iptables简单常用的操作

1. 设置默认规则

[[email protected] ~]# iptables -P INPUT DROP    #设置INPUT链默认规则设置为DROP
[[email protected] ~]# iptables -P INPUT ACCEPT  #设置INPUT链默认规则设置为ACCEPT
[[email protected] ~]# iptables -P OUTPUT DROP   #设置OUTPUT链默认规则设置为DROP,如果OUTPUT链开启DROP,相应组合后可防范反弹式木马
[[email protected] ~]# iptables -P OUTPUT ACCEPT #设置OUTPUT链默认规则设置为ACCEPT 

2.清空规则

[[email protected] ~]# iptables -t filter -F    #清空filter表规则
[[email protected] ~]# iptables -t nat -F       #清空nat表规则
[[email protected] ~]# iptables -t mangle -F    #清空mangle表规则
[[email protected] ~]# iptables -t raw -F       #清空raw表规则 

3. 查看规则链

[[email protected] ~]# iptables -L -n --line -v 

iptables通用匹配

-s:指定源ip
-d:指定目标ip
-i:指定进入数据包所经过网卡名称
-o:指定发出数据包所经过网卡名称

1. 指定仅能10.220.5.138可以ping(访问)本机

[email protected] ~]# iptables -A INPUT -s 10.220.5.138 -j ACCEPT

2.允许所有进入10.220.5.138的流量

[[email protected] ~]# iptables -A INPUT -d 10.220.5.138 -j ACCEPT

3.允许从eth0进入的流量

[[email protected] ~]# iptables -A INPUT -i eth0 -j ACCEPT

iptables扩展匹配之隐式匹配

隐式匹配使用-p后面加上协议名称

-p tcp/udp/icmp

1.对于icmp协议的隐式匹配

格式:

-p icmp --icmp-type

ping数据包协议是icmp协议

type

0:应答包

8:请求包

1.可以从10.220.5.1 ping 其他主机,禁止其他主机ping 10.220.5.1

[[email protected] ~]# iptables -I INPUT -p icmp --icmp-type 0 -d 10.220.5.1 -j ACCEPT
[[email protected] ~]# iptables -I INPUT -p icmp --icmp-type 8 -s 10.220.5.1 -j ACCEPT

2.对于tcp协议的隐式扩展

-p tcp 选项

选项:

--sport:源端口

--dport:目标端口

--tcp-flags list1 list2:根据tcp包中的标志位进行匹配

--syn:syn为1,ack,fin都为0,即三次握手的第一次

1.让所有主机可以访问10.220.5.1上的网站,但是禁止10.220.5.191访问网站

[[email protected] ~]# iptables -A INPUT -p tcp --dport 80 -d 10.220.5.1 -j ACCEPT
[[email protected] ~]# iptables -I INPUT -p tcp --dport 80 -s 10.220.5.191 -j DROP

2.只允许从10.220.5.182发送连接httpd请求

[[email protected] ~]# iptables -I INPUT -p tcp -s 10.220.5.182 --tcp-flags syn,ack,fin syn -j ACCEPT

3. 对于udp协议的隐式扩展

-p udp --sport|--dport

用的不多。略

iptables扩展匹配之显示匹配

注意:用显式扩展的时候,必须指定扩展功能所依赖模块的名称

指定: -m 扩展名称 --options-xxx

显示扩展1:state

作用:根据nv_conntrack的记录来对连接进行规则匹配,是根据连接记录中的状态信息做匹配

状态:

NEW:表示新的连接请求(syn=1 ack=0 fin=0)

三次握手的第一次

ping请求的第一包

udp通信的第一个包

ESTABLISHED:连接建立完成状态下所传递的数据包(syn=0 ack=1 fin=0)

INVALID:非法连接

RELATED:相关联的连接

1.让所有人都可以访问web站点

[[email protected] ~]# iptables -A INPUT -m state --state NEW,ESTABLISHED -p tcp --dport 80 -j ACCEPT
[[email protected] ~]# iptables -A OUTPUT -m state --state ESTABLISHED -p tcp --sport 80 -j ACCEPT

显示扩展2:multiport

作用:对连续或者离散的端口做匹配

选型:

--sports port[,port|,port:port]...

--dports port[,port|,port:port]...

--ports  port[,port|,port:port]...

例子:

--sport 80,22,3306         逗号表示离散

--sport 80:1024              冒号表示连续

--sport 80,22,23:1024    离散和连续的可以写在一起

1.允许让10.220.5.182访问本机的80 22 443 3389 3306端口

[[email protected] ~]# iptables -I INPUT -p tcp -s 10.220.5.182 -m multiport --dports 80,22,443,3389,3306 -j ACCEPT

显示扩展3:iprange

作用:用于对ip地址的范围做匹配

选项

--src-range

--dst-range

1. 10.220.5.1~10.220.5.100无法访问web

[[email protected] ~]# iptables -I INPUT -p tcp --dport 80 -m iprange --src-range 10.220.5.1-10.220.5.100 -j DROP

显示扩展4:limit

作用:限速

--limit rate[/second|/minute|/hour|/day]:指示每分钟/限制最大连接数为

--limit-burst number:指示当总连接数超过xx时,启动 litmit/minute 限制

1.实现每分钟可以发送10个ping包,峰值是7

[[email protected] ~]# iptables -I INPUT -p icmp -m limit --limit 10/minute --limit-burst 7 -j ACCEPT 

2.防暴力破解。限制登录22端口的请求的频率(限制1小时只能尝试登录ssh5次)

[[email protected] ~]# iptables -I INPUT -p tcp --dport 22 -m state --state NEW -m limit --limit 5/hour --limit-burst 5 -j ACCEPT 

显示扩展5:connlimit

作用:限制一个客户端可以同时与当前主机建立几个链接

[!] --connlimit-above n

1. 限制每个IP可以同时登录5个ssh

[[email protected] ~]# iptables -A INPUT -p tcp --dport 22 -m connlimit --connlimit-above 5 -j DROP
[[email protected] ~]# iptables -A INPUT -p tcp --dport 22 -j ACCEPT

原文地址:https://www.cnblogs.com/kenken2018/p/10034492.html

时间: 2024-08-29 10:23:15

五分钟彻底学会iptables防火墙--技术流ken的相关文章

cobbler批量安装系统使用详解-技术流ken

1.前言 cobbler是一个可以实现批量安装系统的Linux应用程序.它有别于pxe+kickstart,cobbler可以实现同个服务器批量安装不同操作系统版本. 2.系统环境准备及其下载cobbler 一.系统环境 系统版本:CentOS release 6.7 (Final) 内网IP:192.168.232.7/24    #用来对内通信,提供cobbler服务 外网IP:10.220.5.166/24      #连接外网 二. 关闭安全服务 [[email protected] ~

实战!基于lamp安装Discuz论坛-技术流ken

1.简介 我前面的博客已经详细介绍了lamp采用yum安装以及编译安装的方式,这篇博客将基于yum安装的lamp架构来实战安装Discuz论坛,你可以任选其一来完成. 2.系统环境 centos7.5 服务器IP:172.20.10.7/28 客户端IP:172.20.10.4/28 3.关闭安全服务 [[email protected] ~]# setenforce 0 4.安装lamp [[email protected] ~]# yum install httpd php php-mysq

高可用集群之keepalived+lvs实战-技术流ken

1.keepalived简介 lvs在我之前的博客<高负载集群实战之lvs负载均衡-技术流ken>中已经进行了详细的介绍和应用,在这里就不再赘述.这篇博文将把lvs与keepalived相结合使用,在实际工作中搭建高可用,高负载,高性能的服务器集群. "Keepalived的作用是检测服务器的状态,如果有一台web服务器宕机,或工作出现故障,Keepalived将检测到,并将有故障的服务器从系统中剔除,同时使用其他服务器代替该服务器的工作,当服务器工作正常后Keepalived自动将

网站集群架构实战(LVS负载均衡、Nginx代理缓存、Nginx动静分离、Rsync+Inotify全网备份、Zabbix自动注册全网监控)--技术流ken

前言 最近做了一个不大不小的项目,现就删繁就简单独拿出来web集群这一块写一篇博客.数据库集群请参考<MySQL集群架构篇:MHA+MySQL-PROXY+LVS实现MySQL集群架构高可用/高性能-技术流ken>下面是项目的一些简单介绍. WEB集群项目简介 随着网站访问量的激增,势必会导致网站的负载增加,现需求搭载一套高性能,高负载,高可用的网站集群架构以保障网站的持续.高效.安全.稳定的运行. 针对以上需求,我们采用了如下的技术: 使用负载均衡技术来实现网站请求的调度分发,减小后端服务器

Jenkins+Git+Gitlab+Ansible实现持续集成自动化部署动态网站(二)--技术流ken

项目前言 在上一篇博客<Jenkins+Git+Gitlab+Ansible实现持续化集成一键部署静态网站(一)--技术流ken>中已经详细讲解了如何使用这四个工具来持续集成自动化部署一个静态的网站. 如果大家可以熟练掌握以上内容,势必会在工作中减轻不小的工作量. 本篇博客将再次使用这四个工具结合freestyle和pipeline来完成动态网站的部署. 为了拓宽知识点,本篇博客将使用jenkins的两种常用方法来进行部署,如果你对pipeline还不熟悉,请参考我之前的博客<Jenki

zabbix实现百台服务器的自动化监控--技术流ken

前言 最近有小伙伴通过Q联系到我说:公司现在有百多台服务器,想要部署zabbix进行监控,怎么实现自动化全网监控? 本篇博客就把我告诉他的解决方案写出来,供大家以后参考. 实现自动化全网监控,需要用到脚本,以及zabbix的自动注册或者自动发现的功能.以前也写过一篇关于两者的博客<分布式系统监视zabbix讲解八之自动发现/自动注册--技术流ken>,但是内容可能没有那么详尽,本篇博客将详细完整的演示如何使用zabbix实现百台服务器的自动化监控. zabbix自动注册 活动的Zabbix a

NFS企业级实战应用详解-技术流ken

1.简介 在上一篇博文中讲述了samba的实战应用,samba使得window和linux共享文件成为可能.NFS则实现了linux与linux之间的文件共享. 2.系统环境 系统版本:centos6.7 服务器IP: 10.220.5.166/24 客户端IP: 10.220.5.188/24 3.关闭安全服务 [[email protected] ~]# service iptables stop [[email protected] ~]# setenforce 0 4.下载NFS 当nf

samba企业级实战应用详解-技术流ken

1.简介 Samba是一套使用SMB(Server Message Block)协议的应用程序, 通过支持这个协议, Samba允许Linux服务器与Windows系统之间进行通信,使跨平台的互访成为可能. 2.系统环境 系统版本:centos6.7 服务器IP: 10.220.5.166/24 3.关闭安全服务 [[email protected] ~]# service iptables stop [[email protected] ~]# setenforce 0 4. 安装samba

nginx实现反向代理、负载均衡-技术流ken

1.简介 本篇博文是<nginx实现动态/静态文件缓存-技术流ken>的二部曲.将详细介绍nginx如何实现反向代理以及负载均衡技术,并辅以实战案例. 反向代理--"反向代理(Reverse Proxy)方式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端,此时代理服务器对外就表现为一个反向代理服务器." 负载均衡--"网络专用术语,负载均衡建立在现有网络结构之