2024年Linux最新(一)Linux 防火墙(重点)iptables(1),Linux运维面试必看书籍

先自我介绍一下,小编浙江大学毕业,去过华为、字节跳动等大厂,目前在阿里

深知大多数程序员,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年最新Linux运维全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。
img
img
img
img
img

既有适合小白学习的零基础资料,也有适合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

1、基本匹配条件:parameters


无需加载模块,由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

2. 扩展匹配条件:

==============================================================================

需要加载扩展模块/usr/lib64/xtables/*.so),方可生效

查看帮助 man iptables-extensions

(1)隐式扩展:在使用-p选项指明了特定的协议时,无需再用-m选项指明扩展模块的扩展机制,不需要手动加载扩展模块

1. tcp协议扩展选项


会影响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

2. udp


–source-port, --sport port[:port]:匹配报文的源端口或端口范围

–destination-port,–dport port[:port]:匹配报文的目标端口或端口范围

3. icmp


影响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

1. multiport扩展


离散方式定义多端口匹配,最多指定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

2. iprange扩展


指明连续的(但一般不是整个网络)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

3. mac扩展


指明源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

4. string扩展


对报文中的应用层数据做字符串模式匹配检测

–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

5. time扩展


根据将报文到达的时间指定的时间范围进行匹配

–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”

那么就不能访问本机

6. connlimit扩展


根据每客户端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

7. limit扩展


基于收发报文的速率做匹配

令牌桶过滤器

–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

8. state扩展


根据”连接追踪机制“去检查连接的状态,较耗资源

conntrack机制:追踪本机上的请求和响应之间的关系

状态有如下几种

NEW:新发出请求;连接追踪信息库中不存在此连接的相关信息条目,因此,将其识别为第一次发出的请求

ESTABLISHEDNEW状态之后,连接追踪信息库中为其建立的条目失效之前期间内所进行的通信状态(第一次以后)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

iptables的链接跟踪表最大容量


为/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

Target处理动作.


ACCEPT接收,

DROP丢弃(无回应)

REJECT拒绝(有回应)

SNAT,

DNAT

MASQUERADE,伪装

MARK,打标签

LOG日志

  1. 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行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

  • 29
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值