# iptables常规命令实战
[TOC]
## 一、iptables参数简介
### 1. 清理参数
```sh
-F 清除所有规则,不会处理默认规则
-X 删除用户自定义的链
-Z 链的计数器清零
```
### 2. 查询显示参数
```sh
-n 以数字形式显示IP
-L 以列表形式显示所有规则信息
-t 指定表,也可以不指定默认是filter
-v 表示显示详细规则信息,包含匹配计数器数值信息
--line-number 显示规则序号信息
```
### 3. 配置参数
* 增删改参数
```
-t 指定表,也可以不指定默认是filter
-A 添加规则到指定链的结尾,最后一条
-I 添加规则到指定链的开头,第一条
-D 表示删除规则从相应链上
-R 指定将配置好的规则信息进行替换
```
* 规则参数
```sh
-P 设置链表的默认规则
-p 指定协议(all.tcp,udp.icmp)默认all
-s 指定匹配源地址信息
-d 指定匹配目的地址信息
--dport 指定目的端口
--sport 指定源端口
-j 处理的行为[ACCPET接收、DROP丢弃、REJECT拒绝]
-i input 匹配进入的网卡接口, 只能配置在INPUT链上
-o output 匹配出去的网卡接口, 只能配置在OUTPUT链上
```
* 扩展模块参数
```sh
-m 使用扩展模块
-m state 可匹配网络状态
-m multiport 可匹配多个不连续的端口
-mlimit --limit n/{second/minute/hour} 限制限定时间包的允许通过数量及并发数
```
更多命令可以使用man iptables 或iptables -h
## 二、初始化
### 1. 启动
```sh
/etc/init.d/iptables start
chkconfig iptables on
```
### 2. 清除规则
```sh
iptables -F --- 清除防火墙默认规则
iptables -X --- 清除防火墙自定义链
iptables -Z --- 清除防火墙技术器信息
```
## 三、查看iptables规则
### 1. status命令
```sh
/etc/init.d/iptables status
表格:filter
Chain INPUT (policy ACCEPT)
num target prot opt source destination
Chain FORWARD (policy ACCEPT)
num target prot opt source destination
Chain OUTPUT (policy ACCEPT)
num target prot opt source destination
```
默认显示的filter表的规则
### 2. 常用查询参数组合
```sh
1) 列表显示规则并显示IP
iptables -n -L
2) 指定显示NAT表相关信息
iptables -t nat -n -L
3) 表示显示详细规则信息,包含匹配计数器数值信息
iptables -n -L -v
4) 显示规则序号信息
iptables -L -n --line-number
```
## 四、实战1:常用命令组合
提示:所有操作默认都是正对filter表,所以以下命令中,凡是有[-t filter]命令的,都可以省略
### 1. 阻止用户访问服务器的22端口
```sh
1) 添加规则
iptables -t filter -A INPUT -p tcp --dport 22 -j DROP
2) 删除规则
iptables -t filter -D INPUT -p tcp --dport 22 -j DROP
iptables -t filter -D INPUT 规则序号
3) 插入规则
iptables -t filter -I INPUT -p tcp --dport 22 -j DROP
iptables -t filter -I INPUT 3 -p tcp --dport 22 -j DROP
-I参数默认插入最前面,也可指定插入的序号
4) 替换规则
iptables -t filter -R INPUT 6 -p tcp --dport 8080 -j DROP
-R参数需指定要替换的规则序号
```
### 2. 阻止某网段或主机访问服务端指定端口服务
```sh
1) 阻止某网段访问服务器22端口
iptables -t filter -A INPUT -s 10.0.0.0/24 -p tcp --dport 22 -j DROP
2) 阻止某主机访问服务器22端口
iptables -t filter -A INPUT -s 10.0.0.9 -p tcp --dport 22 -j DROP
3) 除某主机访问外,都不能访问服务器22端口
iptables -t filter -A INPUT ! -s 10.0.0.9 -p tcp --dport 22 -j ACCEPT
使用感叹号[!]对规则取反
4) 阻止某主机从指定网卡上访问服务器22端口
iptables -t filter -A INPUT -i eth0 -s 10.0.0.9 -p tcp --dport 22 -j DROP
```
### 3. 指定阻止访问多个端口
```sh
1) 阻止访问连续的多个端口
iptables -A INPUT -s 10.0.0.9 -p tcp --dport 22:80 -j DROP
2) 阻止访问不联系的多个端口
iptables -A INPUT -s 10.0.0.9 -m multiport -p tcp --dport 22,24,25 -j DROP
-m 使用扩展模块. multiport->可以匹配多个不连续端口信息
```
## 五、实战2:组合操作
### 1. 服务器禁ping
实现ping功能测试链路是否正常,基于icmp协议实现的,icmp协议有多种类型:主要关注如下两个
* icmp-type 8:请求类型
* icmp-type 0:回复类型
```sh
1) 禁止主机访问防火墙服务器(禁ping)
iptables -A INPUT -p icmp --icmp-type 8 -j DROP
iptables -A OUTPUT -p icmp --icmp-type 0 -j DROP
2) 禁止防火墙访问主机服务器(禁ping)
iptables -A OUTPUT -p icmp --icmp-type 8 -j DROP
iptables -A INPUT -p icmp --icmp-type 0 -j DROP
3) 所有icmp类型都禁止
iptables -A INPUT -p icmp -m icmp --icmp-type any -j DROP
iptables -A OUTPUT -p icmp -m icmp --icmp-type any -j DROP
```
### 2. 实现防火墙状态机制控制[FTP]
* 链接状态
```sh
NEW: 发送数据包里面控制字段为syn=1,发送第一次握手的数据包
ESTABLISHED: 请求数据包发出之后,响应回来的数据包称为回复的包
RELATED: 基于一个连接,然后建立新的连接
INVALID: 无效的的数据包,数据包结构不符合正常要求的
```
* 控制命令
```sg
iptables -A INPUT -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
```
### 3. 限制指定时间包的允许通过数量及并发数
* 知识点:
```sh
-m limit --limit n/{second/minute/hour}
指定时间内的请求速率“n”为速率,后面为时间分别为:秒、分、时
-m --limit-burst [n]
在同一时间内允许通过的请求“n”为数字,不指定默认为5
```
* 控制命令
```sh
iptables -I INPUT -s 10.0.1.0/24 -p icmp --icmp-type 8 -m limit --limit 5/min --limit-burst 2 -j ACCEPT
```
- shell编程
- 变量1-规范-环境变量-普通变量
- 变量2-位置-状态-特殊变量
- 变量3-变量子串
- 变量4-变量赋值三种方法
- 变量5-数组相关
- 计算1-数值计算命令和案例
- 计算2-expr命令举例
- 计算3-条件表达式和各种操作符
- 计算4-条件表达式和操作符案例
- 循环1-函数的概念与作用
- 循环2-if与case语法
- 循环3-while语法
- 循环4-for循环
- 其他1-判断传入的参数为0或整数的多种思路
- 其他2-while+read按行读取文件
- 其他3-给输出内容加颜色
- 其他4-shell脚本后台运行知识
- 其他5-6种产生随机数的方法
- 其他6-break,continue,exit,return区别
- if语法案例
- case语法案例
- 函数语法案例
- WEB服务软件
- nginx相关
- 01-简介与对比
- 02-日志说明
- 03-配置文件和虚拟主机
- 04-location模块和访问控制
- 05-status状态模块
- 06-rewrite重写模块
- 07-负载均衡和反向代理
- 08-反向代理监控虚拟IP地址
- nginx与https自签发证书
- php-nginx-mysql联动
- Nginx编译安装[1.12.2]
- 案例
- 不同客户端显示不同信息
- 上传和访问资源池分离
- 配置文件
- nginx转发解决跨域问题
- 反向代理典型配置
- php相关
- C6编译安装php.5.5.32
- C7编译php5
- C6/7yum安装PHP指定版本
- tomcxat相关
- 01-jkd与tomcat部署
- 02-目录-日志-配置文件介绍
- 03-tomcat配置文件详解
- 04-tomcat多实例和集群
- 05-tomcat监控和调优
- 06-Tomcat安全管理规范
- show-busy-java-threads脚本
- LVS与keepalived
- keepalived
- keepalived介绍和部署
- keepalived脑裂控制
- keepalived与nginx联动-监控
- keepalived与nginx联动-双主
- LVS负载均衡
- 01-LVS相关概念
- 02-LVS部署实践-ipvsadm
- 03-LVS+keepalived部署实践
- 04-LVS的一些问题和思路
- mysql数据库
- 配置和脚本
- 5.6基础my.cnf
- 5.7基础my.cnf
- 多种安装方式
- 详细用法和命令
- 高可用和读写分离
- 优化和压测
- docker与k8s
- docker容器技术
- 1-容器和docker基础知识
- 2-docker软件部署
- 3-docker基础操作命令
- 4-数据的持久化和共享互连
- 5-docker镜像构建
- 6-docker镜像仓库和标签tag
- 7-docker容器的网络通信
- 9-企业级私有仓库harbor
- docker单机编排技术
- 1-docker-compose快速入门
- 2-compose命令和yaml模板
- 3-docker-compose命令
- 4-compose/stack/swarm集群
- 5-命令补全和资源限制
- k8s容器编排工具
- mvn的dockerfile打包插件
- openstack与KVM
- kvm虚拟化
- 1-KVM基础与快速部署
- 2-KVM日常管理命令
- 3-磁盘格式-快照和克隆
- 4-桥接网络-热添加与热迁移
- openstack云平台
- 1-openstack基础知识
- 2-搭建环境准备
- 3-keystone认证服务部署
- 4-glance镜像服务部署
- 5-nova计算服务部署
- 6-neutron网络服务部署
- 7-horizon仪表盘服务部署
- 8-启动openstack实例
- 9-添加计算节点流程
- 10-迁移glance镜像服务
- 11-cinder块存储服务部署
- 12-cinder服务支持NFS存储
- 13-新增一个网络类型
- 14-云主机冷迁移前提设置
- 15-VXALN网络类型配置
- 未分类杂项
- 部署环境准备
- 监控
- https证书
- python3.6编译安装
- 编译安装curl[7.59.0]
- 修改Redhat7默认yum源为阿里云
- 升级glibc至2.17
- rabbitmq安装和启动
- rabbitmq多实例部署[命令方式]
- mysql5.6基础my.cnf
- centos6[upstart]/7[systemd]创建守护进程
- Java启动参数详解
- 权限控制方案
- app发包仓库
- 版本发布流程
- elk日志系统
- rsyslog日志统一收集系统
- ELK系统介绍及YUM源
- 快速安装部署ELK
- Filebeat模块讲解
- logstash的in/output模块
- logstash的filter模块
- Elasticsearch相关操作
- ES6.X集群及head插件
- elk收集nginx日志(json格式)
- kibana说明-汉化-安全
- ES安装IK分词器
- zabbix监控
- zabbix自动注册模板实现监控项自动注册
- hadoop大数据集群
- hadoop部署
- https证书
- certbot网站
- jenkins与CI/CD
- 01-Jenkins部署和初始化
- 02-Jenkins三种插件安装方式
- 03-Jenkins目录说明和备份
- 04-git与gitlab项目准备
- 05-构建自由风格项目和相关知识
- 06-构建html静态网页项目
- 07-gitlab自动触发项目构建
- 08-pipelinel流水线构建项目
- 09-用maven构建java项目
- iptables
- 01-知识概念
- 02-常规命令实战
- 03-企业应用模板
- 04-企业应用模板[1键脚本]
- 05-企业案例-共享上网和端口映射
- SSH与VPN
- 常用VPN
- VPN概念和常用软件
- VPN之PPTP部署[6.x][7.x]
- 使用docker部署softether vpn
- softEther-vpn静态路由表推送
- SSH服务
- SSH介绍和部署
- SSH批量分发脚本
- 开启sftp日志并限制sftp访问目录
- sftp账号权限分离-开发平台
- ssh配置文件最佳实践
- git-github-gitlab
- git安装部署
- git详细用法
- github使用说明
- gitlab部署和使用
- 缓存数据库
- zookeeper草稿
- mongodb数据库系列
- mongodb基本使用
- mongodb常用命令
- MongoDB配置文件详解
- mongodb用户认证管理
- mongodb备份与恢复
- mongodb复制集群
- mongodb分片集群
- docker部署mongodb
- memcached
- memcached基本概念
- memcached部署[6.x][7.x]
- memcached参数和命令
- memcached状态和监控
- 会话共享和集群-优化-持久化
- memcached客户端-web端
- PHP测试代码
- redis
- 1安装和使用
- 2持久化-事务-锁
- 3数据类型和发布订阅
- 4主从复制和高可用
- 5redis集群
- 6工具-安全-pythonl连接
- redis配置文件详解
- 磁盘管理和存储
- Glusterfs分布式存储
- GlusterFS 4.1 版本选择和部署
- Glusterfs常用命令整理
- GlusterFS 4.1 深入使用
- NFS文件存储
- NFS操作和部署
- NFS文件系统-挂载和优化
- sersync与inotify
- rsync同步服务
- rsyncd.conf
- rsync操作和部署文档
- rsync常见错误处理
- inotify+sersync同步服务
- inotify安装部署
- inotify最佳脚本
- sersync安装部署
- 时间服务ntp和chrony
- 时间服务器部署
- 修改utc时间为cst时间
- 批量操作与自动化
- cobbler与kickstart
- KS+COBBLER文件
- cobbler部署[7.x]
- kickstart部署[7.x]
- kickstar-KS文件和语法解析
- kickstart-PXE配置文件解析
- 自动化之ansible
- ansible部署和实践
- ansible剧本编写规范
- 配置文件示例
- 内网DNS服务
- 压力测试
- 压测工具-qpefr测试带宽和延时