iptables 配置
目录
1. 基本概念
-
五个基本规则链条:
1. PREROUTING(路由前) 2. INPUT(数据包流入口) 3. FORWARD(转发关卡) 4. OUTPUT(数据包出口) 5. POSTOUTING(路由后)
-
规则表
1. raw 表: 是否跟踪 OUTPUT,PREROUTING 2. mangle 表: 修改报文原数据 PREROUTING,INPUT,FORWARD,OUTPUT,POSTROUTING 3. nat 表: 定义地址转换 PREROUTING,OUTPUT,POSTROUTING 4. filter 表: 定义允许或者不允许 INPUT,FORWARD,OUTPUT
-
iptables 命令中常见的控制类型:
1. ACCEPT: 允许通过 2. LOG: 记录日志信息,然后传给下一条规则继续匹配 3. REJECT: 拒绝通过,必要时会给出提示 4. DROP: 直接丢弃,不给出任何回应
-
iptables 命令:
# iptables [-t table] command match -j target
-
iptables 的基本参数:
参数 作用 command -P 设置默认策略: iptables -P INPUT (DROP|ACCEPT) -F 清空规则链 -L 查看规则链 -A 在规则链的末尾加入新规则 -D num 删除某一条规则 match -s 匹配来源地址 IP/MASK,加叹号"!"表示除这个 IP 外。 -d 匹配目标地址 -i 网卡名称 匹配从这块网卡流入的数据 -o 网卡名称 匹配从这块网卡流出的数据 -p 匹配协议,如 tcp,udp,icmp --dport num 匹配目标端口号 --sport num 匹配来源端口号
2. 配置步骤
1. 关闭 firewall
# systemctl stop firewalld.service ## 停止 firewall
# systemctl disable firewalld.service ## 禁止 firewall 开机启动
# systemctl mask --now firewalld ## 在不完全卸载的情况下,彻底禁用,可防止自启动
# systemctl list-unit-files | grep mask ## 查看被 mask 的服务
2. 安装 iptables 防火墙
# yum install iptables-services ## 安装
filter 表:
3. 清空已有规则
# iptables -F
# iptables -X
# iptables -Z
4. 设置默认访问规则
# iptables -P INPUT DROP ## 默认为丢弃
# iptables -P FORWARD DROP ## 默认为丢弃
# iptables -P OUTPUT ACCEPT ## 默认为通过
5. 配置允许 SSH 登录端口进入
# iptables -A INPUT -p tcp --dport 22 -j ACCEPT
# iptables -A OUTPUT -p tcp --sport 22 -j ACCEPT
6. 允许所有的 ping 操作
# iptables -A INPUT -p icmp -j ACCEPT
# iptables -A OUTPUT -p icmp -j ACCEPT
7. 允许本机 IO 通信
# iptables -A INPUT -i lo -p all -j ACCEPT
# iptables -A OUTPUT -o lo -p all -j ACCEPT
8. 开放特定的端口
# iptables -A INPUT -p tcp --dport 80 -j ACCEPT
# iptables -A INPUT -p tcp --dport 443 -j ACCEPT
9. 开启转发功能
# iptables -A FORWARD -i eth0 -o eth1 -m state --state RELATED,ESTABLISHED -j ACCEPT
# iptables -A FORWARD -i eth1 -o eh0 -j ACCEPT
10. 丢弃坏的 TCP 包
# iptables -A FORWARD -p TCP ! --syn -m state --state NEW -j DROP
11. 处理 IP 碎片数量,防止攻击,允许每秒100个
# iptables -A FORWARD -f -m limit --limit 100/s --limit-burst 100 -j ACCEPT
12. 设置 ICMP 包过滤,允许每秒1个包,限制触发条件是10个包
# iptables -A FORWARD -p icmp -m limit --limit 1/s --limit-burst 10 -j ACCEPT
nat 表:
13. 清空nat表
# iptables -F -t nat
# iptables -X -t nat
# iptables -Z -t nat
14. 添加规则
。。。
15. 允许所有已经建立的和相关的连接(必须配置否则 httpd 无法连接)
# iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
# iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
16. drop 非法连接
# iptables -A INPUT -m state --state INVALID -j DROP
# iptables -A OUTPUT -m state --state INVALID -j DROP
# iptables -A FORWARD -m state --state INVALID -j DROP
17. 保存配置
# service iptables save (# /etc/rc.d/init.d/iptables save)
# systemctl reload iptables ## 重新加载配置
18. 重启
# systemctl restart iptables
19. 设置开机自启动
# systemctl enable iptables
3. 管理
1. 查看本机 iptables 配置情况
# iptables -L -n ## 查看本机 iptables 设置情况
# iptables -L INPUT ## 查看 filter 表中 INPUT 链的规则
# iptables -D INPT 5 ## 删除 filter 表中 INPUT 链的第5条规则
2. 查看本机 nat 配置情况
# iptables -t nat -L
3. 打开 iptables 配置文件
# vi /etc/sysconfig/iptables
4. 查看端口监听状态
# netstat -tulpn | less
4. 配置文件
# vi /etc/sysconfig/iptables
1 # Generated by iptables-save v1.4.21 on Thu Aug 9 09:44:27 2018
2 *filter
3 :INPUT DROP [0:0]
4 :FORWARD DROP [0:0]
5 :OUTPUT ACCEPT [2071:305437]
6 -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
7 -A INPUT -p icmp -j ACCEPT
8 -A INPUT -i lo -j ACCEPT
9 # -A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
10 -A INPUT -p tcp -m state --state NEW -m tcp --dport 7777 -j ACCEPT
11 -A INPUT -p tcp -m state --state NEW -m tcp --dport 80 -j ACCEPT
12 -A INPUT -p tcp -m state --state NEW -m tcp --dport 443 -j ACCEPT
17 -A INPUT -p tcp -m state --state New -m tcp --dport 2121 -j ACCEPT
18 -A INPUT -p udp -m state --state NEW -m udp --dport 4444 -j ACCEPT
19 -A INPUT -j REJECT --reject-with icmp-host-prohibited
20 -A INPUT -p icmp -j ACCEPT
21 -A FORWARD -j REJECT --reject-with icmp-host-prohibited
26 -A OUTPUT -p tcp -m tcp --sport 4444 -j DROP