Linux系统 iptables进阶学习
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 | 一、IPTABLES四表五链学习: (1)Filter表:是iptables的默认表,它有以下三种内建链(chains): INPUT链 – 处理来自外部的数据。 OUTPUT链 – 处理向外发送的数据。 FORWARD链 – 将数据转发到本机的其他网卡设备上。 (2)NAT表:NAT表有三种内建链: PREROUTING链 – 处理刚到达本机并在路由转发前的数据包。它会转换数据包中的目标IP地址(destination ip address),通常用于DNAT(destination NAT)。 POSTROUTING链 – 处理即将离开本机的数据包。它会转换数据包中的源IP地址( source ip address),通常用于SNAT( source NAT)。 OUTPUT链 – 处理本机产生的数据包 (3)Mangle表:Mangle表用于指定如何处理数据包。它能改变TCP头中的QoS位。Mangle表具有5个内建链(chains): PREROUTING OUTPUT FORWARD INPUT POSTROUTING (4) Raw表:Raw表用于处理异常,它具有2个内建链: PREROUTING chain OUTPUT chain 二、IPTABLES 规则(Rules)学习: Rules包括一个条件和一个目标(target) 如果满足条件,就执行目标(target)中的规则或者特定值。 如果不满足条件,就判断下一条Rules。 三、目标值(Target Values)在target里指定的特殊值: ACCEPT – 允许防火墙接收数据包 DROP – 防火墙丢弃包 QUEUE – 防火墙将数据包移交到用户空间 RETURN – 防火墙停止执行当前链中的后续Rules,并返回到调用链(the calling chain)中。 四、查看表规则命令: 查看各表中的规则命令:iptables -t filter --list 相当于 iptables -nL 查看mangle表:iptables -t mangle --list 查看NAT表:iptables -t nat --list 查看RAW表:iptables -t raw --list 五、清空所有iptables规则 注:在配置iptables之前,你通常需要用iptables --list命令或者iptables-save命令查看有无现存规则,因为有时需要删除现有的iptables规则 iptables --flush 或者 iptables -F 例如清除iptables nat表规则 :iptables -t nat -F 六、永久生效 说明:当你删除、添加规则后,这些更改并不能永久生效,这些规则很有可能在系统重启后恢复原样。如下配置让配置永久生效 (1)生效方式1: yum install -y iptables* service iptables save(默认保存的配置在 /etc/sysconfig/iptables ) 重启iptables服务 service iptables stop service iptables start systemctl enable iptables.service (1)生效方式2: iptables-save > /etc/sysconfig/iptables .rules chmod 755 /etc/sysconfig/iptables .rules 在 /etc/rc . local 里添加下面这段文件(执行上面这条命令会自动添加,但是要有755权限)。权限为755 iptables-restore < /etc/sysconfig/iptables .rules 或者 iptables-restore /etc/sysconfig/iptables .rules 七、追加iptables规则 (1)追加规则的完整实例:仅允许SSH服务 1.清空所有iptables规则 iptables -F 2.接收目标端口为22的数据包 iptables -A INPUT -i eth0 -p tcp --dport 22 -j ACCEPT 3.拒绝所有其他数据包 iptables -A INPUT -j DROP 八、更改默认策略(禁止操作,否则你就无法 ssh 连接了,只能重启解决) (1)给三个链单独添加DROP规则 iptables -A INPUT -j DROP iptables -A OUTPUT -j DROP iptables -A FORWARD -j DROP (2)更改默认策略 iptables -P INPUT DROP iptables -P OUTPUT DROP iptables -P FORWARD DROP 九、配置应用程序规则 (1)允许接收远程主机的SSH请求 iptables -A INPUT -i eth0 -p tcp --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT (2)允许发送本地主机的SSH响应 iptables -A OUTPUT -o eth0 -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT 说明: -m state: 启用状态匹配模块(state matching module) –-state: 状态匹配模块的参数。当SSH客户端第一个数据包到达服务器时,状态字段为NEW;建立连接后数据包的状态字段都是ESTABLISHED –sport 22: sshd监听22端口,同时也通过该端口和客户端建立连接、传送数据。因此对于SSH服务器而言,源端口就是22 –dport 22: ssh 客户端程序可以从本机的随机端口与SSH服务器的22端口建立连接。因此对于SSH客户端而言,目的端口就是22 (3)如果服务器也需要使用SSH连接其他远程主机,则还需要增加以下配置: iptables -A OUTPUT -o eth0 -p tcp --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT iptables -A INPUT -i eth0 -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT 10、规则增删改查等相关参数 iptables -t nat -D POSTROUTING 1 -A 追加规则-->iptables -A INPUT -D 删除规则-->iptables -D INPUT 1(编号) -R 修改规则-->iptables -R INPUT 1 -s 192.168.1.0 -j DROP 取代现行规则,顺序不变(1是位置) -I 插入规则-->iptables -I INPUT 1 --dport 22 -j ACCEPT 插入一条规则,原本位置上的规则将会往后移动一个顺位 -L 查看规则-->iptables -L INPUT 列出规则链中的所有规则 -N 新的规则-->iptables -N allowed 定义新的规则 (1)查看Filter表中的所有链以及规则 iptables -nL --line-numbers (2)向Filter表的INPUT链中新增接收所有来自192.168.1.1的数据包并指定其序号为2,如果占用其他主机IP的序号,则其他主机序号会往下递减一个序号 iptables -I INPUT 1 -s 192.168.1.1 /32 -j ACCEPT iptables -I INPUT 1 -s 192.168.1.2 /32 -j ACCEPT (3)删除Filter表中INPUT链中序号为2的规则 iptables -D INPUT 2 (4)向filter表的INPUT链中追加(-A)一条拒绝所有发送到192.168.1.1的数据包 iptables -A INPUT -d 192.168.1.1 /32 -j DROP (5)在nat表的PREROUTING链中新增一条序号为1的LOG规则(LOG目标通常放在对数据包过滤和处理前,可以用来分析数据包流向。) 说明:-I:表示insert,即向链中插入一条规则,PREROUTING为链名,没有指定序号默认为1,即顶部插入; -j:规则目标(Target),LOG代表获取数据包并打印日志; --log-prefix:日志信息的前缀,只能在-j LOG的情况下使用 iptables -I PREROUTING -t nat -j LOG --log-prefix "[NAT_PREROUTING_LOG]" (6)实战篇: 1、禁止源地址192.168.1.1访问服务器的22,53,80端口 iptables -I INPUT -s 192.168.1.1 /32 -p tcp -m multiport --dport 22,53,80 -j DROP 2、对于访问量比较大的服务器,例如192.168.1.1,可以通过raw表配置绕过连接跟踪: iptables -t raw -A PREROUTING -d 192.168.1.1 /32 -p tcp --dport 80 -j NOTRACK 3、将访问192.168.1.1:80的请求转到192.168.1.2:9000上 iptables -t nat -A PREROUTING -d 192.168.1.1 -t tcp --dport 80 -j DNAT --to-destination 192.168.1.2:9000 4、将访问本机的udp 314端口转发到3140上 iptables -t nat -A PREROUTING -p udp --dport 314 -j DNAT --to-destination 124.222.170.39:3140 5、实现所有192.168.1.0 /24 的地址通过123.123.123.123公网地址访问公网 iptables -t nat -A POSTROUTING -s 192.168.1.0 /24 -j SNAT --to- source 123.123.123.123 6、拒绝一分钟内新建超过4次SSH连接的IP再次连接 iptables -A INPUT -p tcp -m tcp --dport 22 -m state --state NEW -m recent -- set --name SSH --rsource iptables -A INPUT -p tcp -m tcp --dport 22 -m state --state NEW -m recent --update --seconds 60 --hitcount 4 --name SSH --rsource -j DROP IPTABLES模块学习: 一、multiport模块:(连续匹配多个端口) (1)要求192.168.1.0 /24 网段的所有IP只能访问22,80,443端口,其他的拒绝(该命令具有风险) iptables -t filter -A INPUT -p tcp --dport 22 -s 192.168.1.0 /24 -j ACCEPT iptables -t filter -A INPUT -p tcp --dport 80 -s 192.168.1.0 /24 -j ACCEPT iptables -t filter -A INPUT -p tcp --dport 443 -s 192.168.1.0 /24 -j ACCEPT iptables -t filter -A INPUT -p tcp -j DROP 或者:(只放开22,80,443端口) iptables -t filter -A INPUT -p tcp -m multiport --dport 22,80,443 -j ACCEPT iptables -t filter -A INPUT -p tcp -j DROP (2)要求192.168.1.0 /24 网段的所有ip只能访问22-90端口,其他拒绝 iptables -t filter -A INPUT -p tcp -m multiport --dport 22:90 -j ACCEPT iptables -t filter -A INPUT -p tcp -j DROP(其他未被允许的端口禁止访问) iptables -t filter -A INPUT -p tcp -m multiport --dports 80,22,8080:9090 -j ACCEPT (对所有的地址开放本机的tcp 80、22、8080-9090端口的访问) 二、iprange模块:(连续匹配多个IP) --src-range : 源地址范围 --dest-range: 目标地址范围 (1)要求只有192.168.1.1到192.168.1.20访问23端口,其他的拒绝 iptables -t filter -A INPUT -p tcp -m iprange --src-range 192.168.1.1-192.168.1.20 -j ACCEPT iptables -t filter -A INPUT -p tcp -j DROP 三、string模块:(按照内容进行匹配) --string parttern:指定要匹配的字符串 --algo {bm|kmp}:匹配的查询算法 (1)要求访问的内容包含hello的内容不允许访问,其他的可以 iptables -t filter -A OUTPUT -p tcp -m string --string "hello" --algo kmp -j DROP 四、 time 模块(UTC时间):根据时间来控制访问(UTC)可以指定个端口 --timestart hh:mm[:ss]:开始时间 --timestop hh:mm[:ss]:结束时间 --monthdays day[,day...]:指定一个月的某一天 --weekdays day[,day...]:指定周还是周天 (1)要求上午的08:00到上午的10:30不允许访问,其他时间可以(UTC时间比北京时间要提前8个小时) iptables -t filter -A INPUT -p tcp -m time --timestart 00:00 --timestop 02:30 -j DROP 五、icmp模块:(控制icmp协议) --icmp- type { type [ /code ]|typename} echo -request(8)请求(我可以 ping 别人,别人休想 ping 我) echo -reply(0)回应(别人可以 ping 我,我休想 ping 别人) (1)禁止他人 ping 我,但本主机可以 ping 他人 iptables -t filter -I INPUT -p icmp --icmp- type "echo-request" -j DROP (2)他人可以 ping 我,但本主机不能 ping 他人 iptables -t filter -I INPUT -p icmp --icmp- type "echo-reply" -j DROP (3)允许对所有的地址开放本机的基于ICMP协议的数据包 iptables -t filter -A INPUT -p icmp -j ACCEPT 六、connlimit模块:(控制并发数)没有什么用 --connlimit-upto n:如果现有连接数小于或等于n则匹配 --connlimit-above n: 如果现有连接数大于n则匹配 (1)要求登录192.168.1.1 的窗口最多两个 iptables -t filter -A INPUT -p tcp --dport 22 -m connlimit --connlimit-above 2 -j REJECT 七、limit模块:(针对 报文速率 进行限制。秒、分钟、小时、天) --limit rate[ /secon | /mintue | /hour | /day ] :报文数量 --limit-burst number:报文数量(默认:5) 数据包数量=网速*1000 /1500 限速:限制传输的宽带不可以超过500k(500*1000 /1500 =333包) (1)要求每秒只能够传输500k大小的数据 iptables -t filter -A INPUT -p tcp -m limit --limit 333 /s -j ACCEPT iptables -t filter -A INPUT -p icmp -j DROP (2)允许10个数据报文快速通过,超过的数据报文1 /m (一分钟一个) iptables -t filter -A INPUT -p icmp -m limit --limit 1 /m --limit-burst 10 -j ACCEPT iptables -t filter -A INPUT -p icmp -j DROP |
分类:
Linux 进阶类
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· 一文读懂知识蒸馏
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下