shell编程之iptables
Linux包过滤防火墙概述
netfilter
1、位于Linux内核中的包过滤功能体系
2、称为Linux防火墙的“内核态”
iptables
1、位于/sbin/iptables,用来管理防火墙规则的工具
2、称为Linux防火墙的“用户态”
netfilter工作在底层,iptables工作在表层的工具实则还是调控的netfilter。
包过滤的工作层次
主要是网络层,针对IP数据包
体现在对包内的IP地址、端口等信息的处理上
iptables的表、链结构
1、规则表
表的作用:容纳各种规则链
表的划分依据:防火墙规则的作用相似
2、默认包括4个规则表
raw表:确定是否对该数据包进行状态跟踪
mangle表:为数据包设置标记
nat表:修改数据包中的源、目标IP地址或端口
filter表:确定是否放行该数据包(过滤)
3、规则链
规则的作用:对数据包进行过滤或处理
链的作用:容纳各种防火墙规则
链的分类依据:处理数据包的不同时机
4、默认包括5种规则链
INPUT:处理入站数据包
OUTPUT:处理出战数据包
FORWARD:处理转发数据包
POSTROUTING链:在进行路由选择后处理数据包
PREROUTING链:在进行路由选择前处理数据包
默认的表、链结构示意图
raw表:PREROUTING链、OUTPUT链
mangle表:PREROUTING链、POSTROUTING链、INPUT链、OUTPUT链、FORWARD链
nat表:PREROUTING链、POSTROUTING链、OUTPUT链、INPUT链
filter表:INPUT链、FORWARD链、OUTPUT链
数据包过滤的匹配流程
1、规则表之间的顺序
raw→mangle→nat→filter
2、规则链之间的顺序
入站:PREROUTING→INPUT
出战:OUTPUT→POSTROUTING
转发:PREROUTING→FORWARD→POSTROUTING
3、规则链内的匹配顺序
按顺序依次检查,匹配即停止(LOG策略例外)
若找不到相匹配的规则,则按该链的默认策略处理
iptables安装
1、先关闭firewalld防火墙
2、安装iptables防火墙
yum -y install iptables-services
3、设置iptables开机启动
systemctl start iptables.service
systemctl enable iptables.service
iptables的基本语法
注意事项:
1、不指定表名时,默认指filter表
2、不指定链名时,默认指表内的所有链
3、除非设置链的默认策略,否则必须指定匹配条件
4、选项、链名、控制类型使用大写字母,其余均为小写
iptables [-t 表名] 选项 [链名] [条件] [-j 控制类型]
示例
iptables -t filter -I INPUT -p icmp -j REJECT 禁止所有人ping我
数据包的常见控制类型
ACCEPT:允许通过
DROP:直接丢弃,不给吃任何回应
REJECT:拒绝通过,必要时会给出提示
LOG:记录日志信息,然后传给下一条规则继续匹配,它本身不处理数据包
管理选项
管理选项 | 说明 | 用法示例 |
---|---|---|
-A | 在指定链末尾追加一条 | iptables -A INPUT |
-I | 在指定链中插入一条新的,未指定序号默认作为第一条 | iptables -I INPUT |
-P | 指定默认规则 | iptables -P OUTPUT ACCEPT |
-D | 删除 | iptables -t nat -D INPUT |
-R | 修改、替换某一条规则 | iptables -t nat -R INPUT |
-L | 查看 | iptables -t nat -L |
-n | 所有字段以数字形式显示(比如任意ip地址是0.0.0.0而不是anywhere,比如显示协议端口号而不是服务名) | iptables -L -n |
-v | 查看时显示更详细信息,常跟-L一起使用 | |
–line-number | 规则带编号 | iptables -t nat -L -n --line-number/iptables -t nat -L --line-number |
-F | 清除链中所有规则 | iptables -F |
-X | 清空自定义链的规则,不影响其他链 | iptables -X |
-Z | 清空链的计数器(匹配到的数据包的大小和总和) | iptables -Z |
-S | 查看链的所有规则或者某个链的规则/某个具体规则后面跟编号 | iptables -t nat -S、iptables -t nat -S POSTROUTING |
iptables命令
iptables -t filter -F 清空
iptables -vnL
iptables -t filter -X 清除自定义的链
iptables -t filter -Z 清除计数器
iptables -A 在末尾插入
iptables -I 在顶行插入
iptables -t filter -A INPUT -j REJECT 所有入站的数据包都拒绝
iptables -L 查看链
iptables -D INPUT -j REJECT 删除入站的链
iptables -P INPUT DROP 默认拒绝所有入站(-P的时候后面不允许加-j)
iptables -R INPUT 1 -j DROP 修改入站第一条
iptables -A INPUT -p icmp -s 192.168.245.211 -j DROP 禁止245.211这个IP主机Ping我(如果icmp换成tcp ssh连接不了)
(-s 源地址就吃进去设置的 -d 目标地址 出去的)
iptables -A FORWARD -p tcp -s 192.168.245.100 -d 192.168.245.211 -j DROP 不允许从245.100来的信息去访问245.211
iptables -A INPUT -i ens33 -j DROP 进入ens33网卡所有的数据包都被禁用 (-i 进口 -o 出口)
iptables -A OUTPUT -o ens33 -j DROPiptables -A INPUT ! -p icmp -j DROP 除了icmp,其他协议都不可以连接
iptables -A INPUT -p tcp --dport 80 -s 192.168.245.211 -j DROP 禁止245.211的80端口访问
iptables -A INPUT -p tcp -m multiport --dport 80,23,22 -s 192.168.245.211 -j DROP 禁用tcp 多个端口访问(如果是连续的端口范围中间可用: 20:80)
iptables -A OUTPUT -p icmp -m iprange --dst-range 192.168.245.2-192.168.245.211 -j DROP 不允许本机ping
245.2到245.211范围的主机 (dst 目标地址 src 源地址)
iptables -A INPUT -p icmp -m mac --mac-source 00:0c:29:f4:bf:17 -j DROP 禁止这个物理地址的主机Ping我如何让一个IP主机我能够ping它,它不能够ping我 简而言之就是我不收他的request包,但能收到他的reply包
iptables -A INPUT -p icmp --icmp-type echo-request -s 192.168.245.211 -j DROP 禁用245.211的request包
icmp类型(请求代码为8 回应代码为0)iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT 允许已经联机和与主机发送封包有关的 数据包访问
NEW: 想要新建立联机的封包状态
ESTABLISHED: 已经联机成功的联机状态
RELATED: 表示这个封包是与我们主机发送出去的封包有关,可能是响应封包或者是联机成功之后的传送封包!这个状态很常被设定
INVALID: 无效的封包,例如数据破损的封包状态
/etc/sysconfig/iptables 记录增加的规则
iptables-save > /etc/sysconfig/iptables 重启不影响结果
shell编程之iptables相关推荐
- 详解Shell编程之if语句实战(小结)
本篇文章主要介绍了详解Shell编程之if语句实战(小结),小编觉得挺不错的,现在分享给大家,也给大家做个参考.一起跟随小编过来看看吧 对于if语句,其实很多人都肯定的听说过,那么if语句到底是什么, ...
- shell编程之case语句及函数
shell编程之case语句 文章目录 shell编程之case语句 一.case语句 1. 语法结构 2. 应用案例 二.函数 1. 什么是函数? 2. 如何定义函数? 3. 函数如何调用? ㈠ 当 ...
- linux下简单的shellfor循环程序,对Linux下shell编程之for循环的实例讲解
对Linux下shell编程之for循环的实例讲解 linux 下 for 循环中可以使用 break 和 continue 关键字来跳出循环, 和java 用法一致 一.常用for循环结构 #语法一 ...
- shell编程之 if 判断语句
shell编程之 if 判断语句 判断语句介绍 - if 单if 语句(一个条件一个判断结果) if..else 语句(一个条件两个判断结果) if..elif..else 语句(多条件多个判断结果) ...
- 【shell编程之expr的使用】
shell编程之expr的使用 语法格式 获取expr运算的结果 expr进行算数运算 expr进行字符串的处理 练习 expr是一个shell命令,可以使用man expr查看命令的帮助手册 语法格 ...
- shell脚本求和_【零基础学云计算】Shell编程之case语句与循环语句
case多分支语句 循环语句 for循环语句 while循环语句 untli循环语句 Shell函数 Shell数组 case语句的结构 针对变量的不同取值,分别执行不同的命令序列 case 变量值 ...
- Shell编程之for循环
for 循环 第一种写法: 1.基本语法(一) for (( 初始值;循环控制条件;变量变化 )) do 程序 done 2.案例 (1)计算1到100的和 第二种写法 基本语法(二) for 变量 ...
- Shell编程之if语法练习(LNMP)全过程
大家好,我是延凯,本人原来在CSDN写作已经快一年了 都是相关Linux运维这方面的技术知识,现在搬到博客园也是我一直想的,本博客主要写Python,docker,shell等偏向开发云计算等知识点, ...
- Linux下的Shell编程之Helloworld.sh看过来
1.编写HelloWorld.sh vim HelloWorld.sh 2.按下i进行编辑 里面的代码如下: #!bin/sh echo "hello world!" 然后Esc退 ...
最新文章
- PTA数据结构与算法题目集(中文)7-24
- python程序控制电脑开机_Python3.4实现远程控制电脑开关机
- 感知和行动的贝叶斯模型
- JSP Tomcat8.0运行连接池时发生异常【AbstractMethodError oracle.jdbc.driver.T4CConnection.isValid(I)Z】...
- Ceph mon节点故障处理案例分解
- 高级软件工程第五次作业:东理三剑客团队作业-2
- RHEL 6.5 rpm包安装mplyer
- bzoj2733 永无乡 splay树的启发式合并
- 可以打开md_大祥MD型耐磨卧式多级离心泵现货出售中大泵业
- mysql commit undo_详细分析MySQL事务日志(redo log和undo log)
- 从零开始学习音视频编程技术(十三) 录屏软件开发之屏幕录像
- LINUX实验---网络管理
- 笔记本电脑频繁自动重启_电脑为何总是自动重启 电脑自动重启原因【解决方法】...
- matlab textscan溢出,matlab - Textscan存档有大量的行 - 堆栈内存溢出
- Docker学习之三:docker镜像管理
- Matplotlib画各种论文图
- 缓冲液的配制(PBS与PBST)
- 圆桌骑士 图的连通性
- redis的键值中出现\xac\xed\x00\x05t\x00\这些的乱码问题
- 疫情后北上广深租房价格跌了吗? | Alfred数据室