Black-Gold 6 years ago
parent cb7448079f
commit a6b19206d8

@ -1,13 +0,0 @@
#!/usr/bin/python3
# -*- coding: UTF-8 -*-
'''
从https://unsplash.com抓取图片
'''
import requests
if __name__ == '__main__':
domain = 'https://unsplash.com'
r = requests.get(url=domain)
print(t.text)

@ -0,0 +1,56 @@
# 扫描开放端口,此脚本需改进,未能出结果
# -*- coding: UTF-8 -*-
import socket
import sys
from threading import Thread
# Easily changeable variables (you can extend the timeout length if necessary)
threads = []
timeout = 0.5
# Inputs & simple error handling
try:
host = input("Enter Target Host Address: ")
hostIP = socket.gethostbyname(host)
startPort = int(input("Enter Starting Port to Scan: "))
endPort = int(input("Enter Ending Port to Scan: "))
except KeyboardInterrupt:
print("\n\n[*]User requested an interrupt[*]")
sys.exit()
except socket.gaierror:
print("\n\n[*]Hostname unresolvable[*]")
sys.exit()
except socket.error:
print("\n\n[*]Unable to connect to target[*]")
sys.exit()
# Scanning Banner
print("-" * 50)
print("Scanning Target: ", hostIP)
print("-" * 50)
# Scanning and open port display
def scanner(port):
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
socket.setdefaulttimeout(timeout)
result = sock.connect_ex((hostIP, port))
if result == 0:
print("[*] Port {}: Open".format(port))
sock.close()
# Setup threading and calling the scan
for i in range(startPort, endPort+1):
thread = Thread(target=scanner, args=(i,))
threads.append(thread)
thread.start()
[x.join() for x in threads]
# Completion Banner211.100.61.112
print("-" * 50)
print("Scanning completed!")
print("-" * 50)

@ -0,0 +1,14 @@
from flask import Flask, url_for()
app = Flask(__name__)
@app.route('/')
def index():
return 'index!'
if __name__ == '__main__':
app.run()

@ -1,28 +0,0 @@
apachectl
===
Apache服务器前端控制工具
## 补充说明
**apachectl命令** 是Apache的Web服务器前端控制工具用以启动、关闭和重新启动Web服务器进程。
### 语法
```
apachectl(参数)
```
### 参数
* configtest检查设置文件中的语法是否正确
* fullstatus显示服务器完整的状态信息
* graceful重新启动Apache服务器但不会中断原有的连接
* help显示帮助信息
* restart重新启动Apache服务器
* start启动Apache服务器
* status显示服务器摘要的状态信息
* stop停止Apache服务器。
<!-- Linux命令行搜索引擎https://jaywcjlove.github.io/linux-command/ -->

@ -1,127 +0,0 @@
# **ifconfig**
## 补充说明
**ifconfig命令** 被用于配置和显示Linux内核中网络接口的网络参数。用ifconfig命令配置的网卡信息在网卡重启后机器重启后配置就不存在。要想将上述的配置信息永远的存的电脑里那就要修改网卡的配置文件了。
## 用法:
```sh
ifconfig [-a] [-v] [-s] <interface> [[<AF>] <address>]
[add <address>[/<prefixlen>]]
[del <address>[/<prefixlen>]]
[[-]broadcast [<address>]] [[-]pointopoint [<address>]]
[netmask <address>] [dstaddr <address>] [tunnel <address>]
[outfill <NN>] [keepalive <NN>]
[hw <HW> <address>] [mtu <NN>]
[[-]trailers] [[-]arp] [[-]allmulti]
[multicast] [[-]promisc]
[mem_start <NN>] [io_addr <NN>] [irq <NN>] [media <type>]
[txqueuelen <NN>]
[[-]dynamic]
[up|down] ...
<HW>=硬件类型。
可能硬件类型列表:
loop (本地环回) slip (Serial Line IP) cslip (VJ Serial Line IP)
slip6 (6-bit Serial Line IP) cslip6 (VJ 6-bit Serial Line IP) adaptive (Adaptive Serial Line IP)
ash (Ash) ether (以太网) ax25 (AMPR AX.25)
netrom (AMPR NET/ROM) rose (AMPR ROSE) tunnel (IPIP Tunnel)
ppp (点对点协议) hdlc ((Cisco)-HDLC) lapb (LAPB)
arcnet (ARCnet) dlci (Frame Relay DLCI) frad (Frame Relay Access Device)
sit (IPv6-in-IPv4) fddi (Fiber Distributed Data Interface) hippi (HIPPI)
irda (IrLAP) ec (Econet) x25 (generic X.25)
eui64 (Generic EUI-64)
<AF>=地址族。默认inet
可能的地址族列表:
unix (UNIX Domain) inet (DARPA Internet) inet6 (IPv6)
ax25 (AMPR AX.25) netrom (AMPR NET/ROM) rose (AMPR ROSE)
ipx (Novell IPX) ddp (Appletalk DDP) ec (Econet)
ash (Ash) x25 (CCITT X.25)
```
## 参数
```sh
add<地址>设置网络设备IPv6的ip地址
del<地址>删除网络设备IPv6的IP地址
down关闭指定的网络设备
<hw<><硬件地址>:设置网络设备的类型与硬件地址;
io_addr<I/O>设置网络设备的I/O地址
irq<IRQ>设置网络设备的IRQ
media<网络媒介类型>:设置网络设备的媒介类型;
mem_start<内存地址>:设置网络设备在主内存所占用的起始地址;
metric<数目>:指定在计算数据包的转送次数时,所要加上的数目;
mtu<字节>设置网络设备的MTU
netmask<子网掩码>:设置网络设备的子网掩码;
tunnel<地址>建立IPv4与IPv6之间的隧道通信地址
up启动指定的网络设备
-broadcast<地址>:将要送往指定地址的数据包当成广播数据包来处理;
-pointopoint<地址>:与指定地址的网络设备建立直接连线,此模式具有保密功能;
-promisc关闭或启动指定网络设备的promiscuous模式
IP地址指定网络设备的IP地址
网络设备:指定网络设备的名称。
```
## 实例
显示网络设备信息(激活状态的):
```sh
[root@localhost ~]# ifconfig
eth0 Link encap:Ethernet HWaddr 00:16:3E:00:1E:51
inet addr:10.160.7.81 Bcast:10.160.15.255 Mask:255.255.240.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:61430830 errors:0 dropped:0 overruns:0 frame:0
TX packets:88534 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:3607197869 (3.3 GiB) TX bytes:6115042 (5.8 MiB)
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
UP LOOPBACK RUNNING MTU:16436 Metric:1
RX packets:56103 errors:0 dropped:0 overruns:0 frame:0
TX packets:56103 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:5079451 (4.8 MiB) TX bytes:5079451 (4.8 MiB)
```
说明:
**eth0** 表示第一块网卡,其中`HWaddr`表示网卡的物理地址,可以看到目前这个网卡的物理地址(MAC地址是`00:16:3E:00:1E:51`。
**inet addr** 用来表示网卡的IP地址此网卡的IP地址是`10.160.7.81`,广播地址`Bcast:10.160.15.255`,掩码地址`Mask:255.255.240.0`。
**lo** 是表示主机的回坏地址,这个一般是用来测试一个网络程序,但又不想让局域网或外网的用户能够查看,只能在此台主机上运行和查看所用的网络接口。比如把 httpd服务器的指定到回坏地址在浏览器输入127.0.0.1就能看到你所架WEB网站了。但只是您能看得到局域网的其它主机或用户无从知道。
* 第一行连接类型Ethernet以太网HWaddr硬件mac地址
* 第二行网卡的IP地址、子网、掩码。
* 第三行UP代表网卡开启状态RUNNING代表网卡的网线被接上MULTICAST支持组播MTU:1500最大传输单元1500字节。
* 第四、五行:接收、发送数据包情况统计。
* 第七行:接收、发送数据字节数统计信息。
```sh
# 启动关闭指定网卡:
ifconfig eth0 up
ifconfig eth0 down
`ifconfig eth0 up`为启动网卡eth0`ifconfig eth0 down`为关闭网卡eth0。ssh登陆linux服务器操作要小心关闭了就不能开启了除非你有多网卡。
# 为网卡配置和删除IPv6地址
ifconfig eth0 add 33ffe:3240:800:1005::2/64 #为网卡eth0配置IPv6地址
ifconfig eth0 del 33ffe:3240:800:1005::2/64 #为网卡eth0删除IPv6地址
# 用ifconfig修改MAC地址
ifconfig eth0 hw ether 00:AA:BB:CC:dd:EE
# 配置IP地址
ifconfig eth0 192.168.2.10
ifconfig eth0 192.168.2.10 netmask 255.255.255.0
# 启用和关闭arp协议
ifconfig eth0 arp #开启网卡eth0 的arp协议
ifconfig eth0 -arp #关闭网卡eth0 的arp协议
# 设置最大传输单元:
ifconfig eth0 mtu 1500 #设置能通过的最大数据包大小为 1500 bytes
```

@ -1,81 +0,0 @@
install
===
安装或升级软件或备份数据
## 补充说明
**install命令** 的作用是安装或升级软件或备份数据它的使用权限是所有用户。install命令和cp命令类似都可以将文件/目录拷贝到指定的地点。但是install允许你控制目标文件的属性。install通常用于程序的makefile使用它来将程序拷贝到目标安装目录。
### 语法
```
install [OPTION]... [-T] SOURCE DEST
install [OPTION]... SOURCE... DIRECTORY
install [OPTION]... -t DIRECTORY SOURCE...
install [OPTION]... -d DIRECTORY...
```
在前两种格式中,会将<来源>复制至<目的地>或将多个<来源>文件复制至已存在的<目录>,同时设定权限模式及所有者/所属组。在第三种格式中,会创建所有指定的目录及它们的主目录。长选项必须用的参数在使用短选项时也是必须的。
### 选项
```
--backup[=CONTROL]:为每个已存在的目的地文件进行备份。
-b类似 --backup但不接受任何参数。
-c(此选项不作处理)。
-d--directory所有参数都作为目录处理而且会创建指定目录的所有主目录。
-D创建<目的地>前的所有主目录,然后将<来源>复制至 <目的地>;在第一种使用格式中有用。
-g--group=组:自行设定所属组,而不是进程目前的所属组。
-m--mode=模式:自行设定权限模式 (像chmod)而不是rwxr-xr-x。
-o--owner=所有者:自行设定所有者 (只适用于超级用户)。
-p--preserve-timestamps<来源>文件的访问/修改时间作为相应的目的地文件的时间属性。
-s--strip用strip命令删除symbol table只适用于第一及第二种使用格式。
-S--suffix=后缀:自行指定备份文件的<后缀>。
-v--verbose处理每个文件/目录时印出名称。
--help显示此帮助信息并离开。
--version显示版本信息并离开。
```
### 实例
```
install -d [option] DIRECTORY [DIRECTORY...]
```
支持多个,类似`mkdir -p`支持递归。例如:`install -d a/b/c e/f`结果和`mkdir -p a/b/c e/f`一样。
```
install [option] SOURCE DEST
```
**复制SOURCE文件测试不能是目录到DEST file文件**
```
install a/e c
结果类似:
cp a/e c #注意c必须是文件。
```
**有用选项`-D`**
```
install -D x a/b/c
效果类似:
mkdir -p a/b && cp x a/b/c
```
```
install [option] SOURCE [SOURCE...] DIRECTORY
```
**复制多个SOURCE文件到目的目录**
```
install a/* d
```
其中d是目录。
<!-- Linux命令行搜索引擎https://jaywcjlove.github.io/linux-command/ -->

@ -1,106 +0,0 @@
ip
===
网络配置工具
## 补充说明
**ip命令** 用来显示或操纵Linux主机的路由、网络设备、策略路由和隧道是Linux下较新的功能强大的网络配置工具。
### 语法
```
ip(选项)(参数)
```
### 选项
```
-V显示指令版本信息
-s输出更详细的信息
-f强制使用指定的协议族
-4指定使用的网络层协议是IPv4协议
-6指定使用的网络层协议是IPv6协议
-0输出信息每条记录输出一行即使内容较多也不换行显示
-r显示主机时不使用IP地址而使用主机的域名。
```
### 参数
```
网络对象:指定要管理的网络对象;
具体操作:对指定的网络对象完成具体操作;
help显示网络对象支持的操作命令的帮助信息。
```
### 实例
```bash
ip route show # 显示系统路由
ip route add default via 192.168.1.254 # 设置系统默认路由
ip route delete 192.168.1.0/24 dev eth0 # 删除路由
```
**用ip命令显示网络设备的运行状态**
```
[root@localhost ~]# ip link list
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast qlen 1000
link/ether 00:16:3e:00:1e:51 brd ff:ff:ff:ff:ff:ff
3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast qlen 1000
link/ether 00:16:3e:00:1e:52 brd ff:ff:ff:ff:ff:ff
```
**显示更加详细的设备信息**
```
[root@localhost ~]# ip -s link list
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
RX: bytes packets errors dropped overrun mcast
5082831 56145 0 0 0 0
TX: bytes packets errors dropped carrier collsns
5082831 56145 0 0 0 0
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast qlen 1000
link/ether 00:16:3e:00:1e:51 brd ff:ff:ff:ff:ff:ff
RX: bytes packets errors dropped overrun mcast
3641655380 62027099 0 0 0 0
TX: bytes packets errors dropped carrier collsns
6155236 89160 0 0 0 0
3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast qlen 1000
link/ether 00:16:3e:00:1e:52 brd ff:ff:ff:ff:ff:ff
RX: bytes packets errors dropped overrun mcast
2562136822 488237847 0 0 0 0
TX: bytes packets errors dropped carrier collsns
3486617396 9691081 0 0 0 0
```
**显示核心路由表**
```
[root@localhost ~]# ip route list
112.124.12.0/22 dev eth1 proto kernel scope link src 112.124.15.130
10.160.0.0/20 dev eth0 proto kernel scope link src 10.160.7.81
192.168.0.0/16 via 10.160.15.247 dev eth0
172.16.0.0/12 via 10.160.15.247 dev eth0
10.0.0.0/8 via 10.160.15.247 dev eth0
default via 112.124.15.247 dev eth1
```
**显示邻居表**
```
[root@localhost ~]# ip neigh list
112.124.15.247 dev eth1 lladdr 00:00:0c:9f:f3:88 REACHABLE
10.160.15.247 dev eth0 lladdr 00:00:0c:9f:f2:c0 STALE
```
**获取主机所有网络接口**
```
ip link | grep ^[0-9] | awk -F: '{print $2}'
```
<!-- Linux命令行搜索引擎https://jaywcjlove.github.io/linux-command/ -->

@ -1,24 +0,0 @@
ip6tables-restore
===
还原ip6tables表
## 补充说明
**ip6tables-restore命令** 用来还原ip6tables表。
### 语法
```
ip6tables-restore(选项)
```
### 选项
```
-c指定在还原iptables表时还原当前的数据包计数器和字节计数器值
-t指定要还原的表的名称。
```
<!-- Linux命令行搜索引擎https://jaywcjlove.github.io/linux-command/ -->

@ -1,24 +0,0 @@
ip6tables-save
===
保存ip6tables表配置
## 补充说明
**ip6tables-save命令** 将Linux内核中ip6tables表导出到标准输出设备上。
### 语法
```
ip6tables-save(选项)
```
### 选项
```
-c指定在保存iptables表时保存当前的数据包计数器和字节计数器值
-t指定要保存的表的名称。
```
<!-- Linux命令行搜索引擎https://jaywcjlove.github.io/linux-command/ -->

@ -1,206 +0,0 @@
ip6tables
===
linux中防火墙软件
## 补充说明
**ip6tables命令** 和iptables一样都是linux中防火墙软件不同的是ip6tables采用的TCP/ip协议为IPv6。
### 语法
```
ip6tables(选项)
```
### 选项
```
-t<表>:指定要操纵的表;
-A向规则链中添加条目
-D从规则链中删除条目
-i向规则链中插入条目
-R替换规则链中的条目
-L显示规则链中已有的条目
-F清楚规则链中已有的条目
-Z清空规则链中的数据包计算器和字节计数器
-N创建新的用户自定义规则链
-P定义规则链中的默认目标
-h显示帮助信息
-p指定要匹配的数据包协议类型
-s指定要匹配的数据包源ip地址
-j<目标>:指定要跳转的目标;
-i<网络接口>:指定数据包进入本机的网络接口;
-o<网络接口>:指定数据包要离开本机所使用的网络接口。
-c<计数器>在执行插入操作insert追加操作append替换操作replace时初始化包计数器和字节计数器。
```
### 实例
在命令行窗口输入下面的指令就可以查看当前的 IPv6 防火墙配置:
```
ip6tables -nl --line-numbers
```
**/etc/sysconfig/ip6tables文件**
使用编辑器编辑`/etc/sysconfig/ip6tables`文件:
```
vi /etc/sysconfig/ip6tables
```
可能会看到下面的默认 ip6tables 规则:
```
*filter
:INPUT accept [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
:RH-Firewall-1-INPUT - [0:0]
-A INPUT -j RH-Firewall-1-INPUT
-A FORWARD -j RH-Firewall-1-INPUT
-A RH-Firewall-1-INPUT -i lo -j ACCEPT
-A RH-Firewall-1-INPUT -p icmpv6 -j ACCEPT
-A RH-Firewall-1-INPUT -p 50 -j ACCEPT
-A RH-Firewall-1-INPUT -p 51 -j ACCEPT
-A RH-Firewall-1-INPUT -p udp --dport 5353 -d ff02::fb -j ACCEPT
-A RH-Firewall-1-INPUT -p udp -m udp --dport 631 -j ACCEPT
-A RH-Firewall-1-INPUT -p tcp -m tcp --dport 631 -j ACCEPT
-A RH-Firewall-1-INPUT -p udp -m udp --dport 32768:61000 -j ACCEPT
-A RH-Firewall-1-INPUT -p tcp -m tcp --dport 32768:61000 ! --syn -j ACCEPT
-A RH-Firewall-1-INPUT -m tcp -p tcp --dport 22 -j ACCEPT
-A RH-Firewall-1-INPUT -j reject --reject-with icmp6-adm-prohibited
COMMIT
```
与 IPv4 的 iptables 规则类似,但又不完全相同。
要开启 80 端口HTTP 服务器端口),在 COMMIT 一行之前添加如下规则:
```
-A RH-Firewall-1-INPUT -m tcp -p tcp --dport 80 -j ACCEPT
```
`-p tcp`表示仅针对 tcp 协议的通信。`--dport`指定端口号。
要开启 53 端口DNS 服务器端口),在 COMMIT 一行之前添加如下规则:
```
-A RH-Firewall-1-INPUT -m tcp -p tcp --dport 53 -j ACCEPT
-A RH-Firewall-1-INPUT -m udp -p tcp --dport 53 -j ACCEPT
```
同时针对 tcp 和 udp 协议开启 53 端口。
要开启 443 端口,在 COMMIT 一行之前添加如下规则:
```
-A RH-Firewall-1-INPUT -m tcp -p tcp --dport 443 -j ACCEPT
```
要开启 25 端口SMTP 邮件服务器端口),在 COMMIT 一行之前添加如下规则:
```
-A RH-Firewall-1-INPUT -m tcp -p tcp --dport 25 -j ACCEPT
```
对于那些没有特定规则与之匹配的数据包可能是我们不想要的多半是有问题的。我们可能也希望在丢弃DROP之前记录它们。此时可以将最后一行
```
-A RH-Firewall-1-INPUT -j REJECT --reject-with icmp6-adm-prohibited
COMMIT
```
改为:
```
-A RH-Firewall-1-INPUT -j LOG
-A RH-Firewall-1-INPUT -j DROP
COMMIT
```
保存并关闭该文件。然后重新启动 ip6tables 防火墙:
```
# service ip6tables restart
```
然后重新查看 ip6tables 规则,可以看到如下所示的输出:
```
# ip6tables -vnL --line-numbers
```
输出示例:
```
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
num pkts bytes target prot opt in out source destination
1 42237 3243K RH-Firewall-1-INPUT all * * ::/0 ::/0
Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
num pkts bytes target prot opt in out source destination
1 0 0 RH-Firewall-1-INPUT all * * ::/0 ::/0
Chain OUTPUT (policy ACCEPT 12557 packets, 2042K bytes)
num pkts bytes target prot opt in out source destination
Chain RH-Firewall-1-INPUT (2 references)
num pkts bytes target prot opt in out source destination
1 6 656 ACCEPT all lo * ::/0 ::/0
2 37519 2730K ACCEPT icmpv6 * * ::/0 ::/0
3 0 0 ACCEPT esp * * ::/0 ::/0
4 0 0 ACCEPT ah * * ::/0 ::/0
5 413 48385 ACCEPT udp * * ::/0 ff02::fb/128 udp dpt:5353
6 0 0 ACCEPT udp * * ::/0 ::/0 udp dpt:631
7 0 0 ACCEPT tcp * * ::/0 ::/0 tcp dpt:631
8 173 79521 ACCEPT udp * * ::/0 ::/0 udp dpts:32768:61000
9 0 0 ACCEPT tcp * * ::/0 ::/0 tcp dpts:32768:61000 flags:!0x16/0x02
10 0 0 ACCEPT tcp * * ::/0 ::/0 tcp dpt:22
11 0 0 ACCEPT tcp * * ::/0 ::/0 tcp dpt:80
12 0 0 ACCEPT tcp * * ::/0 ::/0 tcp dpt:53
13 4108 380K ACCEPT udp * * ::/0 ::/0 udp dpt:53
14 18 4196 REJECT all * * ::/0 ::/0
```
**IPv6 私有 IP**
IPv4 通常默认即可保护内部局域网私有 IP 上的主机。但是 IPv6 的地址非常丰富,不再需要使用类似 NAT 等协议的私有网络。这样一来,所有的内部主机都可以拥有公网 IP 而直接连接到互联网,也就同时暴露于互联网上的各种威胁之中了。那么,如何配置 IPv6 防火墙使其默认将除了 ping6 请求之外的所有输入数据包都丢弃呢可以使用FC00::/7 前缀来标识本地 IPv6 单播地址。
**允许特定的 ICMPv6 通信**
使用 IPv6 的时候需要允许比 IPv4 更多类型的 ICMP 通信以保证路由和 IP 地址自动配置等功能正常工作。有时候,如果你的规则设置太过苛刻,可能都无法分配到正确的 IPv6 地址。当然,不使用 DHCP 而是手动配置 IP 地址的除外。
下面是一些比较常见的 ipv6-icmp 配置实例:
```
:ICMPv6 - [0:0]
# Approve certain ICMPv6 types and all outgoing ICMPv6
# http://forum.linode.com/viewtopic.php?p=39840#39840
-A INPUT -p icmpv6 -j ICMPv6
-A ICMPv6 -p icmpv6 --icmpv6-type echo-request -j ACCEPT
-A ICMPv6 -p icmpv6 --icmpv6-type destination-unreachable -j ACCEPT
-A ICMPv6 -p icmpv6 --icmpv6-type packet-too-big -j ACCEPT
-A ICMPv6 -p icmpv6 --icmpv6-type time-exceeded -j ACCEPT
-A ICMPv6 -p icmpv6 --icmpv6-type parameter-problem -j ACCEPT
-A ICMPv6 -p icmpv6 --icmpv6-type router-solicitation -j ACCEPT
-A ICMPv6 -p icmpv6 --icmpv6-type router-advertisement -j ACCEPT
-A ICMPv6 -p icmpv6 --icmpv6-type neighbour-solicitation -j ACCEPT
-A ICMPv6 -p icmpv6 --icmpv6-type neighbour-advertisement -j ACCEPT
-A ICMPv6 -p icmpv6 --icmpv6-type redirect -j ACCEPT
-A ICMPv6 -p icmpv6 --icmpv6-type 141 -j ACCEPT
-A ICMPv6 -p icmpv6 --icmpv6-type 142 -j ACCEPT
-A ICMPv6 -p icmpv6 --icmpv6-type 148 -j ACCEPT
-A ICMPv6 -p icmpv6 --icmpv6-type 149 -j ACCEPT
-A ICMPv6 -p icmpv6 --icmpv6-type 130 -s fe80::/10 -j ACCEPT
-A ICMPv6 -p icmpv6 --icmpv6-type 131 -s fe80::/10 -j ACCEPT
-A ICMPv6 -p icmpv6 --icmpv6-type 132 -s fe80::/10 -j ACCEPT
-A ICMPv6 -p icmpv6 --icmpv6-type 143 -s fe80::/10 -j ACCEPT
-A ICMPv6 -p icmpv6 --icmpv6-type 151 -s fe80::/10 -j ACCEPT
-A ICMPv6 -p icmpv6 --icmpv6-type 152 -s fe80::/10 -j ACCEPT
-A ICMPv6 -p icmpv6 --icmpv6-type 153 -s fe80::/10 -j ACCEPT
-A ICMPv6 -j RETURN
-A OUTPUT -p icmpv6 -j ACCEPT
```
<!-- Linux命令行搜索引擎https://jaywcjlove.github.io/linux-command/ -->

@ -1,32 +0,0 @@
iptables-restore
===
还原iptables表的配置
## 补充说明
**iptables-restore命令** 用来还原iptables-save命令所备份的iptables配置。
### 语法
```
iptables-restor(选项)
```
### 选项
```
-c指定在还原iptables表时候还原当前的数据包计数器和字节计数器的值
-t指定要还原表的名称。
```
### 实例
```
iptables-restor < iptables.bak
```
iptables.bak是iptables-save命令所备份的文件。
<!-- Linux命令行搜索引擎https://jaywcjlove.github.io/linux-command/ -->

@ -1,43 +0,0 @@
iptables-save
===
备份iptables的表配置
## 补充说明
**iptables-save命令** 用于将linux内核中的iptables表导出到标准输出设备商通常使用shell中I/O重定向功能将其输出保存到指定文件中。
### 语法
```
iptables-save(选项)
```
### 选项
```
-c指定要保存的iptables表时保存当权的数据包计算器和字节计数器的值
-t指定要保存的表的名称。
```
### 实例
```
[root@localhost ~]# iptables-save -t filter > iptables.bak
[root@localhost ~]# cat iptables.bak
# Generated by iptables-save v1.3.5 on Thu Dec 26 21:25:15 2013
*filter
:INPUT DROP [48113:2690676]
:FORWARD accept [0:0]
:OUTPUT ACCEPT [3381959:1818595115]
-A INPUT -i lo -j ACCEPT
-A INPUT -p tcp -m tcp --dport 22 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 80 -j ACCEPT
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A OUTPUT -o lo -j ACCEPT
COMMIT
```
<!-- Linux命令行搜索引擎https://jaywcjlove.github.io/linux-command/ -->

@ -1,840 +0,0 @@
iptables
===
Linux上常用的防火墙软件
# 说明
**iptables命令** 是Linux上常用的防火墙软件是netfilter项目的一部分。可以直接配置也可以通过许多前端和图形界面配置。
<!-- TOC -->
- [补充说明](#补充说明)
- [语法](#语法)
- [选项](#选项)
- [命令选项输入顺序](#命令选项输入顺序)
- [工作机制](#工作机制)
- [防火墙的策略](#防火墙的策略)
- [防火墙的策略](#防火墙的策略-1)
- [实例](#实例)
- [列出已设置的规则](#列出已设置的规则)
- [清除已有规则](#清除已有规则)
- [删除已添加的规则](#删除已添加的规则)
- [开放指定的端口](#开放指定的端口)
- [屏蔽IP](#屏蔽ip)
- [指定数据包出去的网络接口](#指定数据包出去的网络接口)
- [查看已添加的规则](#查看已添加的规则)
- [启动网络转发规则](#启动网络转发规则)
- [端口映射](#端口映射)
- [字符串匹配](#字符串匹配)
- [阻止Windows蠕虫的攻击](#阻止windows蠕虫的攻击)
- [防止SYN洪水攻击](#防止syn洪水攻击)
Usage: iptables -[ACD] chain rule-specification [options]
iptables -I chain [rulenum] rule-specification [options]
iptables -R chain rulenum rule-specification [options]
iptables -D chain rulenum [options]
iptables -[LS] [chain [rulenum]] [options]
iptables -[FZ] [chain] [options]
iptables -[NX] chain
iptables -E old-chain-name new-chain-name
iptables -P chain target [options]
iptables -h (print this help information)
Commands:
Either long or short options are allowed.
--append -A chain Append to chain
--check -C chain Check for the existence of a rule
--delete -D chain Delete matching rule from chain
--delete -D chain rulenum
Delete rule rulenum (1 = first) from chain
--insert -I chain [rulenum]
Insert in chain as rulenum (default 1=first)
--replace -R chain rulenum
Replace rule rulenum (1 = first) in chain
--list -L [chain [rulenum]]
List the rules in a chain or all chains
--list-rules -S [chain [rulenum]]
Print the rules in a chain or all chains
--flush -F [chain] Delete all rules in chain or all chains
--zero -Z [chain [rulenum]]
Zero counters in chain or all chains
--new -N chain Create a new user-defined chain
--delete-chain
-X [chain] Delete a user-defined chain
--policy -P chain target
Change policy on chain to target
--rename-chain
-E old-chain new-chain
Change chain name, (moving any references)
Options:
--ipv4 -4 Nothing (line is ignored by ip6tables-restore)
--ipv6 -6 Error (line is ignored by iptables-restore)
[!] --protocol -p proto protocol: by number or name, eg. `tcp'
[!] --source -s address[/mask][...]
source specification
[!] --destination -d address[/mask][...]
destination specification
[!] --in-interface -i input name[+]
network interface name ([+] for wildcard)
--jump -j target
target for rule (may load target extension)
--goto -g chain
jump to chain with no return
--match -m match
extended match (may load extension)
--numeric -n numeric output of addresses and ports
[!] --out-interface -o output name[+]
network interface name ([+] for wildcard)
--table -t table table to manipulate (default: `filter')
--verbose -v verbose mode
--wait -w [seconds] maximum wait to acquire xtables lock before give up
--wait-interval -W [usecs] wait time to try to acquire xtables lock
default is 1 second
--line-numbers print line numbers when listing
--exact -x expand numbers (display exact values)
[!] --fragment -f match second or further fragments only
--modprobe=<command> try to insert modules using this command
--set-counters PKTS BYTES set the counter during insert/append
[!] --version -V print package version.
<!-- /TOC -->
### 语法
```
iptables(选项)(参数)
```
### 选项
```bash
-t, --table table 对指定的表 table 进行操作, table 必须是 raw natfiltermangle 中的一个。如果不指定此选项,默认的是 filter 表。
# 通用匹配:源地址目标地址的匹配
-p指定要匹配的数据包协议类型
-s, --source [!] address[/mask] :把指定的一个/一组地址作为源地址,按此规则进行过滤。当后面没有 mask 时address 是一个地址比如192.168.1.1;当 mask 指定时可以表示一组范围内的地址比如192.168.1.0/255.255.255.0。
-d, --destination [!] address[/mask] :地址格式同上,但这里是指定地址为目的地址,按此进行过滤。
-i, --in-interface [!] <网络接口name> :指定数据包的来自来自网络接口,比如最常见的 eth0 。注意:它只对 INPUTFORWARDPREROUTING 这三个链起作用。如果没有指定此选项, 说明可以来自任何一个网络接口。同前面类似,"!" 表示取反。
-o, --out-interface [!] <网络接口name> :指定数据包出去的网络接口。只对 OUTPUTFORWARDPOSTROUTING 三个链起作用。
# 查看管理命令
-L, --list [chain] 列出链 chain 上面的所有规则,如果没有指定链,列出表上所有链的所有规则。
# 规则管理命令
-A, --append chain rule-specification 在指定链 chain 的末尾插入指定的规则,也就是说,这条规则会被放到最后,最后才会被执行。规则是由后面的匹配来指定。
-I, --insert chain [rulenum] rule-specification 在链 chain 中的指定位置插入一条或多条规则。如果指定的规则号是1则在链的头部插入。这也是默认的情况如果没有指定规则号。
-D, --delete chain rule-specification -D, --delete chain rulenum 在指定的链 chain 中删除一个或多个指定规则。
-R numReplays替换/修改第几条规则
# 链管理命令(这都是立即生效的)
-P, --policy chain target :为指定的链 chain 设置策略 target。注意只有内置的链才允许有策略用户自定义的是不允许的。
-F, --flush [chain] 清空指定链 chain 上面的所有规则。如果没有指定链,清空该表上所有链的所有规则。
-N, --new-chain chain 用指定的名字创建一个新的链。
-X, --delete-chain [chain] :删除指定的链,这个链必须没有被其它任何规则引用,而且这条上必须没有任何规则。如果没有指定链名,则会删除该表中所有非内置的链。
-E, --rename-chain old-chain new-chain :用指定的新名字去重命名指定的链。这并不会对链内部照成任何影响。
-Z, --zero [chain] :把指定链,或者表中的所有链上的所有计数器清零。
-j, --jump target <指定目标> 即满足某条件时该执行什么样的动作。target 可以是内置的目标,比如 ACCEPT也可以是用户自定义的链。
-h显示帮助信息
```
#### 命令选项输入顺序
```
iptables -t 表名 <-A/I/D/R> 规则链名 [规则号] <-i/o > -p 协议名 <-s IP/> --sport 源端口 <-d IP/> --dport 目标端口 -j 动作
```
#### 工作机制
规则链名包括(也被称为五个钩子函数hook functions)
- **INPUT链** :处理输入数据包。
- **OUTPUT链** :处理输出数据包。
- **PORWARD链** :处理转发数据包。
- **PREROUTING链** 用于目标地址转换DNAT
- **POSTOUTING链** 用于源地址转换SNAT
#### 防火墙的策略
防火墙策略一般分为两种,一种叫`通`策略,一种叫`堵`策略,通策略,默认门是关着的,必须要定义谁能进。堵策略则是,大门是洞开的,但是你必须有身份认证,否则不能进。所以我们要定义,让进来的进来,让出去的出去,`所以通,是要全通,而堵,则是要选择`。当我们定义的策略的时候要分别定义多条功能其中定义数据包中允许或者不允许的策略filter过滤的功能而定义地址转换的功能的则是nat选项。为了让这些功能交替工作我们制定出了“表”这个定义来定义、区分各种不同的工作功能和处理方式。
防火墙规则表:
1. filter表(主要对数据包进行过滤) 定义允许或者不允许的只能做在3个链上INPUT FORWARD OUTPUT
2. nat表(主要用于修改数据包的IP地址、端口号等) 定义地址转换的也只能做在3个链上PREROUTING OUTPUT POSTROUTING
3.mangle表
修改报文原数据是5个链都可以做PREROUTINGINPUTFORWARDOUTPUTPOSTROUTING
我们修改报文原数据就是来修改TTL的。能够实现将数据包的元数据拆开在里面做标记/修改内容的。而防火墙标记其实就是靠mangle来实现的。
4.Raw表(主要用于决定数据包是否被状态跟踪机制处理在匹配raw表时优先于其他表)
小扩展:
- 对于filter来讲一般只能做在3个链上INPUT FORWARD OUTPUT
- 对于nat来讲一般也只能做在3个链上PREROUTING OUTPUT POSTROUTING
- 而mangle则是5个链都可以做PREROUTINGINPUTFORWARDOUTPUTPOSTROUTING
iptables/netfilter这款软件是工作在用户空间的它可以让规则进行生效的本身不是一种服务而且规则是立即生效的。而我们iptables现在被做成了一个服务可以进行启动停止的。启动则将规则直接生效停止则将规则撤销。
iptables还支持自己定义链。但是自己定义的链必须是跟某种特定的链关联起来的。在一个关卡设定指定当有数据的时候专门去找某个特定的链来处理当那个链处理完之后再返回。接着在特定的链中继续检查。
注意:规则的次序非常关键,`谁的规则越严格,应该放的越靠前`,而检查规则的时候,是按照从上往下的方式进行检查的。
#### 防火墙的策略
防火墙策略一般分为两种,一种叫`通`策略,一种叫`堵`策略,通策略,默认门是关着的,必须要定义谁能进。堵策略则是,大门是洞开的,但是你必须有身份认证,否则不能进,`所以通,是要全通,而堵,则是要选择`。
表名包括:
- **raw** :高级功能,如:网址过滤。
- **mangle** 数据包修改QOS用于实现服务质量。
- **net** :地址转换,用于网关路由器。
- **filter** :包过滤,用于防火墙规则。
动作包括:
- **ACCEPT** :接收数据包。
- **DROP** :丢弃数据包。
- **REDIRECT** :重定向、映射、透明代理。
- **SNAT** :源地址转换。
- **DNAT** :目标地址转换。
- **MASQUERADE** IP伪装NAT用于ADSL。
- **LOG** :日志记录。
```bash
┏╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍┓
┌───────────────┐ ┃ Network ┃
│ table: filter │ ┗━━━━━━━┳━━━━━━━┛
│ chain: INPUT │◀────┐ │
└───────┬───────┘ │ ▼
│ │ ┌───────────────────┐
┌ ▼ ┐ │ │ table: nat │
│local process│ │ │ chain: PREROUTING │
└ ┘ │ └─────────┬─────────┘
│ │ │
▼ │ ▼ ┌─────────────────┐
┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅ │ ┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅ │table: nat │
Routing decision └───── outing decision ─────▶│chain: PREROUTING│
┅┅┅┅┅┅┅┅┅┳┅┅┅┅┅┅┅┅┅ ┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅ └────────┬────────┘
│ │
▼ │
┌───────────────┐ │
│ table: nat │ ┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅ │
│ chain: OUTPUT │ ┌─────▶ outing decision ◀──────────────┘
└───────┬───────┘ │ ┅┅┅┅┅┅┅┅┳┅┅┅┅┅┅┅┅
│ │ │
▼ │ ▼
┌───────────────┐ │ ┌────────────────────┐
│ table: filter │ │ │ chain: POSTROUTING │
│ chain: OUTPUT ├────┘ └──────────┬─────────┘
└───────────────┘ │
┏╍╍╍╍╍╍╍╍╍╍╍╍╍╍╍┓
┃ Network ┃
┗━━━━━━━━━━━━━━━┛
```
### 实例
#### 列出已设置的规则
> iptables -L [-t 表名] [链名]
- 四个表名 `raw``nat``filter``mangle`
- 五个规则链名 `INPUT`、`OUTPUT`、`FORWARD`、`PREROUTING`、`POSTROUTING`
- filter表包含`INPUT`、`OUTPUT`、`FORWARD`三个规则链
```bash
iptables -L -t nat # 列出 nat 上面的所有规则
# ^ -t 参数指定,必须是 raw natfiltermangle 中的一个
iptables -L -t nat --line-numbers # 规则带编号
iptables -L INPUT
iptables -L -nv # 查看,这个列表看起来更详细
```
#### 清除已有规则
```bash
iptables -F INPUT # 清空指定链 INPUT 上面的所有规则
iptables -X INPUT # 删除指定的链,这个链必须没有被其它任何规则引用,而且这条上必须没有任何规则。
# 如果没有指定链名,则会删除该表中所有非内置的链。
iptables -Z INPUT # 把指定链,或者表中的所有链上的所有计数器清零。
```
#### 删除已添加的规则
```bash
# 添加一条规则
iptables -A INPUT -s 192.168.1.5 -j DROP
```
将所有iptables以序号标记显示执行
```
iptables -L -n --line-numbers
```
比如要删除INPUT里序号为8的规则执行
```bash
iptables -D INPUT 8
```
#### 开放指定的端口
```
iptables -A INPUT -s 127.0.0.1 -d 127.0.0.1 -j ACCEPT #允许本地回环接口(即运行本机访问本机)
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT #允许已建立的或相关连的通行
iptables -A OUTPUT -j ACCEPT #允许所有本机向外的访问
iptables -A INPUT -p tcp --dport 22 -j ACCEPT #允许访问22端口
iptables -A INPUT -p tcp --dport 80 -j ACCEPT #允许访问80端口
iptables -A INPUT -p tcp --dport 21 -j ACCEPT #允许ftp服务的21端口
iptables -A INPUT -p tcp --dport 20 -j ACCEPT #允许FTP服务的20端口
iptables -A INPUT -j reject #禁止其他未允许的规则访问
iptables -A FORWARD -j REJECT #禁止其他未允许的规则访问
```
#### 屏蔽IP
```
iptables -A INPUT -p tcp -m tcp -s 192.168.0.8 -j DROP # 屏蔽恶意主机比如192.168.0.8
iptables -I INPUT -s 123.45.6.7 -j DROP #屏蔽单个IP的命令
iptables -I INPUT -s 123.0.0.0/8 -j DROP #封整个段即从123.0.0.1到123.255.255.254的命令
iptables -I INPUT -s 124.45.0.0/16 -j DROP #封IP段即从123.45.0.1到123.45.255.254的命令
iptables -I INPUT -s 123.45.6.0/24 -j DROP #封IP段即从123.45.6.1到123.45.6.254的命令是
```
#### 指定数据包出去的网络接口
只对 OUTPUTFORWARDPOSTROUTING 三个链起作用。
```bash
iptables -A FORWARD -o eth0
```
#### 查看已添加的规则
```
iptables -L -n -v
Chain INPUT (policy DROP 48106 packets, 2690K bytes)
pkts bytes target prot opt in out source destination
5075 589K ACCEPT all -- lo * 0.0.0.0/0 0.0.0.0/0
191K 90M ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:22
1499K 133M ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:80
4364K 6351M ACCEPT all -- * * 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED
6256 327K ACCEPT icmp -- * * 0.0.0.0/0 0.0.0.0/0
Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
Chain OUTPUT (policy ACCEPT 3382K packets, 1819M bytes)
pkts bytes target prot opt in out source destination
5075 589K ACCEPT all -- * lo 0.0.0.0/0 0.0.0.0/0
```
#### 启动网络转发规则
公网`210.14.67.7`让内网`192.168.188.0/24`上网
```bash
iptables -t nat -A POSTROUTING -s 192.168.188.0/24 -j SNAT --to-source 210.14.67.127
```
#### 端口映射
本机的 2222 端口映射到内网 虚拟机的22 端口
```bash
iptables -t nat -A PREROUTING -d 210.14.67.127 -p tcp --dport 2222 -j DNAT --to-dest 192.168.188.115:22
```
#### 字符串匹配
比如我们要过滤所有TCP连接中的字符串`test`,一旦出现它我们就终止这个连接,我们可以这么做:
```bash
iptables -A INPUT -p tcp -m string --algo kmp --string "test" -j REJECT --reject-with tcp-reset
iptables -L
# Chain INPUT (policy ACCEPT)
# target prot opt source destination
# REJECT tcp -- anywhere anywhere STRING match "test" ALGO name kmp TO 65535 reject-with tcp-reset
#
# Chain FORWARD (policy ACCEPT)
# target prot opt source destination
#
# Chain OUTPUT (policy ACCEPT)
# target prot opt source destination
```
#### 阻止Windows蠕虫的攻击
```bash
iptables -I INPUT -j DROP -p tcp -s 0.0.0.0/0 -m string --algo kmp --string "cmd.exe"
```
#### 防止SYN洪水攻击
```bash
iptables -A INPUT -p tcp --syn -m limit --limit 5/second -j ACCEPT
```
```sh
iptables实现内外网隔离
#!/bin/bash
#赋值IPTABLES
IPT="/sbin/iptables"
#赋值外网IP:
FW_INET= 202.96.???.???
#赋值内网网卡和外网网卡及vpn网卡
IF_INET="eth0"
IF_LOCAL="eth1"
IF_OVPN="tun+"
#赋值内部vlan:
LAN_1="192.168.1.0/24"
LAN_2="192.168.2.0/24"
LAN_3="192.168.3.0/24"
#赋值总部与分公司的VPN 外网IP.
OVPN_HEADER="202.96.???.???" 本机防火墙外部IP
OVPN_SUBCOMPANY="202:128.???.???" 子公司防火墙外部IP
#赋值服务器IP
DNS/DHCP=192.168.1.???
EMAIL_LOCAL= 192.168.1.???
DOMAIN_SERVER=192.168.1.???
ANTIVIRUS_SERVER=192.168.1.???
FILE_SERVER=192.168.1.???
DATABASE_SERVER=192.168.1.???
#赋值VLAN网段可出外网
INTERNET1_FULL_ACCESS_1="192.168.1.100-192.168.1.160"
INTERNET2_FULL_ACCESS_2="192.168.2.50-192.168.2.70"
INTERNET3_FULL_ACCESS_3="192.168.3.40-192.168.3.99"
USERS_FULL_ACCESS=
SKYPE_USERS=" 192.168.1.200 192.168.2.200 192.168.3.200"
BLOCKED_HOSTS=""
#装载IPTABLES模块
modprobe nf_nat_ftp
#清空所有的防火墙设置
$IPT -F INPUT
$IPT -F FORWARD
$IPT -F FORWARD -t mangle
$IPT -F OUTPUT
$IPT -t nat -F OUTPUT
$IPT -t nat -F POSTROUTING
$IPT -t nat -F PREROUTING
#设置默认拒绝所有输入和转发数据包
$IPT -P INPUT DROP
$IPT -P FORWARD DROP
#允许所有数据包通过OPENVPN网络接口
$IPT -A INPUT -i lo -j ACCEPT
$IPT -A INPUT -i $IF_LOCAL -j ACCEPT
$IPT -A INPUT -i $IF_OVPN -j ACCEPT
#打开SSH端口访问
$IPT -A INPUT -p tcp --dport 22 -j ACCEPT
#充许OPENPN访问
$IPT -A INPUT -p tcp -s $OVPN_SUBCOMPANY -d $OVPN_HEADER --dport 55001 -j ACCEPT
#拒绝访问的IP
$IPT -I INPUT -s $BLOCKED_IPS -j DROP
$IPT -I FORWARD -s $BLOCKED_IPS -j DROP
#邮件服务器端口设置:
$IPT -A FORWARD -s $EMAIL_LOCAL -j ACCEPT
$IPT -A FORWARD -d $EMAIL_LOCAL -j ACCEPT
$IPT -t nat -A POSTROUTING -s $EMAIL_LOCAL -j MASQUERADE
$IPT -t nat -A PREROUTING -i $IF_INET -p tcp -d $FW_INET --dport 25 -j DNAT --to $EMAIL_LOCAL
$IPT -t nat -A PREROUTING -i $IF_INET -p tcp -d $FW_INET --dport 80 -j DNAT --to $EMAIL_LOCAL
$IPT -t nat -A PREROUTING -i $IF_INET -p tcp -d $FW_INET --dport 110 -j DNAT --to $EMAIL_LOCAL
$IPT -t nat -A PREROUTING -i $IF_INET -p tcp -d $FW_INET --dport 143 -j DNAT --to $EMAIL_LOCAL
$IPT -t nat -A PREROUTING -i $IF_INET -p tcp -d $FW_INET --dport 587 -j DNAT --to $EMAIL_LOCAL
$IPT -t nat -A PREROUTING -i $IF_INET -p tcp -d $FW_INET --dport 993 -j DNAT --to $EMAIL_LOCAL
$IPT -t nat -A PREROUTING -i $IF_INET -p tcp -d $FW_INET --dport 995 -j DNAT --to $EMAIL_LOCAL
$IPT -t nat -A PREROUTING -i $IF_INET -p tcp -d $FW_INET --dport 1925 -j DNAT --to-destination $EMAIL_LOCAL:25
#DNS服务器:
$IPT -A FORWARD -p tcp --sport 1024: -s $DNS/DHCP --dport 53 -j ACCEPT
$IPT -t nat -A POSTROUTING -p tcp --sport 1024: -s $DNS/DHCP --dport 53 -j MASQUERADE
$IPT -A FORWARD -p udp --sport 1024: -s $DNS/DHCP --dport 53 -j ACCEPT
$IPT -t nat -A POSTROUTING -p udp --sport 1024: -s $DNS/DHCP --dport 53 -j MASQUERADE
$IPT -A FORWARD -p tcp --sport 1024: -s $DNS/DHCP --dport 80 -j ACCEPT #允许服务器更新
$IPT -t nat -A POSTROUTING -p tcp --sport 1024: -s $DNS/DHCP --dport 80 -j MASQUERADE
#域服务器内外转发
$IPT -A FORWARD -s $DOMAIN_SERVER -j ACCEPT
$IPT -t nat -A POSTROUTING -s $DOMAIN_SERVER -j MASQUERADE
#抗病毒服务器内外转发
$IPT -A FORWARD -s $PA_NETFLOW -j ACCEPT
$IPT -t nat -A POSTROUTING -s $PA_NETFLOW -j MASQUERADE
#内外网隔离,VLAN IP段可访问外网设置
$IPT -A FORWARD -m iprange --src-range $INTERNET1_FULL_ACCESS -j ACCEPT
$IPT -t nat -A POSTROUTING -m iprange --src-range $INTERNET1_FULL_ACCESS ! -d 192.168.0.0/16 -j MASQUERADE
$IPT -A FORWARD -m iprange --src-range $INTERNET2_FULL_ACCESS -j ACCEPT
$IPT -t nat -A POSTROUTING -m iprange --src-range $INTERNET2_FULL_ACCESS ! -d 192.168.0.0/16 -j MASQUERADE
$IPT -A FORWARD -m iprange --src-range $INTERNET3_FULL_ACCESS -j ACCEPT
$IPT -t nat -A POSTROUTING -m iprange --src-range $INTERNET3_FULL_ACCESS ! -d 192.168.0.0/16 -j MASQUERADE
#外网代理端口
$IPT -A FORWARD -p tcp -s $LAN_1 --dport 443 -j ACCEPT
$IPT -t nat -A POSTROUTING -p tcp -s $LAN_1 --dport 443 -j MASQUERADE
$IPT -A FORWARD -p tcp -s $LAN_2 --dport 443 -j ACCEPT
$IPT -t nat -A POSTROUTING -p tcp -s $LAN_2 --dport 443 -j MASQUERADE
$IPT -A FORWARD -p tcp -s $LAN_3 --dport 443 -j ACCEPT
$IPT -t nat -A POSTROUTING -p tcp -s $LAN_3 --dport 443 -j MASQUERADE
```
### Netfilter/Iptables Layer7 应用层过滤策略
```sh
iptables安装
wget http://download.clearfoundation.com/l7-filter/netfilter-layer7-v2.23.tar.gz
wget https://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.35.9.tar.bz2
wget http://download.clearfoundation.com/l7-filter/l7-protocols-2009-05-28.tar.gz
wget http://ftp.redhat.com/redhat/linux/enterprise/6Server/en/os/SRPMS/iptables-1.4.7-11.el6.src.rpm
Netfilter/Iptables 作为一个典型的包过滤防火墙体系对于网络层传输层的数据包过滤具有非常优秀的性能和效率然而对于一些面向局域网上网用户的Linux网关服务器有时候还需要对QQMSN等聊天使用BT下载工具等现象进行封锁。下面将介绍如何为Netfilter/Iptables 增加应用层过滤。
QQMSN等聊天使用BT下载工具均使用了相对固定的应用层协议。使用L7-filter项目的补丁文件包可以为linux内核增加相应的应用层过滤功能结合其提供的l7-protocols第7层协议定义包能够识别不同应用层的数据特征
L7-filter项目站点http://l7-filter.sourceforge.net/ 下载最新的补丁包及协议包内核站点:http://www.kernel.org 下载内核iptables的源码包
将netfilter-layer7 源码包中的对应补丁文件添加到内核源码中对内核进行重新编译安装安装后使用新内核启动Linux操作系统。
注意L7-filter补丁包内的数据要与内核及iptables源码版本相匹配
注意源码目录所在分区至少保持有2.5G的剩余磁盘空间。
========编译安装内核========
1.解压释放netfilter-layer7 和内核源码包使用patch工具合并补丁文件
tar xf linux-2.6.35.9.tar.bz2 -C /usr/src/
tar xf netfilter-layer7-v2.23.tar.gz
cd /usr/src
ln -sn linux-2.6.35.9/ linux
ll linux* -d
lrwxrwxrwx 1 root root 15 Aug 26 10:55 linux -> linux-2.6.35.9/
drwxrwxr-x 23 root root 4096 Nov 23 2010 linux-2.6.35.9
cd linux
patch -p1 < /root/netfilter-layer7-v2.23/kernel-2.6.35-layer7-2.23.patch
patching file include/linux/netfilter/xt_layer7.h
patching file include/net/netfilter/nf_conntrack.h
patching file net/netfilter/Kconfig
patching file net/netfilter/Makefile
patching file net/netfilter/nf_conntrack_core.c
patching file net/netfilter/nf_conntrack_standalone.c
patching file net/netfilter/regexp/regexp.c
patching file net/netfilter/regexp/regexp.h
patching file net/netfilter/regexp/regmagic.h
patching file net/netfilter/regexp/regsub.c
patching file net/netfilter/xt_layer7.c
注意【patch -p1 】 中“1” 是数字 1不是小写字母 L
2.重新配置内核编译参数添加state机制及layer7支持【仍在内核编译目录】
cp /boot/config-2.6.32-431.el6.x86_64 .config
yum -y install gcc ncurses-devel
make menuconfig
在配置界面中,方向键用于定位需要配置的项目
select 进入子配置菜单
exit 返回上一层
help 查看帮助信息
空格 切换所选项目的编译类型
三种状态:
[] 表示不需要该功能
[M] 将功能编译成模块
[*] 将功能直接编入内核
Networking support ---> Networking options ---> Network packet filtering framework (Netfilter)
---> Core Netfilter Configuration --->
<M> Netfilter connection tracking support
<M> "layer7" match support
<M> "string" match support
<M> "time" match support
<M> "iprange" address range match support
<M> "connlimit" match support"
<M> "state" match support
<M> "conntrack" connection match support
<M> "mac" address match support
<M> "multiport" Multiple port match support
Networking support ---> Networking options ---> Network packet filtering framework (Netfilter)
---> IP: Netfilter Configuration --->
<M> IPv4 connection tracking support (required for NAT)
<M> Full NAT
<M> MASQUERADE target support
<M> NETMAP target support
<M> REDIRECT target support
使用Exit返回 最后当提示保存时使用Yes确认保存修改将保存到源码目录中的.config文件中。
3.编译新内核,并安装新内核文件
make
make modules_install && make install
新内核编译安装过程将花费较长时间,数十分钟到数小时不等
新内核文件被安装到/boot目录模块文件将复制到/lib/modules/2.6.35.9
如果编译内核,途中断过,想重新编译,那么先使用
make mrproper 删除不必要的文件和目录,初次编译内核不需要
make clean 删除不必要的模块和文件
然后重新 make menuconfig
4.调整GRUB引导菜单使系统以新内核启动然后重启linux服务器 从新版内核启动
vim /boot/grub/grub.conf 【修改default=0 1改为0】
default=0
timeout=5
splashimage=(hd0,1)/boot/grub/splash.xpm.gz
hiddenmenu
title CentOS (2.6.35.9)
root (hd0,1)
reboot
======安装iptables/l7-protocols协议包=======
1、制作iptables升级包
新建mockbuild用户将l7-protocols-2009-05-28.tar.gz解压后的用于iptables 1.4.3和内核2.6.20之后的文件复制过来。
注意目录层次。
useradd mockbuild
rpm -ivh iptables-1.4.7-11.el6.src.rpm
warning: iptables-1.4.7-11.el6.src.rpm: Header V3 RSA/SHA256 Signature, key ID fd431d51: NOKEY
1:iptables ########################################### [100%]
cd /root/rpmbuild/SOURCES/
tar xf iptables-1.4.7.tar.bz2
cd iptables-1.4.7
cp /root/netfilter-layer7-v2.23/iptables-1.4.3forward-for-kernel-2.6.20forward/* ./extensions/
cd ..
tar -jcf iptables-1.4.7.tar.bz2 iptables-1.4.7/*
mv iptables-1.4.7/ /tmp/
cd ../SPECS/
vim iptables.spec
Version: 1.4.7
Release: 11.5%{?dist} //修改11.5表示升级
CFLAGS="$RPM_OPT_FLAGS -fno-strict-aliasing"
--with-kernel=/usr/src/linux --with-kbuild=/usr/src/linux --with-ksource=/usr/src/linux
//最后 三项 参数改为编译 的内核 linux所在目录
%changelog
* Wed May 17 2016 Fisher 1.4.7-11.5
- L7-filter support //在 %changelog 后添加这两段,加入更新日志(日期为当天)
yum install rpm-build libselinux-devel -y
rpmbuild -ba iptables.spec
2、开始升级iptables
cd /root/rpmbuild/RPMS/x86_64/
rpm -Uvh iptables-1.4.7-11.5.el6.x86_64.rpm iptables-ipv6-1.4.7-11.5.el6.x86_64.rpm //可加参数 --nodeps 强制安装
cd /tmp
tar xf l7-protocols-2009-05-28.tar.gz
cd l7-protocols-2009-05-28
make install
mkdir -p /etc/l7-protocols
cp -R * /etc/l7-protocols
3、检查l7-protocols协议包
rpm -ql iptables | grep layer7
/lib64/xtables/libxt_layer7.so
========启用七层过滤/添加规则============
1、启用七层过滤
# modprobe xt_layer7
# lsmod | grep xt_layer7
xt_layer7 12060 0
nf_conntrack 79850 1 xt_layer7
2、查看并开启内核参数确保net.netfilter.nf_conntrack_acct等于1
# sysctl -a | grep conntrack_acct
net.netfilter.nf_conntrack_acct = 1
3、在Iptables上做7层防火墙过虑限制
vim /etc/sysctl.conf
net.ipv4.ip_forward = 1 //开启路由转发功能
sysctl -p
lsmod | grep -w nf_conntrack //查看nf_conntrack模块是否加载
nf_conntrack 79485 6
xt_layer7,iptable_nat,nf_nat,nf_conntrack_ipv4,nf_conntrack_ipv6,xt_state
sysctl -a | grep acct //查看内核连接追踪功能是否开启
kernel.acct = 4 2 30
###如果下面值为0修改为1
net.netfilter.nf_conntrack_acct = 1
###打开下面文件加入到里面执行如下命令即可生效
vim /etc/sysctl.conf
net.netfilter.nf_conntrack_acct = 1
sysctl -p
###也可使用此项命令修改,但一重启系统便会失效
sysctl -w net.netfilter.nf_conntrack_acct=1
4、添加规则
支持的layer7应用层协议
匹配格式iptables [-t 表名] -m layer7 --l7proto 协议名
根据时间过滤
匹配格式:-m time --timestart 起始时间 --timestop 结束时间 --weekdays 每周的那些天
时间格式以24小时制表示如早9:30 晚18:00
每周一至周日对应的英文缩写表示为Mon、Tue、Wed、Thu、Fri、Sat、Sun 也可以使用数字表示周一至周日1、2、3、4、5、6、7
根据字符串过滤
匹配格式:-m string --string “字符串” --algo {bm|kmp}
实例:
使用layer7显示匹配策略过滤使用QQ,MSN Edonkey等应用层协议的数据访问
iptables -A FORWARD -m layer7 --l7proto qq -j DROP
iptables -A FORWARD -m layer7 --l7proto msn-filetransfer -j DROP
iptables -A FORWARD -m layer7 --l7proto msnmessenger -j DROP
iptables -A FORWARD -m layer7 --l7proto bittorrenr -j DROP
iptables -A FORWARD -m layer7 --l7proto xunlei -j DROP
iptables -A FORWARD -m layer7 --l7proto edonkey -j DROP
使用--connlimit 显示匹配进行数据并发连接控制超过100个并发连接将拒绝
iptables -A FORWARD -p tcp --syn -m connlimit --connlimit-above 100 -j DROP
使用--time显示匹配根据时间范围设置访问策略允许周一到周五 8:00-18:00之间的数据访问
iptables -A FORWARD -p tcp --dport 80 -m time --timestart 8:00 --timestop 18:00 --weekdays Mon,Tue,Wed,Thu,Fri -j ACCEPT
星期一 MON 星期二 TUE 星期三 WED 星期四 THU 星期五 FRI 星期六 SAT 星期天 SUN
使用string显示匹配策略过滤包含tencent,verycd,色情,成人电影的网络访问
iptables -A FORWARD -m string --string "qq" --algo bm -j DROP
iptables -A FORWARD -m string --string "tencent" --algo bm -j DROP
iptables -A FORWARD -m string --string "verycd" --algo bm -j DROP
iptables -A FORWARD -m string --string "色情" --algo bm -j DROP
iptables -A FORWARD -m string --string "成人电影" --algo bm -j DROP
其中--algo参数用于指定字符串识别算法bm 或 kmp
5、查看支持的协议簇
ls /etc/l7-protocols/protocols/
=======问题汇总=======
<code>
1、在make 内核过程中报 【gcc: error: elf_x86_64: No such file or directory】
解决gcc -v 若gcc 版本为4.6 ,则不支持 linker-style 架构
在内核目录arch/x86/vdso/Makefile中大约在28,29行 找到
VDSO_LDFLAGS_vdso.lds = -m elf_x86_64 -Wl,-soname=linux-vdso.so.1 \
-Wl,-z,max-page-size=4096 -Wl,-z,common-page-size=4096
把"-m elf_x86_64" 替换为 "-m64"
然后再继续找大约在72行左右找到
VDSO_LDFLAGS_vdso32.lds = -m elf_i386 -Wl,-soname=linux-gate.so.1
中的 "-m elf_i386" 替换为 "-m32"
2、在make 内核过程中报【drivers/net/igbvf/igbvf.h:129:15: 错误重复的成员page
解决打开文件看129行代码为struct page *page;再往上看第124行也有struct page *page这行代码
这个结构定义在内部的一个结构体中。就是他的名字与129行的重复了而4.6.*的编译器不支持这种方式的定义,
我们修改129行的代码为struct page *pagep保存退出
3、在rpmbuild -bb iptables.spec 制作rpm包报 【*** ERROR: No build ID note found in /home/wuyang/rpmbuild/BUILDROOT/******
error: Bad exit status from /var/tmp/rpm-tmp.BPd1OI (%install)】
解决在iptables.spec文件中任意位置添加如下参数
%define __debug_install_post \
%{_rpmconfigdir}/find-debuginfo.sh %{?_find_debuginfo_opts} "%{_builddir}/%{?buildsubdir}"\
%{nil}
重新打包
允许某个IP段远程访问ssh
iptables -A INPUT -p tcp -m tcp --dport 9527 -s 192.168.64.0/24 -j ACCEPT
开启80端口
iptables -A INPUT -P tcp -m tcp --dropt 80 -j ACCEPT
允许某个IP的所有请求
iptables -A INPUT -p all -s 124.43.56.90/30 -j ACCEPT
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -P INPUT DROP
iptables -P OUTPUT ACCEPT
iptables -P FORWARD DROP
/etc/init.d/iptables save
/etc/init.d/iptables restart
1. 删除已有规则
在新设定iptables规则时我们一般先确保旧规则被清除用以下命令清除旧规则
iptables -F
(or iptables --flush)
2. 设置chain策略
对于filter table默认的chain策略为ACCEPT我们可以通过以下命令修改chain的策略
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT DROP
以上命令配置将接收、转发和发出包均丢弃,施行比较严格的包管理。由于接收和发包均被设置为丢弃,当
进一步配置其他规则的时候需要注意针对INPUT和OUTPUT分别配置。当然如果信任本机器往外发包
以上第三条规则可不必配置。
3. 屏蔽指定ip
有时候我们发现某个ip不停的往服务器发包这时我们可以使用以下命令将指定ip发来的包丢弃
BLOCK_THIS_IP="x.x.x.x"iptables -A INPUT -i eth0 -p tcp -s "$BLOCK_THIS_IP" -j DROP
以上命令设置将由x.x.x.x ip发往eth0网口的tcp包丢弃。
4. 配置服务项
利用iptables我们可以对日常用到的服务项进行安全管理比如设定只能通过指定网段、由指定网口通过
SSH连接本机
iptables -A INPUT -i eth0 -p tcp -s 192.168.100.0/24 --dport 22 -m state --state NEW,ESTABLESHED -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT
若要支持由本机通过SSH连接其他机器由于在本机端口建立连接因而还需要设置以下规则
iptables -A INPUT -i eth0 -p tcp -s 192.168.100.0/24 --dport 22 -m state --state ESTABLESHED -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp --sport 22 -m state --state NEW,ESTABLISHED -j ACCEPT
类似的对于HTTP/HTTPS(80/443)、pop3(110)、rsync(873)、MySQL(3306)等基于tcp连接的服务也可以参
照上述命令配置。
对于基于udp的dns服务使用以下命令开启端口服务
iptables -A OUTPUT -p udp -o eth0 --dport 53 -j ACCEPT
iptables -A INPUT -p udp -i eth0 --sport 53 -j ACCEPT
5. 网口转发配置
对于用作防火墙或网关的服务器,一个网口连接到公网,其他网口的包转发到该网口实现内网向公网通信,
假设eth0连接内网eth1连接公网配置规则如下
iptables -A FORWARD -i eth0 -o eth1 -j ACCEPT
6. 端口转发配置
对于端口我们也可以运用iptables完成转发配置
iptables -t nat -A PREROUTING -p tcp -d 192.168.102.37 --dport 422 -j DNAT --to 192.168.102.37:22
以上命令将422端口的包转发到22端口因而通过422端口也可进行SSH连接当然对于422端口我们也需要
像以上“4.配置服务项”一节一样,配置其支持连接建立的规则。
7. DoS攻击防范
利用扩展模块limit我们还可以配置iptables规则实现DoS攻击防范
iptables -A INPUT -p tcp --dport 80 -m limit --limit 25/minute --limit-burst 100 -j ACCEPT
litmit 25/minute 指示每分钟限制最大连接数为25
litmit-burst 100 指示当总连接数超过100时启动 litmit/minute 限制
8. 配置web流量均衡
我们可以将一台服务器作为前端服务器利用iptables进行流量分发配置方法如下
iptables -A PREROUTING -i eth0 -p tcp --dport 80 -m state --state NEW -m nth --counter 0 --every 3 --packet 0 -j
DNAT --to-destination 192.168.1.101:80
iptables -A PREROUTING -i eth0 -p tcp --dport 80 -m state --state NEW -m nth --counter 0 --every 3 --packet 0 -j
DNAT --to-destination 192.168.1.102:80
iptables -A PREROUTING -i eth0 -p tcp --dport 80 -m state --state NEW -m nth --counter 0 --every 3 --packet 0 -j
DNAT --to-destination 192.168.1.103:80
以上配置规则用到nth扩展模块将80端口的流量均衡到三台服务器。
9. 将丢弃包情况记入日志
使用LOG目标和syslog服务我们可以记录某协议某端口下的收发包情况。拿记录丢包情况举例可以通过以
下方式实现。
首先自定义一个chain
iptables -N LOGGING
其次将所有接收包导入LOGGING chain中
iptables -A INPUT -j LOGGING
然后设置日志前缀、日志级别:
iptables -A LOGGING -m limit --limit 2/min -j LOG --log-prefix "IPTables Packet Dropped: " --log-level 7
最后将包倒向DROP将包丢弃
iptables -A LOGGING -j DROP
另可以配置syslog.conf文件指定iptables的日志输出。
ps -eo"pid,stime,args"
ps -eo rss,pmem,pcpu,vsize,args | sort -k 1 -r -n | less
```
<!-- Linux命令行搜索引擎https://jaywcjlove.github.io/linux-command/ -->

@ -1,25 +1,12 @@
pvcreate
===
# **pvcreate**
将物理硬盘分区初始化为物理卷
## 选项
## 补充说明
**pvcreate命令** 用于将物理硬盘分区初始化为物理卷以便LVM使用。
### 语法
```
pvcreate(选项)(参数)
```
### 选项
```
-f强制创建物理卷不需要用户确认
-u指定设备的UUID
-y所有的问题都回答“yes”
-Z是否利用前4个扇区。
```info
-f 强制创建物理卷,不需要用户确认
-u 指定设备的UUID
-y 所有的问题都回答“yes”
-Z 是否利用前4个扇区
```
### 参数

@ -1,46 +1,86 @@
pvdisplay
===
# **pvdisplay**
显示物理卷的属性
## 补充说明
## 说明
**pvdisplay命令** 用于显示物理卷的属性。pvdisplay命令显示的物理卷信息包括物理卷名称、所属的卷组、物理卷大小、PE大小、总PE数、可用PE数、已分配的PE数和UUID。
### 语法
## 选项
```
pvdisplay(选项)(参数)
```info
-s 以短格式输出;
-m 显示PE到LE的映射。
```
### 选项
## LVM(逻辑卷管理)
```
-s以短格式输出
-m显示PE到LE的映射。
```
```sh
概念介绍:
LVM logical volume Manager逻辑卷管理通过将底层物理硬盘抽象封装起来以逻辑卷的形式表现给上层系统逻辑卷的大小可以动态调整的而且不会丢失数据。新加入的硬盘也不会改变现有上层的逻辑卷
### 参数
LVM特点
1.作为一个动态磁盘管理机制,逻辑卷技术大大提高了磁盘管理的灵活性;
2.LVM屏蔽了底层磁盘布局便于动态的调整磁盘空间大小
物理卷:要显示的物理卷对应的设备文件名。
相关概念:
PE物理拓展单元) #逻辑卷空间管理的基本单位默认是4M的大小
PV 物理卷
VG 卷组
LV 逻辑卷
### 实例
LVM原理解析
1.物理磁盘被格式化为PV空间被分为一个个的PE
2.不同的PV加入同一个VG不同的PV的PE全部进入VG的PE池
3.LV基于PE创建大小为PE的整数倍组成LV的PE可能来自不同物理磁盘
4.LV格式化完成后挂载就可以使用了
5.LV的扩充缩减实际上就是增加了或者减少了组成该LV的PE的数量。其过程不会丢失数据信息
```
使用pvdisplay命令显示指定的物理卷的基本信息。在命令行中输入下面的命令
FAQ:(Frequently Asked Question)
1.LV的大小应该由PE大小和PE数量决定;默认PE为4M大小的情况下一个逻辑卷最大可以支持256G
2.逻辑卷可以动态扩充的大小取决于卷组的大小
3.PE的大小最终影响 逻辑卷的最大大小逻辑卷的大小一定是PE的整数倍
5.一个逻辑卷只能属于一个卷组
## LVM拉伸逻辑卷
```sh
(可在线扩容,无需卸载逻辑卷)
vgdisplay或vgs # 确保VG中有足够的空闲空间通过以下指令查询即可
lvextend -L +5G /dev/vg01/lv01 # 扩充逻辑卷,增大5G的大小
resize2fs /dev/vg01/lv01 # 更新文件系统(检测磁盘的大小)
df -hT # 查看更新后文件系统
备注在没有使用命令resize2fs命令之前使用df -hT 命令看到逻辑卷的大小并没有变化,为什么?
逻辑卷是底层的东西,操作系统要使用底层的空间需要创建文件系统,创建文件系统(格式化操作)的时候大小就固定下来,因此逻辑卷的大小也是固定的。在拉伸逻辑卷空间时,并没有更新文件系统,所以要要执行更新文件系统的操作,要操作系统识别固定的大小;
```
[root@localhost ~]# pvdisplay /dev/sdb1 #显示物理卷基本信息
```
输出信息如下:
## LVM缩小逻辑卷
```sh
(在实际运作当中很少使用且这种操作及其危险,容易导致数据丢失)备注:逻辑卷的缩小必须是离线操作,要卸载逻辑卷;
umount /dev/vg01/lv01 # 卸载已经挂载的逻辑卷
e2fsck -f /dev/vg01/lv01 # 强制检测文件系统信息
resize2fs /dev/vg01/lv01 10G # 缩小文件系统(一般都有提示信息)指定逻辑卷大小为10G大小
lvreduce -L 10G /dev/vg01/lv01 # 缩小LV
lvdisplay lvs ; lvscan # 查看缩小后的LV
mount /dev/vg01/lv01 /mnt # 挂载
切记:严格按照顺序执行命令。先缩小文件系统,后缩小底层空间
```
"/dev/sdb1" is a new physical volume of "101.94 MB"
--- NEW Physical volume ---
PV Name /dev/sdb1
....省略部分输出内容......
PV UUID FOXiS2-Ghaj-Z0Mf- cdVZ-pfpk- dP9p-ifIZXN
## LVM拉伸卷组
```sh
pvcreate /dev/sdd # 创建新的物理卷
vgextend vg01 /dev/sdd # 向vg01卷组中添加物理卷/dev/sdd
vgs, vgdisplay # 查看卷组信息
```
## LVM缩小卷组
```sh
vgreduce vg01 /dev/sdd # 将一个PV从指定卷组中移除
vgdisplay或vgs # 查看缩小后的卷组大小
```
<!-- Linux命令行搜索引擎https://jaywcjlove.github.io/linux-command/ -->
## 实例

@ -1,44 +0,0 @@
pvs
===
输出物理卷信息报表
## 补充说明
**pvs命令** 用于输出格式化的物理卷信息报表。使用pvs命令仅能得到物理卷的概要信息如果要得到更加详细的信息可以使用pvdisplay命令。
### 语法
```
pvs(选项)(参数)
```
### 选项
```
--noheadings不输出标题头
--nosuffix不输出空间大小的单位。
```
### 参数
物理卷:要显示报表的物理卷列表。
### 实例
使用pvs命令显示系统中所有物理卷的信息报表。在命令行中输入下面的命令
```
pvs #输出物理卷信息报表
```
输出信息如下:
```
PV VG fmt Attr PSize PFree
/dev/sdb1 vg1000 lvm2 -- 100.00M 100.00M
/dev/sdb2 lvm2 -- 101.98M 101.98M
```
<!-- Linux命令行搜索引擎https://jaywcjlove.github.io/linux-command/ -->

@ -1,6 +1,6 @@
# nothing
# nothing
站在巨人的肩上!!!
仰望天空,脚踏实地。
LinuxCommand Forked from <https://github.com/jaywcjlove/linux-command> On the other hand, while learning, supplement and update by oneself!
Linux_man_cn Forked from <https://github.com/jaywcjlove/linux-command> On the other hand, while learning, supplement and update by oneself!
Loading…
Cancel
Save