iptables学习记录
一.四表
filter 表:
主要用于控制数据包的过滤,决定数据包是否允许进出及转发 。比如设置规则允许特定 IP 访问服务器的 SSH 端口(22 端口),或禁止某些 IP 访问网站端口(80 或 443 端口 )。可作用于 INPUT、OUTPUT、FORWARD 链。
nat 表:
即 Network Address Translation(网络地址转换)表,负责处理数据包中的地址转换,如源地址转换(SNAT)和目标地址转换(DNAT) 。比如局域网内设备共享公网 IP 上网,就需要用到 NAT 转换。可作用于 PREROUTING、INPUT、OUTPUT、POSTROUTING 链。
mangle 表:
用于修改数据包的原数据,比如修改 IP 头中的 TOS(Type of Service,服务类型)字段等 。一般用于一些对数据包有特殊标记、修改需求的场景。可作用于 PREROUTING、INPUT、FORWARD、OUTPUT、POSTROUTING 链。
raw 表:
主要控制 nat 表中连接追踪机制的启用状况 ,比如通过设置可以让某些连接不被连接跟踪机制处理。可作用于 PREROUTING、OUTPUT 链。
二.五链
PREROUTING(路由前):
在数据包进入路由决策之前进行处理,当外部数据包进入本机时,首先会经过此链。可在此链上设置规则对进入的数据包进行地址转换等操作 。
INPUT(数据包流入口):
处理进入本机的数据包,比如设置规则允许或拒绝哪些外部请求进入本机的特定端口 。
FORWARD(转发关卡):
当数据包需要经过本机转发到其他设备时(如路由器场景),会经过此链 。比如局域网内的网关服务器转发数据包到互联网时,就会用到此链规则。
OUTPUT(数据包出口):
处理本机发出的数据包,可在此设置规则控制本机发出的数据包的走向等 。
POSTROUTING(路由后):
在数据包完成路由决策,即将离开本机时进行处理,常用于源地址转换(SNAT),如将局域网内不同 IP 转换为统一的公网 IP 发出 。
1.安装systemctl 管理iptables启动
dnf install iptables-services
2.系统启动时自动加载这些 iptables 相关内核模块
cat >> /etc/rc.local<<EOF
modprobe ip_tables
modprobe iptable_filter
modprobe iptable_nat
modprobe ip_conntrack
modprobe ip_conntrack_ftp
modprobe ip_nat_ftp
modprobe ip_nat_state
EOF
核心掌握:
参数表
实操:
在实验前先清空默认规则
iptables -X
iptables -F
iptables -X
1.封禁80端口:
DROP //拒绝
ACCEPT //允许
REGECT //拒绝并返回信息
iptables -I INPUT -p tcp --dport 80 -j DROP
//默认写入在filter表 ,DROP 拒绝连接 -j 允许还是拒绝
iptables -nL
2.删除规则
不用 iptables -F 会把所有规则删
怎么办 精确删除规则:
iptables -t filter -D INPUT 1 // -D 删除 INPUT进来 1表示第1条规则
3.显示规则行号:
iptables -nL --line-number
4.封禁ip
首先理解:
环境:
防火墙:192.168.60.134
测试机:192.168.60.129
129 ping 134
封禁129:
iptables -t filter -I INPUT -s 192.168.60.129 -j DROP
现在129Ping134 已经out了:
如果是**-j REJECT** 会输出提示信息:
iptables -t filter -I INPUT -s 192.168.60.129 -j REJECT
屏蔽整个网段:
封禁目标ip加端口
iptables -I INPUT -p tcp -s 192.168.60.129 --dport 8888 -j DROP
指定多个端口:
使用模块: -m multiport
iptables -m multiport -I INPUT -p tcp -s 192.168.60.129 --dport 8888,22,80 -j DROP
封禁多个 有规律:–dport 1:1024**(范围的话 就不用加 -m)**
iptables -I INPUT -p tcp --dport 1:1024 -j DROP
小心 不要把自己干外面
5.限制ping ICMP:
iptables -I INPUT -p icmp -j DROP
或者直接配置文件 vim /etc/sysctl.conf
net.ipv4.icmp_echo_ignore_all = 1
sysctl -p //生效配置
最后总结:
生产环境配置推荐: