iptables--基础--02--命令

iptables–基础–02–命令


前提

要安装iptables,开启防火墙


1、语法

在这里插入图片描述

在这里插入图片描述

1.1、语法格式

iptables [-t 表名] 命令选项 [链名] [条件匹配] [-j 目标动作或跳转]

1.2、说明

表名、链名

用于指定iptables命令所操作的表和链

命令选项

用于指定管理iptables规则的方式,比如插入、增加、删除、查看等

条件匹配

用于指定对符合什么样条件的数据包进行处理

目标动作或跳转

用于指定数据包的处理方式,比如允许通过、拒绝、丢弃、跳转(Jump)给其它链处理。

2、命令选项


-A(append) 顺序添加,添加一条新规则
-I(insert) 插入,插入一条新规则,-I 后面加一数字表示插入到哪行,默认在第一行添加
-R(replace) 修改、替换(replace)指定链中的某一条规则, -R 后面加一数字表示删除哪行
-D(delete) 删除,删除一条新规则,-D 后面加一数字表示删除哪行
-N(new-chain) 新建一条用户自己定义的规则链
-X(delete-chain) 删除指定表中用户自定义的规则链,删除之前要保证此链是空的,而且没有被引用
-L(list) 列出指定链中所有的规则
	iptables -L -n 以数字的方式显示
	iptables -L -v 显示详细信息
	iptables -L -x 显示精确信息
-E(rename-chain) 重命名用户定义的链,不改变链本身
-F(flush) 清空链中的所有规则
-Z(zero) 将所有表的所有链的字节和数据包计数器清零
-P(policy) 设置指定链的默认策略
-h 获取帮助(help)
-n 使用数字形式(numeric)显示输出结果
-v 查看规则表详细信息(verbose)的信息
-V 查看版本(version)

3、条件匹配

以下这些规则参数用于描述数据包的协议、源地址、目的地址、允许经过的网络接口,以及如何处理这些数据包。

3.1、隐含匹配

 
 

--sport 源端口(source port)
	针对 -p tcp 或者 -p udp
	缺省情况下,将匹配所有端口
	可以指定端口号或者端口名称,例如"–sport 22"与"–sport ssh"。
	/etc/services文件描述了上述映射关系。
	从性能上讲,使用端口号更好
	使用冒号可以匹配端口范围,如"–sport 22:100"
	还可以使用"–source-port"
--dport 目的端口(destination port)针对-p tcp 或者 -p udp
	参数和–sport类似
	还可以使用"–destination-port"
--tcp-flags TCP标志 
	针对-p tcp
	可以指定由逗号分隔的多个参数
	有效值可以是:SYN, ACK, FIN, RST, URG, PSH
	可以使用ALL或者NONE
-–icmp-type ICMP类型 
	针对-p icmp
	–icmp-type 0 表示Echo Reply
	–icmp-type 8 表示Echo

-p 协议(protocol)
	指定规则的协议,如tcp, udp, icmp等
	可以使用all来指定所有协议。
	如果不指定-p参数,则默认是all值。这不明智
	可以使用协议名(如tcp),或者是协议值(比如6代表tcp)来指定协议。映射关系请查看/etc/protocols
	还可以使用–protocol参数代替-p参数
-s 源地址(source)
	指定数据包的源地址
	参数可以使IP地址、网络地址、主机名
	例如:-s 192.168.1.101指定IP地址
	例如:-s 192.168.1.10/24指定网络地址
	如果不指定-s参数,就代表所有地址
	还可以使用–src或者–source
-d 目的地址(destination)
	指定目的地址
	参数和-s相同
	还可以使用–dst或者–destination

-i 输入接口(input interface)
	-i代表 输入接口(input interface)
	-i指定了要处理来自哪个接口的数据包
		这些数据包即将进入INPUT, FORWARD, PREROUTE链
	例如:-i eth0指定了要处理经由eth0进入的数据包
	如果不指定-i参数,那么将处理进入所有接口的数据包
	如果出现! -i eth0,那么将处理所有经由eth0以外的接口进入的数据包
	如果出现-i eth+,那么将处理所有经由eth开头的接口进入的数据包
	还可以使用–in-interface参数

-o 输出(out interface)
	-o代表  输出接口(output interface) 
	-o指定了数据包由哪个接口输出
		这些数据包即将进入FORWARD, OUTPUT, POSTROUTING链
	如果不指定-o选项,那么系统上的所有接口都可以作为输出接口
	如果出现! -o eth0,那么将从eth0以外的接口输出
	如果出现-i eth+,那么将仅从eth开头的接口输出
	还可以使用–out-interface参数

3.2、扩展匹配

 
-m state --state   匹配状态的
-m mutiport --source-port   端口匹配,指定一组端口
-m limit --limit 3/minute   每三分种一次
-m limit --limit-burst  5   只匹配5个数据包
-m string --string --algo bm|kmp --string"xxxx"  匹配字符串
-mtime --timestart 8:00 --timestop 12:00  表示从哪个时间到哪个时间段
-mtime --days  表示那天
-m mac --mac-source xx:xx:xx:xx:xx:xx 匹配源MAC地址
-m layer7 --l7proto qq   表示匹配腾讯qq的,当然也支持很多协议,这个默认是没有的,需要我们给内核打补丁并重新编译内核及iptables才可以使用 -m layer7 

4、目标动作或跳转


ACCEPT:允许数据包通过。
DROP:直接丢弃数据包,不给任何回应信息,这时候客户端会感觉自己的请求泥牛入海了,过了超时时间才会有反应。
REJECT:拒绝数据包通过,必要时会给数据发送端一个响应的信息,客户端刚请求就会收到拒绝的信息。
SNAT:源地址转换,解决内网用户用同一个公网地址上网的问题。
MASQUERADE:是SNAT的一种特殊形式,适用于动态的、临时会变的ip上。
DNAT:目标地址转换。
REDIRECT:在本机做端口映射。
LOG:在/var/log/messages文件中记录日志信息,然后将数据包传递给下一条规则,也就是说除了记录以外不对数据包做任何其他操作,仍然让下一条规则去匹配
QUEUE:将数据包移交到用户空间
RETURN:停止执行当前链中的后续Rules,并返回到调用链(the calling chain)中。

5、iptables防火墙规则的保存与恢复

有以下2中方式

# 把规则自动保存在/etc/sysconfig/iptables中。
# 当计算机启动时,rc.d下的脚本将用命令iptables-restore调用这个文件,从而就自动恢复了规则。 
iptables-save > /etc/sysconfig/iptables
 
# 把规则自动保存在/etc/sysconfig/iptables中。
# 当计算机启动时,rc.d下的脚本将用命令iptables-restore调用这个文件,从而就自动恢复了规则。 
service iptables save

6、iptables服务命令

6.1、iptables服务命令

 
# 安装iptables-services
yum install iptables-services
# 查看状态
systemctl status iptables.service
# 启动
systemctl start iptables.service
# 重启
systemctl restart iptables.service
# 停止
systemctl stop iptables.service

 

6.2、防火墙命令

# 开启防火墙
systemctl start firewalld.service 
# 重启
systemctl restart firewalld.service 
# 查看状态
systemctl status firewalld.service 
# 停止
systemctl stop firewalld.service

7、删除iptables规则

# 清空所有iptables规则
iptables --flush
# 清空所有iptables规则
iptables -F
# 清除iptables nat表规则。
iptables -t nat -F

8、追加iptables规则

可以使用iptables -A命令追加新规则,其中-A表示新增。新的规则将追加到链尾。
一般而言,最后一条规则用于丢弃(DROP)所有数据包。如果你已经有这样的规则了,并且使用-A参数添加新规则,那么就是无用功。

8.1、语法

iptables -A chain firewall-rule

-A chain :指定要追加规则的链
firewall-rule :具体的规则参数

8.2、案例

8.2.1、只接收目标端口为22的数据包

# 接收目标端口为22的数据包
iptables -A INPUT -i eth32 -p tcp --dport 22 -j ACCEPT 
# 拒绝所有其他数据包
iptables -A INPUT -j DROP

8.2.2、拒绝转发来自192.168.1.10主机的数据,允许转发来自192.168.0.0/24网段的数据

iptables -A FORWARD -s 192.168.1.10 -j REJECT
iptables -A FORWARD -s 192.168.0.0/24 -j ACCEPT

说明:注意要把拒绝的放在前面不然就不起作用了啊。

8.2.3、从外网接口(eth32)进入防火墙本机,且源地址为私网地址的数据包丢弃掉

iptables -A INPUT -i eth32 -s 192.168.0.0/16 -j DROP
iptables -A INPUT -i eth32 -s 172.16.0.0/12 -j DROP
iptables -A INPUT -i eth32 -s 10.0.0.0/8 -j DROP

8.2.4、只允许管理员从202.13.0.0/16网段使用SSH远程登录防火墙主机。

iptables -A INPUT -p tcp --dport 22 -s 202.13.0.0/16 -j ACCEPT
iptables -A INPUT -p tcp --dport 22 -j DROP


说明:这个用法比较适合对设备进行远程管理时使用,比如位于分公司中的SQL服务器需要被总公司的管理员管理时。

8.2.5、允许本机开放从TCP端口20-1024提供的应用服务。

iptables -A INPUT -p tcp --dport 20:1024 -j ACCEPT
iptables -A OUTPUT -p tcp --sport 20:1024 -j ACCEPT

8.2.6、允许转发来自192.168.0.0/24局域网段的DNS解析请求数据包。

iptables -A FORWARD -s 192.168.0.0/24 -p udp --dport 53 -j ACCEPT
iptables -A FORWARD -d 192.168.0.0/24 -p udp --sport 53 -j ACCEPT

8.2.7、禁止转发来自MAC地址为00:0C:29:27:55:3F的的数据包

iptables -A FORWARD -m mac --mac-source 00:0c:29:27:55:3F -j DROP

说明:
iptables中使用"-m 模块关键字"的形式调用显示匹配。
咱们这里用"-m mac –mac-source"来表示数据包的源MAC地址。

8.2.8、允许防火墙本机对外开放TCP端口20、21、25、110以及被动模式FTP端口1250-1280

iptables -A INPUT -p tcp -m multiport --dport 20,21,25,110,1250:1280 -j ACCEPT

说明:这里用"-m multiport –dport"来指定目的端口及范围

8.2.9、禁止转发源IP地址为192.168.1.20-192.168.1.99的TCP数据包。

iptables -A FORWARD -p tcp -m iprange --src-range 192.168.1.20-192.168.1.99 -j DROP

说明:此处用"-m –iprange –src-range"指定IP范围。

8.2.10、禁止转发与正常TCP连接无关的非syn请求数据包。

iptables -A FORWARD -m state --state NEW -p tcp ! --syn -j DROP


说明:"-m state"表示数据包的连接状态,"NEW"表示与任何连接无关的,新的嘛!

8.2.11、拒绝访问防火墙的新数据包,但允许响应连接或与已有连接相关的数据包

iptables -A INPUT -p tcp -m state --state NEW -j DROP
iptables -A INPUT -p tcp -m state --state ESTABLISHED,RELATED -j ACCEPT

说明:
"ESTABLISHED"表示已经响应请求或者已经建立连接的数据包
"RELATED"表示与已建立的连接有相关性的,比如FTP数据连接等。

8.2.12、允许防火墙转发除ICMP协议以外的所有数据包

#  使用!可以将条件取反。
iptables -A FORWARD -p ! icmp -j ACCEPT

9、插入iptables规则

9.1、封堵网段(10.20.30.0),两小时后解封。

iptables -I INPUT -s 10.20.30.0/24 -j DROP
iptables -I FORWARD -s 10.20.30.0/24 -j DROP

# 2个小时后
iptables -D INPUT 1
iptables -D FORWARD 1
 

说明:这个策略借助crond计划任务来完成,就再好不过了。

9.2、禁止其他主机ping防火墙主机,但是允许从防火墙上ping其他主机

iptables -I INPUT -p icmp --icmp-type Echo-Request -j DROP
iptables -I INPUT -p icmp --icmp-type Echo-Reply -j ACCEPT
iptables -I INPUT -p icmp --icmp-type destination-Unreachable -j ACCEPT

9.3、只开放本机的web服务(80)、FTP(20、21、20450-20480),放行外部主机发往服务器其它端口的应答数据包,将其他入站数据包均予以丢弃处理。


iptables -I INPUT -p tcp -m multiport --dport 20,21,80 -j ACCEPT
iptables -I INPUT -p tcp --dport 20450:20480 -j ACCEPT
iptables -I INPUT -p tcp -m state --state ESTABLISHED -j ACCEPT
iptables -P INPUT DROP

9.4、拒绝进入防火墙的所有ICMP协议数据包

iptables -I INPUT -p icmp -j REJECT

10、查看表规则

测试数据
iptables -F
iptables -I INPUT -s 127.0.0.1 -p tcp --dport 15672 -j ACCEPT
iptables -I INPUT -s 192.168.187.171 -p tcp --dport 15672 -j ACCEPT 
iptables -I FORWARD -s 127.0.0.1 -p tcp --dport 15672 -j ACCEPT
iptables -I FORWARD -s 192.168.187.171 -p tcp --dport 15672 -j ACCEPT 
iptables -I OUTPUT -s 127.0.0.1 -p tcp --dport 15672 -j ACCEPT
iptables -I OUTPUT -s 192.168.187.171 -p tcp --dport 15672 -j ACCEPT

10.1、查看各表中的规则

 
iptables -t filter --list

在这里插入图片描述

10.2、查看mangle表

iptables -t mangle --list

在这里插入图片描述

10.3、查看NAT表

iptables -t nat --list

在这里插入图片描述

11、删除iptables规则

11.1、删除INPUT链的第一条规则

iptables -D INPUT 1

在这里插入图片描述

12、更改默认策略

12.1、当前链的默认策略

默认策略是ACCEPT

iptables --list

在这里插入图片描述

12.2、更改默认策略

iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -P FORWARD DROP

在这里插入图片描述

你发现不能SSH连接被迫终止了!这事因为我们已经把OUTPUT链策略更改为DROP了,此时虽然服务器能接收数据,但是无法发送数据。

  • 0
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值