# Shell命令 » 硬件·内核·监测 » iptables
iptables
命令是 Linux
上常用的防火墙软件,是 netfilter
项目的一部分。可以直接配置,也可以通过许多前端和图形界面配置。
通过 iptables
搭建的防火墙规则可以实现:
防攻击
数据包转发
等等..
iptables 中的4表5链
4张表:
filter
:一般的过滤功能nat
:用于nat功能(端口映射,地址映射等)mangle
:用于对特定数据包的修改raw
:有限级最高,设置raw时一般是为了不再让iptables做数据包的链接跟踪处理,提高性能
注:表的处理优先级:raw > mangle > nat > filter
5条链:
PREROUTING
:数据包进入路由表之前INPUT
:通过路由表后目的地为本机-
FORWARDING
:通过路由表后,目的地不为本机 -
OUTPUT
:由本机产生,向外转发 -
POSTROUTIONG
:发送到网卡接口之前。如下图数据包的流向:
iptables
规则的组成部分:
场景练习
# 开放(80、22、10-21)端口的访问,允许ICMP协议的数据包,禁止其它未被允许的端口。
iptables -F
iptables -I INPUT -i lo -j ACCEPT # 允许本机访问本机
iptables -I INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT # 允许本机访问外部网络
iptables -I INPUT -p tcp --dport 80 -j ACCEPT
iptables -I INPUT -p tcp --dport 10:21 -j ACCEPT
iptables -I INPUT -p tcp --dport 22 -j ACCEPT
iptables -I INPUT -p icmp -j ACCEPT
iptables -A INPUT -j REJECT
# iptables -L INPUT --line-numbers # 列出INPUT 链所有的规则
# iptables -D INPUT 2 # 删除第 2 行规则
# 只允许某台或部分主机访问80端口
iptables -D INPUT -p tcp --dport 80 -j ACCEPT # 清除本条规则
iptables -I INPUT -p tcp -s 10.10.1.123 --dport 80 -j ACCEPT
iptables -I INPUT -p tcp -s 10.10.1.0/24 --dport 80 -j ACCEPT
# 常见对外的端口服务:
网站 www
http 80/tcp
https 443/tcp
邮件 mail
smtp 25/tcp
smtps 465/tcp
pop3 110/tcp
pop3s 995/tcp
imap 143/tcp
# 常见不对外的端口服务:
文件服务
NFS 123/udp
SAMBA 137,138,139/tcp 445/tcp
FTP 20/tcp, 21/tcp
远程管理
SSH 22/tcp
数据库
MYSQL 3306/tcp
ORACLE 1521/tcp
iptables NAT模式设置
分类 | 功能 | 作用链 |
---|---|---|
SNAT | 源地址转换 | 出口POSTROUTING |
DNAT | 目标地址转换 | 进口PREROUTING |
# vim /etc/sysctl.conf
net.ipv4.ip_forward = 1 # 打开端口转发内核功能
# sysctl -p # 使配置生效
# sysctl -a | grep ip_forward # 查看配置是否生效
# snat配置
iptables -t nat -A POSTROUTING -s 10.10.177.0/24 -j SNAT --to 10.10.188.132
# dnat配置
iptables -t nat -A PREROUTING -d 10.10.188.123 -p tcp --dport 80 -j DNAT --to 10.10.177.123:8080
# 查看nat表的规则
iptables -t nat -L
iptables 防CC攻击
## 防止 SYN 攻击
iptables -I INPUT -p tcp --syn --dport 80 -m connlimit --connlimit-above 100 -j REJECT
## 防止 DDOS 攻击
# 并发请求限制
iptables -I INPUT -p tcp --dport 80 -s 10.10.10.1 -m connlimit --connlimit-above 10 -j REJECT
# limit模块,限速控制异常流量
iptables -A INPUT -p icmp -m limit --limit 3/hour --limit-burst 10 -j ACCEPT
iptables -A INPUT -p icmp -j REJECT