Linux 基础
网络配置
二、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
文件的基本属性

| [ d ] | 表示是个目录 |
|---|---|
| [ - ] | 表示是个文件 |
| [ l ] | 表示是个链接文件 |
| [ b ] | 表示为装置文里可供储存的接口设备 |
| [ c ] | 表示为装置文件里面的串口设备 |
r == 4
w == 2
x == 1

一、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文件。
- 我想把一个文件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