赞
踩
yum install -y iptables-services.x86_64
iptables的表和链。我们只关心nat表和filter表。filter表是默认的表,它实现防火墙,也就是包过滤的功能。nat表实现网络地址转换
配置iptables时,不指定表,就是使用filter表
配置时不指定规则链,则配置所有链
可以向规则链中加入很多规则,数据包进入该链时,从上向下匹配,一旦匹配就停止,开始应用规则。如果全都不匹配,则应用默认规则
命令选项、链名、目标操作使用大写字母,其他小写
INPUT:数据包的目标地址是自己,则进入INPUT链
OUTPUT:数据包的源地址是自己,则进入OUTPUT链
FORWARD:数据包穿过自己,则进入FORWARD链
PREROUTING:数据包刚到达本机,主要负责转换数据包中的目标IP地址,通常用于目的地址转换(DNAT,Destination NAT)
POSTROUTING:即将离开本机的数据包,主要负责转换数据包中的源IP地址,通常用于源地址转换(SNAT,Source NAT)
OUTPUT:这条链处理本机产生的数据包
常用选项-------------------------------------------------- iptables -A INPUT # -A 追加规则 iptables -D INPUT 1(编号) # -D 删除规则 iptables -R INPUT 1 -s 192.168.12.0 -j DROP 取代现行规则,顺序不变(1是位置) # -R 修改规则 iptables -I INPUT 1 --dport 80 -j ACCEPT 插入一条规则,原本位置上的规则将会往后移动一个顺位 # -I 插入规则 iptables -L INPUT 列出规则链中的所有规则 # -L 查看规则 通用参数-------------------------------------------------- -t 指定表名 例:iptables -t filter -L -p 协议 例:iptables -A INPUT -p tcp -s 源地址 例:iptables -A INPUT -s 192.168.1.1 -d 目的地址 例:iptables -A INPUT -d 192.168.12.1 --sport 源端口 例:iptables -A INPUT -p tcp --sport 22 --dport 目的端口 例:iptables -A INPUT -p tcp --dport 22 -i 指定入口网卡 例:iptables -A INPUT -i eth0 -o 指定出口网卡 例:iptables -A FORWARD -o eth0 -j 指定要进行的处理动作 常用的ACTION: DROP:丢弃 REJECT:明示拒绝 ACCEPT:接受 -m 引入扩展模块 state 模块用于跟踪数据包的状态 multiport 多端口 aec-range 源地址范围 dst-range 目标地址范围
iptables -nL # 查询filter表的规则(不指定表默认就是filter表)
iptables -nL INPUT # 查询filter表的INPUT链
iptables -t nat -nL # 查询nat表的规则
iptables -nL INPUT --line-numbers # 查看规则的行号
iptables -D INPUT 2 # 清空第2条规则(先要查询规则的行号)
iptables -F # 清空规则
iptables -P INPUT DROP # 将filter表的INPUT链的默认规则改为丢弃
iptables -R INPUT 2 -s 192.168.1.8 -p tcp --dport 10050 -j REJECT # 修改filter表的INPUT链的第2条规则
# 允许.1.8主机使用tcp协议访问本机的22端口 (ssh远程连接)
iptables -A INPUT -s 192.168.1.8 -p tcp --dport 22 -j ACCEPT
# 允许.1.8主机使用tcp协议访问本机的10050端口(zabbix监控)
iptables -I INPUT 2 -s 192.168.1.8 -p tcp --dport 10050 -j ACCEPT
iptables-save > /etc/sysconfig/iptables
如果不保存,重启之后规则就会消失
我都已经保存了规则,为什么重启之后,规则依然消失
原因:RHEL 7 及以上版本等,iptables
通常不再作为一个单独的服务来运行,无法使用systemctl来管理;需要手动加载
iptables-restore < /etc/sysconfig/iptables
为了让这些规则在系统启动时自动加载,可以将上述命令添加到初始化脚本中,比如 /etc/rc.d/rc.local
echo "iptables-restore < /etc/sysconfig/iptables" >> /etc/rc.d/rc.local
chmod +x /etc/rc.d/rc.local # 确保文件具有执行权限
[root@nfs ~]# iptables -t filter -nL
Chain INPUT (policy DROP)
target prot opt source destination
ACCEPT tcp -- 192.168.1.8 0.0.0.0/0 tcp dpt:22
ACCEPT tcp -- 192.168.1.8 0.0.0.0/0 tcp dpt:10050
ACCEPT all -- 192.168.1.11 0.0.0.0/0
ACCEPT all -- 192.168.1.12 0.0.0.0/0
Chain FORWARD (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
目前只给1.8放行了两个端口,是无法ping 通的
从自身发出去的数据,返回来的数据包属于某个连接,该连接的状态是ESTABLISHED,放行该状态的数据包即可
ESTABLISHED 表示已经建立的连接
iptables -I INPUT -m state --state ESTABLISHED -j ACCEPT
-m state
: -m
参数用于加载扩展模块,state
模块用于跟踪数据包的状态。
--state ESTABLISHED
: 这个选项指定了数据包的状态为 ESTABLISHED
。ESTABLISHED
状态表示数据包属于一个已经建立的连接。
[root@nfs ~]# iptables -t filter -nL INPUT
Chain INPUT (policy DROP)
target prot opt source destination
ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 state ESTABLISHED
ACCEPT tcp -- 192.168.1.8 0.0.0.0/0 tcp dpt:22
ACCEPT tcp -- 192.168.1.8 0.0.0.0/0 tcp dpt:10050
ACCEPT all -- 192.168.1.11 0.0.0.0/0
ACCEPT all -- 192.168.1.12 0.0.0.0/0
可以通ping -c4 192.168.1.8 来测试,反过来,拿1.8 ping 当前主机依然是不行的
提示:ping命令使用的是ICMP协议
# 默认拒绝所有数据包通过
iptables -P FORWARD DROP
# 源地址是192.168.99.0/24,目标地址是192.168.88.0/24的包,放行
iptables -A FORWARD -s 192.168.99.0/24 -d 192.168.88.0/24 -j ACCEPT
# 源地址是192.168.88.0/24,目标地址是192.168.99.0/24的包,且协议是icmp的包放行
iptables -A FORWARD -s 192.168.88.0/24 -d 192.168.99.0/24 -p icmp -j ACCEPT
# -m是引入扩展模块,multiport多端口,22、80、443,100-120端口范围
iptables -A FORWARD -p tcp -m multiport --dport 22,80,443,100:120 -s 192.168.88.0/24 -j ACCEPT
# 拒绝192.168.88.10-192.168.88.20访问192.168.99.50-192.168.99.150
# -m是引入扩展模块,src-range是源地址范围,dst-range目标地址范围
iptables -I FORWARD -m iprange --src-range 192.168.88.10-192.168.88.20 --dst-range 192.168.99.50-192.168.99.150 -j REJECT
# 向nat表中的POSTROUTING链添加规则。将源地址192.168.88.0/24转换成它外网卡地址。
iptables -t nat -A POSTROUTING -s 192.168.88.0/24 -j MASQUERADE
iptables -t nat -nL
MASQUERADE 对源地址进行伪装
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。