iptables防火墙
4个功能表:raw、mangle、nat(网络地址转换)、filter(过滤);每个表都有Chain(链)
- 编辑内核配置文件,开启转发
vim /etc/sysctl.conf #设置 net.ipv4.ip_forward = 1 net.ipv4.conf.default.rp_filter=1 #即rp_filter参数有三个值,0、1、2,具体含义: #0:不开启源地址校验。 #1:开启严格的反向路径校验。对每个进来的数据包,校验其反向路径是否是最佳路径。如果反向路径不是最佳路径,则直接丢弃该数据包。 #2:开启松散的反向路径校验。对每个进来的数据包,校验其源地址是否可达,即反向路径是否能通(通过任意网口),如果反向路径不同,则直接丢弃该数据包。 #开启rp_filter参数的作用 #1. 减少DDoS攻击 #校验数据包的反向路径,如果反向路径不合适,则直接丢弃数据包,避免过多的无效连接消耗系统资源。 #2. 防止IP Spoofing #校验数据包的反向路径,如果客户端伪造的源IP地址对应的反向路径不在路由表中,或者反向路径不是最佳#路径,则直接丢弃数据包,不会向伪造IP的客户端回复响应。 #使内核生效 sysctl -p
- 查看filter表
iptables -t filter -nvL #每1秒查看变化 watch -n1 iptables -t filter -nvL
iptables的filter表(包过滤)基本语法
-
语法构成
iptables [-t 表名] 选项 [链名] [条件] [-j 控制类型] #如:阻止ping测试 [root@localhost~]iptables -t filter -I INPUT -p icmp -j REJECT [root@localhost~]iptables -I FORWARD -s 0.0.0.0/0 -d 0.0.0.0/0 -j DROP
几个注意事项
- 不指定表名时,默认指filter表
- 不指定链名时,默认指表内的所有链
- 除非设置链的默认策略,否则必须指定匹配条件
- 选项、链名、控制类型使用大写字母,其余均为小写
数据包常用控制类型
- ACCEPT:允许通过
- DROP:直接丢弃,不给出任何回应
- REJECT:拒绝通过,必要时会给出提示
- LOG:记录日志信息,然后传给下一条规则继续匹配
添加新的规则
-A:在链的末尾追加一条规则
-I:在链的开头(或指定序号)插入一条规则
[root@localhost~]iptables -t filter -A INPUT -p tcp -j ACCEPT [root@localhost~]iptables -I INPUT -p udp -j ACCEPT [root@localhost~]iptables -I INPUT 2 -p icmp -j ACCEPT #-p用来指定协议
查看规则列表
-L:列出所有规则条目
-n:以数字形式显示地址、端口等信息
-v:以更详细的方式显示规则信息
--line-numbers:查看规则时,显示规则的序号
[root@localhost~]iptables -t filter -nvL --line-numbers
删除、清空规则
-D:删除链内指定序号(或内容)的一条规则
-F:清空所有规则
[root@localhost~]iptables -D INPUT 3 [root@localhost~]iptables -n -L INPUT [root@localhost~]iptables -F [root@localhost~]iptables -t nat -F [root@localhost~]iptables -t mangle -F [root@localhost~]iptables -t raw -F
设置默认策略
-P:为指定的链设置默认规则
[root@localhost~]iptables -t filter -P FORWARD DROP [root@localhost~]iptables -P OUTPUT ACCEPT #默认策略要么时ACCEPT,要么是DROP
规则匹配条件
通用匹配
可直接使用,不依赖于其他条件或扩展
包括网络协议、IP地址、网络接口等条件
隐含匹配
要求以特定的协议匹配作为前提
包括端口、TCP标记、ICMP类型等条件
显式匹配
要求以“-m扩展模块”的形式明确指出类型
包括多端口、MAC地址、IP范围、数据包状态等条件
常用的通用匹配条件
协议匹配:-p 协议名
地址匹配:-s 源地址(0.0.0.0/0) -d 目的地址(0.0.0.0/0)
接口匹配:-i 入站网卡 -o 出站网卡
[root@localhost~]iptables -I INPUT -p icmp -j DROP [root@localhost~]iptables -A FORWARD ! -p icmp -j ACCEPT [root@localhost~]iptables -A FORWARD -s 192.168.1.11 -j REJECT [root@localhost~]iptables -I INPUT -s 10.20.30.0/24 -j DROP [root@localhost~]iptables -A INPUT -i eth1 -s 192.168.0.0/16 -j DROP
常用的隐含匹配条件
端口匹配:--sport 源端口 --dport 目的端口
TCP标记匹配:--tcp-flags 检查范围 被设置的标记
ICMP类型匹配:--icmp-type ICMP类型
[root@localhost~]iptables -A FORWARD -s 192.168.4.0/24 -p udp --dport 53 -j ACCEPT [root@localhost~]iptables -A INPUT -p tcp --dport 20:21 -j ACCEPT [root@localhost~]iptables -A INPUT -p icmp --icmp-type 8 -j DROP #8请求 [root@localhost~]iptables -A INPUT -p icmp --icmp-type 0 -j ACCEPT #0回显 [root@localhost~]iptables -A INPUT -p icmp --icmp-type 3 -j ACCEPT #3不可达 [root@localhost~]iptables -A INPUT -p icmp -j DROP
常用的显式匹配条件
多端口匹配:-m multiport --sport 源端口列表 /-m multiport --dport 目的端口列表
IP范围匹配:-m iprange --src-range IP范围
MAC地址匹配:-m mac --mac-source MAC地址
状态匹配:-m state --state 连接状态
[root@localhost~]iptables -A INPUT -p tcp -m multiport --dport 25,80,110,143 -j ACCEPT [root@localhost~]iptables -P INPUT DROP [root@localhost~]iptables -A INPUT -p tcp -m multiport --dport 80 -j ACCEPT [root@localhost~]iptables -A INPUT -p tcp -m state --state ESTABLISHED -j ACCEPT [root@localhost~]service vsftpd start [root@localhost~]ss -antpl |grep 21 #查看端口是否打开
iptables自定义链增加和删除
#新建一条自定义链SSAUDIT
iptables -t filter -N SSAUDIT
#删除自定义链
iptables -t filter -D OUTPUT -j SSAUDIT
iptables -t filter -F SSAUDIT
iptables -t filter -X SSAUDIT
Debian下保存iptables服务器防火墙规则
CentOS下,能够 根据service iptables save立即保存;假如未设置开机运行,可应用chkconfig –level 345 iptables on设置
文中的思路很简单,就是说根据建立自启动脚本制作修复以前的iptables设置
-
保存iptables目前规则到/etc/iptables.up.rules
[root@localhost~]iptables-save > /etc/iptables.up.rules
-
创建开机启动载入文档/etc/network/if-pre-up.d/iptables
[root@localhost~]vi /etc/network/if-pre-up.d/iptables
键入以下几点
#!/bin/bash /sbin/iptables-restore < /etc/iptables.up.rules
-
让文档具有实行管理权限
chmod +x /etc/network/if-pre-up.d/iptables
iptables的nat表(网络地址转换)
有3个Chain:PREROUTING(路由前位置规则)、POSTROUTING(路由后位置规则)、OUTPUT(输出)
- snat源地址转换(内网主机访问外网服务器)
[root@localhost~]iptables -F FORWARD #清除转发规则限制,允许所有数据转发 [root@localhost~]iptables -t nat -A POSTROUTING -p tcp -o eth1 -s 192.168.1.0/24 -j SNAT --to-source 12.34.56.78 [root@localhost~]ifdown eth1 [root@localhost~]ifup eth1 //如果网关IP(12.34.56.78)不固定,可以使用以下规则 [root@localhost~]iptables -t nat -A POSTROUTING -p tcp -o eth1 -s 192.168.1.0/24 -j MASQUERADE #伪装 [root@localhost~]iptables -t nat -D POSTROUTING 1
- dnat目标地址转换(外网主机访问内网服务器)
[root@localhost~]iptables -t nat -A PREROUTING -i eth1 -d 12.23.56.80 -p tcp --dport 80 -j DNAT --to-destination 192.168.1.1:8080
本作品采用 知识共享署名-相同方式共享 4.0 国际许可协议 进行许可。