Linux内核是linux内部最核心的软件
包括过滤机制netfilter:是linux内核里面的一个模块,对进出网卡的数据进行管理
iptables给netfilter传参(人–》iptables–》netfilter)
firewalld 新式防火墙 iptables 老式防火墙
firewalld 是对iptables进行新的封装,底层仍然是是使用的是iptables的基本命令
uname -r 查看linux内核版本
防火墙是防止别人攻击,对进出的数据进行限制。防火墙不能检查病毒,查看病毒
iptables的四表五链:
四表:raw,mongon,nat,filter
mangle表:–》给数据打标记
nat表:–》dnat和snat
数据包的流走机制:表是链的集合 表的优先级:raw–>mangle–>nat–>filter
五链:PREROUTING, POSTROUTING, FORWAROD, INPUT, OUTPUT
iptables 后的几种状态: ACCEPT 接收 REJECT 拒绝 DROP 丢弃 默认为 DROP
-A 在链尾追加一条新的规则
append -I 在指定位置插入一条新的服务
insert -R 修改、替换指定位置或内容的规则
replace 拒绝性 reject 给与回复
-P 设置指定链的默认策略
-L 列表查看各条规则信息
–line-numbers 查看规则信息时显示股则的行号
-n 以数字形式显示 IP 地址、端口等信息
-v 显示数据包个数、字节数等详细信息
–sport 源端口
–dport 目的端口
–sport 源端口:目标端口 一个端口范围
-m multiport 加载多端口的模块
m:match -m iprange --src-range 规定一个网段 *
iptables 常见的操作命令 链名必须放在前面并且大写 *
iptables 语法格式: iptables [-t 表名] 管理选项 [链名] [匹配条件] [-j 目标动作或则跳转]
iptables -L -t 表名 可以查看表中使用了哪些链
iptables -L 默认查看 filter 表
iptables -L --line-num -v 显示规则的编号 -v 显示规则的详细信息
iptables -I INPUT 1 -s 192.168.29.124/32 -p tcp --dport 80 -j ACCEPT 插入数据放在第一 行
iptables -L --line -v -n 可以查看规则 用数字并且显示详细信息 iptables -I INPUT 1 -s 192.168.29.24/24 -p tcp --dport 22 -j ACCEPT iptables -R INPUT 1 -s 192.168.29.24/24 -p tcp --dport 22 -j ACCEPT 修改这个规则
iptables -P INPUT ACCEPT 修改默认规则
iptables -F 清除的规则是不会清除默认的规则的 需要 iptables -P 链名 状态
iptables -A INPUT -s 192.168.24.29 -j DROP 丢弃针对一个 IP 地址
iptables -A INPUT -s 192.168.24.29/32 -j DROP 丢弃针对一个 IP 地址
iptables -A INPUT -s 192.168.24.29/24 -j DROP 丢弃针对一个 IP 网段
iptables -I INPUT -p icmp --icmp-type 0 -j ACCEPT 可以接收 可以 ping 的通
iptables -I INPUT -p icmp --icmp-type 0 -j DROP 不可以接收
iptables -I INPUT -p icmp -j LOG 可以形成 log 日志 tailf /var/log/messages iptables -D INPUT 4 删除第 4 条规则
脚本实例:
#!/bin/bash
#清空iptables规则
iptables -t filter -F
#不允许其他机器ping本机,但是本机可以ping其他机器
iptables -t filter -A INPUT -p icmp --icmp-type 8 -j DROP
#不允许访问80端口
iptables -t filter -A INPUT -p tcp --dport 80 -j DROP
设置INPUT链的默认规则为DROP
iptables -P INPUT DROP
iptables -t filter -A INPUT -s 192.168.100.88 -p tcp --dport 22 -j ACCEPT
tcpdump -i ens33 -p tcp --dport 3306
清空iptables和nat表的里面的规则
iptables -t filter -F
iptables -t nat -F
设置filter表的默认策略为ACCEPT
iptables -t filter -P INPUT ACCEPT
iptables的命令选项:
-A(为追加,放到末尾)
-I(指定位置添加)
可以man一下iptables查看更多信息
docker
在iptables新建自定义链
-j 有四种选项
ACCEPT
DROP(直接丢弃,不给回复)
REJECT(拒绝但是给回复)
LOG(记录日志功能)
总结下iptables的命令语法
[root@web-server nginx]# tcpdump -i ens33 -p icmp -n
抓包
协议: tcp 、udp、icmp、arp等网络层和传输层
-p tcp
-p icmp
-p arp
ip地址:源ip和目的ip
端口号: 源端口和目的端口
src port
dst port
src host 源主机--》源ip source
dst host 目的主机 --》目的ip destination
src net 源网段--》源ip source 192.168.10.0/24
dst net 目的网段 --》目的ip destination
===========
iptables的条件:
1.协议:tcp udp icmp
-p protocol 小写的p
-p icmp --icmp-type 8 ping请求报文
-p icmp --icmp-type 0 ping响应报文
2.端口号:
-p tcp --sport
-p tcp --dport
-p udp --sport
-p udp --dport
-p tcp --sport 20:80
iptables -A INPUT -p tcp -m multiport --dport 20,21,25,110,1250:1280 -j ACCEPT
3.ip地址
-s source
-d destination
iptables -A FORWARD -p tcp -m iprange --src-range 192.168.1.20-192.168.1.99 -j DROP
4.mac地址
5.状态
6.其他
-i in-interface
-o out-interface
iptables -I INPUT -i ens33 -p tcp --tcp-flags SYN,RST,ACK SYN -j REJECT
ens33接口上不接收tcp三次握手的第一个包–》不允许新的连接产生了
-m 加模块
[root@localhost ~]# iptables -A FORWARD -m mac --mac-source 00:0C:29:27:55:3F -j DROP
[root@localhost ~]# iptables -A INPUT -p tcp -m multiport --dport 20,21,25,110,1250:1280 -j ACCEPT
[root@localhost ~]# iptables -A FORWARD -p tcp -m iprange --src-range 192.168.1.20-192.168.1.99 -j DROP
/var/log/message(内核记录的日志)
iptables -t filter -N SWY(新建一个链)
iptables -t filter -A SWY -p tcp --dport 22 -j ACCEPT (给SWY这条链加一条策略)
iptables -A INPUT -p tcp --dport 22 -j SWY(INPUT链把22号端口的tcp协议给SWY这个链处理)
内核的最大并发数:1024个
如何开机让linux去加载保存的iptables配置文件?
iptables-restore < /etc/sysconfig/iptables-config(手动重新加载)
开机手动执行脚本(放到/etc/rc.local里面就开机自动执行脚本)
状态机制:
ftp的连接:service先yum install vsftpd -y 再 service vsftpd start
client先yum install ftp lftp -y 再ftp service的IP名
会产生一个新的传输数据的链路,且数据端口随机
lsmod(查看内核加载了哪些模块)
modprobe(加载模块)
采用状态机制来开放ftp服务的iptables规则
#!/bin/bash
iptables -P INPUT DROP
open ssh
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
open ftp
iptables -A INPUT -p tcp --dport 21 -j ACCEPT
open ftp data link
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
让linux内核加载支持ftp状态的检查的模块
modprobe nf_conntrack_ftp
modprobe nf_nat_ftp
存放linux内核模块路径
/lib/modules/4.18.0-193.el8.x86_64/kernel/net/netfilter
ftp:文件传输协议–》搭建一个文件服务器–》有大量的视频,文档需要共享
linux:ftp,lftp
windows:ftp://ip地址
匿名用户访问会访问到:/var/ftp/pub里(使用的是ftp用户,他的家目录就是/var/ftp/pub)
普通用户访问是到自己的家目录下
root用户是不允许访问的
ftp的主动模式:
命令链路是21号端口
数据链路是20号端口000
脚本:、
#!/bin/bash
截取出日志里面的访问root用户的ip地址
/tmp/denv_ip.txt是专门存放的iptables阻止过的黑名单
#!/bin/bash
for i in $(cat /var/log/secure |awk '/Failed password for root/{print $11}'|sort|uniq -c |sort -nr|awk '{print $2}')
do
if grep $i /tmp/deny_ip.txt;then
echo "此ip $i 已经在iptables防火墙里阻止了"
else
iptables -I INPUT -s $i -p tcp --dport 22 -j DROP
echo $i >> /tmp/deny_ip.txt
fi
done
(iptables -I INPUT 放到第一条,如果iptables -A INPUT 追加到末尾的话会被第一条规则给覆盖)
统计加排序命令:cat file |sort|uniq -c |sort -nr
sort -u (去重)
sort -n (排序)
uniq -c (加统计相同的)
在写一个脚本clear的iptables(在规定的时间内)
grep 192.168.0.54 /var/log/secure(查看此文件里是否有此ip地址)