Linux iptables工具


Linux防火墙基础

Linux中,防火墙是链型的。一个表就是一套链。数据包在Linux网络子系统的各部分移动时,内核就会对包应用某套规则。
例如,从物理层接收到一个新的包之后,内核就会根据输入的数据激活对应的规则。这些数据由内核来维护,整系统叫做iptables。

还有一个叫nfttables的新系统,用于取代iptables

规则表有很多,表里的规则也有很多。
filter表,控制基本的包流动,该表里有三个基本的链:包输入INPUT、包输出OUTPUT、包转发FORWARD


iptables

iptables是一款基于命令行的防火墙策略管理工具。

iptables命令可以根据流量的源地址、目的地址、传输地址、服务类型等信息进行匹配,一旦匹配成功,iptables就会根据策略规则所预设的动作来处理这些流量。

参数作用
-P设置默认策略
-F清空规则链
-L查看规则链
-A在规则链的末尾加入新规则
-I num在规则链的头部加入新规则
-D num删除某一条规则
-s匹配来源地址IP/MASK,加叹号"!",表示除这个IP外
-d匹配目标地址
-i 网卡名称匹配从这块网卡流入的数据
-o 网卡名称匹配从这块网卡流出的数据
-p匹配协议,如TCP、UDP、ICMP
–dport num匹配目标端口号
–sport num匹配来源端口号

查看当前的设置:iptables -L

设置链的策略:iptables -P FORWARD DROP


防火墙策略

防火墙的基本应用场景有两种:
一种是保护单台机器(在每台机器的INPUT链插入规则),另一种是保护整个网络里的机器(在路由器的FORWARD链插入规则)。

例如,如果有一个SSH服务在TCP端口22,那就不应该让别人连到22以外的端口。要做到这样,首先将INPUT链策略设置为DROP:

iptables -P INPUT DROP

但可以通过以下命令,允许ICMP通信(给ping或其他工具使用)

iptables -A INPUT -p icmp -j ACCEPT

确保你能收到自己发给自己的包,包括自己的IP地址和localhost127.0.0.1。

iptables -A INPUT -s 127.0.0.1 -j ACCEPT
iptables -A INPUT -s my_addr -j ACCEPT

如果控制着整个子网(并信任其中所有东西),可以将my_addr替换为你的子网地址和掩码,比如10.23.2.0/24。

虽然想阻止所有TCP连接请求,但是还要确保自己能对外界发出TCP连接请求。而因为所有由外而内的TCP请求都只有SYN位是被置位的,所以用以下命令可以做到只屏蔽接收的请求:

iptables -A INPUT -p tcp '!' --syn -j ACCEPT

如果用的是基于UDP的DNS,必须允许接收域名服务器发来的包,这样机器才能借助DNS查找域名。例如,允许接收/etc/resolv.conf中所有DNS服务器的数据包的话,用以下命令:

iptables -A INPUT -p udp --source-port 53 -s 域名服务器地址 -j ACCEPT

允许所有SSH连接:

iptables -A INPUT -p tcp --destination-port 22 -j ACCPT


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值