IPTableds
一、IPTables防火墙介绍
1. 五张表
表主要用于将不同的规则存储在不同的表中
- filter表:默认表,负责过滤数据包,使用频率最高
- nat表:用于网络地址转换(IP、端口)和流量转发,使用频率较低
- mangle表:主要应用在修改数据包、流量整形、给数据包打标识
- raw表:这个表很少被用到,主要用于配置连接跟踪相关内容,使用频率较少
- security表:这个表用于安全linux的防火墙规则,是iptables最近的新增表,使用频率较少
2. 五条链
流量的方向
- input:匹配目标IP是本机的数据包,入站
- output:出口数据包,出站
- forward:匹配流经本机的数据包,转发
- prerouting:修改目的地址,用来作DNAT。如:把内网中的80端口映射到互联网端口
- postrouting:修改源地址,用来做SNAT。如:局域网共享一个公用IP接入Internet
3. 规则
- 基于防火墙策略设置的各类防护规则,防火墙规则的执行顺序认为从前到后一次执行,遇到匹配的规则就不再继续向下检查,如果遇到不匹配的规则则会继续向下进行。
二、安装与配置IPTables
systemctl stop firewalld
firewalld默认在没有设定规则的情况下,是拒绝所有流量,而iptables默认没有设定规则的情况下,允许所有流量
yum install iptables iptables-services
三、基本命令使用
iptables -nL:将端口号以数字的形式显示默认表filrter中的规则
iptables -I INPUT -j DROP:所有入站流量全部丢弃,包括SSH请求
iptables -I OUTPUT -j DROP:所有出站流量全部丢弃,包括SSH响应
上述两条命令一旦执行,所有流量无法进来也无法出去,断网状态
iptables -A INPUT -j DROP
iptables -A OUTPT -j DROP
iptables -I INPUT -p tcp --dport 22 -j ACCEPT :打开目标端口22,接收流经该端口的流量
iptables -I INPUT -p tcp --dport 80 -j ACCEPT
iptables -I INPUT -p tcp -m multipiort --dprts 22,80,443 -j ACCEPT
iptables -I INPUT -p icmp -j DROP
iptables -I INPUT -p icmp -j REJRCT
iptables -I OUTPUT -p icmp -j DROP
DROP:直接丢弃数据包,不会向源端做任何回复
REJRCT:拒绝接收数据包,并向源端发送拒绝响应
iptables -I INPUT -p icmp --icmp-type echo-request -j DROP
iptables -I INPUT -p icmp --icmp-type echo-request -j REJECT
iptables -I INPUT 1 -p icmp --icmp-type echo-reply -j DROP
iptables -L INPUT --line-numbers
iptables -D INPUT 1
iptables -F:清空规则
sercvice iptables save:保存规则
cat /etc/sysconfig/iptables:保存在这个文件中
#允许本地访问外部IP地址和端口号,通过设定白名单的方式可以防止本机去访问别的服务器
#通过这种场景设置,可以最大可能避免反弹SHELL和挖矿程序去试图通过本机访问目标服务器下载恶意程序或执行恶意指令。
iptables -I INPUT -i ens33 -p tcp -s 192.168.112.153 --sport 80 -j ACCEPT
iptables -I OUTPUT -o ens33 -p tcp -d 192.168.112.153 --dport 80 -j ACCEPT
#防止DDOS攻击,设定一些数据的限制条件
iptables -A INPUT -p tcp --dport 80 -m limit --limit 25/minute --limit-burst 100 -j ACCEPT
#可以同时设定多个端口被允许
iptables -I INPUT -p tcp -m multiport --dport 80,22,443 -j ACCEPT
#端口转发(第一种:本机端口转发,比如80端口对外封闭,开放一个45692供外部访问,外部只知道45692,不知道80,可以避免协议猜测;第二种:远程端口转发,把本机接收到的请求转发到远程电脑和对应端口上,远程可以是本地局域网,也可以是公网服务器)
#本机端口转发:
iptables -t nat -A PREROUTING -p tcp --dport 7777 -j REDIRECT --to-port 80
#远程端口转发:
#需要确保端口转发功能是启用的
vi /etc/sysctl.conf
net.ipv4.ip_forard = 1
sysctl -p /etc/sysctl.conf
#PREROUTING上访问8888时,转发给目标服务器和目标端口
#PREROUTING是先于FILTER执行的,所以不需要转发时允许8888端口ACCEPT
iptables -t nat -A PREROUTING -d 192.168.112.188 -p tcp --dport 8888 -j DNAT --to-destination 192.168.112.153:8088
iptables -t nat -A POSTROUTING -d 192.168.112.153 -p tcp --dport 8088 -j SNAAT --to 192.168.112.188
四、命令参数
参数 | 说明 | 示例 |
---|---|---|
-F | 清空规则链 | iptables -F |
-L | 查看规则链 | iptables -L |
-A | 追加规则 | iptables -A INPUT |
-D | 删除规则 | iptables -D INPUT 1 |
-R | 修改规则 | iptable -R INPUT 1 -s 192.168.120.0 -j DROP |
-I | 在头部插入规则 | iptables -I INPUT 1 --dport 80 -j ACCEPT |
-L | 查看规则 | iptables -L INPUT |
-N | 新的规则 | iptables -N allowed |
-V | 查看iptables版本 | iptables -V |
-p | 协议(tcp/udp/icmp) | iptables -A INPUT -p tcp |
-s | 匹配原地址,加" ! "表示除这个IP外 | 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 | 要进行的处理动作:DROP(丢弃),REJECT(拒绝),ACCEPT(接受),SANT(基于原地址的转换) | iptable -A INPUT 1 -s 192.168.120.0 -j DROP |
--to-source | 指定SANT转换后的地址 | iptables -t nat -A POSTROUTING -s 192.168.10.0/24 -j SANT --to-source 172.16.100.1 |
-t | 表名(raw、mangle、nat、filter) | iptables -t nat |
-m | 使用扩展模块来进行数据包的匹配(multiport/tcp/state/addrtype) | iptables -m multiport |
五、功能总结
- 常用的两张表:filter,nat,filter用于过滤数据包,nat用于路由转发功能
- 常用两条链:INPUT、OUTPUT
- 常见的三个行为:ACCEPT、DROP、REJECCT
- 限制流量的三个特征:端口、协议、IP 对应的五元组:-d -s --dport --sport -p
- 端口转发:本机端口、远程端口