当数据包抵达防火墙时,将依次应用raw表,mangle表,nat表和filter表中对应链内的规则,应用顺序为raw-mangle-nat-filter

文本操作

(1)文本过滤:grep

常用option:

--color:过滤字段红字标红
-v:不包含
-A N:匹配字段前N行
-B N:匹配字段后N行

(2)查看尾部N行:tail
(3)查看文件头N行:head

 

生效:sysctl  -p

进程/线程类

(1)查看端口占用:

lsof -i:port

(2)kill进程

kill PID
kill -9 PID //强制kill进程
killall XXX

(3)查看进程启动时间

ps -p PID -o lstart
ps -eo etime   运行多长时间.

(4)查看应用进程号

ps -ef | grep appName

1.关闭防火墙
[root@CentOS ~]# chkconfig iptables off

-L:查看

文件操作

(1)本地文件复制到远程服务器

//上传
scp -P Port 本地文件完整路径 userName@远程IP@远程服务端口号:目标绝对路径

//下载
scp -P Port userName@远程IP@远程服务端口号:文件绝对路径 本地目录   

(2)压缩和解压缩

zip
// 压缩  
zip xxx.zip 文件
// 压缩目录  
zip -r xxx.zip 目录
// 例如:zip -r ./aa.zip ./*

// 解压到指定目录 
unzip xxx.zip -d xxx


tar  
解包:tar xvf FileName.tar  
打包:tar cvf FileName.tar DirName  
(注:tar是打包,不是压缩!)   
———————————————  

.gz  
解压1:gunzip FileName.gz  
解压2:gzip -d FileName.gz  
压缩:gzip FileName
———————————————  

.tar.gz 和 .tgz  
解压:tar zxvf FileName.tar.gz  
压缩:tar zcvf FileName.tar.gz DirName  
———————————————

.bz2  
解压1:bzip2 -d FileName.bz2  
解压2:bunzip2 FileName.bz2  
压缩: bzip2 -z FileName  

9.配置nginx支持php
[root@CentOS ~]# mv /etc/nginx/nginx.conf /etc/nginx/nginx.confbak
//将配置文件改为备份文件
[root@CentOS ~]# cp /etc/nginx/nginx.conf.default
/etc/nginx/nginx.conf
//由于原配置文件要自己去写因此可以使用默认的配置文件作为配置文件
//修改nginx配置文件,添加fastcgi支持
[root@CentOS ~]# vi /etc/nginx/nginx.conf
index index.php index.html index.htm;
//加入index.php
location ~ \.php$ {
root /usr/share/nginx/html;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME
/usr/share/nginx/html$fastcgi_script_name;
include fastcgi_params;
}
//将以上代码注释去掉,并修改成nginx默认路径

INPUT:入站

信息查看

端口占用:lsof -i:端口 
查看MAC网卡:ifconfig -a 其中 HWaddr字段就是mac地址
时间戳转换:
时间戳转字符串:date -d @1509602291 "+%Y-%m-%d-%h"
字符串转时间戳: date -d "2010-10-18 00:00:00" +%s 

service php-fpm restart

1)INPUT链:当收到访问防火墙本机地址的数据包(入站),应用此链中的规则。

 

3)FORWARD链:当收到需要通过防火墙中转发送给其他地址的数据包(转发)时,应用此链中的规则。

service nginx restart

linux编写iptables防火墙规则示例

       
iptables和asa防火墙类似,作用一样,都是为了保证网络安全,系统安全,服务器的安全,和asa一样也需要建立策略。

下面通过一个案例先了解一下iptables防火墙规则的相关基础操作。(关于防火墙的相关知识概念,请关注微信公众号 L宝宝聊IT  Linux防火墙基础与编写防火墙规则
文章)

实验环境:

网站服务器ip地址是192.168.1.5,网关服务器的内网地址是eth0:192.168.1.254,外网地址是eth1:172.16.16.254,internter测试机是172.16.16.172。实现三台系统之间可以互相ping通。

 澳门微尼斯人手机版 1

澳门微尼斯人手机版 2

网管服务器需要开启路由转发功能

 澳门微尼斯人手机版 3

也可进入vim /etc/sysctl.conf 修改为 1
永久开启路由转发功能

澳门微尼斯人手机版 4

最后测试可以互相ping通即可

下面介绍各种规则如何应用

一、编写防火墙规则

1、例如:在网站服务器的filter表的INPUT链中插入一条规则,拒绝发送给本机使用的ICMP协议的数据包。

执行:Iptables -t  filter  -I INPUT -p icmp  -j
REJECT

查看规则:iptables -L INPUT –line-numbers

 澳门微尼斯人手机版 5

然后再次使用172.16.16.172ping192.168.1.5,出现目标端口不可到达,无法ping通

2、添加新的规则

例如:

1)在filter表INPUT链的末尾添加一条规则,接受tcp协议(实验之前在网站服务器上搭建ftp服务,使用internet测试机可以访问ftp服务器)

澳门微尼斯人手机版 6

在internet测试机上访问

澳门微尼斯人手机版 7

默认网站服务器的防火墙开启,所以不能访问,然后执行:

iptables -t   filter 
-A INPUT  -p  tcp  -j   ACCEPT

发现依然不能访问,因为-A是在末尾添加一条新的规则

澳门微尼斯人手机版 8

所以执行:Iptables  -I  INPUT  -p tcp  -j 
ACCEPT(-I默认是添加在第一条)

澳门微尼斯人手机版 9

再次访问ftp

澳门微尼斯人手机版 10

在网站服务器上查看规则

澳门微尼斯人手机版 11

例:2)添加规则允许udp数据包通过,默认位于filter的第一条

Iptables -I INPUT  -p 
udp -j  ACCEPT

例:3)指定顺序号,添加规则允许icmp数据包通过,位于第2条

Iptables -I INPUT 2 -p
icmp  -j  ACCEPT

澳门微尼斯人手机版 12

查看规则列表:

澳门微尼斯人手机版 13

3、以数字形式显示规则列表,加快执行速度

Iptables -n  -L  INPUT 
(-n  -L  可简写为-nL)

4、删除,清空规则

1)若要删除filter表INPUT链中的第三条规则,执行:

Iptables -D  INPUT
3

2)清空指定链或表中的所有防火墙规则,使用-F

Iptables -F  INPUT

3)清空filter表,nat表,mangle表

Iptables   -F

Iptables   -t   nat  
-F

Iptables   -t   mangle
 -F

5、设置默认策略:当找不到任何一条能够匹配数据包规则时,则执行默认策略

例如1)将filter表中FORWARD链的默认策略设置为丢弃,OUTPUT链的默认策略设置为允许(默认策略不参与规则的顺序编排,因此在前后并无区别。)

澳门微尼斯人手机版 14

二、规则的匹配条件

对于同一条防火墙规则,可以指定多个匹配条件,这些条件必须都满足规则才能生效。

1、通用匹配:分为三种类型,协议匹配,地址匹配,网络接口匹配。

1)协议匹配

如果在网关服务器上开启防火墙,那么internet测试机是不能访问网站服务器的。

查看网关服务器的FORWARD链,发现只有一条拒绝all。

如果想允许路由转发,执行下面的命令:

iptables -I
 FORWARD  -j
 ACCEPT,然后在internet测试机上可以访问网站服务器。

澳门微尼斯人手机版 15

然后如果想丢弃通过icmp协议访问防火墙本机的数据包,允许转发经过防火墙的除icmp协议之外的数据包,可以执行:

Iptables -I  INPUT  -p
 icmp -j  DROP

Iptables -A  FORWARD  !
 -p  icmp -j  ACCEPT

 

执行之前先在internet测试机上ping网关服务器的172.16.16.254和192.168.1.5都是可以ping通的。执行完之后就不能ping通了,但是依然能够访问网站服务器的ftp。

先在internet测试机上ping,可以ping通

澳门微尼斯人手机版 16

然后在网关服务器上执行以下命令

澳门微尼斯人手机版 17

在internet测试机上ping192.168.1.5和172.16.16.254都不通了,但是ftp依然可以访问。

澳门微尼斯人手机版 18

2)地址匹配

例1)例如:拒绝转发源地址为172.16.16.172的数据,允许转发源地址192.168.1.0的数据包

澳门微尼斯人手机版 19

因为172.16.16.172就是internet测试机,所以internet测试机无法ping通192.168.1.5,也不能访问ftp

 

例2)如果检测到来自某网段的频繁扫描,登录等不良的企图,可以立即添加防火墙规则进行封锁。

Iptables  -I  INPUT
 -s 10.20.30.0/24  -j  DROP

Iptables  -I  FORWARD  -s
 10.20.30.0/24  -j  DROP

澳门微尼斯人手机版 20

3)网络接口匹配

例如:若要丢弃从外网接口访问防火墙本机且源地址为私有地址的数据包,执行以下操作:

首先:在172.16.16.172上ping172.16.16.254,使之可以ping通

澳门微尼斯人手机版 21

然后执行以下命令:

澳门微尼斯人手机版 22

再此在172.16.16.172上ping172.16.16.254,无法ping通,因为外网接口是eth1

 

2、隐含匹配:以指定的协议匹配作为前提条件,相当于子条件。

1)端口匹配

例如:允许网段192.168.1.0/24转发dns查询数据包。

首先在网站服务器上开启dns服务

vim 
/var/named/chroot/var/named/google.com.zone

澳门微尼斯人手机版 23

为了实验效果,先在网关服务器上执行以下命令,阻止转发

Iptables -I  FORWARD  -j 
REJECT

然后在internet测试机上执行nslookup,不能解析

澳门微尼斯人手机版 24

接下来在网关服务器上执行隐含匹配,允许为172.16.16.0网段转发dns查询包

澳门微尼斯人手机版 25

再次在internet测试机上测试解析

澳门微尼斯人手机版 26

2)ICMP类型匹配

若要禁止从其他主机ping本机,但是允许本机ping其他主机,可以执行以下操作

首先为了实验测试方便,在网关服务器上执行:(执行之前把其它的规则都删掉,关闭防火墙即可编写规则后会自动打开)

nternet测试机和网站服务器之间可以互相ping通,然后执行:

澳门微尼斯人手机版 27

如果实验不通,把上面的最后一条改为iptables -A
INPUT -p icmp-j DROP

然后测试:

澳门微尼斯人手机版 28

澳门微尼斯人手机版 29

3、显示匹配

必须调用相应的模块,然后方可设置匹配条件

1)多端口匹配

例如:允许网站服务器本机开放25、80、110、143端口

澳门微尼斯人手机版 30

2)ip范围匹配

例如:禁止转发源地址位于192.168.4.21与192.168.4.28之间的tcp数据包。

澳门微尼斯人手机版 31

3)mac地址匹配

例如:禁止以下mac地址的主机访问网站服务器的任何应用。

澳门微尼斯人手机版 32

4)状态匹配

例如:禁止转发与正常tcp连接无关的非syn请求数据包(如伪造的网络攻击数据包)。

澳门微尼斯人手机版 33

再例如:开放本机的web服务80端口,但对发给本机的tcp应答数据包予以放行,其他入站数据包均丢弃,对应的入站规则如下:

澳门微尼斯人手机版 34

以上就时iptables防火墙规则的基本应用,下面时上机实验部分:

三、上机实验

1、实验环境和上面的一样

网站服务器ip地址是192.168.1.5,网关服务器的内网地址是eth0:192.168.1.254,外网地址是eth1:172.16.16.254,internter测试机是172.16.16.172。实现三台系统之间可以互相ping通。

2、为网站服务器编写入站规则

(1)本例中所有规则均在filter表的INPUT链内添加,默认策略设置为DROP。

(2)使用“-p icmp ! –icmp-type 8
”的条件匹配非ICMP请求的数据包。

(3)使用“-p tcp –dport
80”的条件匹配对TCP 80端口的访问。

(4)使用“-p tcp -m state
–stateESTABLISHED,RELATED”匹配TCP响应数据包。

 

[root@localhost ~]# iptables -P INPUT
DROP

[root@localhost ~]# iptables -A INPUT
-p icmp !–icmp-type 8 -j ACCEPT

[root@localhost ~]# iptables -A INPUT
-p tcp–dport 80 -j ACCEPT

[root@localhost ~]# iptables -A INPUT
-p tcp -mstate –state ESTABLISHED,RELATED -j ACCEPT

 

(5)测试入站控制效果:从其他主机可以访问本机中的Web服务,但不能访问其他任何服务(如FTP、DNS);从本机可以ping通其他主机,但其他主机无法ping通本机。

 

[root@localhost ~]# iptables -nL
INPUT

Chain INPUT (policy ACCEPT)

target   prot opt
source           destination

ACCEPT   icmp —  0.0.0.0/0        
0.0.0.0/0    icmp !type 8

ACCEPT   tcp  —  0.0.0.0/0        
0.0.0.0/0    tcp dpt:80

ACCEPT   tcp  —  0.0.0.0/0        
0.0.0.0/0    state RELATED,ESTABLISHED

…… //其他测试过程略

 

3、为网关服务器编写转发规则

(1)本例中所有规则均在filter表的FORWARD链内添加,默认策略设置为DROP。

(2)针对TCP协议的80、20、21、25、110、143端口,以及UDP协议的53端口,分别为从局域网访问Internet、从Internet响应局域网请求的过程编写转发规则。

 

[root@localhost ~]# iptables -P
FORWARD DROP

[root@localhost ~]# iptables -A
FORWARD -s192.168.1.0/24 -p tcp -m multiport –dport 20,21,

80,25,110,143 -o eth1 -j ACCEPT

[root@localhost ~]# iptables -A
FORWARD -i eth1-m state –state ESTABLISHED,RELATED -j ACCEPT

[root@localhost ~]# iptables -A
FORWARD -s192.168.1.0/24 -p udp –dport 53 -oeth1 -j ACCEPT

[root@localhost ~]# iptables -A
FORWARD -p udp–sport 53 -i eth1-j ACCEPT

 

(3)执行DNS查询,获知站点web.qq.com、w.qq.com、im.qq.com当前所用的IP地址包括:112.90.141.88、112.90.141.163、112.90.141.164、58.251.149.159、58.251.60.202、123.138.238.100、123.138.238.101。然后依次针对这些IP地址编写转发规则,禁止到TCP协议的80、443端口的访问。

 

[root@localhost ~]# vi
/opt/black_ip.txt
            //编写封禁地址列表

112.90.141.88

112.90.141.163

112.90.141.164

58.251.149.159

58.251.60.202

123.138.238.100

123.138.238.101

[root@localhost ~]# for i in
`cat/opt/black_ip.txt`; do iptables -I FORWARD -d$i -p tcp -m
multiport –dport 80,443 -j DROP ; done  //读取IP地址以插入规则

 

(4)测试转发控制效果:从局域网中的主机无法访问Internet中的web.qq.com等被封站点,但能够访问其他Web站点,也能够访问DNS、FTP等网络服务。

 

[root@localhost ~]# iptables -nL
FORWARD

Chain FORWARD (policy DROP)

target  prot opt
source        destination

DROP    tcp  — 
0.0.0.0/0     123.138.238.101     multiportdports 80,443

DROP   tcp  — 
0.0.0.0/0     123.138.238.100     multiport dports80,443

DROP   tcp  — 
0.0.0.0/0    58.251.60.202       multiport dports80,443

DROP    tcp  — 
0.0.0.0/0   58.251.149.159      multiport dports80,443

DROP    tcp  — 
0.0.0.0/0     112.90.141.164      multiport dports80,443

DROP    tcp  — 
0.0.0.0/0     112.90.141.163      multiport dports80,443

DROP   tcp  — 
0.0.0.0/0     112.90.141.88       multiport dports

 

文章参考微信公众号:L宝宝聊IT

13.测试nginx是否解析php
输入:192.168.1.105/info.php
显示php界面说明解析成功

2)OUTPUT链:当防火墙本机向外发送数据包(出站)时,应用此链中的规则。

转载

多端口匹配:-m 
multiport –sports   源端口列表

8.安装php
[root@CentOS ~]# yum install php lighttpd-fastcgi php-cli php-mysql
php-gd php-imap php-ldap 
php-odbc php-pear php-xml php-xmlrpc php-mbstring php-mcrypt php-mssql
php-snmp php-soap 
php-tidy php-common php-devel php-fpm
//安装php和所需组件使PHP支持MySQL、FastCGI模式
[root@CentOS ~]# service php-fpm start
[root@CentOS ~]# chkconfig –levels 235 php-fpm on

入站数据流向:来自外界的数据包到达防火墙后,首先被PRETOUTING链处理,然后进行路由选择,如果数据包的目标地址是防火墙本机,那么内核将其传递给INPUT链进行处理,通过以后再讲给系统的上层应用程序进行响应。

11.重启nginx php-fpm
[root@CentOS ~]# service nginx restart
[root@CentOS ~]# service php-fpm restart

–sport:源端口
         –dport:目标端口

10.配置php
//编辑文件php.ini,在文件末尾添加cgi.fix_pathinfo = 1
[root@CentOS ~]# vi /etc/php.ini

4)Raw表:用来决定是否对数据包进行状态跟踪,包含两个链:即OUTPUT,PREROUTING

7.安装mysql
[root@CentOS ~]# yum install mysql mysql-server mysql-devel
[root@CentOS ~]# service mysqld start
[root@CentOS ~]# chkconfig –levels 235 mysqld on
[root@CentOS ~]# mysqladmin -u root password “123456”
//为root用户设置密码
[root@CentOS ~]# service mysqld restart
//重启mysql

出站数据流向:防火墙本机向外部地址发送的数据包,首先被OUTOUT处理,然后进行路由选择,再交给POSTROUTING链进行处理。

 

按顺序依次检查,匹配即停止(LOG策略除外),无匹配项,执行默认策略。

fastcgi_param SCRIPT_FILENAME    
$document_root$fastcgi_script_name;

有4个表:

12.建立info.php文件
[root@CentOS ~]# vi /usr/share/nginx/html/info.php
<?php
phpinfo();
?>

Sysctl 
-w net.ipv4.ip_forward=1

[root@localhost ~]# service mysqld start

         Net.ipv4.ip_forward=1

6.安装nginx
[root@CentOS ~]# yum install nginx
[root@CentOS ~]# service nginx start
[root@CentOS ~]# chkconfig –levels 235 nginx on
//设2、3、5级别开机启动

Echo “1” 
> /proc/sys/net/ipv4/ip_forward

4.安装开发包和库文件
[root@CentOS ~]# yum -y install ntp make openssl openssl-devel pcre
pcre-devel libpng 
libpng-devel libjpeg-6b libjpeg-devel-6b freetype freetype-devel gd
gd-devel zlib zlib-devel 
gcc gcc-c++ libXpm libXpm-devel ncurses ncurses-devel libmcrypt
libmcrypt-devel libxml2 
libxml2-devel imake autoconf automake screen sysstat compat-libstdc++-33
curl curl-devel

1)filter表:用来对数据包进行过滤,表内包含三个链,即:INPUT,FORWARD,OUTPUT

mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)

开启转发功能:

3、配置CentOS 6.0 第三方yum源(CentOS默认的标准源里没有nginx软件包)
[root@CentOS ~]# yum install wget
//下载wget工具
[root@CentOS ~]# wget
//下载atomic yum源
[root@CentOS ~]# sh ./atomic
//安装提示输入时输yes
[root@CentOS ~]# yum check-update
//更新yum软件包

       
Iptables采用了表和链的分层结构,每个规则表相当于内核空间的一个容器,根据规则集的不同用途划分为默认的四个表,raw表,mangle表,nat表,filter表,每个表容器内包括不同的规则链,根据处理数据包的不同时机划分为五种链,而决定是否过滤或处理数据包的各种规则,按先后顺序存放在各规则链中。

vim /etc/nginx/fastcgi_params

2)命令选项、链名、控制类型必须大写,其他必须小写

5.卸载已安装的apache、mysql、php
[root@CentOS ~]# yum remove httpd
[root@CentOS ~]# yum remove mysql
[root@CentOS ~]# yum remove php

Filter:包过滤

File not found.

OUTPUT:出站

[root@localhost ~]#  yum install -y mysql-server mysql mysql-devel

澳门微尼斯人手机版,Iptables  -t  表名
 命令选项  链名  条件选项  -j  控制类型

2.关闭selinux
vi /etc/sysconfig/selinux 
//将SELINUX=enforcing修改为disabled然后重启生效

-n:以数字方式显示

 

3)DROP:丢弃,无信息

mysql> grant all privileges on *.* to ‘root’@’%’ identified by
‘password’ with grant option;
Query OK, 0 rows affected (0.00 sec)

转发数据流向:来自外界的数据包到达防火墙后,首先被PREROUTING链处理,然后再进行路由选择,如果数据包的目的地址是其他外部的地址,则内核将其传递给FORWARD链进行处理,最后交给POSTROUTING链进行处理。

-s:源地址            
-d:目标地址

4)LOG:记录日志,传给下一条规则

发表评论

电子邮件地址不会被公开。 必填项已用*标注