Linux 基础

KAKSKY / 2023-08-31 / 原文

网络配置

二、Linux的网络服务

1、网络基本配置
网卡、多网卡配置,路由配置,基本网络调试命令的使用。

2、网络服务配置
(1)拨号(PPP)配置:配置ADSL拨号,与PPPoE宽带拨号。
(2)网络文件系统(NFS)配置和Samba服务器配置。
(3)FTP服务器配置:安装与配置vsftp。
(4)DNS服务器、DHCP服务器配置。
(5)配置sendmail邮件服务器。

配置网卡为静态地址:

vi /etc/sysconfig/network- scripts/ifcfg-en网卡名

BOOTPROTO=static
ONBOOT=yes
IPADDR=
NETMASK=
GATEWAY=

重启网络的方式:
方式一:service network restart
方式二:systemctl restart network

文件的基本属性

images

[ d ] 表示是个目录
[ - ] 表示是个文件
[ l ] 表示是个链接文件
[ b ] 表示为装置文里可供储存的接口设备
[ c ] 表示为装置文件里面的串口设备

r == 4
w == 2
x == 1

images

一、Linux的高级管理和脚本程序设计

1、Linux常用指令

正确使用Linux常用指令进行进程管理、文件系统管理、用户管理。

2、Linux的安装、启动、退出及启动配置脚本

3、Linux磁盘管理

正确地进行硬盘分区,使用USB存储器与光盘。

4、软件安装

正确使用RPM包与相关工具进行软件包管理,并能进行打包操作。

5、Shell脚本编写

了解shell变量和相关的命令,能使用vi实现简单的shell程序设计。能给shell脚本传递参数,使用程序流程控制命令,exec命令和文件输入/输出,自定义函数。

1、Linux常用指令

常用指令:

Linux文件系统管理:

![[Pasted image 20230806102505.png]]

  • /boot:存放的启动Linux 时使用的内核文件,包括连接文件以及镜像文件。

  • /etc:存放所有的系统需要的配置文件和子目录列表,更改目录下的文件可能会导致系统不能启动。

  • /lib:存放基本代码库(比如c++库),其作用类似于Windows里的DLL文件。几乎所有的应用程序都需要用到这些共享库。

  • /sys: 这是linux2.6内核的一个很大的变化。该目录下安装了2.6内核中新出现的一个文件系统 sysfs 。sysfs文件系统集成了下面3种文件系统的信息:针对进程信息的proc文件系统、针对设备的devfs文件系统以及针对伪终端的devpts文件系统。该文件系统是内核设备树的一个直观反映。当一个内核对象被创建的时候,对应的文件和目录也在内核对象子系统中

指令集合:

  • /bin:存放着最常用的程序和指令

  • /sbin:只有系统管理员能使用的程序和指令。

外部文件管理:

  • /dev :Device(设备)的缩写, 存放的是Linux的外部设备。注意:在Linux中访问设备和访问文件的方式是相同的。

  • /media:类windows的其他设备,例如U盘、光驱等等,识别后linux会把设备放到这个目录下。

  • /mnt:临时挂载别的文件系统的,我们可以将光驱挂载在/mnt/上,然后进入该目录就可以查看光驱里的内容了。

临时文件:

  • /run:是一个临时文件系统,存储系统启动以来的信息。当系统重启时,这个目录下的文件应该被删掉或清除。如果你的系统上有 /var/run 目录,应该让它指向 run。

  • /lost+found:一般情况下为空的,系统非法关机后,这里就存放一些文件。

  • /tmp:这个目录是用来存放一些临时文件的。

账户:

  • /root:系统管理员的用户主目录。

  • /home:用户的主目录,以用户的账号命名的。

  • /usr:用户的很多应用程序和文件都放在这个目录下,类似于windows下的program files目录。

  • /usr/bin:系统用户使用的应用程序与指令。

  • /usr/sbin:超级用户使用的比较高级的管理程序和系统守护程序。

  • /usr/src:内核源代码默认的放置目录。

运行过程中要用:

  • /var:存放经常修改的数据,比如程序运行的日志文件(/var/log 目录下)。

  • /proc:管理内存空间!虚拟的目录,是系统内存的映射,我们可以直接访问这个目录来,获取系统信息。这个目录的内容不在硬盘上而是在内存里,我们也可以直接修改里面的某些文件来做修改。

扩展用的:

  • /opt:默认是空的,我们安装额外软件可以放在这个里面。

  • /srv:存放服务启动后需要提取的数据(不用服务器就是空)

文件目录的表示:

  • . :代表当前的目录,也可以使用 ./ 来表示;
  • .. :代表上一层目录,也可以 ../ 来代表。

Linux忘记密码的解决方式:

https://www.runoob.com/linux/linux-forget-password.html

文件基本属性:

chown(change ownerp):修改所属用户与组

chmod(change mode):修改用户的权限

第一个字符所代表的意思:

d:目录

-:文件

l:链接文档(link file)

b:装置文件里面的可供存储的接口设备(可随机读写设备)

c:装置文件里面的串行端口设备(如键盘、鼠标)

文件系统的权限:

r:可读 权限等于4

w:可写 权限等于2

x:可执行 权限等于1

![[Pasted image 20230806102536.png]]

更改文件属性

1、chgrp:更改文件属组

语法:

chgrp [-R] 属组名 文件名

参数选项:

-R:递归更改文件属组,就是在更改某个目录文件的属组时,如果加上-R的参数,那么该目录下的所有文件的属组都会更改。

2、chown:更改文件属主,也可以同时更改文件属组

语法:

chown [–R] 属主名 文件名

chown [-R] 属主名:属组名 文件名

3、chmod:更改文件9个属性

Linux文件属性设置有两种设置方法,一种是数字,一种是符号。

基本权限有九个:owner/group/others(拥有者/组/其他)三种身份各有自己的read/write/execute权限

语法:

chmod [-R] xyz 文件或目录

参数选项:

  • xyz : 就是刚刚提到的数字类型的权限属性,为 rwx 属性数值的相加。
  • -R : 进行递归(recursive)的持续变更,亦即连同次目录下的所有文件都会变更

可以使用u,g,o表示user、group、others

chmod u=rwx,g=rx,o=r 文件名来设定

用户管理:

基本操作:用户账号的添加、删除和修改 | 用户口令的管理 | 用户组的管理

添加用户账号:

useradd 选项 用户名

参数选项:

  • -c comment 指定一段注释性描述。
  • -d 目录 指定用户主目录,如果此目录不存在,则同时使用-m选项,可以创建主目录。
  • -g 用户组 指定用户所属的用户组。
  • -G 用户组,用户组 指定用户所属的附加组。
  • -s Shell文件 指定用户的登录Shell。
  • -u 用户号 指定用户的用户号,如果同时有-o选项,则可以重复使用其他用户的标识号。

删除用户账号:

userdel 选项 用户名

修改账号:

usermod 选项 用户名

用户口令的管理:

passwd 选项 用户名

参数选项:

  • -l 锁定口令,即禁用账号。
  • -u 口令解锁。
  • -d 使账号无口令。
  • -f 强迫用户下次登录时修改口令。

用户组管理:

增加一个用户组:

groupadd 选项 用户组

参数选项:

  • -g GID 指定新用户组的组标识号(GID)。
  • -o 一般与-g选项同时使用,表示新用户组的GID可以与系统已有用户组的GID相同。

删除一个用户组:

groupdel 用户组

修改一个用户组:

groupmod 选项 用户组

参数选项:

  • -g GID 为用户组指定新的组标识号。
  • -o 与-g选项同时使用,用户组的新GID可以与系统已有用户组的GID相同。
  • -n新用户组 将用户组的名字改为新名字

如果一个用户同时属于多个用户组,那么用户可以再用户组之间切换,以便具有其他用户组的权限。

切换方式:

newgrp 用户组

与用户账号有关的系统文件

/etc/passwd 文件下记录了所有用户的基本属性

用户名:口令:用户标识号:组标识号:注释性描述:主目录:登录Shell

/etc/shadow中的记录行与/etc/passwd中的一一对应,它由pwconv命令根据/etc/passwd中的数据自动产生

登录名:加密口令:最后一次修改时间:最小时间间隔:最大时间间隔:警告时间:不活动时间:失效时间:标志

用户组所有的信息都存放在/etc/group文件中

当一个用户同时使多个组中的成员时,在etc/passwd文件中记录的是用户所属的主组,也就是登录时所属的默认组,而其他组称为附加组。

用户要访问属于附加组的文件时,必须首先使用newgrp命令使自己成为所要访问的组中的成员。

文件格式:

组名:口令:组标识号:组内用户列表

批量添加用户:

①编辑一个文本用户文件

②以root身份执行命令 /usr/sbin/newusers 从刚创建的用户文件user.txt中导入数据,创建用户:

newsers < user.txt

③执行命令 /usr/sbin/pwunconv

④编辑每个用户的密码对照文件

⑤以root身份执行命令 /usr/sbin/chpasswd

⑥确定密码经编码写入/etc/passwd

2、Linux的安装、启动、退出及启动配置脚本

3、Linux磁盘管理

df : 列出文件系统的整体磁盘使用量

du : 检查磁盘空间使用量

fdisk : 用于磁盘分区

df : 检查文件系统的磁盘空间占用情况

df [-ahikHTm] [目录或文件名]

参数选项:

  • -a :列出所有的文件系统,包括系统特有的 /proc 等文件系统;
  • -k :以 KBytes 的容量显示各文件系统;
  • -m :以 MBytes 的容量显示各文件系统;
  • -h :以人们较易阅读的 GBytes, MBytes, KBytes 等格式自行显示;
  • -H :以 M=1000K 取代 M=1024K 的进位方式;
  • -T :显示文件系统类型, 连同该 partition 的 filesystem 名称 (例如 ext3) 也列出;
  • -i :不用硬盘容量,而以 inode 的数量来显示

du : 查看使用空间

du [-ahskm] 文件或目录名称

参数选项:

-a :列出所有的文件与目录容量,因为默认仅统计目录底下的文件量而已。

  • -h :以人们较易读的容量格式 (G/M) 显示;
  • -s :列出总量而已,而不列出每个各别的目录占用容量;
  • -S :不包括子目录下的总计,与 -s 有点差别。
  • -k :以 KBytes 列出容量显示;
  • -m :以 MBytes 列出容量显示;

fdisk : Linux的磁盘分区表操作工具

fdisk [-l] 装置名称

参数选项:

-l :输出后面接的装置所有的分区内容。若仅有 fdisk -l 时, 则系统将会把整个系统内能够搜寻到的装置的分区均列出来。

磁盘格式化

mkfs [-t 文件系统格式] 装置名称

参数选项:

  • -t :可以接文件系统格式,例如 ext3, ext2, vfat 等(系统有支持才会生效)

fsck : 磁盘检验

fsck [-t 文件系统] [-ACay] 装置名称

参数选项:

  • -t : 给定档案系统的型式,若在 /etc/fstab 中已有定义或 kernel 本身已支援的则不需加上此参数
  • -s : 依序一个一个地执行 fsck 的指令来检查
  • -A : 对/etc/fstab 中所有列出来的 分区(partition)做检查
  • -C : 显示完整的检查进度
  • -d : 打印出 e2fsck 的 debug 结果
  • -p : 同时有 -A 条件时,同时有多个 fsck 的检查一起执行
  • -R : 同时有 -A 条件时,省略 / 不检查
  • -V : 详细显示模式
  • -a : 如果检查有错则自动修复
  • -r : 如果检查有错则由使用者回答是否修复
  • -y : 选项指定检测每个文件是自动输入yes,在不确定那些是不正常的时候,可以执行 # fsck -y 全部检查修复。

磁盘挂载与卸除

mount : 挂载

umount : 卸除

mount [-t 文件系统] [-L Label名] [-o 额外选项] [-n] 装置文件名 挂载点

umount [-fn] 装置文件名或挂载点

参数选项:

  • -f :强制卸除!可用在类似网络文件系统 (NFS) 无法读取到的情况下;
  • -n :不升级 /etc/mtab 情况下卸除。

Linux下3种存储方式:

标准分区:

RAID分区:RAID磁盘阵列。 

RAID适用于多个磁盘的环境,可将多个磁盘整合为RAID设备,以提升磁盘的读/写速度与可靠性。采用RAID管理磁盘时,首先至少需要创建两个RAID分区,经格式化后再形成RAID设备。

LVM物理卷:逻辑卷管理。

LVM技术增强文件系统管理的灵活性,实现分区的自由增减。采用LVM管理磁盘时,首先需要建立包含LVM元数据的物理卷,经格式化后建立卷组,最终形成逻辑卷。

四、软件安装

RPM包安装

安装命令格式:

rpm -ivh 包全名

参数选项:

  • -i:安装(install);
  • -v:显示更详细的信息(verbose);
  • -h:打印 # ,显示安装进度(hash);

注意:直到出现两个100%才是真正的安装成功,第一个100%仅表示完成了安装准备工作。

如果还有其他安装要求(比如强制安装某软件而不管它是否有依赖性),可以通过以下选项进行调整:

  • -nodeps:不检测依赖性安装。软件安装时会检测依赖性,确定所需的底层软件是否安装,如果没有安装则会报错。如果不管依赖性,想强制安装,则可以使用这个选项。注意,这样不检测依赖性安装的软件基本上是不能使用的,所以不建议这样做。
  • -replacefiles:替换文件安装。如果要安装软件包,但是包中的部分文件已经存在,那么在正常安装时会报"某个文件已经存在"的错误,从而导致软件无法安装。使用这个选项可以忽略这个报错而覆盖安装。
  • -replacepkgs:替换软件包安装。如果软件包已经安装,那么此选项可以把软件包重复安装一遍。
  • -force:强制安装。不管是否已经安装,都重新安装。也就是 -replacefiles 和 -replacepkgs 的综合。
  • -test:测试安装。不会实际安装,只是检测一下依赖性。
  • -prefix:指定安装路径。为安装软件指定安装路径,而不使用默认安装路径。

service 服务名 start|stop|restart|status

  • start:启动服务;
  • stop:停止服务;
  • restart:重启服务;
  • status: 查看服务状态;

查看端口号:

netstat -tlun | grep 端口号

用户和用户组管理

系统用户账号管理

命令 useradd

增加一个新账号

命令 userdel

删除账号

命令 usermod

修改账号

命令 passwd

用户口令管理

 -l:锁定口令,即禁用账号
 -u:口令解锁
 -d:是账号无口令
 -f:强迫用户下次登录时修改口令

系统用户组管理

命令 groupadd

增加一个新用户组

  • -g GID 指定新用户组的组标识号(GID)

命令 groupdel

删除一个用户组

命令 groupmod

修改用户组属性

磁盘管理

命令 df

列出文件系统的整体磁盘使用量

--javascripttypescriptbashsqljsonhtmlcssccppjavarubypythongorustmarkdown

-a:列出所有文件系统,包括系统特有的/proc等文件系统
-k:以KBytes的容量显示各文件系统
-m:以MBytes的容量显示各文件系统
-h:以GBytes、MBytes、KBytes等格式自行显示
-H:以M=1000K取代M=1024K的进位方式

命令 du

检查磁盘空间使用量

--javascripttypescriptbashsqljsonhtmlcssccppjavarubypythongorustmarkdown

-a:列出所有的文件与目录容量,默认仅统计目录底下的文件量而已
-h:以较容易阅读的容量格式(G/M)显示
-s:列出总量,不列出每个各别的目录占用容量
-S:不包括子目录下的总计
-k:以KBytes列出容量显示
-m:以MBytes列出容量显示

命令 fdisk

用于磁盘分区;磁盘分区表操作工具

--javascripttypescriptbashsqljsonhtmlcssccppjavarubypythongorustmarkdown

-l:输出后面接的装置所有的分区内容

命令 mkfs

磁盘格式化

--javascripttypescriptbashsqljsonhtmlcssccppjavarubypythongorustmarkdown

mkfs [-t 文件系统格式] 装置文件名
-t:可以接文件系统格式,例如ext3.ext2,vfat等(系统有支持才会生效)

命令 mount

磁盘挂载

--javascripttypescriptbashsqljsonhtmlcssccppjavarubypythongorustmarkdown

mount [-t 文件系统] [-L Label名] [-o 额外选项] [-n] 装置文件名 挂载点

命令 umount

磁盘卸载

--javascripttypescriptbashsqljsonhtmlcssccppjavarubypythongorustmarkdown

-f:强制卸载
-n:不升级/etc/mtab情况下卸除

常用命令

  • ls: 列出目录及文件名

  • cd: 切换目录

  • date: 查看日期与时间

  • cal: 显示日历

  • bc: 简单的计算器

  • locale: 目前的语系

  • pwd: 显示目前的目录

  • mkdir: 创建一个新的目录

  • rmdir: 删除一个空的目录

  • cp: 复制文件或目录

  • rm: 移除文件或目录

  • mv: 移动文件与目录,或修改文件与目录的名称

  • cat: 由第一行开始显示文件内容

  • tac: 从最后一行开始显示,可以看出 tac 是 cat 的倒着写!

  • nl: 显示的时候,顺道输出行号!

  • more: 一页一页的显示文件内容

  • less: 与 more 类似,但是比 more 更好的是,他可以往前翻页!

  • head: 只看头几行

  • tail: 只看尾巴几行

  • useradd: 新增账号

  • userdel: 删除账户

  • usermod: 修改账户

  • passwd: 用户口令管理

  • groupadd: 增加用户组

  • groupdel: 删除用户组

  • groupmod: 修改用户组属性

命令 ls

  • -a:全部文件,连同隐藏文件一起列出来
  • -A:全部文件,连同隐藏文件一起列出来,但不包括.和..
  • -d:仅列出目录本身
  • -l:长数据串列出,包含文件的属性和权限等
  • -t:以修改时间排序
  • -s:以文件大小排序
  • --color[=WHEN]:是否根据文件类型显示颜色,WHEN可以为never\always\auto

命令 mkdir

  • -p:递归创建所需要的所有目录
  • -m:配置文件的权限

命令 rmdir

  • -p:连同上级目录一同删除

命令 cp

Linux cp命令主要用于复制文件或目录。

语 法:
cp [options] source dest

cp [options] source... directory
参 数 说 明:

  • -a:此选项通常在复制目录时使用,它保留链接、文件属性,并复制目录下的所有内容。其作用等于dpR参数组合。
  • -d:复制时保留链接。这里所说的链接相当于Windows系统中的快捷方式。
  • -f:覆盖已经存在的目标文件而不给出提示。
  • -i:与-f选项相反,在覆盖目标文件之前给出提示,要求用户确认是否覆盖,回答"y"时目标文件将被覆盖。
  • -p:除复制文件的内容外,还把修改时间和访问权限也复制到新文件中。
  • -r:若给出的源文件是一个目录文件,此时将复制该目录下所有的子目录和文件。
  • -l:不复制文件,只是生成链接文件。

实 例:
使用指令"cp"将当前目录"test/"下的所有文件复制到新目录"newtest"下,输入如下命令:

$ cp –r test/ newtest
  • -p:连同文件的属性一起复制,而非使用默认属性
  • -l:使用硬链接的方式连接文档,而非复制文件本身
  • -r:递归持续复制
  • -d:若源文档为链接文档的属性,则复制链接文档的属性而非文件本身
  • -a:相当于-pdr的意思

命令 rm

  • -f:忽略不存在的文件,不会出现告警信息
  • -i:互动模式,在删除前会询问使用者是否确定删除
  • -r:递归删除

命令 mv

  • -f:强制,如果目标文件已经存在,不会询问而直接覆盖
  • -i:若目标文件存在,就会询问是否覆盖
  • -u:若文件存在,则会source比较新,才会升级(update)

命令 cat

  • -b:列出行号,空白行不标号,非空白行标号
  • -n:打印出行号,连同空白行也会有行号
  • -v:列出一下看不出来的行号

命令 tac

文件内容从最后一行开始显示,tac是cat的倒写

命令 nl

  • -b:指定行号指定的方式,主要有两种:
  • -b a:表示不论是否为空行,也同样列出行号;
  • -b t:如果有空行,空的那一行不要列出行号(默认值);
  • -n:列出行号表示的方法,主要有三种:
  • -n ln:行号在荧幕的最左方显示;
  • -n rn:行号在自己栏位的最右方显示,且不加0;
  • -n rz:行号在自己栏位的最右方显示,且加0;
  • -w:行号栏位的占用的位数

命令 more

命令 less

命令 head

取文件前面几行

  • -n:后面接数字,代表显示几行的意思

命令 tail

取文件后面几行

  • -n:后面接数字,代表显示几行的意思
  • -f:表示持续侦测 后面所接的档名,按下[Ctrl]-c才会结束

命令 tar

语法:

tar (选项)(参数)

参数说明:

-c: 建立压缩档案
-x:解压
-t:查看内容
-r:向压缩归档文件末尾追加文件
-u:更新原压缩包中的文件
-z:有gzip属性的
-j: 有bz2属性的
-Z:有compress属性的
-v:显示所有过程
-O:将文件解开到标准输出
-f: 使用档案名字,切记,这个参数是最后一个参数,后面只能接档案名。

实例:
tar -cvf log.tar log2012.log    仅打包,不压缩!
tar -zcvf log.tar.gz log2012.log   打包后,以 gzip 压缩
tar -jcvf log.tar.bz2 log2012.log  打包后,以 bzip2 压缩

命令 unzip

解压缩zip文件

语 法:

unzip [-cflptuvz][-agCjLMnoqsVX][-P <密码>][.zip文件][文件][-d <目录>][-x <文件>] 或 unzip [-Z]

补充说明:unzip为.zip压缩文件的解压缩程序。

参 数:

-c 将解压缩的结果显示到屏幕上,并对字符做适当的转换。
-f 更新现有的文件。
-l 显示压缩文件内所包含的文件。
-p 与-c参数类似,会将解压缩的结果显示到屏幕上,但不会执行任何的转换。
-t 检查压缩文件是否正确。
-u 与-f参数类似,但是除了更新现有的文件外,也会将压缩文件中的其他文件解压缩到目录中。
-v 执行是时显示详细的信息。
-z 仅显示压缩文件的备注文字。
-a 对文本文件进行必要的字符转换。
-b 不要对文本文件进行字符转换。
-C 压缩文件中的文件名称区分大小写。
-j 不处理压缩文件中原有的目录路径。
-L 将压缩文件中的全部文件名改为小写。
-M 将输出结果送到more程序处理。
-n 解压缩时不要覆盖原有的文件。
-o 不必先询问用户,unzip执行后覆盖原有文件。
-P<密码> 使用zip的密码选项。
-q 执行时不显示任何信息。
-s 将文件名中的空白字符转换为底线字符。
-V 保留VMS的文件版本信息。
-X 解压缩时同时回存文件原来的UID/GID。
[.zip文件] 指定.zip压缩文件。
[文件] 指定要处理.zip压缩文件中的哪些文件。
-d<目录> 指定文件解压缩后所要存储的目录。
-x<文件> 指定不要处理.zip压缩文件中的哪些文件。
-Z unzip -Z等于执行zipinfo指令

范例:

zip命令可以用来将文件压缩成为常用的zip格式。unzip命令则用来解压缩zip文件。

  1. 我想把一个文件abc.txt和一个目录dir1压缩成为yasuo.zip:
# zip -r yasuo.zip abc.txt dir1

2.我下载了一个yasuo.zip文件,想解压缩:

# unzip yasuo.zip

3.我当前目录下有abc1.zip,abc2.zip和abc3.zip,我想一起解压缩它们:

# unzip abc\?.zip

注释:?表示一个字符,如果用*表示任意多个字符。

4.我有一个很大的压缩文件large.zip,我不想解压缩,只想看看它里面有什么:

# unzip -v large.zip

5.我下载了一个压缩文件large.zip,想验证一下这个压缩文件是否下载完全了

# unzip -t large.zip

6.我用-v选项发现music.zip压缩文件里面有很多目录和子目录,并且子目录中其实都是歌曲mp3文件,我想把这些文件都下载到第一级目录,而不是一层一层建目录:

# unzip -j music.zip

命令 wc

要在Linux中直接查看txt文本的行数,可以使用wc命令。wc是一个用于统计文件内容的命令,其中包括行数、字符数和字节数等信息。
下面是使用wc命令查看txt文本行数的方法:

wc -l file.txt

其中,file.txt是要查看行数的txt文件名。这将输出文件中的行数。

如果要查看多个txt文件的行数,可以将它们的文件名作为参数传递给wc命令,例如:

wc -l file1.txt file2.txt file3.txt

这样会分别输出每个文件的行数。

iptables

iptables命令是Linux上常用的防火墙软件,是netfilter项目的一部分。可以直接配置,也可以通过许多前端和图形界面配置。

  • Netfilter是防火墙真正的安全框架(framework),netfilter位于内核空间。
  • iptables其实是一个命令行工具,位于用户空间,我们用这个工具操作真正的框架。

语法:
iptables(选项)(参数)

选项:
-t<表>:指定要操纵的表;
-A:向规则链中添加条目;
-D:从规则链中删除条目;
-i:向规则链中插入条目;
-R:替换规则链中的条目;
-L:显示规则链中已有的条目;
-F:清楚规则链中已有的条目;
-Z:清空规则链中的数据包计算器和字节计数器;
-N:创建新的用户自定义规则链;
-P:定义规则链中的默认目标;
-h:显示帮助信息;
-p:指定要匹配的数据包协议类型;
-s:指定要匹配的数据包源ip地址;
-j<目标>:指定要跳转的目标;
-i<网络接口>:指定数据包进入本机的网络接口;
-o<网络接口>:指定数据包要离开本机所使用的网络接口。

iptables命令选项输入顺序:

iptables -t 表名 <-A/I/D/R> 规则链名 [规则号] <-i/o 网卡名> -p 协议名 <-s 源IP/源子网> --sport 源端口 <-d 目标IP/目标子网> --dport 目标端口 -j 动作

表名:

  • raw:高级功能,如:网址过滤。
  • mangle:数据包修改(QOS),用于实现服务质量。
  • net:地址转换,用于网关路由器。
  • filter:包过滤,用于防火墙规则。

规则链名:

  • INPUT链:处理输入数据包。
  • OUTPUT链:处理输出数据包。
  • PORWARD链:处理转发数据包。
  • PREROUTING链:用于目标地址转换(DNAT)。
  • POSTOUTING链:用于源地址转换(SNAT)。

动作:

  • ACCEPT:接收数据包。(常用)
  • DROP:丢弃数据包。(常用)
  • REDIRECT:重定向、映射、透明代理。
  • SNAT:源地址转换。
  • DNAT:目标地址转换。
  • MASQUERADE:IP伪装(NAT),用于ADSL。
  • LOG:日志记录。

实例:

清除已有iptables规则

iptables -F
iptables -X
iptables -Z

开放指定的端口

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 -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的命令是

查看已添加的iptables规则

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  

删除已添加的iptables规则

将所有iptables以序号标记显示,执行:

iptables -L -n --line-numbers

比如要删除INPUT里序号为8的规则,执行:

iptables -D INPUT 8

参考博客:
http://www.zsythink.net/archives/1199