Linux 笔记 - 第十三章 Linux 系统日常管理之(二)Linux 防火墙和任务计划

时间:2021-04-11 16:06:26

博客地址:http://www.moonxy.com

一、前言

Linux 下的的防火墙功能是非常丰富的,作为 Linux 系统工程师有必要了解一下。防火墙一般分为硬件防火墙和软件防火墙。但是,不管是硬件还是软件防火墙,它们都需要使用硬件来作为联机介质,也需要使用软件来设定安全规则。

二、Linux 的防火墙

2.1 selinux

安全增强型 Linux(Security-Enhanced Linux)简称 SELinux,它是一个 Linux 内核模块,也是 Linux 的一个安全子系统。SELinux 主要由美国国家安全局开发。2.6 及以上版本的 Linux 内核都已经集成了 SELinux 模块。SELinux 的结构及配置非常复杂,而且有大量概念性的东西,要学精难度较大。很多 Linux 系统管理员嫌麻烦都把 SELinux 关闭了。

关闭 selinux 的方法为修改 /etc/selinux/config 文件,将 SELINUX=disabled,默认为 enforcing。

[root@ryan ~]# cat /etc/selinux/config

# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
# enforcing - SELinux security policy is enforced.
# permissive - SELinux prints warnings instead of enforcing.
# disabled - No SELinux policy is loaded.
#SELINUX=enforcing
SELINUX=disabled
# SELINUXTYPE= can take one of these two values:
# targeted - Targeted processes are protected,
# mls - Multi Level Security protection.
SELINUXTYPE=targeted

保存配置文件后,重启 Linux 才能生效。临时关闭 selinux 的命令为:

# setenforce 0

可以使用 getenforce 命令获得当前 selinux 状态:

# getenforce

[root@ryan ~]# getenforce
Disabled

2.2 iptables

iptables 是 Linux 上特有的防火墙 netfilter 的机制,iptables 其实是 ip tables 的含义,也就是 IP 表的意思。iptables 是由4个表(table)和5个链(chain)组成。每个表的用途都不一样。在每个表中,又定义了多个链,通过这些链可以设置相应的规则和策略。

CentOS 7.x(RHEL7.x)之后,防火墙规则设置由 firewalld 服务进程默认管理,取代了 CentOS/RHEL 6.x 的 iptables 服务。

iptables 过滤流程图,如下:

Linux 笔记 - 第十三章 Linux 系统日常管理之(二)Linux 防火墙和任务计划

4表5链,每个表所涉及到的链,如下:

Linux 笔记 - 第十三章 Linux 系统日常管理之(二)Linux 防火墙和任务计划

4个表包括:

filter:数据包过滤,用于防火墙规则,最常用。

net:地址转换,用于网关路由器。

mangle:数据包修改(QOS),用于实现服务质量。

raw:高级功能,如:网址过滤。

5个规则链名包括:

INPUT链:处理输入数据包。

OUTPUT链:处理输出数据包。

PORWARD链:处理转发数据包。

PREROUTING链:用于目标地址转换(DNAT)。

POSTOUTING链:用于源地址转换(SNAT)。

动作包括:

accept:接收数据包。

DROP:丢弃数据包。

REDIRECT:重定向、映射、透明代理。

SNAT:源地址转换。

DNAT:目标地址转换。

MASQUERADE:IP伪装(NAT),用于ADSL。

LOG:日志记录。

实例

查看已添加的iptables规则

# iptables -nvL

默认查看filter表的规则,可以使用 -t 选项表名,来指定查看具体表的规则。如:

# iptables -t nat -nvL

开放指定的端口

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 -j ACCEPT #允许访问22端口
iptables -A INPUT -p tcp --dport -j ACCEPT #允许访问80端口
iptables -A INPUT -p tcp --dport -j ACCEPT #允许ftp服务的21端口
iptables -A INPUT -p tcp --dport -j ACCEPT #允许FTP服务的20端口
iptables -A INPUT -j reject #禁止其他未允许的规则访问
iptables -A FORWARD -j REJECT #禁止其他未允许的规则访问

比如常用的放行22端口:

# iptables -A INPUT -p tcp --dport 22 -j ACCEPT

-A/-D:表示增加/删除一条规则(向后追加)。

-I:表示插入一条规则,则是效果跟 -A 类型(想前插入第一条位置)。

-p:表示指定协议,可以是 tcp、udp 或者 icmp。

--dport:跟 -p 一起使用,表示指定目标端口。

--sport:跟-p 一起使用,表示指定源端口。

-s:表示指定源 IP(可以是一个 IP 段)。

-d:表示指定目的 IP(可以是一个 IP 段)。

-j:后面跟动作,其中 ACCEPT 表示允许包,DROP 表示丢掉包,REJECT 表示拒绝包。

-i:表示指定网卡(不常用)。

屏蔽IP

iptables -I INPUT -s 123.45.6.7 -j DROP       #屏蔽单个IP的命令
iptables -I INPUT -s 123.0.0.0/ -j DROP #封整个段即从123.0.0.1到123.255.255.254的命令
iptables -I INPUT -s 124.45.0.0/ -j DROP #封IP段即从123.45.0.1到123.45.255.254的命令
iptables -I INPUT -s 123.45.6.0/ -j DROP #封IP段即从123.45.6.1到123.45.6.254的命令是

删除已添加的iptables规则

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

iptables -L -n --line-numbers

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

iptables -D INPUT 

三、Linux 系统的任务计划

Linux 中有些管理工作可以通过定期自动执行某一个脚本来完成,这就是 Linux 系统中的任务计划 cron 功能。crontab 命令被用来提交和管理用户的需要周期性执行的任务,与 Windows下的计划任务类似,当安装完成操作系统后,默认会安装此服务工具,并且会自动启动 crond 进程,crond 进程每分钟会定期检查是否有要执行的任务,如果有要执行的任务,则自动执行该任务。

Linux 笔记 - 第十三章 Linux 系统日常管理之(二)Linux 防火墙和任务计划

格式为:

crontab(选项)(参数)

Linux 任务计划功能都是通过 crontab 命令来完成的,常用选项如下:

-e:编辑该用户的计时器设置,编辑某个用户的crontab文件内容。如果不指定用户,则表示编辑当前用户的crontab文件;

-l:列出该用户的计时器设置,查看已经设定的任务计划使用 crontab -l 命令,显示某个用户的 crontab 文件内容,如果不指定用户,则表示显示当前用户的 crontab 文件内容。;

-r:删除该用户的计时器设置,从 /var/spool/cron 目录中删除某个用户(username)的 crontab 文件,如果不指定用户,则默认删除当前用户的 crontab文件;

-u<用户名称>:指定要设定计时器的用户名称。

参数:

crontab文件:指定包含待执行任务的 crontab 文件。

Linux下的任务调度分为两类:系统任务调度和用户任务调度。

系统任务调度:系统周期性所要执行的工作,比如写缓存数据到硬盘、日志清理等。在/etc目录下有一个crontab文件,这个就是系统任务调度的配置文件。

/etc/crontab 文件包括下面几行:

[root@ryan ~]# cat /etc/crontab
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/ # For details see man crontabs # Example of job definition:
# .---------------- minute ( - )
# | .------------- hour ( - )
# | | .---------- day of month ( - )
# | | | .------- month ( - ) OR jan,feb,mar,apr ...
# | | | | .---- day of week ( - ) (Sunday= or ) OR sun,mon,tue,wed,thu,fri,sat
# | | | | |
# * * * * * user-name command to be executed

前四行是用来配置 crond 任务运行的环境变量,第一行 SHELL 变量指定了系统要使用哪个 shell,这里是bash,第二行PATH变量指定了系统执行命令的路径,第三行 MAILTO 变量指定了 crond 的任务执行信息将通过电子邮件发送给 root 用户,如果 MAILTO 变量的值为空,则表示不发送任务执行信息给用户,第四行的 HOME 变量指定了在执行命令或者脚本时使用的主目录。

用户任务调度:用户定期要执行的工作,比如用户数据备份、定时邮件提醒等。用户可以使用 crontab 工具来定制自己的计划任务。所有用户定义的 crontab 文件都被保存在 /var/spool/cron 目录中。其文件名与用户名一致,使用者权限文件如下:

/etc/cron.deny     该文件中所列用户不允许使用crontab命令
/etc/cron.allow 该文件中所列用户允许使用crontab命令
/var/spool/cron/ 所有用户crontab文件存放的目录,以用户名命名

crontab 文件的含义:用户所建立的 crontab 文件中,每一行都代表一项任务,每行的每个字段代表一项设置,它的格式共分为六个字段,前五段是时间设定段,第六段是要执行的命令段,格式如下:

minute   hour   day   month   week   command     顺序:分 时 日 月 周

其中:

minute: 表示分钟,可以是从0到59之间的任何整数。

hour:表示小时,可以是从0到23之间的任何整数。

day:表示日期,可以是从1到31之间的任何整数。

month:表示月份,可以是从1到12之间的任何整数。

week:表示星期几,可以是从0到7之间的任何整数,这里的0或7代表星期日。

command:要执行的命令,可以是系统命令,也可以是自己编写的脚本文件。

在以上各个字段中,还可以使用以下特殊字符:

星号(*):代表所有可能的值,例如month字段如果是星号,则表示在满足其它字段的制约条件后每月都执行该命令操作。

逗号(,):可以用逗号隔开的值指定一个列表范围,例如,"1,2,5,7,8,9"

中杠(-):可以用整数之间的中杠表示一个整数范围,例如 "2-6" 表示 "2,3,4,5,6"

正斜线(/):可以用正斜线指定时间的间隔频率,相当于整除,例如 "0-23/2" 表示每两小时执行一次。同时正斜线可以和星号一起使用,例如 */10,如果用在minute字段,表示每十分钟执行一次。

crond 服务

/sbin/service crond start //启动服务

/sbin/service crond stop //关闭服务

/sbin/service crond restart //重启服务

/sbin/service crond reload //重新载入配置

/sbin/service crond status //查看crontab服务状态

四、抓包工具

4.1 tcpdump 工具

tcpdump命令是一款 sniffer 工具,它可以打印所有经过网络接口的数据包的头信息,也可以使用 -w 选项将数据包保存到文件中,方便以后分析。

格式:

tcpdump(选项)

监视指定网络接口的数据包

# tcpdump -nn -i eth0

-nn:直接以IP及port number显示,而非主机名与服务名称;

-c<数据包数目>:收到指定的数据包数目后,就停止进行倾倒操作;

-w<数据包文件>:把数据包数据写入指定的文件。

例如:

[root@ryan ~]# tcpdump -nn -i eth0
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size bytes
::13.034947 IP 172.31..xx. > 124.89..xx.: Flags [P.], seq :, ack , win , length
::13.035049 IP 172.31..xx. > 124.89..xx.: Flags [P.], seq :, ack , win , length
::13.081450 IP 124.89..xx. > 172.31..xx.: Flags [.], ack , win , length

-nn 选项的作用是让第三列和第四列显示成 "IP+端口号" 的形式,如果不加 -nn 选项则显示为 "主机名+服务名称"。

监视指定主机和端口的数据包

# tcpdump -nn tcp and host xxx and port xxx -c 100 -w /tmp/1.cap

如果想要获取主机 210.27.48.1 接收或发出的 telnet 包,使用如下命令:

# tcpdump tcp port 23 host 210.27.48.1

4.2 wireshark 工具

使用 wireshark 可以分析数据包,可以通过编辑过滤表达式来达到对数据的分析。需要使用的命令为 tshark,它是一个网络协议分析器。它允许您从实况网络捕获分组数据,或者从先前保存的捕获文件读取数据包,或者将这些分组的解码形式打印到标准输出或将数据包写入文件。tshark 的本地捕获文件格式是PCAP格式,它也是TCPDUMP和各种其他工具使用的格式。

显示访问http请求的域名以及uri

tshark -n -t a -R http.request -T fields -e "frame.time" -e "ip.src" -e "http.host" -e "http.request.method" -e "http.request.uri"

如下所示:

[root@ryan ~]# tshark -n -t a -R http.request -T fields -e "frame.time" -e "ip.src" -e "http.host" -e "http.request.method" -e "http.request.uri"
tshark: -R without - is deprecated. For single-pass filtering use -Y.
Running as user "root" and group "root". This could be dangerous.
Capturing on 'eth0'
"Jul 8, 2018 22:09:02.394273171 CST" 124.89.91.xx www.moonxy.com GET /wordpress/.html

其中:

"Jul  8, 2018 22:09:02.394273171 CST" 为请求时间;

124.89.91.xx 为源地址(访问者 IP);

www.moonxy.com 为请求的域名;

GET 为 http 请求类型;

/wordpress/350.html 为请求的路径;

实时打印当前http请求的url(包括域名)

tshark -s  -i eth0 -n -f 'tcp dst port 80' -R 'http.host and http.request.uri' -T fields -e http.host -e http.request.uri -l | tr -d '\t'

如下所示:

[root@ryan ~]# tshark -s  -i eth0 -n -f 'tcp dst port 80' -R 'http.host and http.request.uri' -T fields -e http.host -e http.request.uri -l | tr -d '\t'
tshark: -R without - is deprecated. For single-pass filtering use -Y.
Running as user "root" and group "root". This could be dangerous.
Capturing on 'eth0'
www.moonxy.com/wordpress/.html
www.moonxy.com/wordpress/wp-content/uploads///20180422134436_87982.png
www.moonxy.com/wordpress/wp-content/uploads///20180422134518_98463.png
www.moonxy.com/wordpress/wp-content/uploads///20180422134718_91938.png
www.moonxy.com/wordpress/wp-content/uploads///20180422134927_72555.png
www.moonxy.com/wordpress/wp-content/uploads///20180422134946_41004.png
www.moonxy.com/wordpress/wp-content/uploads///20180422134912_12773.png
www.moonxy.com/wordpress/.html
www.moonxy.com/wordpress/wp-content/uploads///20180422140632_57565.jpg