From a6b19206d8983742677fe2b734b8e253555103db Mon Sep 17 00:00:00 2001 From: Black-Gold Date: Sat, 2 Mar 2019 16:06:11 +0800 Subject: [PATCH] '' --- LearnPython3/GrabPhotos.py | 13 - LearnPython3/ScanPort.py | 56 ++ LearnPython3/Test.py | 14 + Linux_man_cn/apachectl.md | 28 - Linux_man_cn/ifconfig.md | 127 ----- Linux_man_cn/install.md | 81 --- Linux_man_cn/ip.md | 106 ---- Linux_man_cn/ip6tables-restore.md | 24 - Linux_man_cn/ip6tables-save.md | 24 - Linux_man_cn/ip6tables.md | 206 -------- Linux_man_cn/iptables-restore.md | 32 -- Linux_man_cn/iptables-save.md | 43 -- Linux_man_cn/iptables.md | 840 ------------------------------ Linux_man_cn/mdadm.md | 0 Linux_man_cn/pvcreate.md | 27 +- Linux_man_cn/pvdisplay.md | 92 +++- Linux_man_cn/pvs.md | 44 -- README.md | 4 +- 18 files changed, 145 insertions(+), 1616 deletions(-) delete mode 100644 LearnPython3/GrabPhotos.py create mode 100644 LearnPython3/ScanPort.py create mode 100644 LearnPython3/Test.py delete mode 100644 Linux_man_cn/apachectl.md delete mode 100644 Linux_man_cn/ifconfig.md delete mode 100644 Linux_man_cn/install.md delete mode 100644 Linux_man_cn/ip.md delete mode 100644 Linux_man_cn/ip6tables-restore.md delete mode 100644 Linux_man_cn/ip6tables-save.md delete mode 100644 Linux_man_cn/ip6tables.md delete mode 100644 Linux_man_cn/iptables-restore.md delete mode 100644 Linux_man_cn/iptables-save.md delete mode 100644 Linux_man_cn/iptables.md create mode 100644 Linux_man_cn/mdadm.md delete mode 100644 Linux_man_cn/pvs.md diff --git a/LearnPython3/GrabPhotos.py b/LearnPython3/GrabPhotos.py deleted file mode 100644 index ae6e592..0000000 --- a/LearnPython3/GrabPhotos.py +++ /dev/null @@ -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) - diff --git a/LearnPython3/ScanPort.py b/LearnPython3/ScanPort.py new file mode 100644 index 0000000..efd8e67 --- /dev/null +++ b/LearnPython3/ScanPort.py @@ -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) diff --git a/LearnPython3/Test.py b/LearnPython3/Test.py new file mode 100644 index 0000000..4d64b47 --- /dev/null +++ b/LearnPython3/Test.py @@ -0,0 +1,14 @@ +from flask import Flask, url_for() +app = Flask(__name__) + + +@app.route('/') +def index(): + return 'index!' + + +if __name__ == '__main__': + app.run() + + + diff --git a/Linux_man_cn/apachectl.md b/Linux_man_cn/apachectl.md deleted file mode 100644 index bd47688..0000000 --- a/Linux_man_cn/apachectl.md +++ /dev/null @@ -1,28 +0,0 @@ -apachectl -=== - -Apache服务器前端控制工具 - -## 补充说明 - -**apachectl命令** 是Apache的Web服务器前端控制工具,用以启动、关闭和重新启动Web服务器进程。 - -### 语法 - -``` -apachectl(参数) -``` - -### 参数 - -* configtest:检查设置文件中的语法是否正确; -* fullstatus:显示服务器完整的状态信息; -* graceful:重新启动Apache服务器,但不会中断原有的连接; -* help:显示帮助信息; -* restart:重新启动Apache服务器; -* start:启动Apache服务器; -* status:显示服务器摘要的状态信息; -* stop:停止Apache服务器。 - - - \ No newline at end of file diff --git a/Linux_man_cn/ifconfig.md b/Linux_man_cn/ifconfig.md deleted file mode 100644 index d33f9af..0000000 --- a/Linux_man_cn/ifconfig.md +++ /dev/null @@ -1,127 +0,0 @@ -# **ifconfig** - -## 补充说明 - -**ifconfig命令** 被用于配置和显示Linux内核中网络接口的网络参数。用ifconfig命令配置的网卡信息,在网卡重启后机器重启后,配置就不存在。要想将上述的配置信息永远的存的电脑里,那就要修改网卡的配置文件了。 - -## 用法: - -```sh -ifconfig [-a] [-v] [-s] [[]
] -[add
[/]] -[del
[/]] -[[-]broadcast [
]] [[-]pointopoint [
]] -[netmask
] [dstaddr
] [tunnel
] -[outfill ] [keepalive ] -[hw
] [mtu ] -[[-]trailers] [[-]arp] [[-]allmulti] -[multicast] [[-]promisc] -[mem_start ] [io_addr ] [irq ] [media ] -[txqueuelen ] -[[-]dynamic] -[up|down] ... - -=硬件类型。 -可能硬件类型列表: - 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) -=地址族。默认: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:关闭指定的网络设备; -<硬件地址>:设置网络设备的类型与硬件地址; -io_addr:设置网络设备的I/O地址; -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 -``` \ No newline at end of file diff --git a/Linux_man_cn/install.md b/Linux_man_cn/install.md deleted file mode 100644 index cb4bd2a..0000000 --- a/Linux_man_cn/install.md +++ /dev/null @@ -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是目录。 - - - \ No newline at end of file diff --git a/Linux_man_cn/ip.md b/Linux_man_cn/ip.md deleted file mode 100644 index efc3ef5..0000000 --- a/Linux_man_cn/ip.md +++ /dev/null @@ -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: mtu 16436 qdisc noqueue - link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 -2: eth0: mtu 1500 qdisc pfifo_fast qlen 1000 - link/ether 00:16:3e:00:1e:51 brd ff:ff:ff:ff:ff:ff -3: eth1: 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: 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: 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: 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}' -``` - - diff --git a/Linux_man_cn/ip6tables-restore.md b/Linux_man_cn/ip6tables-restore.md deleted file mode 100644 index a6638ee..0000000 --- a/Linux_man_cn/ip6tables-restore.md +++ /dev/null @@ -1,24 +0,0 @@ -ip6tables-restore -=== - -还原ip6tables表 - -## 补充说明 - -**ip6tables-restore命令** 用来还原ip6tables表。 - -### 语法 - -``` -ip6tables-restore(选项) -``` - -### 选项 - -``` --c:指定在还原iptables表时,还原当前的数据包计数器和字节计数器值; --t:指定要还原的表的名称。 -``` - - - \ No newline at end of file diff --git a/Linux_man_cn/ip6tables-save.md b/Linux_man_cn/ip6tables-save.md deleted file mode 100644 index 3513d74..0000000 --- a/Linux_man_cn/ip6tables-save.md +++ /dev/null @@ -1,24 +0,0 @@ -ip6tables-save -=== - -保存ip6tables表配置 - -## 补充说明 - -**ip6tables-save命令** 将Linux内核中ip6tables表导出到标准输出设备上。 - -### 语法 - -``` -ip6tables-save(选项) -``` - -### 选项 - -``` --c:指定在保存iptables表时,保存当前的数据包计数器和字节计数器值; --t:指定要保存的表的名称。 -``` - - - \ No newline at end of file diff --git a/Linux_man_cn/ip6tables.md b/Linux_man_cn/ip6tables.md deleted file mode 100644 index ce10378..0000000 --- a/Linux_man_cn/ip6tables.md +++ /dev/null @@ -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 -``` - - - \ No newline at end of file diff --git a/Linux_man_cn/iptables-restore.md b/Linux_man_cn/iptables-restore.md deleted file mode 100644 index 50fe6bb..0000000 --- a/Linux_man_cn/iptables-restore.md +++ /dev/null @@ -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命令所备份的文件。 - - - \ No newline at end of file diff --git a/Linux_man_cn/iptables-save.md b/Linux_man_cn/iptables-save.md deleted file mode 100644 index 74742b7..0000000 --- a/Linux_man_cn/iptables-save.md +++ /dev/null @@ -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 -``` - - - \ No newline at end of file diff --git a/Linux_man_cn/iptables.md b/Linux_man_cn/iptables.md deleted file mode 100644 index 91e7806..0000000 --- a/Linux_man_cn/iptables.md +++ /dev/null @@ -1,840 +0,0 @@ -iptables -=== - -Linux上常用的防火墙软件 - -# 说明 - -**iptables命令** 是Linux上常用的防火墙软件,是netfilter项目的一部分。可以直接配置,也可以通过许多前端和图形界面配置。 - - - -- [补充说明](#补充说明) - - [语法](#语法) - - [选项](#选项) - - [命令选项输入顺序](#命令选项输入顺序) - - [工作机制](#工作机制) - - [防火墙的策略](#防火墙的策略) - - [防火墙的策略](#防火墙的策略-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= try to insert modules using this command - --set-counters PKTS BYTES set the counter during insert/append -[!] --version -V print package version. - - - - -### 语法 - -``` -iptables(选项)(参数) -``` - -### 选项 - -```bash --t, --table table 对指定的表 table 进行操作, table 必须是 raw, nat,filter,mangle 中的一个。如果不指定此选项,默认的是 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 。注意:它只对 INPUT,FORWARD,PREROUTING 这三个链起作用。如果没有指定此选项, 说明可以来自任何一个网络接口。同前面类似,"!" 表示取反。 --o, --out-interface [!] <网络接口name> :指定数据包出去的网络接口。只对 OUTPUT,FORWARD,POSTROUTING 三个链起作用。 - -# 查看管理命令 --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 num:Replays替换/修改第几条规则 - -# 链管理命令(这都是立即生效的) --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个链都可以做:PREROUTING,INPUT,FORWARD,OUTPUT,POSTROUTING - -我们修改报文原数据就是来修改TTL的。能够实现将数据包的元数据拆开,在里面做标记/修改内容的。而防火墙标记,其实就是靠mangle来实现的。 -4.Raw表:(主要用于决定数据包是否被状态跟踪机制处理,在匹配raw表时优先于其他表) - -小扩展: - -- 对于filter来讲一般只能做在3个链上:INPUT ,FORWARD ,OUTPUT -- 对于nat来讲一般也只能做在3个链上:PREROUTING ,OUTPUT ,POSTROUTING -- 而mangle则是5个链都可以做:PREROUTING,INPUT,FORWARD,OUTPUT,POSTROUTING - -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, nat,filter,mangle 中的一个 -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的命令是 -``` - -#### 指定数据包出去的网络接口 - -只对 OUTPUT,FORWARD,POSTROUTING 三个链起作用。 - -```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网关服务器,有时候还需要对QQ,MSN等聊天,使用BT下载工具等现象进行封锁。下面将介绍如何为Netfilter/Iptables 增加应用层过滤。 - -QQ,MSN等聊天,使用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 ---> - Netfilter connection tracking support - "layer7" match support - "string" match support - "time" match support - "iprange" address range match support - "connlimit" match support" - "state" match support - "conntrack" connection match support - "mac" address match support - "multiport" Multiple port match support - - Networking support ---> Networking options ---> Network packet filtering framework (Netfilter) - ---> IP: Netfilter Configuration ---> - IPv4 connection tracking support (required for NAT) - Full NAT - MASQUERADE target support - NETMAP target support - 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/ - -=======问题汇总======= - -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 - - - - - -``` - - diff --git a/Linux_man_cn/mdadm.md b/Linux_man_cn/mdadm.md new file mode 100644 index 0000000..e69de29 diff --git a/Linux_man_cn/pvcreate.md b/Linux_man_cn/pvcreate.md index edef9ec..3c5fde2 100644 --- a/Linux_man_cn/pvcreate.md +++ b/Linux_man_cn/pvcreate.md @@ -1,25 +1,12 @@ -pvcreate -=== +# **pvcreate** -将物理硬盘分区初始化为物理卷 +## 选项 -## 补充说明 - -**pvcreate命令** 用于将物理硬盘分区初始化为物理卷,以便LVM使用。 - -### 语法 - -``` -pvcreate(选项)(参数) -``` - -### 选项 - -``` --f:强制创建物理卷,不需要用户确认; --u:指定设备的UUID; --y:所有的问题都回答“yes”; --Z:是否利用前4个扇区。 +```info +-f 强制创建物理卷,不需要用户确认 +-u 指定设备的UUID +-y 所有的问题都回答“yes” +-Z 是否利用前4个扇区 ``` ### 参数 diff --git a/Linux_man_cn/pvdisplay.md b/Linux_man_cn/pvdisplay.md index f52f3f8..3c71d6c 100644 --- a/Linux_man_cn/pvdisplay.md +++ b/Linux_man_cn/pvdisplay.md @@ -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 # 查看缩小后的卷组大小 +``` - \ No newline at end of file +## 实例 diff --git a/Linux_man_cn/pvs.md b/Linux_man_cn/pvs.md deleted file mode 100644 index a030148..0000000 --- a/Linux_man_cn/pvs.md +++ /dev/null @@ -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 -``` - - - \ No newline at end of file diff --git a/README.md b/README.md index d7bc01e..824d6f2 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ -# nothing +# nothing 站在巨人的肩上!!! 仰望天空,脚踏实地。 -LinuxCommand Forked from On the other hand, while learning, supplement and update by oneself! \ No newline at end of file +Linux_man_cn Forked from On the other hand, while learning, supplement and update by oneself! \ No newline at end of file