iptables基础详细说明

在linux中,iptables并不是一个真正的防火墙,可以把它理解为一个客服端代理,用户通过iptables这个代理,将用户的安全设定执行到对应的安全框架中,而这个安全框架才是真正的防火墙,这个防火墙称为netfilter,位于内核空间,主要用于网络地址转换、数据包内容修改、数据包过滤的防火墙功能。

数据报文过滤

在iptables中,内置了5个钩子函数(hook functions),分别是prerounting,input,output,forward,postrounting,在过滤时,在对应的函数上通过外部应用添加规则,在对应的函数上(关卡)添加的规则,可以看成是一条规则链;在这些不同的链上,具有相同功能的规则的集合叫表。在iptables中,定义了4种表:

  • filter表:负责过滤功能,防火墙;内核模块:iptables_filter
  • nat表:network address translation,网络地址转换功能;内核模块:iptables_nat
  • mangle表:拆解报文,做出修改,并重新封门的功能;iptables_mangle
  • raw表:关闭nat表上启用的连接追踪机制;iptables_raw

表与链的关系,或者说每个链中的规则都存放于什么表中

prerouting  的规则可以存在于raw,mangle,nat表

input   的规则可以存在于mangle,filter表(centons7中还有nat表)

forward   的规则可以存在于mangle,filter表

output   的规则可以存在于raw,mangle,nat,filter表

postrouting   的规则可以存在于mangle,nat表

在各关卡进行规则匹配时,是有优先匹配级别的,如下图

prerouting  上的优先依次是raw,mangle,nat

input    上的优先依次是mangle,nat(centos7),filter

forward   上的优先依次是mangle,filter

output   上的优先依次是raw,mangle,nat,filter

开放规则用于堵,关闭则表示通过;匹配标准(基本匹配和扩展匹配):

  • IP:SIP,DIP(基本匹配)
  • 扩展匹配需要依赖其它对应的扩展模块
  1. TCP:SPORT,DPORT
  2. UDP:SPORT,DPORT
  3. ICMP:icmp-type

处理动作-----在iptables中被称为target(非准确的说法),这些动作也分基本动作和扩展动作

  • ACCEPT:允许数据包通过
  • DORP:直接丢弃数据包,不给任何回应信息,这时候客户端会感觉自己的请求泥入大海,只有超时才有反应
  • REJECT:拒绝数据包通过,必要时会灵气发送端一个响应的信息,客户端刚请求就会收到拒绝的信息
  • SNAT:源地址转换,解决内网用户用同一个公网地址上网的问题
  • MASQUERADE:是SNAT的一种特殊形式,适用于动态的,临时会变的ip上
  • DNAT:目标地址转换
  • REDIRECT:在本机做端口映射
  • LOG:在/var/log/messages文件中记录日志信息,然后将数据包传递给下一条规则

能否使用自定义链----可以使用自定义链,但只能在被调用时才能发挥作用,如果没有自定义链中的任何规则匹配,还应该有返回机制;只能删除空的自定义链

用法

  • iptables [-t 表名] 命令选项 [链名] [条件匹配] [-j 目标动作或跳转]
  1. 表名、链名:用于指定iptables命令所操作的表和链
  2. 命令选项:用于指定管理iptables规则的方式 (如:插入、删除、增加、查看等)
  3. 条件匹配:用于指定对符合什么样条件的数据包进行处理
  4.  

 Linux 管理员最常会用到的 IPTables 规则。

1、启动、停止和重启IPTables

虽然 IPTables 并不是一项服务,但在 Linux 中还是可以像服务一样对其状态进行管理。

基于SystemD的系统

systemctl start iptables
systemctl stop iptables
systemctl restart iptables

基于SysVinit的系统

 /etc/init.d/iptables start
/etc/init.d/iptables stop
/etc/init.d/iptables restart

2、查看IPtables防火墙策略

你可以使用如下命令来查看 IPtables 防火墙策略:

 iptables -L -n -v

以上命令应该返回数据下图的输出:

iptables-20-02

以上命令是查看默认的 FILTER 表,如果你只希望查看特定的表,可以在 -t 参数后跟上要单独查看的表名。例如只查看 NAT 表中的规则,可以使用如下命令:

 iptables -t nat -L -v –n

3、屏蔽某个IP地址

如果你发布有某个 IP 向服务器导入攻击或非正常流量,可以使用如下规则屏蔽其 IP 地址:

 iptables -A INPUT -s xxx.xxx.xxx.xxx -j DROP

注意需要将上述的 XXX 改成要屏蔽的实际 IP 地址,其中的 -A 参数表示在 INPUT 链的最后追加本条规则。(IPTables 中的规则是从上到下匹配的,一旦匹配成功就不再继续往下匹配)

如果你只想屏蔽 TCP 流量,可以使用 -p 参数的指定协议,例如:

iptables -A INPUT -p tcp -s xxx.xxx.xxx.xxx -j DROP

4、解封某个IP地址

要解封对 IP 地址的屏蔽,可以使用如下命令进行删除:

 iptables -D INPUT -s xxx.xxx.xxx.xxx -j DROP

其中 -D 参数表示从链中删除一条或多条规则。

5、使用IPtables关闭特定端口

很多时候,我们需要阻止某个特定端口的网络连接,可以使用 IPtables 关闭特定端口。

阻止特定的传出连接:

 iptables -A OUTPUT -p tcp --dport xxx -j DROP

阻止特定的传入连接:

iptables -A INPUT -p tcp --dport xxx -j ACCEPT

6、使用Multiport控制多端口

使用 multiport 我们可以一次性在单条规则中写入多个端口,例如:

iptables -A INPUT  -p tcp -m multiport --dports 22,80,443 -j ACCEPT
iptables -A OUTPUT -p tcp -m multiport --sports 22,80,443 -j ACCEPT

7、在规则中使用 IP 地址范围

在 IPtables 中 IP 地址范围是可以直接使用 CIDR 进行表示的,例如:

iptables -A OUTPUT -p tcp -d 192.168.100.0/24 --dport 22 -j ACCEPT

8、配置端口转发

有时我们需要将 Linux 服务器的某个服务流量转发到另一端口,此时可以使用如下命令:

iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 25 -j REDIRECT --to-port 2525

上述命令会将所有到达 eth0 网卡 25 端口的流量重定向转发到 2525 端口。

9、屏蔽HTTP服务Flood攻击

有时会有用户在某个服务,例如 HTTP 80 上发起大量连接请求,此时我们可以启用如下规则:

iptables -A INPUT -p tcp --dport 80 -m limit --limit 100/minute --limit-burst 200 -j ACCEPT

上述命令会将连接限制到每分钟 100 个,上限设定为 200。

10、禁止PING

对 Linux 禁 PING 可以使用如下规则屏蔽 ICMP 传入连接:

iptables -A INPUT -p icmp -i eth0 -j DROP

11、允许访问回环网卡

环回访问(127.0.0.1)是比较重要的,建议大家都开放:

iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT

12、屏蔽指定MAC地址

使用如下规则可以屏蔽指定的 MAC 地址:

iptables -A INPUT -m mac --mac-source 00:00:00:00:00:00 -j DROP

13、限制并发连接数

如果你不希望来自特定端口的过多并发连接,可以使用如下规则:

iptables -A INPUT -p tcp --syn --dport 22 -m connlimit --connlimit-above 3 -j REJECT

以上规则限制每客户端不超过 3 个连接。

14、清空IPtables规则

要清空 IPtables 链可以使用如下命令:

iptables -F

要清空特定的表可以使用 -t 参数进行指定,例如:

iptables -t nat –F

15、保存IPtables规则

默认情况下,管理员对 IPtables 规则的操作会立即生效。但由于规则都是保存在内存当中的,所以重启系统会造成配置丢失,要永久保存 IPtables 规则可以使用 iptables-save 命令:

iptables-save > ~/iptables.rules

保存的名称大家可以自己改。

16、还原IPtables规则

有保存自然就对应有还原,大家可以使用 iptables-restore 命令还原已保存的规则:

iptables-restore < ~/iptables.rules

17、允许建立相关连接

随着网络流量的进出分离,要允许建立传入相关连接,可以使用如下规则:

iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT

允许建立传出相关连接的规则:

iptables -A OUTPUT -m conntrack --ctstate ESTABLISHED -j ACCEPT

18、丢弃无效数据包

很多网络攻击都会尝试用黑客自定义的非法数据包进行尝试,我们可以使用如下命令来丢弃无效数据包:

iptables -A INPUT -m conntrack --ctstate INVALID -j DROP

19、IPtables屏蔽邮件发送规则

如果你的系统不会用于邮件发送,我们可以在规则中屏蔽 SMTP 传出端口:

iptables -A OUTPUT -p tcp --dports 25,465,587 -j REJECT

20、阻止连接到某块网卡

如果你的系统有多块网卡,我们可以限制 IP 范围访问某块网卡:

iptables -A INPUT -i eth0 -s xxx.xxx.xxx.xxx -j DROP

源地址可以是 IP 或 CIDR。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值