- Iptables中的4表5链
四张表:filter表、nat表、mangle表、raw表
五条链:INPUT OUTPUT FORWARD PREROUTING POSTROUTING
Filter表:访问控制、规则匹配
Nat表:地址转发 - Iptables规则组成
数据包访问控制:ACCEPT、DROP、REJECT
数据库改写:SNAT、DNAT
信息记录:LOG
组成部分:四张表 + 五条链 + 规则
解释:
-A:追加一个新规则
-D:删除规则
-L:显示规则情况
-F:清除iptables规则
-P:设置一个默认的iptables
-I:在原有规则上插入一条规则,成为第一条规则
-p tcp:协议
-s:发起源
-d:目标地址
--sport:源端口
--dport:目的端口
--dports:端口段
-m tcp:
state:
multiport:
均指端口补充- Iptables配置
场景一:
规则1:对所有的地址开放本机的tcp(80、22、10-21)端口的访问
iptables -I INPUT -p tcp --dport 80 -j ACCEPT
iptables -I INPUT -p tcp --dport 22 -j ACCEPT
iptables -I INPUT -p tcp --dports 10:21 -j ACCEPT
规则2:允许所有的地址开放本机的基于ICMP协议的数据包访问
iptables -I INPUT -P ICMP -J ACCEPT
规则3:其他未被允许的端口则禁止访问
iptables -A INPUT -j REJECT
检测端口开放情况,在其他机器使用nmap端口扫描命令检查:
nmap -sS -p 0-1000 10.10.0.100
删除开放的80端口
iptables -D INPUT -p tcp --dport 80 -j ACCEPT
禁止其他机器访问80端口
iptables -I INPUT -p tcp --dport 80 -j REJECT
iptable -nL 查看iptables设置情况
netstat -luntp | grep 80 检查端口开放情况
场景一存在的问题:
a、本机无法访问本机
b、本级无法访问其他主机
解决:
iptables -I INPUT -i lo -j ACCEPT (所有的数据包可以通过lo网卡)
iptables -I INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT (状态为ESTABLISHED,RELATED的数据包允许通过)
规则4:在场景一基础上,修改iptables,设置只允许10.10.0.101访问本机的http服务
iptables -D INPUT -p tcp --dport 80 -j ACCEPT
iptables -I INPUT -p tcp -s 10.10.0.101 --dport 80 -j ACCEPT
场景二:
要求一:在公司内部(10.10.20.0/24,10.10.30.0/24)能访问服务器上的任何服务
要求二:通过VPN链接到公司外网-->拨号到VPN服务器-->内网FTP、SAMBA、SSH、NFS
要求三:公司服务器搭建的网站允许公网访问
配置思路:
允许本地访问、开放SSH
允许已监听状态数据包通过
允许规则中允许的数据包通过
拒绝未被允许的数据包
iptables规则保存成配置文件
实施:
iptables -I INPUT -i lo -j ACCEPT
iptables -I INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -s 10.10.20.0/24 -j ACCEPT
iptables -A INPUT -s 10.10.30.0/24 -j ACCEPT
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -p tcp --dport 1723 -j ACCEPT (VPN端口)
iptables -I INPUT -P ICMP -J ACCEPT
iptables -A INPUT -j REJECT
保存iptables设置
使用命令iptables save 或者 将iptables 设置保存到shell脚本中,并设置为开机自启动- iptables 规则中SNAT规则设置
SNAT:源地址转换 出口 POSTROUTING
DNAT:目的地址转换 进口 PREROUTING
SNAT场景模拟:
- 在NatServer上配置Iptables使Client能访问weServer
修改sysctl.conf,开启net转发
vi /etc/sysctl.conf
修改 net.ipv4.ip_forward = 1 (默认为0)
使其生效
sysctl -p
iptables -t nat -A POSTROUTING -s 10.10.177.0/24 -j SNAT --to 10.10.188.232
DNAT场景模拟:
iptables -t nat -A PREROUTING -d 10.10.188.232 -p tcp --dport 80 -j DNAT --to 10.10.177.233:80
检查设置情况
iptables -t nat -nL- 利用iptables防止CC攻击
使用connlimit模块
作用:用于限制每一个客户端ip的并发连接数
参数:-connlimit-above n # 限制并发个数
iptables -I INPUT -p TCP --syn --dport 80 -m connlimit --connlimit-above 100 -j REJECT
iptables -I INPUT -p tcp --dport 80 -s 10.10.0.100 -m connlimit --connlimit-above 100 -j REJECT
使用Limit模块
作用:限速、控制流量
例如:iptables -A INPUT -m limit --limit 3/hour
--limit-burst 默认值为5
示例:
iptables -A INPUT -p icmp -m limit --limit 1/m --limit-burst 10 -j ACCEPT
iptables -A INPUT -p icmp -j DROP
Learn how to learn~~