学习笔记
linux 防火墙-netfilter
临时关闭selinux
setenforce 0
永久关闭selinux 需要编辑配置文件/etc/selinux/config
配置完查看防火墙状态
[root@qklinux-01 ~]# getenforce
Enforcing
[root@qklinux-01 ~]# setenforce 0
[root@qklinux-01 ~]# 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个表
filter表用于过滤包,最常用的表,有INPUT . FORWARD OUTPUT三个链
nat表用于网络地址转换,有PREROUTING,OUTPUT,POSTOUTING三个链
managle 表用于给数据包做标记,有五个链:PREROUTING,POSTROUTING,INPUT,OUYPUT,FORWARD几乎用不到
raw表可以实现不追中某些数据包
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端口
执行完查看
[root@qklinux-01 ~]# sh /usr/local/sbin/iptables.sh
[root@qklinux-01 ~]# 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机器连接外网
- 先在虚拟机01上添加一块网卡
默认NAT点完后 然后新建LAN区段,自定义名字 选择新建LAN区段
同样的02机器创建LAN网段 让两个机器处于同一网段
查看01机器网卡 发现新增ens37
给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不通 说明不能连接外网
02机器也ping不通01外网ip
在01机器上设置打开路由转发 默认是0说明关闭
[root@qklinux-01 ~]# cat /proc/sys/net/ipv4/ip_forward
0
[root@qklinux-01 ~]# echo "1" > /proc/sys/net/ipv4/ip_forward
[root@qklinux-01 ~]# !cat
cat /proc/sys/net/ipv4/ip_forward
1
增加一条规则 让100.0网段能够上网
[root@qklinux-01 ~]# iptables -t nat -A POSTROUTING -s 192.168.100.0/24 -o ens33 -j MASQUERADE
[root@qklinux-01 ~]# 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机器设置网关
02机器设置DNS vi/etc/resolv.conf 加上nameserver:119.29.29.29
需求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会话
连接用户名root 密码用机器A(01)密码
查看机器网卡和负载, 可以看到源ip来自机器A
机器C通过机器A的端口映射可以和机器B连接通信,同时可以连接外网
直播扩展
防火墙的工作图解
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