Iptables:数据包过滤软件

iptables的表格(table)和链(chain)

Filter:管理本机进出
NAT:管理后端主机(防火墙内部的计算机)
Mangle:管理特殊标志使用的

iptable命令
-t:后面接table,例如nat或filter,省略此,默认filter
-L:列出目前的table的规则
-n:不进行IP与HOSTNAME的反查,显示信息的速度会快很多
-v:列出更多的信息,包裹通过该规则的数据包总位数、相关的网络接口等
-F:清除已经制定的规则
-X:除掉所有用户“自定义”的chain(应该说说是tables)
-Z:将所有Chain的技术与流量统计都归零

-A:新增一条规则,该规则增加在规则地最后面
-I:新增一条规则,该规则插入变成第一条规则
-P:添加一条默认的规则

iptables-save列出完整的防火墙规则,只是并没有格式化输出

例如:iptables -t nat -L -n

iptables -L -n

Chain INPUT (policy ACCEPT)
target prot opt source destination
ANTI_DDOS all -- 0.0.0.0/0 0.0.0.0/0

Chain FORWARD (policy ACCEPT)
target prot opt source destination

Chain OUTPUT (policy ACCEPT)
target prot opt source destination

Chain ANTI_DDOS (1 references)
target prot opt source destination
DROP all -- 61.151.186.141 0.0.0.0/0
DROP all -- 119.147.32.254 0.0.0.0/0
DROP all -- 180.153.160.14 0.0.0.0/0
每一个Chain就是链,Chain哪一行括号里面的policy就是默认的策略

  • target代表进行的操作,ACCEPT是放行,REJECT就是拒绝,DROP就是丢弃
  • prot:代表使用的数据包协议,主要有TCP、UDP及ICMP3种数据包格式
  • opt:额外的选项说明
  • source:此规则根据那个来源IP进行限制
  • destination:此规则针对哪个目标IP进行限制

慕课网教程

Netfilter 是linux操作系统核心层内部的一个数据包处理模块
iptables 组成部分:四张表+五条链(Hook point)+规则
filter表 nat表 mangle表 raw表
Filter表:访问控制,规则匹配
Nat表:地址转发

-s 发起源
-d 目标地址
--sport 源端口
--dport 目标端口
--dsports 端口段
数据包访问控制:accept(通过),drop(丢弃),rject(丢弃,有消息返回)
数据包改写:snat(修改源地址),dnat(修改目标地址)
信息记录:log
iptables -L 列出设置的规则
iptables -nL -n:以数字的方式显示ip,它会将ip直接显示出来,如果不加-n,则会将ip反向解析成主机名。
iptables -F 清除以前设置的规则 -I 插入一条规则

命令的基本格式

命令:iptables -t 四张表中的任意一张 command 五条连 参数 -j 数据的处理

iptables -I INPUT -p tcp --dport 80 -j ACCEPT
插入一条规则,接受允许tcp端口为80的机器访问
iptables -I INPUT -p tcp --dport 80 -j REJECT
插入一条规则,拒绝tcp端口为80的机器访问

22 80 10:20 # 10到20的端口

iptables -I INPUT -p icmp -j ACCEPT 允许所有icmp端口允许访问本机
iptables -A INPUT -j REJECT 拒绝访问
nmap -sS -p 0-1000 114.215.127.9 测试服务器开启了那些端口
iptables -D 删除规则

注:加入了这条规则后无法访问本机和外部主机

iptables -A INPUT -j REJECT 最后面加入一条规则,除了上面指定的规则端口,拒绝其他通过

解决办法:本机访问本机
iptables -I INPUT -i lo -j ACCEPT
访问外部主机
iptables -I INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

限制条件

iptables -I INPUT -p tcp -s 118.89.53.41 --dport 80 -j ACCEPT # 添加ip仅允许该IP可以访问80端口
iptables -I INPUT -p tcp -s 118.89.53.41 --dport 80 -j REJECT # 添加ip禁止该IP可以访问80端口
iptables -I INPUT -p tcp --syn --dport 80 -m connlimit --connlimit-above 100 -j REJECT #限制每一个客户端ip的并发连接数,超过100个就拒绝
iptables -A INPUT -p icmp -m limit --limit 1/m --limit-burst 10 -j ACCEPT #如果超过10个连接就按一分钟一个连接规定
iptables -A INPUT -p icmp -j DROP #满足上面规则的放行,不满足抛弃
iptables -I INPUT -s 61.151.186.141 -j DROP

FTP的模式

基本规则设置

iptables -I INPUT  -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A  INPUT  -p tcp   -s  118.89.53.00/24  -j ACCEPT  #允许这个IP段的访问
iptables   -I  INPUT  -p tcp  --dport  80  -j  ACCEPT
iptables   -I  INPUT  -p tcp  --dport  1723  -j  ACCEPT
iptables   -I  INPUT  -p tcp  --dport  22  -j  ACCEPT
iptables   -I  INPUT  -p   icmp  -j  ACCEPT
iptables   -A  INPUT -j REJECT
iptables -I INPUT -p tcp --syn --dport 80 -m connlimit  --connlimit-above 100 -j REJECTiptables -A INPUT  -p icmp -m limit --limit 1/m --limit-burst 10 -j ACCEPT
iptables -A INPUT  -p icmp  -j DROP

Debian和Ubuntu上的iptables不以服务形式管理。

列出当前规则:
sudo iptables -L

添加几条规则到 INPUT链 (马上生效):

sudo iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
sudo iptables -A INPUT -i lo -j ACCEPT
sudo iptables -A INPUT -p tcp -i eth0 --dport 22 -j ACCEPT
sudo iptables -A INPUT -p tcp -i eth0 --dport 80 -j ACCEPT
sudo iptables -A INPUT -j DROP
注:上面几条规则的作用是允许已建立的连接接收数据,允许本地环回,允许本地开放ssh的22端口和http的80端口。

将添加的规则保存到文件:

sudo iptables-save > /etc/iptables.up.rules
重启后添加的规则会丢失,这时我们可以在网络启动时应用我们保存的规则:

sudo nano /etc/network/interfaces 在末尾添加下面一行 pre-up iptables-restore < /etc/iptables.up.rules

最后修改:2021 年 06 月 06 日
如果觉得我的文章对你有用,请随意赞赏