# iptables
https://www.frozentux.net/iptables-tutorial/cn/iptables-tutorial-cn-1.1.19.html
# 安装
- CentOS 7系统,需要关闭firewalld装回iptables.
# 关闭firewalld服务
systemctl stop firewalld.service
systemctl disable firewalld.service
# 查看firewall状态
sudo systemctl status firewalld
# 检查iptables是否安装
sudo systemctl status iptables
# 安装iptables
# sudo yum install -y iptables
# 升级iptables
# sudo yum update iptables
# 安装iptables-services
sudo yum install -y iptables-services
systemctl start iptables.service
systemctl enable iptables.service
- 开启系统的转发功能
$ vi /etc/sysctl.conf
# net.ipv4.ip_forward = 1
$ sysctl -p
# CentOS 7
$ echo 'net.ipv4.ip_forward = 1' >> /usr/lib/sysctl.d/50-default.conf
$ sysctl -p /usr/lib/sysctl.d/50-default.conf
# 查看启动结果
$ sysctl net.ipv4.ip_forward
# 如果已经启动则显示
> net.ipv4.ip_forward = 1
# 临时开启转发能力
echo 1 > /proc/sys/net/ipv4/ip_forward
systemctl restart network.service
- 基本操作
# 查看iptables现有规则
iptables -L -v -n --line-number
# 清空所有默认规则
iptables -F
# 清空所有自定义规则
iptables -X
# 所有计数器归0
iptables -Z
# 删除INPUT中的第5个
iptables -D INPUT 5
- iptables 配置文件
# 通过命令行改变iptables是临时的,永远改变iptables需要在/etc/sysconfig/iptables中写入配置
# 备份当前规则
iptables-save > iptables.rules
# 将备份的规则还原
iptables-restore iptables.rules
# 保存当前规则
/usr/libexec/iptables/iptables.init save
service iptables save
# 规则分类(表)
filter表:负责过滤功能,防火墙;内核模块:iptables_filter
nat表:network address translation,网络地址转换功能;内核模块:iptable_nat
mangle表:拆解报文,做出修改,并重新封装 的功能;iptable_mangle
raw表:关闭nat表上启用的连接追踪机制;iptable_raw
# 处理动作
ACCEPT:允许数据包通过。
DROP:直接丢弃数据包,不给任何回应信息,这时候客户端会感觉自己的请求泥牛入海了,过了超时时间才会有反应。
REJECT:拒绝数据包通过,必要时会给数据发送端一个响应的信息,客户端刚请求就会收到拒绝的信息。
SNAT:源地址转换,解决内网用户用同一个公网地址上网的问题。
MASQUERADE:是SNAT的一种特殊形式,适用于动态的、临时会变的ip上。
DNAT:目标地址转换。
REDIRECT:在本机做端口映射。
LOG:在/var/log/messages文件中记录日志信息,然后将数据包传递给下一条规则,也就是说除了记录以外不对数据包做任何其他操作,仍然让下一条规则去匹配。
# 应用
中转
iptables -t nat -A PREROUTING -p tcp -d [本地服务器IP] --dport [端口号] -j DNAT --to-destination [目标IP:目标端口号]
iptables -t nat -A PREROUTING -p udp -d [本地服务器IP] --dport [端口号] -j DNAT --to-destination [目标IP:目标端口号]
iptables -t nat -A POSTROUTING -p tcp -d [目标IP] --dport [目标端口号] -j SNAT --to-source [本地服务器IP]
iptables -t nat -A POSTROUTING -p udp -d [目标IP] --dport [目标端口号] -j SNAT --to-source [本地服务器IP]
开放端口
dport 目的端口, sport 来源端口
iptables -A INPUT -p tcp -m multiport --dport 17000,17500,20000:30000 -j ACCEPT
iptables -A OUTPUT -p tcp -m multiport --sport 17000,17500,20000:30000 -j ACCEPT
端口重定向
iptables -t nat -A PREROUTING -p udp --dport 53 -j REDIRECT --to-ports 5353
iptables -t nat -A PREROUTING -p tcp --dport 53 -j REDIRECT --to-ports 5353
限制并发连接数
iptables -I INPUT -p tcp --syn --dport 8081 -m connlimit --connlimit-above 2 --connlimit-mask 0 -j DROP