先自我介绍一下,小编浙江大学毕业,去过华为、字节跳动等大厂,目前在阿里
深知大多数程序员,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年最新Linux运维全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上运维知识点,真正体系化!
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新
iptables -D FORWARD 2
iptables -F TOINTERNET
iptables -X TOINTERNET
注意定义规则千万不能将自己连接主机 那个网段给拒绝了,(可以将允许自己的网关
也就是ip.1
可以访问的规则放到第一条,将拒绝本网段的规则放在后面)因为有先后顺序,前面的规则满足,后面的就不会会查看
也可以iptables -I INPUT -s ip -j ACCEPT
将规则插入到最前面
还有给自己的ip访问权限,不然自己不能ping自己
也可以用计划任务
,执行修改规则
操作(自动还原,不能让自己连不上去)
注意还有OUTPUT链
等规则也类似
2. 查看:
-L:list, 列出指定鏈上的所有规则,本选项须置后
-n:numberic,以数字格式显示地址和端口号(只能加到L的前面)
-v:verbose,详细信息
-vv 更详细
-x:exactly,显示计数器结果的精确值
,而非单位转换后的易读值
–line-numbers:显示规则的序号
先后顺序
常用组合:
-vnL
-vvnxL --line-numbers
-S selected,以iptables-save
命令格式显示链上规则
3. 规则管理:
-A:append,追加
讲规则追加到后面
-I(大):insert, 插入
,要指明插入至的规则编号
,默认为第一条
-D:delete,删除
(1) 指明规则序号 iptables -D INPUT 1 删除第一条规则
(2) 指明规则本身
-R:replace,替换指定链上的指定规则编号
-F:flush,清空
指定的规则链
-Z:zero,置零
,重新计数
iptables的每条规则都有两个计数器
(1) 匹配到的报文的个数
(2) 匹配到的所有报文的大小之和
chain:PREROUTING,INPUT,FORWARD,OUTPUT,POSTROUTING
让INPUT表重新计数
==========================================================================
基本
:通用的,PARAMETERS
扩展
:需加载模块
,MATCH EXTENTIONS
无需加载模块,由iptables/netfilter自行提供
-s, --source address[/mask][,…]:
源IP地址或范围
-d, --destination address[/mask][,…]:
目标IP地址或范围
-p, --protocol protocol:指定协议,可使用数字如0(all)
protocol: tcp, udp, icmp, icmpv6, udplite,esp, ah, sctp, mh or“all“
参看:/etc/protocols
-i, --in-interface name:报文流入的接口;只能应用于数据报文流入环节,(走的那个网卡)
只应用于INPUT、FORWARD、PREROUTING链
-o, --out-interface name:报文流出的接口;只能应用于数据报文流出的环节,
只应用于FORWARD、OUTPUT、POSTROUTING链
-P 可以修改默认 表规则(不建议)
比如将INPUT表的默认规则ACCEPT 改为DROP
iptables -P INPUT DROP
1.全拒绝,指定特殊的可以访问
iptables -A INPUT -j REJECT
2.全允许,指定特殊的拒绝
指定从回环网卡进来的数据报文可以访问
iptables -I INPUT 5 -i lo -j ACCEPT
定义:可以从这个网段流出到-d ip
iptables -I OUTPUT 1 -d 192.168.245.0/24 -j ACCEPT
==============================================================================
需要加载扩展模块(/usr/lib64/xtables/*.so
),方可生效
查看帮助 man iptables-extensions
(1)隐式扩展:在使用-p
选项指明了特定的协议时,无需再用-m选项指明扩展模块的扩展机制,不需要手动加载扩展模块
会影响httpd,curl,mysql等
–source-port, --sport port[:port]:匹配报文源端口,可为端口范围
–destination-port,–dport port[:port]:匹配报文目标端口,可为范围
–tcp-flags mask comp
mask 需检查的标志位列表,用,分隔
例如 SYN,ACK,FIN,RST
comp 在mask列表中必须为1的标志位列表,无指定则必须为0,用,分隔
[!] 选项 表示取反 (除了)
示例:
–tcp-flags SYN,ACK,FIN,RST SYN 表示要检查的标志位为
SYN,ACK,FIN,RST四个,其中SYN必须为1,余下的必须为0(第一次握手)
–tcp-flags SYN,ACK,FIN,RST SYN,ACK 第二次握手SYN和ACK为1
–tcp-flags ALL ALL 全为1(不存在)
–tcp_flags ALL NONE 全为0(不存在)‘
--syn
:用于匹配第一次握手
相当于:--tcp-flags SYN,ACK,FIN,RST SYN
例如:
先允许自己和windows可以访问
iptables -A INPUT -s 192.168.245.1,172.0.0.1 -j ACCEPT
然后拒绝所有
iptables -A INPUT -j REJECT
让这个只能访问我的httpd服务和mysql(但是ping不通自己)
iptables -I INPUT 3 -s 192.168.245.128 -p tcp --dport 80 -j ACCEPT
iptables -I INPUT 4 -s 192.168.245.128 -p tcp --dport 3306 -j ACCEPT
检查三次握手,第一次SYN=1
iptables -I INPUT 5 -s 192.168.245.128 -p tcp --syn -j REJECT
等价于
iptables -I INPUT 5 -s 192.168.245.128 -p tcp --tcp-falgs SYN,ACK,RSA,FIN SYN -j REJECT
–source-port, --sport port[:port]:匹配报文的源端口或端口范围
–destination-port,–dport port[:port]:匹配报文的目标端口或端口范围
影响ping
–icmp-type {type[/code]|typename}
type/code
0/0 echo-reply icmp应答
8/0 echo-request icmp请求
例如:实现我能ping别人,别人不能ping我
(逻辑:自己ping本身就可以发送出去,但如果自己决绝所有INPUT请求,那么只能利用icmp的,应答报文0,接收就可以)
iptables -I INPUT 5 -p icmp --icmp-type 0 -j ACCEPT
(2)显式扩展:必须使用-m选项指明要调用的扩展模
块的扩展机制,要手动加载扩展模块
[-m matchname [per-match-options]]
处理动作:
-j targetname [per-target-options]
简单
:ACCEPT,DROP
扩展
:REJECT:–reject-with:icmp-port-unreachable默认
RETURN:返回调用链
REDIRECT:端口重定向
LOG:记录日志,dmesg
MARK:做防火墙标记
DNAT:目标地址转换
SNAT:源地址转换
MASQUERADE:地址伪装
…
自定义链:
显式扩展:必须显式地指明使用的扩展模块进行的扩展
使用帮助:
CentOS 6: man iptables
CentOS 7: man iptables-extensions
以离散方式定义多端口匹配,最多指定15个端口
端口范围用 :
冒号
不连续的用 ,
逗号
–source-ports,–sports port[,port|,port:port]…
指定多个源端口
–destination-ports,–dports port[,port|,port:port]…
指定多个目标端口
–ports port[,port|,port:port]…多个源或目标端口
允许所有人能访问我的smb服务(端口号139,445)
iptables -I INPUT 5 -p tcp -dport 139 -j ACCEPT
iptables -I INPUT 5 -p tcp -dport 445 -j ACCEPT
或者
iptables -I INPUT 5 -p tcp -m multiport --dports 139,445 -j ACCEPT
示例:
iptables -A INPUT -s 172.16.0.0/16 -d 172.16.100.10 -p tcp -m multiport --dport 20:22,80 -j ACCEPT
指明连续的(但一般不是整个网络)ip地址范围
–src-range from[-to] 源IP地址范围
–dst-range from[-to] 目标IP地址范围
示例:
iptables -A INPUT -d 172.16.1.100 -p tcp --dport 80 -m iprange --src-range 172.16.1.5-172.16.1.10 -j DROP
指明源MAC地址
适用于:PREROUTING, FORWARD,INPUT chains
类似于交换机----(就是根据mac来连接的)
也可以在交换机上配置这种策略,更安全
–mac-source XX:XX:XX:XX:XX:XX
目标mac肯定是自己,所以没有必要定义
示例:
这样只会根据mac判断,而不会因为ip被盗而出现不安全的问题
这也有 先后次序
iptables -A INPUT -s 172.16.0.100 -m mac --mac-source 00:50:56:12:34:56 -j ACCEPT
iptables -A INPUT -s 172.16.0.100 -j REJECT
对报文中的应用层
数据做字符串模式匹配检测
–algo {bm|kmp} 字符串匹配检测算法
bm:Boyer-Moore 优一点
kmp:Knuth-Pratt-Morris
–from offset 开始偏移(大概是从哪个位置开始)
–to offset 结束偏移
–string pattern 要检测的字符串模式
–hex-string pattern要检测字符串模式,16进制格式
示例:
注意如果是加密的,就屏蔽不了
拒绝任何人访问有 google的网站(不给他响应,所以为OUTPUT)
iptables -A OUTPUT -p tcp --sport 80 -m string --algo bm --string “google” -j REJECT
根据将报文到达的时间
与指定的时间范围
进行匹配
–datestart YYYY[-MM[-DD[Thh[:mm[:ss]]]]] 日期
–datestop YYYY[-MM[-DD[Thh[:mm[:ss]]]]]
–timestart hh:mm[:ss] 时间(每天)
–timestop hh:mm[:ss]
–monthdays day[,day…] 每个月的几号
–weekdays day[,day…] 星期几,1 – 7 分别表示星期一到星期日
–kerneltz:内核时区,不建议使用,CentOS7系统默认为UTC时间
注意: centos6 不支持kerneltz
,–localtz指定本地时区(默认)
centos7(UTC时间) 一般用当地时间减8
变成UTC
示例:
iptables -A INPUT -s 172.16.0.0/16 -d 172.16.100.10 -p tcp --dport 80 -m time --timestart 14:30 --timestop 18:30 --weekdays Sat,Sun -j DROP
定义一个规则,白天是可以允许访问的(朝九晚六) 都要减8变成UTC时间
iptables -A INPUT -m time --timestart 1:00 --timestop 10:00 -j ACCEP
如果将本机的时间变成晚上八点date -s “+8 hour”
那么就不能访问本机
根据每客户端IP
做并发连接数数量匹配
可防止Dos(Denial of Service,拒绝服务
)攻击
–connlimit-upto #:连接的数量小于等于#时匹配
–connlimit-above #:连接的数量大于#时匹配
有缺陷如果是多个肉机一块攻击DDS
那么没办法
通常分别与默认的拒绝或允许策略
配合使用
示例:
当访问量大于100时拒绝
iptables -A INPUT -d 172.16.100.10 -p tcp --dport 22 -m connlimit --connlimit-above 100 -j REJECT
基于收发报文的速率做匹配
令牌桶过滤器
–limit #[/second|/minute|/hour|/day] 限制流量
–limit-burst number 初始值
示例:
每分钟只允许通过10个,前5个是不限制
iptables -I INPUT -p icmp --icmp-type 8 -m limit --limit 10/minute --limit-burst 5 -j ACCEPT
其他的拒绝
iptables -I INPUT 2 -p icmp -j REJECT
根据”连接追踪机制
“去检查连接的状态,较耗资源
conntrack机制:追踪本机上的请求和响应之间的关系
状态有如下几种:
NEW
:新发出请求;连接追踪信息库中不存在此连接的相关信息条目,因此,将其识别为第一次发出的请求
ESTABLISHED
:NEW状态之后,连接追踪信息库中为其建立的条目失效之前期间内所进行的通信状态(第一次以后)established
RELATED
:新发起的但与已有连接相关联的连接
,如:ftp协议
中的数据连接与命令连接之间的关系
INVALID
:无效的连接,如flag标记不正确related
UNTRACKED
:未进行追踪的连接,如raw表中关闭追踪
–state state
示例:
iptables -A INPUT -d 172.16.1.10 -p tcp -m multiport --dports 22,80 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -s 172.16.1.10 -p tcp -m multiport --sports 22,80 -m state --state ESTABLISHED -j ACCEPT
老用户连接ssh服务可以,新用户拒绝
这里接受的,后面写一个拒绝所有就可以
已经追踪到的并记录下来
的连接信息库/proc/net/nf_conntrack
调整连接追踪功能所能够容纳的最大连接数量
/proc/sys/net/nf_conntrack_max
永久配置在/etc/sysctl.conf
不同的协议的连接追踪时长
/proc/sys/net/netfilter/
注意:CentOS7 需要加载模块: modprobe nf_conntrack_ipv4
为/proc/sys/net/nf_conntrack_max,各种状态的超
时链接会从表中删除;当模板满载
时,后续连接可能会超时
可能用导致很多用户不能访问(消耗内存)
解决方法两个:
(1) 加大nf_conntrack_max 值
vi /etc/sysctl.conf
net.nf_conntrack_max = 393216
net.netfilter.nf_conntrack_max = 393216
(2) 降低 nf_conntrack timeout时间
vi /etc/sysctl.conf
net.netfilter.nf_conntrack_tcp_timeout_established = 300
net.netfilter.nf_conntrack_tcp_timeout_time_wait = 120
net.netfilter.nf_conntrack_tcp_timeout_close_wait = 60
net.netfilter.nf_conntrack_tcp_timeout_fin_wait = 120
iptables -t nat -L -n
开放被动模式的ftp服务
(1) 装载ftp连接追踪的专用模块
:
跟踪模块路径:/lib/modules/kernelversion/kernel/net/netfilter
vim /etc/sysconfig/iptables-config 配置文件
IPTABLES_MODULES=“nf_conntrack_ftp"
这个模块可以识别ftp协议21端口的信息从而得知被动模式用的端口号是多少
modproble nf_conntrack_ftp手工加载
(2) 放行请求报文:
命令连接:NEW, ESTABLISHED
数据连接:RELATED, ESTABLISHED
只要不是第一次访问就可以通
iptables –I INPUT -d LocalIP -p tcp -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -d LocalIP -p tcp --dport 21 -m state --state NEW -j ACCEPT
(3) 放行响应报文:
iptables -I OUTPUT -s LocalIP -p tcp -m state --state ESTABLISHED -j ACCEPT
开放被动模式的ftp服务示例
yum install vsftpd
systemctl start vsftpd
modprobe nf_conntrack_ftp
iptables -F
(放在前面更优)只要不是第一次访问就可以连通
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
(放在前面效率低)
iptables -A INPUT -p tcp --dport 21 -m state --state NEW -j ACCEPT
iptables -A OUTPUT -m state --state ESTABLISHED -j ACCEPT
iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -vnL
ACCEPT接收,
DROP丢弃(无回应)
REJECT拒绝(有回应)
SNAT,
DNAT
MASQUERADE,伪装
MARK,打标签
LOG日志
- LOG:非中断target,本身不拒绝和允许,放在拒绝和允许规则前并将日志记录在
/var/log/messages
系统日志中
用于记录,自己所关注流量
–log-level level 级别: debug,info,notice, warning, error, crit,
alert,emerg
–log-prefix prefix 日志前缀,用于区别不同的日志,最多29个字符
示例:
iptables -I INPUT -s 10.0.1.0/24 -p tcp -m multiport --dports 80,21,22,23
-m state --state NEW -j LOG --log-prefix "new connections: "
===================================================================================
任何不允许的访问,应该在请求到达时给予拒绝INPUT
规则在链接上的次序即为其检查时的生效次序
基于上述,规则优化
1 安全放行所有入站和出站的状态为ESTABLISHED
状态连接
2 谨慎放行入站的新请求NEW
3 有特殊目的限制访问功能,要在放行规则之前加以拒绝
4 同类
规则(访问同一应用),匹配范围小的放在前面
,用于特殊处理
5 不同类
的规则(访问不同应用),匹配范围大的放在前面
6 应该将那些可由一条规则能够描述的多个规则合并为一条
7 设置默认策略,建议白名单
(只放行特定连接)
1) iptables -P,不建议
2) 建议在规则的最后定义规则做为默认策略(拒绝所有)
规则有效期限:
使用iptables命令定义的规则,手动删除之前,其生效期限为kernel存活期限
保存规则:iptables-save
保存规则至指定的文件
CentOS 7
iptables-save可以将所有的规则打印到屏幕上面
iptables-save > /PATH/TO/SOME_RULES_FILE
CentOS 6
service iptables save
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
前缀**,用于区别不同的日志,最多29个字符
示例:
iptables -I INPUT -s 10.0.1.0/24 -p tcp -m multiport --dports 80,21,22,23
-m state --state NEW -j LOG --log-prefix "new connections: "
===================================================================================
任何不允许的访问,应该在请求到达时给予拒绝INPUT
规则在链接上的次序即为其检查时的生效次序
基于上述,规则优化
1 安全放行所有入站和出站的状态为ESTABLISHED
状态连接
2 谨慎放行入站的新请求NEW
3 有特殊目的限制访问功能,要在放行规则之前加以拒绝
4 同类
规则(访问同一应用),匹配范围小的放在前面
,用于特殊处理
5 不同类
的规则(访问不同应用),匹配范围大的放在前面
6 应该将那些可由一条规则能够描述的多个规则合并为一条
7 设置默认策略,建议白名单
(只放行特定连接)
1) iptables -P,不建议
2) 建议在规则的最后定义规则做为默认策略(拒绝所有)
规则有效期限:
使用iptables命令定义的规则,手动删除之前,其生效期限为kernel存活期限
保存规则:iptables-save
保存规则至指定的文件
CentOS 7
iptables-save可以将所有的规则打印到屏幕上面
iptables-save > /PATH/TO/SOME_RULES_FILE
CentOS 6
service iptables save
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!