框架02--Iptables实际应用

Iptables实际应用

一、安装iptables

1. 安装iptables软件包

1.1 安装命令
[root@localhost ~]# yum install iptables*

1.2 启动Iptables
[root@localhost ~]# yum install iptables*

1.3 关闭firewalld
iptables与firewalld一起使用,会产生冲突问题,所以关闭firewalld。
[root@localhost ~]# systemctl disable --now firewalld

2. 命令格式

格式:iptables -t [表] [选项][链] [协议] [条件] [动作]

3. 参数

参数:
	-t:			指定操作的表
	-L, --list		列出当前的规则
	-v			显示数据包和数据包大小
	-n			不反解地址
	-A, --append		追加一条规则到链中
	-I, --insert		插入一条规则,插入到顶部
	-F, --flush		清空
	-Z, --zero		清空计数器(  包数量 、包大小)


	-D, --delete		删除链中的规则

	-R, --replace		修改
	-S, --list-rules	列出所有的规则


	-N, --new-chain		创建一个自定义 链
	-X, --delete-chain	删除一个自定义链
	-P, --policy		指定链的默认策略 

二、iptables动作

ACCEPT(accept,接受)		将数据包放行,进行完此处理动作后,将不再比对其它规则,直接跳往下一个规则链。
	'''匹配了第一个条件后,下面的条件就不匹配了'''
REJECT(reject,拒绝) 		拦阻该数据包,并传送数据包通知对方。
DROP(drop,中断停止) 	   丢弃包不予处理,进行完此处理动作后,将不再比对其它规则,直接中断过滤程序。
REDIRECT(redirect,重定向)	将包重新导向到另一个端口,进行完此处理动作后,将会继续比对其它规则。

三、Iptables基本的条件匹配(协议)

协议匹配:
	TCP(http)
	UDP
	ICMP(ping)
	ALL

四、-s 源地址、-d 目标地址

-s 源地址(source)
	源地址:发送请求的地址,即指定数据包的源地址。
	1.参数可以使IP地址、网络地址、主机名
		例如:-s 192.168.1.101指定IP地址
		例如:-s 192.168.1.10/24指定网络地址
	2.如果不指定-s参数,就代表所有地址
	3.还可以使用–src或者–source

-d 目的地址(destination)
	目标地址  : 访问的地址
	1.参数和-s相同
	2.还可以使用–dst或者–destination

五、--sport源端口、--dport 目标端口

--sport 源端口(source port)
	源端口:发送请求的端口
	1.在缺少具体端口号情况下,将匹配所有端口
	2.可以指定端口号或者端口名称,例如”–sport 22″与”–sport ssh”。
	3.从性能上讲,使用端口号更好
	4.使用冒号可以匹配端口范围,如”–sport 22:100″
	5.还可以使用”–source-port”
	
--dport 目标端口(destination port)
	目标端口:访问的端口
	1.参数和–sport类似
	2.还可以使用”–destination-port”

六、描述规则的基本参数(-i、-o、-m、-j 、-m)

-j 执行目标(jump to target)----# 转发动作
	1.-j指定了当与规则(Rule)匹配时如何处理数据包
	2.可能的值是ACCEPT, DROP, QUEUE, RETURN,MASQUERADE
	
-i 输入接口(input interface)
	1.-i指定了要处理来自哪个接口的数据包
	2.这些数据包即将进入INPUT, FORWARD, PREROUTE链
		例如:-i eth0指定了要处理经由eth0进入的数据包
			如果不指定-i参数,那么将处理进入所有接口的数据包
			如果出现! -i eth0,那么将处理所有经由eth0以外的接口进入的数据包
			如果出现-i eth+,那么将处理所有经由eth开头的接口进入的数据包
	3.还可以使用–in-interface参数
	
-o 输出(out interface)
	1.-o指定了数据包由哪个接口输出
	2.这些数据包即将进入FORWARD, OUTPUT, POSTROUTING链
		如果不指定-o选项,那么系统上的所有接口都可以作为输出接口
		如果出现! -o eth0,那么将从eth0以外的接口输出
		如果出现-i eth+,那么将仅从eth开头的接口输出
	3.还可以使用–out-interface参数


-m : 指定模块
-p :指定协议
	例如: -p TCP
	1.指定规则的协议,如tcp, udp, icmp等,可以使用all来指定所有协议。
	2.如果不指定-p参数,则默认是all值。这并不明智,请总是明确指定协议名称。
	3.可以使用协议名(如tcp),或者是协议值(比如6代表tcp)来指定协议。
	4.还可以使用–protocol参数代替-p参数

七、基础案例

案例1:只允许22端口可以访问,其他端口全部无法访问。  
iptables -t filter -A INPUT -p TCP --dport 22  -j ACCEPT
iptables -t filter -A INPUT -p TCP -j DROP

案例2:只允许22,80,443端口可以访问,其他端口全部无法访问。 
iptables -t filter -A INPUT -p TCP --dport 22  -j ACCEPT
iptables -t filter -A INPUT -p TCP --dport 80  -j ACCEPT
iptables -t filter -A INPUT -p TCP --dport 443  -j ACCEPT
iptables -t filter -A INPUT -p TCP -j DROP

案例3:只允许22,80,443端口可以访问,其他端口全部无法访问,但是本机可以访问百度。 

案例4:要求使用192.168.15.81能够通过22端口链接,但是其他的不行
iptables -t filter -A INPUT -p TCP -d 192.168.15.81 --dport 22  -j ACCEPT
iptables -t filter -A INPUT -p TCP -j DROP

案例5:只允许192.168.15.71能够通过22端口链接,其他的不行。
iptables -t filter -A INPUT -p  TCP -s 192.168.15.71  -d 192.168.15.81 --dport 22 -j ACCEPT
iptables -t filter -A INPUT -p TCP -j DROP

案例6:要求192.168.15.71对外部不可见
iptables -t filter -A INPUT -p TCP -d 192.168.15.71 -j DROP

案例7:要求使用eth0网卡的所有请求全部拒绝
iptables -t filter -A INPUT -p TCP -i etho -j DROP

使用172.16.1.71登录进来的窗口,不允许访问百度。
iptables -t filter -I OUTPUT -p TCP -o eth1 -j DROP

案例8:要求访问服务器的8080端口转发至80端口
iptables -t nat -A PREROUTING -p TCP --dport 8080 -j REDIRECT --to-port 80

案例9:要求只允许windows通过ssh连接192.168.15.81,其他的拒绝
iptables -t filter -A INPUT -p TCP -s 192.168.15.1 -d 192.168.15.81 --dport 22 -j ACCEPT
iptables -t filter -A INPUT -p TCP --dport 22 -j DROP

知识储备:
	查看本机端口占用的命令:	
		netstat -nutlp

八、模块

拓展iptables的功能的。

-m : 指定模块

1、连续匹配多个端口(multiport)

	--dports  : 指定多个端口(不同端口之间以逗号分割,连续的端口使用冒号分割)。
	
2、指定一段连续的ip地址范围(iprange)
    --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] # 报文数量 
     --limit-burst number  # 报文数量(默认:5)

九、拓展案例

1、要求将22,80,443以及30000-50000之间所有的端口向外暴露,其他端口拒绝

	iptables -t filter -A INPUT -p TCP -m multiport --dports 22,80,443,30000:50000 -j ACCEPT
	iptables -f filter -A INPUT -p TCP -j DROP

2、要求访问数据包中包含HelloWorld的数据不允许通过。
	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,其他拒绝
	iptables -t filter -A INPUT -p TCP -m iprange --src-range 192.168.15.1-192.168.15.10 -j ACCEPT 
	iptables -f filter -A INPUT -p TCP -j DROP

4、要求每天的12到13之间,不允许访问
	iptables -t filter -A INPUT -p TCP -m time  --timestart 4:00   --timestop 5:00 -j DROP
	
	必须使用UTC时间

5、要求别人不能ping本机,但是本机可以ping别人
	iptables -t filter -A INPUT -p ICMP -m icmp --icmp-type "echo-request" -j DROP
	
6、要求主机连接最多有2个
	iptables -t filter -A INPUT -p TCP --dport 22 -m connlimit --connlimit-above 2 -j DROP
	
7、要求限制速率在500k/s左右
	iptables -t filter -A INPUT -p TCP -m limit 333/s -j ACCEPT
	iptables -t filter -A INPUT -p TCP -j DROP
posted @ 2021-12-27 20:43  Panda_Xin  阅读(70)  评论(0编辑  收藏  举报