学习linux15

学习笔记

linux 防火墙-netfilter

临时关闭selinux
setenforce 0

永久关闭selinux 需要编辑配置文件/etc/selinux/config
学习linux15
配置完查看防火墙状态

[[email protected] ~]# getenforce
Enforcing
[[email protected] ~]# setenforce 0
[[email protected] ~]# getenforce
Permissive

Enforcing 是开启
permissive 开启不生效 临时关闭状态
disabled 关闭 更改完配置文件 重启才能生效

netfilter firewalld iptables

netfilter防火墙机制用在centos5 和6老版本系统
firewalld用在centos7 系统上

禁止firewalld开机启动

#systemctl disable firewalld

关闭firewalld服务

#systemctl stop firewalld

在centos7上关闭firewall 并启动iptables
先安装iptables

#yum install -y iptables-services

开启服务

#systemctl enable iptables
#systemctl start iptables

查看默认规则命令

#iptables –nvL

netfilter的5个表

  1. filter表用于过滤包,最常用的表,有INPUT . FORWARD OUTPUT三个链

  2. nat表用于网络地址转换,有PREROUTING,OUTPUT,POSTOUTING三个链

  3. managle 表用于给数据包做标记,有五个链:PREROUTING,POSTROUTING,INPUT,OUYPUT,FORWARD几乎用不到

  4. raw表可以实现不追中某些数据包

  5. security表在centos6中斌没有,用于强制访问控制(MAC)网络规则

iptables语法

查看规则:iptables –nvL

清空iptables规则# iptables –F

只能清空当前设置的规则,不会清空保存的配置的规则,重启后规则恢复

保存iptables规则

#service iptables save

把当前的iptables规则保存到/etc/sysconfig/iptables配置文件中 重启依然生效

iptables –t指定表
iptables –t nat

把把计数器清零
iptables –Z

增加一条规则

iptables -A INPUT -s 192.168.188.1 -p tcp --sport 1234 -d 192.168.188.128 --dport 80 -j DROP

这条命令不加-t默认的就是filter表 -A就是增加一条规则 -s指定一条来源IP
-p指定协议 sport来源端口 -d目标ip 后面目标端口
DROP扔掉数据
REJECT 拒绝数据但是会查看通知

也可以用-I选项 插入一条规则

#iptables -I INPUT -p tcp --dport 80 -j DROP

写在前面会优先匹配 -A是增加但是会写在后面 优先匹配第一条规则

删除一条规则 –D

#iptables -D INPUT -p tcp --dport 80 -j DROP

如果不记得这条命令,可以使用规则编号删除
查看规则编号

#iptables -nvL  --line-number

用-D选项删除

#iptables -D INPUT 1

也可以针对网卡插入规则

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

增加默认规则

iptables –P INPUT DROP

iptables小案例

需要把80 22 21端口放行,并且22端口指定ip段,只有这个ip段才能访问其他段的拒绝

 vi /usr/local/sbin/iptables.sh //加入如下内容
#!/bin/bash
ipt=“/usr/sbin/iptables”  //定义变量,iptables命令的绝对路径
$ipt –F                  //清空之前的规则
$ipt –P INPUT DROP        //默认规则,
$ipt –P OUTPUT ACCEPT
$ipt –P FORWARD ACCEPT
$ipt –A INPUT –m state –state RELATED,ESTABLISHED –j ACCEPT
这个条规则必须加上 ,指定了一些状态 目的是为了让相关数据包顺利连接
$ipt –A INPUT –s 192.168.133.0/24 –p tcp –dport 22 –j ACCEPT
允许这个网段连接22端口
$ipt –A INPUT –p tcp –dport 80 –j ACCEPT   //放行80端口
$ipt –A INPUT –p tcp –dport 21 –j ACCEPT  //放行21端口

执行完查看

[[email protected] ~]# sh /usr/local/sbin/iptables.sh
[[email protected] ~]# iptables -nvL 
Chain INPUT (policy DROP 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         
   18  1316 ACCEPT     all  --  *      *       0.0.0.0/0            0.0.0.0/0            state RELATED,ESTABLISHED
    0     0 ACCEPT     tcp  --  *      *       192.168.133.0/24     0.0.0.0/0            tcp dpt:22
    0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            tcp dpt:80
0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            tcp dpt:21

icmp示例
恢复默认状态 加上规则

#iptables -I INPUT -p icmp --icmp-type 8 -j DROP

发现本机可以ping外网 但是其它机器ping不通本机

#iptables -D INPUT -p icmp --icmp-type 8 -j DROP

加上-D选项 删除规则

iptables nat表应用

nat表应用

有两个机器 A机器两块网卡
ens33(192.168.18.138)ens37(192.168.100.1),ens33可以上外网,ens37仅仅是内部网络,B机器只有ens37(192.168.100.100),和A机器ens37可以通信互联

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

  1. 先在虚拟机01上添加一块网卡
    学习linux15
    默认NAT点完后 然后新建LAN区段,自定义名字 选择新建LAN区段

学习linux15
同样的02机器创建LAN网段 让两个机器处于同一网段
查看01机器网卡 发现新增ens37
学习linux15
给ens37设置ip

#ifconfig ens37 192.168.100.1/24  

此方法只能设置临时Ip重启后失效
查看02机器网卡 并设置ip

#ifconfig ens37 192.168.100.100/24  

02机器可以ping通01机器ens37
01机器和02机器内网ip ping不通 说明不能连接外网

学习linux15
02机器也ping不通01外网ip
学习linux15
在01机器上设置打开路由转发 默认是0说明关闭

[[email protected] ~]# cat /proc/sys/net/ipv4/ip_forward
0
[[email protected] ~]# echo "1" > /proc/sys/net/ipv4/ip_forward
[[email protected] ~]# !cat
cat /proc/sys/net/ipv4/ip_forward
1

增加一条规则 让100.0网段能够上网

[[email protected] ~]# iptables -t nat -A POSTROUTING -s 192.168.100.0/24 -o ens33 -j MASQUERADE
[[email protected] ~]# iptables -t nat -nvL
Chain PREROUTING (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         

Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         

Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         

Chain POSTROUTING (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         
    0     0 MASQUERADE  all  --  *      ens33   192.168.100.0/24     0.0.0.0/0

02机器设置网关

学习linux15

02机器设置DNS vi/etc/resolv.conf 加上nameserver:119.29.29.29

学习linux15

需求2 :c机器只能和A通信,让C机器可以直接连通B机器的22端口
把A(01)机器192.168.18.138的22端口映射到1122端口,把B机器(02)192.168.100.100的22端口映射到1122端口

 打开端口转发
 # echo "1" > /proc/sys/net/ipv4/ip_forward

删除之前的规则

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

增加规则

#iptables -t nat -A PREROUTING -d 192.168.18.138 -p tcp --dport 1122 -j DNAT --to 192.168.100.100:22

#iptables -t nat -A POSTROUTING -s 192.168.100.100 -j SNAT --to 192.168.18.138

B机器需要加上网关 之前已做过
新建xshell会话
学习linux15
连接用户名root 密码用机器A(01)密码
查看机器网卡和负载, 可以看到源ip来自机器A
学习linux15
机器C通过机器A的端口映射可以和机器B连接通信,同时可以连接外网

直播扩展

防火墙的工作图解
学习linux15
学习linux15
1 针对网段

iptables -I INPUT -m iprange --src-range 61.4.176.0-61.4.191.255 -j DROP
192.168.1.0/24  也可以写成网段

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

-m 后面跟模块名字,iprange是一个模块名字,用来支持一个网段
–src-range 指定来源的ip范围
–dst-range 指定目标ip范围

2.iptables中DNAT、SNAT和MASQUERADE的理解

http://ask.apelearn.com/question/7255

3 在iptables上一共有四种状态的说明,分别被称为NEW、ESTABLISHED、INVALID、RELATED
4 限速http://ask.apelearn.com/question/985
http://jamyy.us.to/blog/2006/03/206.html

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