iptables

概念

5个链

数据包会依次经过不同的链。

我们可以创建“自定义链”,作为默认链的target使用。

4个表

相似的规则放在一个表中,一个表只能适用于某些链上。

iptables为我们提供了如下”表”:

(1)filter表:过滤数据包。

(2)nat表:网络地址转换。

(3)mangle表:拆解报文,做出修改,并重新封装。

(4)raw表:关闭nat表上启用的连接追踪机制。

表的优先顺序:

raw -> mangle -> nat -> filter

表适用的链:

数据经过防火墙的流程

规则

查询规则

# -t 指定表名,查看filter中所有链
iptables -t filter -L
# 默认为filter表
iptables -L
# 只查看INPUT链
iptables -L INPUT
# 查看更详细的信息
iptables -vL
# 不对IP地址进行名称反解,直接显示IP地址
iptables -nL
# 显示编号
iptables --line-numbers -L

增加规则

iptables命令格式:

iptables [-t 表] -命令 匹配 动作

(1)-t 表

raw, mangle, nat, filter

(2)命令

-P  --policy		链 target    定义默认策略
-L  --list			[]         查看规则列表
-A  --append		链           追加1条规则
-I  --insert[num]		插入1条规则(默认第一条)
-D  --delete		链 num		删除1条规则(1表示第一条)
-D  --delete		链			删除1条规则(根据匹配删)
-R  --replace		链 num		替换规则
-F  --flush			[]			删除链中或所有链中的规则
-Z  --zero			[[num]]	将表中数据包计数器和流量计数器归零
-X  --delete-chain	链			删除自定义链
-N  --new			链			创建自定义链
-E	--rename-chain	旧链 新链	  修改链名

(3)匹配,见后面

(4)动作,见后面

修改规则

例子:

iptables -t filter -R INPUT 1 -s 192.168.1.146 -j REJECT

-s选项以及对应的源地址不可省略,即使我们已经指定了规则对应的编号,但是在使用-R选项修改某个规则时,必须指定规则对应的原本的匹配条件(如果有多个匹配条件,都需要指定)。

既然使用-R选项修改规则时,必须指明规则原本的匹配条件,那么我们则可以理解为,只能通过-R选项修改规则对应的动作了。

保存规则

使用iptables程序建立的规则只会保存在内存中,通常我们在修改了iptables的规则重启 iptables 后,之前修改的规则又消失了。那么如何保存新建立的规则呢?

方法1:

使用service iptables save将当前内存中的规则保存到/etc/sysconfig/iptables文件中。

方法2:

修改/etc/sysconfig/iptables-config将里面的IPTABLES_SAVE_ON_STOP="no", 这一句的"no"改为"yes"这样每次服务在停止之前会自动将现有的规则保存在/etc/sysconfig/iptables这个文件中去。

导出/导入规则

iptables-save >/dd/iptables.bak

iptables-restore </dd/iptables.bak

自定义链

创建自定义链:

iptables -t filter -N IN_WEB

在自定义链上创建规则:

iptables -t filter -I IN_WEB -s 192.168.1.139 -j REJECT

引用自定义链(作为其他规则的动作):

iptables -t filter -I input -p tcp --dport 80 -j IN_WEB

删除自定义链:

iptables -t nat -X IN_WEB

规则-匹配

基础匹配

-i	--in-interface	网络接口	指定数据包从哪个网络接口进入
-o	--out-interface	网络接口	指定数据包从哪个网络接口输出
-p	--proto			协议类型	指定数据包匹配的协议,如TCP、UDP和ICMP等
-s	--source		源地址/子网(多个ip用逗号分隔)
-d  --destination	目的地址/子网(多个ip用逗号分隔)
	--sport			源端口号
	--dport			目的端口号
-m	--match			匹配的模块	指定数据包规则所使用的过滤模块
! -i				取反

匹配端口范围

--dport 22:25
--dport :22
--dport 80:

匹配多个离散端口

-m multiport --dports 22,36,80:88

iprange模块

-m iprange --src-range 10.0.0.1-10.0.0.99

string模块

-m string --algo bm --string "OOXX"

time模块

# 根据时间匹配报文
-m time --timestart 09:00:00 --timestop 18:00:00
-m time --datestart 2017-12-24 --datestop 2017-12-27
-m time --weekdays 6,7
-m time --monthdays 22,23

connlimit模块

# 单IP的并发链接数最大为2
-m connlimit --connlimit-above 2
# 24位掩码的网段中,所有IP共享最大链接数为2
-m connlimit --connlimit-above 2 --connlimit-mask 24

limit模块

# 限制报文到达速率(每6秒放行一个ping包)
iptables -F
# 第6秒的包,放行
iptables -t filter -I INPUT -p icmp -m limit --limit 10/minute --limit-burst 5 -j ACCEPT
# 前5秒的包,拒绝
iptables -t filter -A INPUT -p icmp -j REJECT

# 理解:每6秒产生一个令牌,最多能同时存在5个令牌,放行一个包需消耗一个令牌。所以前5个ping包会放行。

icmp模块

# 禁止所有ping包
iptables -t filter -I INPUT -p icmp -j REJECT
# 禁止type为8,code为0的ping包进入(即外面不能ping本机)
iptables -t filter -I INPUT -p icmp --icmp-type 8/0 -j REJECT
# 因为type为8的类型下只有一个code为0的类型,所以我们可以省略对应的code
iptables -t filter -I INPUT -p icmp --icmp-type 8 -j REJECT
# 还能用icmp报文的描述名称去匹配对应类型的报文
iptables -t filter -I INPUT -p icmp --icmp-type "echo-request" -j REJECT
# 禁止本机发送ping应答包
iptables -t filter -I INPUT -p icmp --icmp-type 0/0 -j REJECT

参数 --tcp-flags

范例:iptables -p tcp --tcp-flags SYN,FIN,ACK SYN

说明:比对 TCP 封包的状态标志号,参数分为两个部分,第一个部分列举出想比对的标志号,第二部分则列举前述标志号中哪些有被设,未被列举的标志号必须是空的。TCP 状态标志号包括:SYN(同步)、ACK(应答)、FIN(结束)、RST(重设)、URG(紧急)PSH(强迫推送) 等均可使用于参数中,除此之外还可以使用关键词 ALL 和 NONE 进行比对。

参数 -m mark --mark

范例:iptables -t mangle -A INPUT -m mark --mark 1

说明:比对是否被打上某个标签

参数 -m state --state

范例: iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT

说明:用来比对联机状态,联机状态共有四种:INVALID、ESTABLISHED、NEW 和 RELATED。
INVALID 表示该数据包的联机编号(Session ID)无法辨识或编号不正确。
ESTABLISHED 表示该数据包属于某个已经建立的联机。
NEW 表示该数据包想要起始一个联机(重设联机或将联机重导向)。
RELATED 表示该数据包是属于某个已经建立的联机,所建立的新联机。例如:FTP-DATA 联机必定是源自某个 FTP 联机。

规则-动作

ACCEPT

允许通过

DROP

直接丢弃数据包,不给任何回应信息,这时候客户端会感觉自己的请求泥牛入海了,过了超时时间才会有反应。

REJECT

拒绝数据包通过,必要时会给数据发送端一个响应的信息,客户端刚请求就会收到拒绝的信息。

iptables -A  INPUT -p TCP --dport 22 -j REJECT --reject-with icmp-port-unreachable

REJECT动作的常用选项为–reject-with

使用–reject-with选项,可以设置提示信息,当对方被拒绝时,会提示对方为什么被拒绝。

可用值如下

icmp-net-unreachable	icmp-host-unreachable	icmp-port-unreachable
icmp-proto-unreachable	icmp-net-prohibited		icmp-host-pro-hibited	icmp-admin-prohibited

当不设置任何值时,默认值为icmp-port-unreachable。

SNAT

改写封包来源 IP 为某特定 IP 或 IP 范围,可以指定 port 对应的范围。

虽然,我们只写了 SNAT,但回程的 DNAT 其实是自动帮我们做了。

iptables -t nat -A POSTROUTING -p tcp -o eth0 -j SNAT --to-source 192.168.10.15-192.168.10.160:2100-3200

使用NAT功能,需要开启linux的核心转发功能:

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

MASQUERADE

是SNAT的一种特殊形式,这个功能与 SNAT 略有不同,当进行IP 伪装时,不需指定要伪装成哪个 IP,IP 会从网卡直接读取,当使用拨接连线时,IP 通常是由 ISP 公司的 DHCP服务器指派的,这个时候 MASQUERADE 特别有用。

iptables -t nat -A POSTROUTING -p TCP -j MASQUERADE --to-ports 21000-31000

DNAT

目标地址转换。

当我们做 SNAT 时, 回程的DNAT会自动帮我们处理,但做 DNAT 时,回程的 SNAT 可能需要我们自己处理。

iptables -t nat -A PREROUTING -p tcp -d 15.45.23.67 --dport 80 -j DNAT --to-destination 192.168.10.1-192.168.10.10:80-100

REDIRECT

在本机做端口映射。

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

LOG

在/var/log/messages文件中记录日志信息(详细位置请查阅 /etc/syslog.conf 配置文件),然后将数据包传递给下一条规则,也就是说除了记录以外不对数据包做任何其他操作,仍然让下一条规则去匹配。

iptables -A INPUT -p tcp -j LOG --log-prefix "input packet"

修改/etc/rsyslog.conf:

kern.warning /var/log/iptables.log

重启rsyslog服务:service rsyslog restart

–log-prefix选项可以给记录到的相关信息添加”标签”之类的信息,以便区分各种记录到的报文信息,方便在分析时进行过滤。

–log-level选项可以指定记录日志的日志级别,可用级别有emerg,alert,crit,error,warning(默认),notice,info,debug。

MIRROR

镜像数据包,也就是将来源 IP与目的地IP对调后,将数据包返回,进行完此处理动作后,将会中断过滤程序。

QUEUE

中断过滤程序,将封包放入队列,交给其它程序处理。透过自行开发的处理程序,可以进行其它应用,例如:计算联机费用…等。

RETURN

结束在目前规则链中的过滤程序,返回主规则链继续过滤,如果把自定规则炼看成是一个子程序,那么这个动作,就相当于提早结束子程序并返回到主程序中。

MARK

将封包标上某个代号,以便提供作为后续过滤的条件判断依据,进行完此处理动作后,将会继续比对其它规则。

iptables -t mangle -A PREROUTING -p tcp --dport 22 -j MARK --set-mark 22
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值