框架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