iptables命令提取总结<取自朱双印博客>

以下内容只是一些命令相关的,以朱双印博客中的iptables的教程提取出来的。纯粹只是命令的总结,如果需要看理论的知识,建议去看朱老师的博客,目前还没有看到写得比这个好的了。

<http://www.zsythink.net/archives/category/%e8%bf%90%e7%bb%b4%e7%9b%b8%e5%85%b3/%e9%98%b2%e7%81%ab%e5%a2%99/>

看完朱老师的博客,理论上面是理解过了,但是一些命令的东西总是要返回去找,所以自已就提取了下一些命令,写成下面的这篇了。

报文流向

1. 到本机某进程的报文: prerouting--> input

2. 由本机转发的报文:prerouting-->forward-->postrouting

3. 由本机某进程发出的报文:output-->postrouting

表,所有的规则都是以下四种分类的规则,所有的表都存于这四个表中

1. filter 表,负责过滤功能,防火墙,内核模块: iptables_filter

2. nat表,network address translation,网络地址转换功能,内核模块iptables_nat

3. mangle表,拆解报文,做出修改,并重新封装的功能:iptables_mangle

4. raw表,关闭nat表上启用的连接追踪机制;iptables_raw

下图是路由次序图:

其实iptables相关的规则均由匹配条件和处理动作组成,条件包含通常所说的,端口号,IP地址,等.而动作的话,包含以下:

ACCEPT: 允许

DROP: 直接丢弃,不给回应信息,客户端过了超时时间才会有反应

REJECT: 拒绝数据包通过,会有回应信息,客户端刚请求就会收到拒绝的信息

SNAT: 源地址转换,解决内网用户用同一个公网地址上网的问题

MASQUERADE: 是SNAT的一种特殊开工,适用于动态的,临时会变的IP上

DNAT: 目标地址转换

REDIRECT: 在本机做端口映射

LOG:在/var/log/message文件中记录日志信息,然后将数据包传给下一条规则,只做记录,不做其它任何操作,仍然让下一条规则去匹配

IPTABLES命令参数说明:

#iptables

-t 指定要操作的表【raw,mangle,nat,filter -- 如果没有使用-t选项指定表,默认为filter表】

-L 列出规则

--line-number 可以查看的时候显示序号【--line (centos中可缩写)】

-n 不对IP地址进行名称反解,直接显示IP地址【anywhere,0.0.0.0/0】

-v 显示更详细的信息【报文个数,对应匹配的报文大小总和,等】

-x 显示精确匹配到计数值

-A 表示在需要添加的规则表中进行添加

-I [=大写的 i ] 表示表需要添加的规则表中进行插入到指定的位置,默认为开始【-I INPUT 2 指定位置】

-D 删除规则

-R 修改规则【必须明确指定规则对应原本的匹配条件,建议-D先删除,再来添加】

-s 报文的源地址

-d 报文的目标地址

-p 协议类型

【-p tcp --dport 22】--dport 报文的目的端口

【-p tcp --sport 22】--sport 报文的源端口

【-p tcp -m multiport --dports 25,110,143,80】使用multiport指定多个端口

-i 指定网卡接口

-m 指定的扩展模块

-N 创建自定义链

【iptables -t filter -N IN_WEB】

添加规则

【iptables -F INPUT清空filter表INPUT链中的规则.】

屏蔽某个IP【拒绝192.168.1.11上所有的报文访问当前机器,可省略-t filter】

iptables -t filter -I INPUT -s 192.168.1.11 -j DROP

【-I为插入规则,-s为IP,-j DROP为屏蔽动作】

iptables -t filter -I INPUT 2 -s 192.168.1.11 -j DROP

删除规则

查看规则【根据需要来查看,以下为查看filter表中的INPUT链中的规则】

iptables --line -vnL INPUT

删除上面查看出来的第三条规则【删除filter表中的INPUT链中的第三条规则】

iptables -t filter -D INPUT 3

根据具体的匹配条件与动作来删除规则【需要知道添加的规则,可以使用iptables -nvL进行查看】

iptables -D INPUT -s 192.168.1.11 -j DROP

保存防火墙规则,如果你误操作了,并且没有保存,那么重启防火墙将会恢复到配置文件中的模样

service iptables save

iptables-save > /etc/sysconfig/iptables【iptables-save是将当前的规则以保存后的格式输入到屏幕上,再利用重定向保存到配置文件中】

Centos 6系列会保存在 /etc/sysconfig/iptables 文件中

重新载入规则【重载规则,现有的规则会被覆盖】

iptables-restore < /etc/sysconfig/iptables

参数-s格式【-d也可以参考下面格式】

单IP

-s 192.168.1.11

多IP

-s 192.168.1.11,192,168.4.2

指定 IP段

-s 10.6.0.0/16

取反【不满足源IP为192.168.1.11的报文进行INPUT链默认操作,并不表示拒绝*注意,与默认规则有关】

! -s 192.168.1.11

【iptables -t filter -A INPUT ! -s 192.168.1.11 -j ACCEPT】

-p格式【不使用-p的时候表示所有协议】

Centos 6

tcp,udp,udplite,icmp,esp,ah,sctp

Centos 7

tcp,udp,udplite,icmp,icmpv6,esp,ah,sctp,mh

指定端口

【-p tcp --dport 22】--dport 报文的目的端口

【-p tcp --sport 22】--sport 报文的源端口

取反

-p tcp ! --dport 22 【表示目标端口不是22端口则会被匹配到】

取一个范围

-p tcp --dport 22:25【表示22到25端口之间所有的端口,22,23,24,25】

-p tcp --dport :22 【表示0到22端口】

-p tcp --dport 80: 【表示80到65535端口】

【-m multiport 扩展模块只可以用于tcp协议与udp协议,即配合-p tcp或者-p udp使用,后面接的--dport变为了--dports】

-p tcp -m multiport --dports 25,110,143,80 【表示匹配多个离散的目标端口,注意其中使用-m multiport模块】

-p tcp -m multiport --dports 22,80:88 【可以指定连续端口范围并且可以添加离散端口号】

【完整例】

iptables -t filter -I INPUT -s 192.168.1.11 -p tcp -m multiport --dports 25,110,143,80 -j DROP

-m格式

-m表示指定的模块

iptables -t filter -I INPUT -s 192.168.1.11 -p tcp -m tcp --dport 22 -j REJECT

但是与前面-p选项对应的协议名称相同的模块,所以可以忽略【如果是-m udp不则,就不可以忽略了】

iptables -t filter -I INPUT -s 192.168.1.11 -p tcp --dport 22 -j REJECT

扩展模块

【-m multiport】

看上面的-p选项,已经说明了

【-m iprange】指定一段连续的IP地址范围

【-m iprange --src-range或-m iprange --dst-range】

支持使用"!"取反

屏蔽源IP地址192.168.1.100到192.168.1.200之间的来源报文

iptables -t filter -I INPUT -m iprange --src-range 192.168.1.100-192.168.1.200 -j DROP

【string扩展模块】

报文中包含对应的字符串,如果某个网页的内容是OOXX

#curl 192.168.1.146/index.html

OOXX

#iptables -t filter -I INPUT -m string --algo bm --string "OOXX" -j REJECT

--algo:指定匹配算法,可选算法:bm与kmp此选项为必须选项

--string:用于指定需要匹配的字符串

【time扩展模块】

指定每天9点至18点不可以看网页<访问80与443端口>

#iptables -t filter -I OUTPUT -p tcp --dport 80 -m time --timestart 09:00:00 --timestop 18:00:00 -j REJECT

#iptables -t filter -I OUTPUT -p tcp --dport 443 -m time --timestart 09:00:00 --timestop 18:00:00 -j REJECT

--timestart起始时间

--timestop结束时间

-m time --weekdays 6,7【限定周六日,可以使用数字,也可以使用Mon,Tue,Wed,Thu,Fri,Sat,Sun】

【weekdays与timestart、timestop结合】---限定周六日的9点至18点不可以访问80端口

#iptables -t filter -I OUTPUT -p tcp --dport 80 -m time --timestart 09:00:00 --timestop 18:00:00 --weekdays 6,7 -j REJECT

--monthdays选项,可以指定每个月的哪 一天

每个月的第4个星期5

-m time --weekdays 5 --monthdays 22,23,24,25,26,27,28

使用--datestart选项与--datestop选项,指定具体的日期范围

-m time --datestart 2018-06-22 --datestop 2018-06-30

--monthdays与--weekdays可以使用“!"取反,其它的不可以

【connlimit扩展模块】

限制每个IP地址同时链接到server端的链接数量,不用指定Ip,默认就是针对每个客户端IP

限制每个Ip地址最多只能占用两个SSH连接到server端

#iptables -I INPUT -p tcp --dport 22 -m connlimit --connlimit-above 2 -j REJECT

------connlimit-above 2表示限制每个IP链接数量上限为2,可以利用“!"取反

--connlimit-mask 24限定某类网段

结合例:<24网段最多有两个ssh客户端连接到当前服务器>

#iptables -t filter -I INPUT -p tcp --dport 22 -m connlimit --connlimit-above 2 --connlimit-mask 24 -j REJECT

【limit扩展模块】

limit模块是对”报文到达速率“进行限制的,<限制单独时间内流入包的数量>

例:先清除规则,避免其它的规则影响,再设置速度,再做包过滤

#iptables -F

#iptables -t filter -I INPUT -p icmp -m limit --limit 10/minute -j ACCEPT

#iptables -t filter -A INPUT -p icmp -j REJECT

--limit-burst <令牌桶的概念>,令牌桶中最多存放3个令牌,每分钟生成10个令牌(第6秒生成一个令牌)

时间单位可以使用/second 秒 /minute 分 /hour 时 /day 天

#iptables -t filter -I INPUT -p icmp -m limit --limit-burst 3 --limit 10/minute -j ACCEPT

#iptables -t filter -A INPUT -p icmp -j REJECT

【--tcp-flags】

详解看如下朱双印老师博客的说明:

http://www.zsythink.net/archives/1578

用于匹配报文的tcp头的标志位

例:

#iptables -t filter -I INPUT -p tcp -m tcp --dport 22 --tcp-flags SYN,ACK,FIN,RST,URG,PSH SYN -j REJECT

#前面省略 --tcp-flags SYN,ACK,FIN,RST,URG,PSH SYN,ACK -j REJECT

#前面省略 --tcp-flags ALL SYN -j REJECT

#前面省略 --tcp-flags ALL SYN,ACK -j REJECT

--syn 用于匹配tcp新建连接的请求报文 ,相当于使用”--tcp-flags SYN,RST,ACK,FIN SYN"

#iptables -t filter -I INPUT -p tcp -m tcp --dport 22 --syn -j REJECT

【-icmp】

详细看下面链接中朱双印老师的讲解

http://www.zsythink.net/archives/1588

禁止所有icmp类型的报文进入本机<无法发送ping,也无法接收ping>

#iptables -t filter -I INPUT -p icmp -j REJECT

可以ping通别人,但是别人无法ping通我们

#iptables -t filter -I INPUT -p icmp -m icmp --icmp-type 8/0 -j REJECT

也可以使用报文描述去匹配<空格需要替换为->,效果同上面

#iptables -t filter -I INPUT -p icmp -m icmp --icmp-type "echo-request" -j REJECT

【state模块】

链接报文状态

有五种状态:

NEW: 连接的第一包

ESTABLISHED:NEW状态包后面的包状态理解,表示连接已建立

RELATED:数据进程连接--数据连接<如FTP中的数据连接>

INVALID:包没有办法被识别,或者空上包没有任何状态,可以主动屏蔽INVALID的报文

UNTRACKED:未被追踪的报文 ,当报文的状态为Untracked时通常表示无法找到相关的连接

####

如何判断报文是否是为了回应之前发出的报文,如果不是拒绝

#iptables -t filter -I INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT

#iptables -t filter -I INPUT -j REJECT

《上面这句是表示不是的报文作何处理》

【-N 自定义链】

创建自定义链

#iptables -t filter -N IN_WEB

将规则添加至自定义链中

#iptables -t filter -I IN_WEB -s 192.168.1.123 -j REJECT

#iptables -I IN_WEB -s 192.168.1.188 -j REJECT

查看自定义链规则

#iptables -t filter --line -nvL IN_WEB

将访问本机的80端口匹配到这条规则

#iptables -I INPUT -p tcp --dport 80 -j IN_WEB

重命名自定义链

#iptables -E IN_WEB WEB

删除自定义链,要先删除引用,清除自定义链规则

#iptables -D INPUT 1

#iptables -t filter -F WEB

#iptables -t filter -X WEB

【LOG动作】

将所有发往22端口的报文相关信息记录在日志中

<如果使用此日志功能,建议尽可能的将条件匹配得精确一些>

#iptables -I INPUT -p tcp --dport 22 -j LOG

【修改日志路径】

#vim /etc/rsyslog.conf

添加如下信息:

#kern.warning /var/log/iptables.log

重启rsyslog服务(或者syslogd)

#service rsyslog restart

--log-level 日志级别:emerg, alert,crit,error,warning,notice,info,debug

--log-prefix 可以给记录到日志的相关信息添加“标签”之类的信息,(*注意:不可超过29个字符)

例:<将所有主动连接22端口的报文信息均记录到日志中(其中有使用到state模块,相关的看上面的这模块说明)>

#iptables -I INPUT -p tcp --dport 22 -m state --state NEW -j LOG --log-prefix "want-in-from-port-22"

【网络防火墙】

添加路由,访问某网段,指定走某路由

#route add -net 10.1.0.0/16 gw 192.168.1.146

设置转发报文

(临时办法有下面两种)

#cat /proc/sys/net/ipv4/ip_forward <内容为0表示不转发>

#echo 1>/proc/sys/net/ipv4/ip_forward

或者如下办法:

#sysctl -w net.ipv4.ip_forward=1

(永久生效办法)

#/etc/sysctl.conf (centos7为/usr/lib/sysctl.d/00-system.conf文件) 添加 net.ipv4.ip_forward=1即可

在FORWARD链的末端添加一条默认拒绝所有转发的规则

#iptables -A FORWARD -j REJECT

添加一条允许10.1/16段的所有的IP均可正常的访问外部主机的web请求(注意进出均要放行)

#iptables -I FORWARD -s 10.1.0.0/16 -p tcp --dport 80 -j ACCEPT

上面的是访问报文的规则,下面的是响应报文的规则,但是响应的这样相对麻烦

#iptables -I FORWARD -s 10.1.0.0/16 -p tcp --sport 80 -j ACCEPT

可以按下面的办法,添加一条规则,将所有的响应的报文均放行,这样就不用重复的添加了<此条规则为所有的响应报文均放行,疑问的话,参考上面的state规则>

#iptables -I FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT

如:在上面的基础上,需要再开放转发访问22端口的话。

#iptables -I FORWARD -s 10.1.0.0/16 -p tcp --dport 22 -j ACCEPT

【SNAT--也称源地址转换】

内网机器设置网关为iptables机器的中转IP

1. 内网机器网关设置<gateway>

2. 开启服务器的转发设置<echo 1>/proc/sys/net/ipv4/ip_forward>

<10为内网服务器网段,146为服务器的公网IP地址,就是将内网服务器访问过来的报文修改为192.168.1.146,然后再发送出去>

#iptables -t nat -A POSTROUTING -s 10.1.0.0/16 -j SNAT --to-source 192.168.1.146

【DNAT】

先清空表数据, 146为公司的公网地址<也可以理解为服务器的公网地址>,目标端口为3389,进行目标地址转换

将访问公网146的3389端口,会被映射到10.1.0.6的3389端口上(注意:设置之前,可能需要设置一下SNAT)

#iptables -t nat -F

#iptables -t nat -I PREROUTING -d 192.168.1.146 -p tcp --dport 3389 -j DNAT --to-destination 10.1.0.6:3389

#iptables -t nat -I PREROUTING -d 192.168.1.146 -p tcp --dport 801 -j DNAT --to-destination 10.1.0.1:80

【MASQUERADE --动态IP的SNAT】

SNAT相同的动作,但是是将IP修改为eth1网卡上可用的IP地址

#iptables -t nat -I POSTROUTING -s 10.1.0.0/16 -o eth1 -j MASQUERADE

【REDIRECT】

将本机的80端口映射到本机的8080端口上

#iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-ports 8080

原文地址:https://www.cnblogs.com/drgcaosheng/p/9224458.html

时间: 2024-08-13 18:42:50

iptables命令提取总结<取自朱双印博客>的相关文章

Python爬取韩寒所有新浪博客

接上一篇,我们依据第一页的链接爬取了第一页的博客,我们不难发现,每一页的链接就仅仅有一处不同(页码序号),我们仅仅要在上一篇的代码外面加一个循环,这样就能够爬取全部博客分页的博文.也就是全部博文了. # -*- coding : -utf-8 -*- import urllib import time url = [' ']*350 page = 1 link = 1 while page <=7://眼下共同拥有7页.3 con = urllib.urlopen('http://blog.si

潜移默化学会WPF--Command(命令)学习(三) - AYUI框架 - 博客园

原文:潜移默化学会WPF--Command(命令)学习(三) - AYUI框架 - 博客园 3.修炼 3.1 自定义命令 涉及到的一些概念,例如 InputGestureCollection这个集合,路由命令(RoutedUICommand)等我们不用太紧张,潜移默化学会他们的用法,Ok,学习吧 先看代码,先看后台 using System.Collections.Generic;using System.Text;using System.Windows;using System.Window

潜移默化学会WPF--Command(命令)学习(二) - AYUI框架 - 博客园

原文:潜移默化学会WPF--Command(命令)学习(二) - AYUI框架 - 博客园 2. 基本功 2.1 先看一段代码 前台页面上的 1 <Window x:Class="Commands.SimpleDocument" 2 xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 3 xmlns:x="http://schemas.microsoft.com/winf

潜移默化学会WPF--Command(命令)学习(一) - AYUI框架 - 博客园

原文:潜移默化学会WPF--Command(命令)学习(一) - AYUI框架 - 博客园 1.Command心法 1.1 接触 在窗体上可以定义<Window.CommandBindings>,这个跟 资源 类比,然后这样定义 <Window.CommandBindings> <CommandBinding Command="ApplicationCommands.New" Executed="NewCommand" /> &l

使用JAVA爬取博客里面的所有文章

主要思路: 1.找到列表页. 2.找到文章页. 3.用一个队列来保存将要爬取的网页,爬取队头的url,如果队列非空,则一直爬取. 4.如果是列表页,则抽取里面所有的文章url进队:如果是文章页,则直接爬取至本地. 一个博客是起始页url是这样的: http://www.cnblogs.com/joyeecheung/ 第n页是这样的: http://www.cnblogs.com/joyeecheung/default.html?page=n 文章的url是这样的: http://www.cnb

Python爬取CSDN专家博客系类——移动开发

文章分为两部分:爬取移动开发专家的姓名和博客首页地址,爬取每个专家的所有博客存放在已该专家名字命名的txt文件中 说明:本爬虫主要是采用BeautifulSoup和少量的正则匹配,在第一部分抓取完毕后需要将文件格式改为ANSI,代码如下: 第一部分: 第二部分: 结果如下图: 版权声明:本文为博主原创文章,未经博主允许不得转载.

iptables命令基本用法(2)

iptables命令基本用法 # man iptables NAME        iptables - administration tool for IPv4 packet filtering and NAT SYNOPSIS        iptables [-t table] {-A|-C|-D} chain rule-specification        iptables [-t table] -I chain [rulenum] rule-specification       

iptables命令应用实例

iptables 优化规则:尽量减少规则条目,彼此不相关的匹配,用较多放在上面,属于同一功能匹配规则更严格的放在上面 一.netfilter:     四个表:raw,mangle,nat,filter     五链:PREROUTING,INPUT,FORWARD,OUTPUT,POSTROUTING     分别在那些链上使用         filter:INPUT,FORWARD,OUTPUT         nat:PREROUTING(DNAT),POSTROUTING(SNAT),

linux下iptables命令的应用与详解

一.iptables的规则表和链. 表(tables)提供特定的功能,iptables内置了4个表,即filter表.nat表.mangle表和raw表,分别用于实现包过滤,网络地址转换.包重构(修改)和数据跟踪处理.   链(chains)是数据包传播的路径,每一条链其实就是众多规则中的一个检查清单,每一条链中可以有一 条或数条规则.当一个数据包到达一个链时,iptables就会从链中第一条规则开始检查,看该数据包是否满足规则所定义的条件.如果满足,系统就会根据 该条规则所定义的方法处理该数据