IPtables的基本使用及相关参数介绍

IPtables的基本使用及相关参数介绍

image

1、IPtables的使用

1、安装iptables

	 yum install iptables* -y
	 
2、启动iptables

	systemctl start iptables
	
3、关闭firewalld

	systemctl disable --now firewalld
	
补充:查看当前服务运行的状态(例:防火墙,网络管理等)

	systemctl status firewalld
	
iptables语法格式:

	iptables -t 表名 选项 链名称 条件 动作
	
	参数介绍:
	
	 1.基本参数:
	 
		-t:				 	指定操作的表(后跟表名)
		-L / --list:		列出当前防火墙的相关规则
		-v:				 	列出数据包和数据包的大小
		-n:				   不反解地址 # 例:0.0.0.0表示任意ip地址,可反解为anywhere
		# 查看当前防火墙的相关规则
		iptables -L -V -n
		
	 2.选项:选项后跟链名
		-A / --append		追加一条规则到链中(尾部)
		-I / --insert	 	插入一条规则到链中,插入至顶部
		-F / --flush		清空链中的规则
		-Z / --zero			清空计数器(包数量、包大小)
		-D / --delete		删除链中的规则
		-R / --replace		修改
		-S / --list-rules	列出所有的规则
		-N / --new-chain	创建一个自定义链
		-X / --delete-chain	删除一个自定义链
		-P / --policy		指定链的默认策略

image

2、iptables基本的条件匹配

条件后跟相应的协议

	参数:-p
	
        TCP(HTTP)
        
      	TCP(Transmission Control Protocol,传输控制协议)是面向连接的协	议,也就是说,在收发数据前,必须和对方建立可靠的连接。 一个TCP连接必须要	  经过三次“对话”才能建立起来,其中的过程非常复杂, 只简单的描述下这三次对		话的简单过程:

        1)主机A向主机B发出连接请求数据包:“我想给你发数据,可以吗?”,这是	第一次对话;

        2)主机B向主机A发送同意连接和要求同步 (同步就是两台主机一个在发		送,一个在接收,协调工作)的数据包 :“可以,你什么时候发?”,这是第二次	 对话;

        3)主机A再发出一个数据包确认主机B的要求同步:“我现在就发,你接着		吧!”, 这是第三次对话。
        UDP
        
		UDP是一个非连接的协议,传输数据之前源端和终端不建立连接, 当它想传		送时就简单地去抓取来自应用程序的数据,并尽可能快地把它扔到网络上。 在发	送端,UDP传送数据的速度仅仅是受应用程序生成数据的速度、 计算机的能力和传	  输带宽的限制; 在接收端,UDP把每个消息段放在队列中,应用程序每次从队列中	读一个消息段
        ICMP(PING)
        
        我们经常使用“ping”命令来测试两台主机之间TCP/IP通信是否正常, 其		实“ping”命令的原理就是向对方主机发送UDP数据包,然后对方主机确认收到数据	包, 如果数据包是否到达的消息及时反馈回来,那么网络就是通的。
		ping命令是用来探测主机到主机之间是否可通信,如果不能ping到某台主	机,表明不能和这台主机建立连接。ping命令是使用 IP 和网络控制信息协议 		(ICMP),因而没有涉及到任何传输协议(UDP/TCP) 和应用程序。它发送icmp回送	 请求消息给目的主机
        ALL(所有)

image

3、iptables的相关动作

	接收动作的参数:
	
		-i	:进来的网卡 (一般是网卡名,eth0/eth1)
		
		-o	: 出去的网卡	(一般是网卡名,eth0/eth1)
		
		-m	: 指定的模块	(可以借用模块从而实现我们的需求,大大减少工作量)
		
		-p	:指定协议 (接收匹配的相关条件协议)
		
		-j	: 转发动作
		
			# 相关转发动作
		
            ACCEPT		数据包放行,进行完该动作以后,将不再比对其他规则,					直接跳到下一个规则
            
            REJECT		阻拦数据包,并将数据包传给对方并通知对方
            
            DROP		丢弃包不予处理(可以理解为拒绝访问),进行完该处理					动作后,将不再比对其他规则,直接终端过滤程序
            
            REDIRECT	将包重新导向到另外一个端口,进行完该处理动作后,将					会继续比对其他规则

image

4、源地址、源端口、目标地址、目标端口

# 在进行网络传输的时候,涉及到两个对象,发送请求的一方,和接收请求的一方。

源地址:发送请求的地址/一方(一般遇到允许xxx访问,一般是对源地址进行限制)

	参数:-s [源地址]  # 和匹配条件相关协议连用
	
# 端口:可以认为是设备与外界通讯交流的出口

源端口:发送请求的一方的端口号

	参数:--sport [源端口号] # 和源地址连用
	
	
目标地址:接收请求的地址/一方(一般遇到访问xxx或者使用xxx访问时,一般是对目标		地址进行限制)

	参数:-d [目标地址] # 和匹配条件相关协议连用
	
目标端口:接收请求的一方的端口号

	参数:--dport [目标端口号] # 和目标地址连用
	
案例1:其他服务器访问当前服务器只允许使用22端口可以访问,其他端口全部无法访问。
	[root@m01 ~]# iptables -t filter -A INPUT -p TCP --dport 22 -j ACCEPT
	[root@m01 ~]# iptables -t filter -A INPUT -p TCP -j DROP

	参数解释:
		-t 参数:		后跟表名
		filter:		  filter表
		-A 选项:		后跟链名
		INPUT:		  链名
		-p 选项:		后跟匹配的协议
		TCP:		  tcp协议
		--dport:	  后目标端口号
		22:			 目标端口号
		-j:			 后跟相关转发动作
		ACCEPT:		 数据包放行动作
		
案例2:其他服务器访问当前服务器只允许22,80,443端口可以访问,其他端口全部无法访问。

[root@m01 ~]# iptables -t filter -A INPUT -p TCP -m multiport --dports  22,83,43 -j ACCEPT
[root@m01 ~]# iptables -t filter -A INPUT -p TCP -j DROP
部分参数介绍:
	-m:		调用模块,后跟模块名
	multiport模块:		接收一串端口,不同的端口号之间用逗号隔开,连续							   的端口号用冒号gekai

案例3:其他服务器访问当前服务器要求使用192.168.15.81能够通过22端口链接,但是其他的不行

	[root@m01 ~]# iptables -t filter -A INPUT -p TCP -d 192.168.15.81 --dport 22 -j ACCEPT
	[root@m01 ~]# iptables -t filter -A INPUT -p TCP -j DROP
	
案例4:只允许192.168.15.71能够通过22端口访问192.168.15.81,其他的不行

[root@m01 ~]# iptables -t filter -A INPUT -p TCP -s 192.168.15.71 -d 192.168.15.81 --dport 22 -j ACCEPT
[root@m01 ~]# iptables -t filter -A INPUT -p TCP -j DROP

案例5:要求192.168.15.71对外部不可见(其他服务器不能对192.168.15.71进行访问)

[root@prometheus ~]# iptables -t filter -A INPUT -p TCP -d 192.168.15.71 -j DROP

案例6:要求使用eth0网卡的所有请求全部拒绝

[root@prometheus ~]# iptables -t filter -A INPUT -p TCP -i eth0 -j DROP

案例7:使用172.16.1.71登录进来的窗口,不允许访问百度。

[root@prometheus ~]# iptables -t filter -I OUTPUT -p TCP -o eth1 -j DROP

案例8:要求访问nginx服务器的8080端口转发至80端口

[root@m01 ~]# iptables -t nat -A PREROUTING -p TCP --dport 8080 -j REDIRECT --to-port 80
补充:删除链里的规则
[root@m01 ~]# iptables -t nat -D PREROUTING  -p TCP --dport 8080 -j REDIRECT --to-port 80

案例9:要求只允许windows通过ssh连接192.168.15.81,其他的拒绝

[root@m01 ~]# iptables -t filter -A INPUT -p TCP -s 192.168.15.1 -d 192.168.15.81 --dport 22 -j ACCEPT
[root@m01 ~]# iptables -t filter -A INPUT -p TCP -j DROP

补充:查看本机端口占用的命令:	
		netstat -nutlp

image

5、模块

在iptables网路传输里也存在有模块的概念

作用:扩展iptables的功能

模块:具有一系列功能的集合体

如何导入模块:-m [模块名]

1、multiport模块:连续匹配多个端口号

	--sport / --dport	:指定多个端口,不同端口之间用逗号隔开,连续端口使用冒号分割
	
2、iprange模块:指定一段连续的ip地址范围
	
	--src-range from [-to]	:源地址范围
	--dst-range from [-to]	:目标地址范围
	
3、string模块: 匹配指定字符串

	--string pattern	# 指定要匹配的字符串
	--algo {bm|kmp}		# 匹配的查询算法
	
4、time模块: 根据时间匹配报文
	
	--timestart hh:mm[:ss]		# 开始时间
	--timestop hh:mm[ss:]		# 结束时间
	--monthdays day[,day...]	# 指定一个月的某一天
	--weekdays day[,day...]		# 指定周还是周天
	
5、禁ping,默认本机无法ping别人、别人无法ping自己

	--icmp-type {type[/code]|typename}
		echo-request (8)请求
		echo-reply 	 (0)回应

6、connlimit模块:限制连接数,并发链接数
	
	--connlimit-upto n		# 如果现有链接数小于或等于n则匹配
	--connlimit-above n 	# 如果现有链接数大于n则匹配
	
7、针对报文速率进行限制。 秒、分钟、小时、天

	--limit rate [/second/minute|/hour|day]	# 报文数量
		即我们平时在基于网络传输文件时的传输速度:例:100kb/s
	--limit-burst number					# 报文数量(默认:5)

image

6、应用模块相关案例

案例1:其他服务器访问本地服务器只能通过22,80,443以及30000-50000之间所有的端口,其他端口拒绝

[root@m01 ~]# iptables -t filter -A INPUT -p TCP -m multiport --dport 22,80,443,30000:50000 -j ACCEPT
[root@m01 ~]# iptables -t filter -A INPUT -p TCP -j DROP

案例2:要求访问数据包中包含HelloWorld的数据不允许通过。

[root@m01 html]# iptables -t filter -A INPUT -p TCP -m string --string "HelloWorld" --algo kmp -j DROP

案例3:要求192.168.15.1 - 192.168.15.10之间的所有IP能够连接192.168.15.81,其他拒绝

[root@m01 html]# iptables -t filter -A INPUT -p TCP -m iprange --src-range 192.168.15.1-192.168.15.10 -d 192.168.15.81 --dport 22  -j ACCEPT
[root@m01 html]# iptables -t filter -A INPUT -p TCP -j DROP

案例4:要求除每天的12到13点之间,不允许访问192.168.15.81(限制时间时的时间指的是UTC时间,即和北京时间相差8个时差,也就是4点到5点)

[root@m01 html]# iptables -t filter -A INPUT -p TCP -m time --timestart 4:00 --timestop 5:00 -d 192.168.15.81 -j ACCEPT
[root@m01 html]# iptables -t filter -A INPUT -p TCP -j DROP

案例5:要求别人不能ping本机,但是本机可以ping别人

[root@m01 ~]# iptables -t filter -A INPUT -p icmp -m icmp --icmp-type "echo-request" -j DROP

案例6:要求连接192.168.15.81的最多有两个

[root@m01 ~]# iptables -t filter -A INPUT -p TCP -m connlimit --connlimit-above 2 -d 192.168.15.81 --dport 22 -j DROP

案例7:要求限制速率在500k/s左右

[root@m01 ~]# iptables -t filter -A INPUT -p TCP -m limit  --limit 333/s -j ACCEPT
[root@m01 ~]# iptables -t filter -A INPUT -p TCP -j DROP

image

posted @ 2021-12-28 20:36  PyLy  阅读(418)  评论(0)    收藏  举报

念两句诗

入我相思门,知我相思苦,长相思兮长相忆,短相思兮无穷极。
【唐代】李白