# 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