iptables简介及常用命令

相关文件

  • iptables服务配置文件
-rw-------. 1 root root 2374 9月   4 2017 /etc/sysconfig/iptables-config
  • iptables规则文件
-rw------- 1 root root 191 10月  1 2018 /etc/sysconfig/iptables

防火墙结构

  • 四表五链
四张功能表
raw 快速通道功能。标记、追踪
mangle 数据包修改功能,修改报文元数据,做防火墙标记等
nat 路由转换功能
filter 报文过滤
五个规则链
PREROUTING 路由前,数据包刚进入网络接口之后
INPUT 数据包从内核流入用户空间。
FORWARD 在内核空间中,从一个网络接口进入,到另一个网络接口去。转发过滤。
OUTPUT 数据包从用户空间流出到内核空间。
POSTROUTING 路由后,数据包离开网络接口前。
  • 规则链内的匹配顺序,按顺序依次检查,匹配即停止(LOG 策略例外),若找不到相匹配规则,则按该链的默认策略处理

    规则链内的匹配顺序
    raw mangle nat filter
    PREROUTING PREROUTING PREROUTING INPUT
    OUTPUT POSTROUTING POSTROUTING FORWARD
    INPUT OUTPUT OUTPUT
    OUTPUT
    FORWARD

    COMMAND 命令选项

    
    -A|--append  CHAIN                                 //链尾添加新规则
    -D|--delete  CHAIN [RULENUM]                       //删除链中规则,按需序号或内容确定要删除的规则
    -I|--insert  CHAIN [RULENUM]                       //在链中插入一条新的规则,默认插在开头
    -R|--replace CHAIN  RULENUM                        //替换、修改一条规则,按序号或内容确定
    -L|--list   [CHAIN [RULENUM]]                      //列出指定链或所有链中指定规则或所有规则
    -S|--list-urles [CHAIN [RULENUM]]                  //显示链中规则
    -F|--flush [CHAIN]                                 //清空指定链或所有链中规则
    -Z|--zero [CHAIN [RULENUM]]                        //重置指定链或所有链的计数器(匹配的数据包数和流量字节数)
    -N|--new-chain CHAIN                               //新建自定义规则链
    -X|--delete-cahin [CHAIN]                          //删除指定表中用户自定义的规则链
    -E|--rename-chain OLDCHAIN NEWCHAIN                //重命名链,移动任何引用
    -P|-policy CHAIN TARGET                            //设置链的默认策略,数据包未匹配任意一条规则就按此策略处理

    辅助选项

    -t|--table TABLE     //指定操作的表,默认的表为filter
    -n|--numeric         //用数字形式显示地址和端口,显示主机IP地址而不是主机名
    -x|--exact           //计数器显示精确值,不做单位换算
    -v|--verbose  (x3)   //查看规则列表时,显示更详细的信息
    -line-numbers        //查看规则表时,显示在链中的序号
    -V|--version
    -h|--help
    [option]  --help     //查看特定选项的帮助,如iptables -p icmp --help
    
    --fragment -f               //match second or further fragments only
    --modprobe=<command>        //try to insert modules using this command
    --set-counters PKTS BYTES   //set the counter during insert/append

    CRETIRIA 条件匹配

    基本匹配
    
    扩展匹配->   |隐式匹配
                |显示匹配
    • 基本匹配
    -p|--proto  PROTO                      //按协议匹配,如tcp、udp、icmp,all表示所有协议。 (/etc/protocols中的协议名)
    -s|--source ADDRESS[/mask]...          //按数据包的源地址匹配,可使用IP地址、网络地址、主机名、域名
    -d|--destination ADDRESS[/mask]...     //按目标地址匹配,可使用IP地址、网络地址、主机名、域名
    -i|--in-interface INPUTNAME[ +]        //按入站接口(网卡)名匹配,+用于通配。如 eth0, eth+ 。一般用在INPUT和PREROUTING链
    -o|--out-interface OUTPUTNAME[+]       //按出站接口(网卡)名匹配,+用于通配。如 eth0, eth+ 。一般用在OUTPUT和POSTROUTING链
    • 隐式匹配
      -m PROTO 可以省略,所以叫隐式匹配
    
    -m tcp   //-p tcp的扩展
        --sport  [!]N[:M]                      //源端口, 服务名、端口、端口范围。
        --dport  [!]N[:M]                      //目标端口,服务名、端口、端口范围
        --tcp-flags CHECKFLAGS FLAGSOFTRUE  //TCP标志位:SYN(同步),ACK(应答),RST(重置),FIN(结束),URG(紧急),PSH(强迫推送)。多个标志位逗号分隔。
                             //CHECKFLAGS为要检查的标志位,FLAGSOFTRUE为必须为1的标志位(其余的应该为0)
        --syn                               //第一次握手。 等效于 --tcpflags syn,ack,fin,rst syn   四个标志中只有syn为1
    -m udp   //-p udp的扩展
        --sport N[-M]
        --dport N[-M]
    -m icmp  //隐含条件为-p icmp
        --icmp-type  N             //8:echo-request  0:echo-reply
    
    • 显示匹配
    
    -m state
        --state    //连接状态检测,NEW,ESTABLISHED,RELATED,INVALID
    -m multiport
        --source-ports   PORT[,PORT]...|N:M            //多个源端口,多个端口用逗号分隔,
        --destination-ports PORT[,PORT]...|N:M         //多个目的端口
        --ports                          //多个端口,每个包的源端口和目的端口相同才会匹配
    -m limit
        --limit   N/UNIT    //速率,如3/minute, 1/s, n/second , n/day
        --limit-burst N     //峰值速率,如100,表示最大不能超过100个数据包
    -m connlimit
        --connlimit-above N  //多于n个,前面加!取反
    -m iprange
        --src-range IP-IP
        --dst-range IP-IP
    -m mac
        --mac-source         //mac地址限制,不能用在OUTPUT和POSTROUTING规则链上,因为封包要送到网卡后,才能由网卡驱动程序透过ARP 通讯协议查出目的地的MAC 地址
    -m string
        --algo [bm|kmp]      //匹配算法
        --string "PATTERN"   //匹配字符模式
    -m recent
        --name               //设定列表名称,默认为DEFAULT
        --rsource            //源地址
        --rdest              //目的地址
        --set                //添加源地址的包到列表中
        --update             //每次建立连接都更新列表
        --rcheck             //检查地址是否在列表
        --seconds            //指定时间。必须与--rcheck或--update配合使用
        --hitcount           //命中次数。必须和--rcheck或--update配合使用
        --remove             //在列表中删除地址
    -m time
        --timestart h:mm
        --timestop  hh:mm
        --days DAYS          //Mon,Tue,Wed,Thu,Fri,Sat,Sun; 逗号分隔
    -m mark
        --mark N            //是否包含标记号N
    -m owner
        --uid-owner 500   //用来匹配来自本机的封包,是否为某特定使用者所产生的,可以避免服务器使用root或其它身分将敏感数据传送出
        --gid-owner O     //用来匹配来自本机的封包,是否为某特定使用者群组所产生的
        --pid-owner 78    //用来匹配来自本机的封包,是否为某特定进程所产生的
        --sid-owner 100   //用来匹配来自本机的封包,是否为某特定连接(Session ID)的响应封包
    

    ACTION 目标策略(TARGET)

    -j|--jump TARGET                //跳转到目标规则,可能加载target extension
    -g|--goto  CHAIN                //跳转到指定链,不再返回
    ACCEPT             规则验证通过,不再检查当前链的后续规则,直接跳到下一个规则链。
    DROP                直接丢弃数据包,不给任何回应。中断过滤。
    REJECT             拒绝数据包通过,会返回响应信息。中断过滤。
    --reject-with  tcp-reset|port-unreachable|echo-reply
    LOG                  在/var/log/messages文件中记录日志,然后将数据包传递给下一条规则。详细位置可查看/etc/syslog.conf配置文件
    --log-prefix "INPUT packets"
    ULOG                更广范围的日志记录信息
    QUEUE              防火墙将数据包移交到用户空间,通过一个内核模块把包交给本地用户程序。中断过滤。
    RETURN            防火墙停止执行当前链中的后续规则,并返回到调用链。主要用在自定义链中。
    custom_chain    转向自定义规则链
    DNAT                目标地址转换,改变数据包的目标地址。外网访问内网资源,主要用在PREROUTING。完成后跳到下一个规则链
    --to-destination ADDRESS[-ADDRESS][:PORT[-PORT]]
    SNAT                源地址转换,改变数据包的源地址。内网访问外网资源。主机的IP地址必须是静态的,主要用在POSTROUTING。完成后跳到下一个规则链。
    --to-source ADDRESS[-ADDRESS][:PORT[-PORT]]
    MASQUERADE   源地址伪装,用于主机IP是ISP动态分配的情况,会从网卡读取主机IP。直接跳到下一个规则链。
    --to-ports 1024-31000
    REDIRECT        数据包重定向,主要是端口重定向,把包分流。处理完成后继续匹配其他规则。能会用这个功能来迫使站点上的所有Web流量都通过一个Web高速缓存,比如Squid。
    --to-ports 8080
    MARK                 打防火墙标记。继续匹配规则。
    --set-mark 2
    MIRROR           发送包之前交换IP源和目的地址,将数据包返回。中断过滤。
    

    state TCP链接状态

    
    
    NEW                 第一次握手,要起始一个连接(重设连接或将连接重导向)
    ESTABLISHED   数据包属于某个已经建立的连接。第二次和第三次握手   (ack=1)
    INVALID           数据包的连接编号(Session ID)无法辨识或编号不正确。如SYN=1 ACK=1 RST=1
    RELATED          表示该封包是属于某个已经建立的连接,所建立的新连接。如有些服务使用两个相关的端口,如FTP,21和20端口一去一回,FTP数据传输(上传/下载)还会使用特殊的端口
    只允许NEW和ESTABLISHED进,只允许ESTABLISHED出可以阻止反弹式木马。

    使用示例

    iptables -F           //删除iptables现有规则
    iptables -L [-v[vv] -n]   //查看iptables规则
    iptables -t nat -A POSTROUTING -s 10.10.10.0/24 -o eth1 -j MASQUERADE    //在POSTROUTING链尾添加一条规则
    iptables -t nat -A POSTROUTING -s 20.20.20.0/24 -o eth1 -j MASQUERADE    //在POSTROUTING链中插入为第2条规则
    iptables -t nat -R POSTROUTING 2 -s 40.40.40.40 -o eth1 -j MASQUERAD     //替换修改第二条规则
    iptables -t nat -D POSTROUTING 2      //删除POSTROUTING链中第2条规则
    iptables -t nat -P POSTROUTING DROP    //设置默认策略为DROP
    
    //限制ping 192.168.146.3主机的数据包数,平均2/s个,最多不能超过3个
    iptables -A INPUT -i eth0 -d 192.168.146.3 -p icmp --icmp-type 8 -m limit --limit 2/second --limit-burst 3 -j ACCEPT 
    
    //限制SSH连接速率(默认策略是DROP)
    iptables -I INPUT 1 -p tcp --dport 22 -d 192.168.146.3 -m state --state ESTABLISHED -j ACCEPT
    iptables -I INPUT 2 -p tcp --dport 22 -d 192.168.146.3 -m limit --limit 2/minute --limit-burst 2 -m state --state NEW -j ACCEPT 
    
    //防止syn攻击(限制syn的请求速度)
    iptables -N syn-flood
    iptables -A INPUT -p tcp --syn -j syn-flood
    iptables -A syn-flood -m limit --limit 1/s --limit-burst 4 -j RETURN
    iptables -A syn-flood -j DROP 
    
    //防止syn攻击(限制单个ip的最大syn连接数)
    iptables –A INPUT –i eth0 –p tcp --syn -m connlimit --connlimit-above 15 -j DROP 
    
    iptables -I INPUT -p tcp -dport 22 -m connlimit --connlimit-above 3 -j DROP   //利用recent模块抵御DOS攻击
    iptables -I INPUT -p tcp --dport 22 -m state --state NEW -m recent --set --name SSH   //单个IP最多连接3个会话
    Iptables -I INPUT -p tcp --dport 22 -m state NEW -m recent --update --seconds 300 --hitcount 3 --name SSH -j DROP  //只要是新的连接请求,就把它加入到SSH列表中。5分钟内你的尝试次数达到3次,就拒绝提供SSH列表中的这个IP服务。被限制5分钟后即可恢复访问。
    
    iptables -I INPUT -p tcp --dport 80 -m connlimit --connlimit-above 30 -j DROP    //防止单个IP访问量过大
    iptables –A OUTPUT –m state --state NEW –j DROP  //阻止反弹木马
    iptables -A INPUT -p icmp --icmp-type echo-request -m limit --limit 1/m -j ACCEPT   //防止ping攻击
     

    参考原文:https://www.cnblogs.com/hftian/p/8280841.html

    原文地址:https://www.cnblogs.com/outsrkem/p/11183587.html

    时间: 2024-11-01 21:55:14

iptables简介及常用命令的相关文章

Linux的简介及常用命令

Linux的组成: 内核:是系统的心脏,是运行程序和管理像磁盘和打印机等硬件设备的核心程序. shell:是系统的用户界面,提供了用户和内核进行交互操作的一种接口.它接收用户输入的命令并把它送入内核去执行,是一个命令解释器.但它不仅使命令解释器,而且还是高级编程语言,shell编程. 文件系统:文件系统是文件存放在磁盘等存储设备上的组织方法,Linux支持多种文件系统,如:ext3,ext2,NFS,SMB,iso9660等 应用程序:标准的Linux操作系统都会有一套应用程序例如X-Windo

Git的原理简介和常用命令

Git和SVN是我们最常用的版本控制系(Version Control System, VCS),当然,除了这二者之外还有许多其他的VCS,例如早期的CVS等.顾名思义,版本控制系统主要就是控制.协调各个版本的文档内容的一致性,这些文档包括但不限于代码文件.图片文件等等.早期SVN占据了绝大部分市场,而后来随着Git的出现,越来越多的人选择将它作为版本控制工具,社区也越来越强大.相较于SVN,最核心的区别是Git是分布式的VCS,简而言之,每一个你pull下来的Git仓库都是主仓库的一个分布式版

Linux 简介和常用命令

Linux文件系统简介 在Linux操作系统中,所有被操作系统管理的资源,例如网络接口卡.磁盘驱动器.打印机.输入输出设备.普通文件或是目录都被看作是一个文件.  也就是说在LINUX系统中有一个重要的概念:一切都是文件.其实这是UNIX哲学的一个体现,而Linux是重写UNIX而来,所以这个概念也就传承了下来. Linux的目录结构如下: Linux文件系统的结构层次鲜明,就像一棵倒立的树,最顶层是其根目录: 常见目录说明: /bin: 存放二进制可执行文件(ls,cat,mkdir等),常用

Docker-Compose简介及常用命令

1.Docker-Compose简介 Docker-Compose项目是Docker官方的开源项目,负责实现对Docker容器集群的快速编排.Docker-Compose将所管理的容器分为三层,分别是工程(project),服务(service)以及容器(container).Docker-Compose运行目录下的所有文件(docker-compose.yml,extends文件或环境变量文件等)组成一个工程,若无特殊指定工程名即为当前目录名.一个工程当中可包含多个服务,每个服务中定义了容器运

yum 简介及其常用命令

yum(全 称为 Yellow dogUpdater, Modified)是一个在Fedora和RedHat以及SUSE中的Shell前端软件包管理器.基於RPM包管理,能够从指定的服务器自动下载 RPM包并且安装,可以自动处理依赖性关系,并且一次安装所有依赖的软体包,无须繁琐地一次次下载.安装.yum提供了查找.安装.删除某一个.一组甚至 全部软件包的命令,而且命令简洁而又好记 特点 可以同时配置多个资源库(Repository)简洁的配置文件(/etc/yum.conf)自动解决增加或删除r

Linux文件系统简介及常用命令

在linux系统中一切皆是文件,下面简要总结了一下linux文件系统中分区类型.文件系统类型以及常用命令. 一.分区类型1.主分区:最多只能有四个2.扩展分区:只能有一个,也可以看做是主分区的一种.即主分区加扩展分区最多只能有四个.但是扩展分区不能存储数据和格式化,必须要划分成逻辑分区才能使用.3.逻辑分区:是在扩展分区中划分得到的,分区号从5开始(1-4被主分区和扩展分区占用),如果是IDE硬盘linux最多支持59个逻辑分区,如果是SCSI硬盘linux最多支持11个逻辑分区. 格式化:写入

Linux简介及常用命令使用4--linux高级命令与技巧

top 几个磁盘fdisk -l 磁盘空间 df -lhdf -al 查看进程:ps -ef"grep java杀死进程:kill -9 进程号 more中过滤 more xxx |grep www.makaidong.com 安装linux后配置ip Vim /etc/sysconfig/network-scripts/ifcfg-eth5IPADDR=192.168.42.142NETMASK=255.255.255.0GATEWAY=192.168.42.1 启动关闭网卡Ifdown et

yum简介及常用命令

yum的简介 Yum是一个shell前端软件包管理器,基于RPM包管理,能够从指定的服务器自动下载RPM包并安装,可以自动处理依赖关系,并且一次安装所有依赖的软件包,从而实现统一管理 yum的提供方式 以下具体配置可见其他文档,1和2为离线配置,3在线为网络配置 1.本地或光盘镜像方式:如file:///mnt/cdrom  (需要挂载,才能使用) 2.服务端和客户端方式:如http://192.168.1.100/Centos 或ftp://192.168.1.100/Centos 注:第二种

Linux简介及常用命令使用3--vi编辑器

1.进入vi的命令 vi filename :打开或新建文件,并将光标置于第一行首 [新建文件]vi +n filename :打开文件,并将光标置于第n行首 [比如:某个shell报错的行数时使用]vi + filename :打开文件,并将光标置于最后一行首 [追加功能]vi +/pattern filename:打开文件,并将光标置于第一个与pattern匹配的串处 [vi +/.com makaidong][vi +/is makaidong] insert 输入 再按一次:覆盖[覆写]