# 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測試帶寬和延時