相关文件

  • 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

防火墙结构

  • 四表五链
 <th colspan="2">四张功能表</th>
</tr> <tr>
<td width="150px">raw</td>
<td width="600px">快速通道功能。标记、追踪</td>
</tr>
<tr>
<td>mangle</td>
<td>数据包修改功能,修改报文元数据,做防火墙标记等</td>
</tr> <tr>
<td>nat</td>
<td>路由转换功能</td>
</tr> <tr>
<td>filter</td>
<td>报文过滤</td>
</tr>
 <th colspan="2">五个规则链</th>
</tr> <tr> <td width="150px">PREROUTING</td>
<td width="600px">路由前,数据包刚进入网络接口之后</td>
</tr>
  <td>INPUT</td>
<td>数据包从内核流入用户空间。</td>
</tr>
<tr>
<td>FORWARD</td>
<td>在内核空间中,从一个网络接口进入,到另一个网络接口去。转发过滤。</td>
</tr>
<tr>
<td>OUTPUT</td>
<td>数据包从用户空间流出到内核空间。</td>
</tr>
<tr>
<td>POSTROUTING</td>
<td>路由后,数据包离开网络接口前。</td>
</tr>

### 规则链内的匹配顺序,按顺序依次检查,匹配即停止(LOG 策略例外),若找不到相匹配规则,则按该链的默认策略处理

<tr>
<td width="150px" style="text-align:center ">raw</td>
<td width="150px" style="text-align:center ">mangle</td>
<td width="150px" style="text-align:center ">nat</td>
<td width="150px" style="text-align:center ">filter</td>
</tr> <tr style="text-align:center ">
<td >PREROUTING</td>
<td >PREROUTING</td>
<td >PREROUTING</td>
<td >INPUT</td>
</tr>
<tr style="text-align:center ">
<td >OUTPUT</td>
<td >POSTROUTING</td>
<td >POSTROUTING</td>
<td >FORWARD</td>
</tr>
<tr style="text-align:center ">
<td ></td>
<td >INPUT</td>
<td >OUTPUT</td>
<td >OUTPUT</td>
</tr>
<tr style="text-align:center ">
<td ></td>
<td >OUTPUT</td>
<td ></td>
<td ></td>
</tr>
<tr style="text-align:center ">
<td ></td>
<td >FORWARD</td>
<td ></td>
<td ></td>
</tr>
规则链内的匹配顺序

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

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

  1. centos 7 防火墙firewall 与iptables 的一些常用命令

    CentOS 7的防火墙配置跟以前版本有很大区别,CentOS7这个版本的防火墙默认使用的是firewall,与之前的版本使用iptables不一样. firewall常用命令 service fir ...

  2. Git的原理简介和常用命令

    Git和SVN是我们最常用的版本控制系(Version Control System, VCS),当然,除了这二者之外还有许多其他的VCS,例如早期的CVS等.顾名思义,版本控制系统主要就是控制.协调 ...

  3. Docker-Compose简介及常用命令

    1.Docker-Compose简介 Docker-Compose项目是Docker官方的开源项目,负责实现对Docker容器集群的快速编排.Docker-Compose将所管理的容器分为三层,分别是 ...

  4. Nginx学习——简介及常用命令

    Nginx简介 Nginx是什么 同Apache一样,都是一种WEB服务器 基于REST架构风格,以统一资源描述符(URI)或者统一资源定位符(URL)作为沟通依据,通过HTTP协议提供各种网络服务 ...

  5. Phoneix(一)简介及常用命令

    一.简介 Apache Phoneix是运行在HBase之上的高性能关系型数据库,通过Phoneix可以像使用jdbc访问关系型数据库一样访问HBase. Phoneix操作的表以及数据存储在HBas ...

  6. adb 简介与常用命令

    1. abd 简介 2. adb 常用命令 1. abd 简介 adb 的全称为 Android Debug Bridge,就是起到调试桥的作用. 借助 adb 工具,我们可以管理设备或手机模拟器的状 ...

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

    在linux系统中一切皆是文件,下面简要总结了一下linux文件系统中分区类型.文件系统类型以及常用命令. 一.分区类型1.主分区:最多只能有四个2.扩展分区:只能有一个,也可以看做是主分区的一种.即 ...

  8. hadoop(十一)HDFS简介和常用命令介绍

    HDFS背景 随着数据量的增大,在一个操作系统中内存不了了,就需要分配到操作系统的的管理磁盘中,但是不方便管理者维护,迫切需要一种系统来管理多态机器上的文件,这就是分布式文件管理系统. HDFS的概念 ...

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

    top 几个磁盘fdisk -l 磁盘空间 df -lhdf -al 查看进程:ps -ef"grep java杀死进程:kill -9 进程号 more中过滤 more xxx |grep ...

随机推荐

  1. Redis安装笔记

    到官网查找到最新版本https://redis.io/download ————————————————设置防火墙入站规则 iptables -I INPUT -p tcp –dport -j ACC ...

  2. Hexo next 添加复制粘贴代码的功能

    文章目录 广告: 自己的方式 感谢 广告: 本人博客地址:https://mmmmmm.me 源码:https://github.com/dataiyangu/dataiyangu.github.io ...

  3. Jlink 接口定义

    JTAG有10pin的.14pin的和20pin的,尽管引脚数和引脚的排列顺序不同,但是其中有一些引脚是一样的,各个引脚的定义如下. 1. 引脚定义 Test Clock Input (TCK) -- ...

  4. 2019山东省ACM省赛菜鸡的赛后总结

    省赛总结 2019-05-13 21:27:40 虽然第一次就死的这么难看,但是的确发现了很多问题,我想这是未来我和我的队友要解决的,而不是去难过,去感慨自己是有多菜.在大一训练结束马上参加暑假集训的 ...

  5. upc组队赛3 Iranian ChamPions Cup

    Iranian ChamPions Cup 题目描述 The Iranian ChamPions Cup (ICPC), the most prestigious football league in ...

  6. log4j日志记录到数据库

    log4j API提供 org.apache.log4j.jdbc.JDBCAppender 对象,它能够将日志信息在指定的数据库. JDBCAppender 配置: Property 描述 buff ...

  7. yum安装LAMP

    安装LAMP环境二进制包安装,先更新yum源,PHP 7.0.33 扩展可选 yum -y install mysql mysql-server mysql-devel httpd httpd-dev ...

  8. python图像、视频转字符画

    python图像转字符画需要用到matplotlib.pyplot库,视频转字符画需要用到opencv库,这里的代码基于python 3.5 图像转字符画需要先将图像转为灰度图,转灰度图的公式是 gr ...

  9. SpringData 完全入门指南

    SpringData 笔记 1. 配置项目 1.pom.xml <?xml version="1.0" encoding="UTF-8"?> < ...

  10. LINUX搭建网站环境教程

    安装Mysql yum install mysql-server -y 启动Mysql service mysqld restart 此实验使用 mysql 默认账户名和密码,您也可以设置自己的 My ...