0416平常运维(2、firewalld和netfilter、iptables)

4.16任务
10.12 firewalld和netfilter
10.13 netfilter5表5链介绍
10.14 iptables语法
10.15 iptables filter表案例
10.16/10.17/10.18 iptables nat表应用html

扩展(selinux了解便可)
selinux教程  http://os.51cto.com/art/201209/355490.htm
selinux pdf电子书  http://pan.baidu.com/s/1jGGdExK
iptables应用在一个网段  http://www.aminglinux.com/bbs/thread-177-1-1.html
sant,dnat,masquerade   http://www.aminglinux.com/bbs/thread-7255-1-1.html
iptables限制syn速率  http://www.aminglinux.com/bbs/thread-985-1-1.html   http://jamyy.us.to/blog/2006/03/206.htmllinux

 

 

 

1 针对网段shell

iptables -I INPUT -m iprange --src-range 61.4.176.0-61.4.191.255 -j DROPwindows

192.168.1.0/24centos

iptables -I INPUT -p tcp --dport 80 -s 192.168.1.0/24 -j ACCEPT安全

-m 后面跟模块名字,iprange是一个模块名字,用来支持一个网段bash

--src-range 指定来源的ip范围服务器

--dst-range 指定目标ip范围网络

二、iptables中DNAT、SNAT和MASQUERADE的理解 http://ask.apelearn.com/question/7255app

三、在iptables上一共有四种状态,分别被称为NEW、ESTABLISHED、INVALID、RELATED

NEW:NEW说明这个包是咱们看到的第一个包。意思就是,这是conntrack模块看到的某个链接的第一个包,它即将被匹配了。好比,咱们看到一个SYN 包,是咱们所留意的链接的第一个包,就要匹配它。

ESTABLISHED: ESTABLISHED已经注意到两个方向上的数据传输,并且会继续匹配这个链接的包。处于ESTABLISHED状态的链接是很是容易理解的。只要发送并接到应答,链接就是ESTABLISHED的了。一个链接要从NEW变为ESTABLISHED,只须要接到应答包便可,无论这个包是发往防火墙的,仍是要由防火墙转发的。ICMP的错误和重定向等信息包也被看做是ESTABLISHED,只要它们是咱们所发出的信息的应答。

RELATED: RELATED是个比较麻烦的状态。当一个链接和某个已处于ESTABLISHED状态的链接有关系时,就被认为是RELATED的了。换句话说,一个链接要想是RELATED的,首先要有一个ESTABLISHED的链接。这个ESTABLISHED链接再产生一个主链接以外的链接,这个新的链接就是 RELATED的了,固然前提是conntrack模块要能理解RELATED。ftp是个很好的例子,FTP-data 链接就是和FTP-control有关联的,若是没有在iptables的策略中配置RELATED状态,FTP-data的链接是没法正确创建的,还有其余的例子,好比,经过IRC的DCC链接。有了这个状态,ICMP应答、FTP传输、DCC等才能穿过防火墙正常工做。注意,大部分还有一些UDP协议都依赖这个机制。这些协议是很复杂的,它们把链接信息放在数据包里,而且要求这些信息能被正确理解。

INVALID:INVALID说明数据包不能被识别属于哪一个链接或没有任何状态。有几个缘由能够产生这种状况,好比,内存溢出,收到不知属于哪一个链接的ICMP错误信息。通常地,咱们DROP这个状态的任何东西,由于防火墙认为这是不安全的东西。

四、限速

iptables限制syn速度 http://ask.apelearn.com/question/985%20;

iptables -N syn-flood
iptables -A syn-flood -m limit --limit 5/s --limit-burst 500 -j RETURN
iptables -A syn-flood -j DROP
iptables -I INPUT -j syn-flood

 

 

iptables 的limit模块  https://www.centos.bz/2018/10/iptables-%E7%9A%84limit%E6%A8%A1%E5%9D%97/

 

 

 

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

临时关闭SELINUX    setenforce 0

查看状态    getenforce

selinux永久关闭  设置配置文件 vi /etc/selinux/config

三个状态:
1)enforcing 开启
2)permissive 开启状态,可是不生效,只记录日志。临时关闭,会调整到这个状态。
3)disabled 关闭
更改完配置后,须要重启系统,方可生效。

二、firewalld和netfilter

centos7默认使用的firewalld防火墙,netfilter是不开启的

Linux防火墙-netfilter

开启centos6上的防火墙netfilter,netfilter才是防火墙的名字,iptables只是netfilter的工具

禁止firewalld开机启动 systemctl disable firewalld
关掉firewalld服务  systemctl stop firewalld

开启netfilter以前,须要安装    yum install -y iptables-services

安装完成后产生iptables服务  systemctl enable iptables

开启iptables 服务    systemctl start iptables

 查看默认规则  iptables -nvL,服务启动后,自带的规则

三、netfilter5表5链介绍

netfilter的5个表

man iptables 能够查看

iptables详解  http://www.cnblogs.com/metoy/p/4320813.html

1)filter表
三个链:有 INPUT、 FORWARD、 OUTPUT
做用:过滤数据包 

2)nat表
三个链:    PREROUTING、 OUTPUT、 POSTROUTING
做用:用于网络地址转换(IP、端口)


3)mangle表
五个链:PREROUTING、POSTROUTING、INPUT、OUTPUT、FORWARD
做用:用于给数据包作标记,修改数据包的服务类型、TTL、而且能够配置路由实现QOS,几乎用不到

4)raw表
两个链: OUTPUT、PREROUTING 
做用:能够实现不追踪某些数据包,决定数据包是否被状态跟踪机制处理,几乎不用 

5)security表
三个链:INPUT、OUTPUT和FORWARD
做用:security表在centos6中并无,用于强制访问控制(MAC)的网络规则,几乎不用 


数据包流向与netfilter的5个内置的链
 PREROUTING:数据包进入路由表以前
 INPUT:经过路由表后目的地为本机
 FORWARD:经过路由表后,目的地不为本机
 OUTPUT:由本机产生,向外发出
 POSTROUTING:发送到网卡接口以前
 

iptables 相关的命令应用及语法

 

iptables [-t table]命令[chain] [rules] [j target]
格式说明:
table:指定表名,iptables内置包括filter表、nat表、mangle、raw表和security表。
命令:对链的操做命令
chain:链名
rules:匹配规则
target:动做如何进行

操做命令选项说明:
-P或--policy <链名>:定义默认策略
-L或--list    <链名>  :查看iptables规则列表
-A或--append <链名>:在规则列表的最后增长1条规则
-I或--insert <链名>:在指定的位置插入1条规则
-D或--delete <链名>:从规则列表中删除1条规则
-R或--replace <链名>:替换规则列表中的某条规则
-F或--flush <链名>:删除表中全部规则(临时删除,重启iptables后复原) 
-Z或--zero <链名>:将表中数据包计数器和流量计数器归零

规则选项说明:
-i或--in-interface<网络接口名>:指定数据包从哪一个网络接口进入,如ppp0、eth0和ethl等 -o或--out-interface <网络接口名>:指定数据包从哪块网络接口输出,如ppp0、eth0和ethl等
-p或--proto协议类型 <协议类型>:指定数据包匹配的协议,如TCP、UDP和ICMP等 -s或--source<源地址或子网>:指定数据包匹配的源地址
--sport<源端口号>:指定数据包匹配的源端口号,可使用“起始端口号:结束端口号”的格式指定一个范围的端口 
-d或--destination <目标地址或子网>:指定数据包匹配的目标地址
--dport<目标端口号>:指定数据包匹配的目标端口号,可使用“起始端口号:结束端口号”的格式指定一个范围的端口

动做选项说明:
ACCEPT:接受数据包 
DROP:丢弃数据包
REDIRECT:与DROP基本同样,区别在于它除了阻塞包以外,还向发送者返回错误信息。
SNAT:源地址转换,即改变数据包的源地址 
DNAT:目标地址转换,即改变数据包的目的地址
MASQUERADE:IP假装,便是常说的NAT技术,MASQUERADE只能用于ADSL等拨号上网的IP假装,也就是主机的IP是由ISP分配动态的;若是主机的IP地址是静态固定的,就要使用SNAT

 

 

 

查看iptables规则    iptables -nvL    

规则保存位置cat /etc/sysconfig/iptables

选项说明:
n:数字输出。IP地址和端口会以数字的形式打印
v:详细输出。这个选项让list命令显示接口地址、规则选项等信息
L -list:显示所选链的全部规则。若是没有选择链,则会显示全部链的全部规则


2)iptables -F     清空iptables规则,清空后/etc/sysconfig/iptables文件中仍是有的

这里清空的只是当前iptables中设置的规则,不会清空以及保存的规则。重启iptables服务后还会去加载/etc/sysconfig/iptables配置文件中的规则,便可恢复保存过的规则

service iptables restart      iptables服务重启后,规则恢复

 

service iptables save 保存规则,重启后依然生效,执行此命令会把当前iptables的全部规则保存到/etc/sysconfig/iptables文件中

 iptables -Z  能够把计数器清零 

 iptables -t nat -nvL   查看nat表的规则, -t指定表,不加-t 默认filter表

 

增长一条规则 :    iptables -A INPUT -s 192.168.86.3 -p tcp --sport 1234 -d 192.168.86.31 --dport 80 -j DROP

 

-A前不加-t默认filter表,-A(add)增长一条规则,针对INPUT链,指定来源IP :-s,-p指定协议,--sport来源端口,-d目标ip,--dport 目标端口,-j DROP把数据扔掉/REJECT(拒绝),DROP和REJECT效果同样,都是让数据包过不来,封掉ip

iptables -I INPUT -p tcp --dport 80 -j DROP        能够不写目标ip只写目标端口,-p tcp必定要写,使用dport前面必定要指定协议

-I(把规则放在最前面,插入)和-A (把规则放在最后面,添加),谁在前面谁就会被先匹配和加载

iptables -D INPUT -p tcp --dport 80 -j DROP   删除一条规则

iptables -D INPUT -s 192.168.86.3 -p tcp --sport 1234 -d 192.168.86.31 --dport 80 -j DROP  删除一条规则

 

 

iptables -nvL --line-numbers   把规则中的序列号打印出来

iptables -D INPUT 5  根据编号来删除规则

iptables -I INPUT -s 192.168.1.0/24 -i eth0 -j ACCEPT

添加默认规则
默认策略是ACCEPT


更改默认策略为DROP   iptables -P OUTPUT DROP  此处执行后会让远程链接断开再也连不上

须要再服务器上    iptables -P OUTPUT ACCEPT        默认容许全部OUTPUT链的数据包经过,放行
默认容许全部FORWARD链的数据包经过    iptables -P FORWARD ACCEPT
默认丟弃INPUT链的数据包    iptables -P INPUT DROP

 

iptables filter表小案例

案例1:放行端口
只放行80、2一、22三个端口的数据包,且22端口只有指定的IP段才能经过 这个案例能够编写一个shell脚原本实现。
vi /usr/local/sbin/iptables.sh    加入以下内容

案例1:放行端口
只放行80、2一、22三个端口的数据包,且22端口只有指定的IP段才能经过 这个案例能够编写一个shell脚原本实现。
vi /usr/local/sbin/iptables.sh    加入以下内容


#! /bin/bash                                    定义执行脚本的shell
ipt="/usr/sbin/iptables"                 定义一个变量,绝对路径
$ipt -F                                            清空iptables规则
$ipt -P INPUT DROP                      默认规则,INPUT策略DROP,丢弃全部数据包
$ipt -P OUTPUT ACCEPT                默认规则,放行全部OUTPUT链的数据包
$ipt -P FORWARD ACCEPT            默认规则,放行全部FORWARD链的数据包
$ipt -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT    这条规则容许RELATED和ESTABLISHED状态的数据包给放行,这条规则必加,不然可能致使某些服务连不上  
$ipt -A INPUT -s 192.168.86.0/24 -p tcp --dport 22 -j ACCEPT                仅容许192.168.86.0/24网段连接22端口
$ipt -A INPUT -p tcp --dport 80 -j ACCEPT                                               容许经过全部80端口的数据包
$ipt -A INPUT -p tcp --dport 21 -j ACCEPT                                                容许经过全部21端口的数据包


禁ping
让本机能够ping通别的机器,可是别的机器ping不通本机
 icmp示例
 service iptables restart  先把规则恢复成默认状态
 

此时在windows能够ping通本机


 

丟弃icmp包类型为8的数据包。icmp类型为8的数据包是icmp请求,类型为0的是应答包
 iptables -I INPUT -p icmp --icmp-type 8 -j DROP   添加完此规则后,windows没法ping通本机,本机能够ping外网,不影响链接使用,只禁听

 

 

iptables nat表应用

需求1:可让B机器链接外网

A机器两块网卡ens33(192.168.159.3)、ens37(192.168.100.1),ens33能够上外网,ens37仅仅是内部网络,

B机器只有ens37(192.168.100.100),和A机器ens37能够通讯互联

步骤1:在虚拟机。A机器添加一个内网网卡,B机器也添加内网网卡。网卡模式并设置为LAN区段,自定义名字同样。

按下图:添加网络适配器

选择新添加的网卡,选择LAN区段,至关于给网卡连到了一个内网的交换机上,让两台电脑都链接这个交换机进行通讯

 

A机器设置完成

设置B机器的网卡

禁掉B机器的启动时链接,一样按以前设置,添加新的网卡,选择相同LAN区段,目的是保证AB机器的处于同一网段

设置完成,启动两台机器

查看A机器的网卡,能够远程链接,B机器由于没有windows能够链接的ip,没法远程链接

给ens37设置IP

ifconfig    ens37 192.168.100.1/24       24网段,此ip重启后就没有了,永久生效须要更改配置文件

查看B机器,end33虽然存在,可是已经给关掉了,保险起见可使用ifdown ens33  禁掉

给B机器的ens37设置IP : 192.168.100.100

可使用mii-tool ens37的网络状态。

此时两台机器能够互联

可是两台机器都没法链接外网

设置方法

A机器上打开路由转发     echo "1">/proc/sys/net/ipv4/ip_forward   修改内核参数为1

ip_forward默认为0,表示没有开启端口转发(nat的应用),而后执行命令打开

增长规则:

A机器上执行     iptables -t nat -A POSTROUTING -s 192.168.100.0/24 -o ens33 -j MASQUERADE   目的是让100.0网段可以上网

B上设置网关为192.168.100.1

route add default gw 192.168.100.1

设置完成后能够ping通 A机器 192.168.159.3

给B机器设置DNS,公共的DNS119.29.29.29,vi /etc/resolv.conf

 

需求2:C机器和B机器链接

C机器只能和A通讯,让C机器能够直接连通B机器的22端口  

192.168.86.31的端口22映射到端口1122,链接B机器的192.168.100.100

B机器的192.168.100.100的端口22,映射为1122的端口,用192.168.86.31链接1122端口,也就是链接192.168.100.100的22端口

一、A上打开路由转发    echo "1">/proc/sys/net/ipv4/ip_forward  

二、A上添加规则

添加以前要把以前的规则删掉:

iptables -t nat -D POSTROUTING -s 192.168.100.0/24 -o ens33 -j MASQUERADE

而后添加规则:    iptables -t nat -A PREROUTING -d 192.168.86.31 -p tcp --dport 1122 -j DNAT --to 192.168.100.100:22  , 端口转发,转发到100.100的22端口

A上执行iptables -t nat -A POSTROUTING -s 192.168.100.100 -j SNAT --to 192.168.86.31 

 B上设置网关为192.168.100.1,设置网关才能联网

此时使用客户端连接便可

w查看负载,看到来源自192.168.86.1就是C机器

这说明机器C:192.168.86.1已经和机器B:192.168.100.100相连,机器C和机器A可以通讯,而经过机器A来链接机器B的映射端口1122,达到了C和B通讯,并且B机器也经过映射端口1122可以链接外网。

相关文章
相关标签/搜索