CentOS初步学习记录(七)iptables
一、前言
iptables 中文名:IP信息包过滤系统,它是一个配置 Linux 内核防火墙的命令行工具,是 netfilter 项目的一部分。术语 iptables 也经常代指该内核级防火墙。iptables 可以直接配置,也可以通过许多前端和图形界面配置。iptables 用于 ipv4,ip6tables 用于 ipv6。
iptables 是 Linux 核心网络安全的重要工具,使用前需要先启动服务。
(nftables 已经包含在 Linux kernel 3.13 中,以后会取代 iptables 成为主要的 Linux 防火墙工具。)
二、 iptables 命令
2.1 语法
iptables -t 表名 <-A/I/D/R> 规则链名 [规则号] <-i/o 网卡名> -p 协议名 <-s 源IP/源子网> --sport 源端口 <-d 目标IP/目标子网> --dport 目标端口 -j 动作
2.2 说明
1)表名
- filter:包过滤,用于存放所有与防火墙相关操作的默认表(INPUT,FORWARD,OUTPUT)
- raw:数据跟踪处理,用于配置数据包,raw 中的数据包不会被系统跟踪(PREROUTING,OUTPUT)
- nat:用于网络地址转换,例如:端口转发(PREROUTING,POSTROUTING)
- mangle:用于对特定数据包的修改(PREROUTING,INPUT,FORWARD,OUTPUT,POSTROUTING)
- security:用于强制访问控制网络规则
2)规则
- -A:追加,在当前链的最后新增一个规则
- -I num:插入,把当前规则插入为第几条
- -R num:替换/修改第几条规则(格式:iptables -R INPUT 3 ……)
- -D num:删除,明确指定删除第几条规则
3)规则链名
- INPUT链:处理输入数据包
- OUTPUT链:处理输出数据包
- PORWARD链:处理转发数据包
- PREROUTING链:用于目标地址转换(DNAT)
- POSTOUTING链:用于源地址转换(SNAT)
4)协议名
- TCP
- UDP
- ICMP
5)动作
- ACCEPT:接收数据包
- DROP:丢弃数据包
- REDIRECT:重定向、映射、透明代理
- SNAT:源地址转换
- DNAT:目标地址转换
- MASQUERADE:IP伪装(NAT),用于ADSL
- LOG:日志记录
2.3 选项
- -t<表>:指定要操纵的表
- -A:向规则链中添加条目
- -D:从规则链中删除条目
- -i:向规则链中插入条目
- -R:替换规则链中的条目
- -L:显示规则链中已有的条目
- -F:清楚规则链中已有的条目
- -Z:清空规则链中的数据包计算器和字节计数器
- -N:创建新的用户自定义规则链
- -P:定义规则链中的默认目标
- -h:显示帮助信息
- -p:指定要匹配的数据包协议类型
- -s:指定要匹配的数据包源ip地址
- -j<目标>:指定要跳转的目标
- -i<网络接口>:指定数据包进入本机的网络接口
- -o<网络接口>:指定数据包要离开本机所使用的网络接口
2.4 示例
清除所有规则
iptables -F // 清除所有已定规则 iptables -X // 清除用户自定义的链
查看规则列表
iptables -nvL -t filter --line-numbers
-v (verbose mode):代表详细模式
-n (numeric output of addresses and ports):地址和端口以数字方式输出
--line-numbers:显示行号
禁止服务器 INPUT 链的 80 端口
iptables -t filter -A INPUT -p tcp --dport 80 -j DROP
iptables -D filter -A INPUT -p tcp --dport 80 -j DROP // 清除规则
根据行号删除规则
iptables -t filter -D INPUT <line-number>
nat表转发目标地址
iptables -t nat -A PREROUTING -p tcp -d 192.168.29.135 --dport 80 -j DNAT --to-destination 192.168.29.135:9090
实现web服务的负载均衡
iptables -A PREROUTING -t nat -p tcp -d 192.168.29.135 --dport 80 -m statistic --mode random --probability 0.5 -j DNAT --to-destination 192.168.29.135:9090 iptables -A PREROUTING -t nat -p tcp -d 192.168.29.135 --dport 80 -m statistic --mode random --probability 1 -j DNAT --to-destination 192.168.29.135:9091
-m 使用扩展模块statistic,支持random (随机) 和 nth (轮训) 两种模式
--probability 设置概率,公示:probability = 1/(n-i+1)
其中n代表服务数量,i代表序号(从1开始)
基于连接数限流
iptables -A INPUT -p tcp --dport 9090 -m connlimit --connlimit-above 2 -j REJECT --reject-with tcp-reset
--connlimit-above:限制为多少个
--connlimit-mask:掩码,默认是connlimit-mask 32,即每个IP,如果设置为0,那就是所有客户端只能连n个
tcp-reset可替换为icmp-host-unreachable 、icmp-port-unreachable等值
自定义链
// 对filter表加入一个自定义链txl iptables -t filter -N txl
// 删除(必须没有被引用)
iptables -t filter -X txl
// 把filter目标为9090和9091端口的规则转给自定义链txl
iptables -t filter -A INPUT -p tcp --dport 9090:9091 -j txl
// 自定义链设置禁用9090端口
iptables -t filter -A txl -p tcp --dport 9090 -j DROP
三、将 iptables 配置保存
3.1 方法一
使用 iptables save 选项
service iptables save
2.2 方法二
使用 iptables-save 命令,需要指定保存的配置文件路径
iptables-save /etc/sysconfig/iptables
3.3 实例
开启服务器 INPUT 链的 80 端口,并保存配置:
iptables -t filter -R INPUT 1 -p tcp --dport 80 -j ACCEPT service iptables save
四、netstat 命令
netstat 是一款命令行工具,它可以显示路由表、实际的网络连接以及每一个网络接口设备的状态信息。
netstat 可用于列出系统上所有的网络套接字连接情况,包括 tcp, udp 以及 unix 套接字,另外它还能列出处于监听状态(即等待接入请求)的套接字。

4.1 基本语法
netstat [选项]
4.2 选项
- -a 或 --all:显示所有连线中的 Socket
- -A <网络类型> 或 --<网络类型>:列出该网络类型连线中的相关地址
- -c 或 --continuous:持续列出网络状态
- -C 或 --cache:显示路由器配置的快取信息
- -e 或 --extend:显示网络其他相关信息
- -F 或 --fib:显示 FIB;
- -g 或 --groups:显示多重广播功能群组组员名单
- -h 或 --help:在线帮助
- -i 或 --interfaces:显示网络界面信息表单
- -l 或 --listening:显示监控中的服务器的 Socket
- -M 或 --masquerade:显示伪装的网络连线
- -n 或 --numeric:直接使用 ip 地址,而不通过域名服务器
- -N 或 --netlink 或 --symbolic:显示网络硬件外围设备的符号连接名称
- -o 或 --timers:显示计时器
- -p 或 --programs:显示正在使用 Socket 的程序识别码和程序名称
- -r 或 --route:显示 Routing Table
- -s 或 --statistice:显示网络工作信息统计表
- -t 或 --tcp:显示 TCP 传输协议的连线状况
- -u 或 --udp:显示 UDP 传输协议的连线状况
- -v 或 --verbose:显示指令执行过程
- -V 或 --version:显示版本信息
- -w 或 --raw:显示RAW传输协议的连线状况
- -x 或 --unix:此参数的效果和指定 -A unix 参数相同
- --ip 或 --inet:此参数的效果和指定 -A inet 参数相同
4.3 实例
显示 tcp 模式运行状况:
netstat -ant
tcp 状态(state):
- LISTENING :服务启动后首先处于侦听状态
- ESTABLISHED :建立连接,表示两台机器正在通信
- CLOSE_WAIT:对方主动关闭连接或者网络异常导致连接中断
- TIME_WAIT :我方主动调用 close() 断开连接,收到对方确认后状态变为 TIME_WAIT
4.4 参考
《Linux技术——netstat命令详解》:https://blog.csdn.net/linux_ever/article/details/50775292

浙公网安备 33010602011771号