欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

iptables 使用 快速教程

程序员文章站 2022-07-02 09:57:25
...

    linux的netfilter模块不仅可以拦截数据包,还可以转发数据包。iptables 是一个配置netfilter的工具。

原理

   整个原理可见下图。数据进入后,只有两条路可走,如果目的地址是本机,就由本机处理,不是则可以转发。

   
iptables 使用 快速教程
            
    
    博客分类: linux iptablesNATSNATDNAT
 

    PREROUTING,FORWARD,POSTROUNT,INPUT,OUTPUT 是netfilter提供的钩子,在这些钩子上,可以定义规则,对数据包进行处理。处理的种类包括:过滤(filter),转发(nat),数据包修改(mangle,raw)。netfilter把这些种分别放在四张表中:filter,nat,mangle,raw。在这些表中放入了各种规则。iptables就是对这些内容进行配置。

 

命令格式

   

#iptables 目的 操作 规则

  目的是由两个组成:钩子和表 ,

    指定表是由 -t 指定 ,-t 后可跟 nat,filter,mangle,raw

    表则直接跟在 操作 后面。可先INPUT,OUTPUT,FORWARD,PREROUTING,POSTROUTING

 

    操作则包括 增(-A)删(-D)改(-R)查(-L)插入(-L)清除(-F)默认结果(-P)自定义分组(-N)

 

    规则则由两部分组成:检测规则与结果 

    检查规则包括 源地址(-s),目标地址(-d) ,进入的网卡(-i),出去的网卡(-o),协议 (-p),端口(--dport)

    结果则是对数据包的操作:-j ACCEPT | REJECT | DROP |SNAT |DNAT |MASQUERADE

    考虑到检查与结果的复杂性,netfilter 还有许多插件 ,插件可以对检查规则和操作进行扩展定义。

    插件由 -m 指定,关于各种扩展,可查看手册 

 

man 5 iptables-extensions

    举例:

iptables -t nat -I POSTROUTING -s 192.168.135.0/24 -j SNAT --to 192.168.137.77
#就是说 在 POSTROUTING的勾子上,进行nat操作,源地址是192.168.135.0/24 的,就修改源地址成
192.168.137.77

   

启用

 

yum install -y iptables-services
systemctl enable iptables.service

#如果有firewalld ,关闭
systemctl stop firewalld
systemctl disable firewalld

   

 

查看规则

 

iptables -vnL

保存规则

默认设置下,iptables 进行改动后,并不会主动保存,下次开机会丢失,所以要手工保存。

/usr/libexec/iptables/iptables.init save

 如果的想自动保存,则要在关机脚本里进行触发保存,用systemd 管理下,修改/etc/sysconfig/iptables-config

IPTABLES_SAVE_ON_STOP="yes"

 

 

基本配置

#屏蔽所有请求
iptable -A INPUT -j REJECT

#允许127.0.0.1可访问,因为netfilter默认是对物理网口起效,所以要对本机回环加规则
iptables -I INPUT -d lo -j ACCEPT

#允许本机可ping
iptables -I INPUT -p icmp -j ACCEPT

#允许本机对外访问任何地址与端口,由于本机主动向外请求时,目的IP与端口都不可预测,
#所以,不能按目的信息过滤。但本机主动发起请求的包,有个特征是状态是RELADTED,ESTABLISHED
iptables -I INPUT -m state --state RELAED,ESTABLISHED -j ACCEPT

#开放SSH
iptables -I INPUT -p tcp --dport 22 -j ACCEPT

 

FTP

  

#FTP的登录端口是21
iptables -I INPUT -t tcp -dport 21 -j ACCEPT

#如果客户端采用主动模式 passive on ,需要FTP服务器主动从20端口向客户端指定的端口连接,
#所以需要保证下面一条存在
iptables -I INPUT -m state --state RELAED,ESTABLISHED -j ACCEPT

#如果客户端采用被动模式,FTP服务器需要开放随机的端口给客户端,由于端口是随机的,所以不能
#指定单一的端口。有两种办法
# 1. 指定的端口范围,比如50000-60000之间,需要FTP的配置文件中指定,同时在iptables中开放
#   这些端口
#    ftp配置文件/etc/vsftpd/vsftpd.conf中加入
#    pasv_min_port=50000
#    pasv_max_port=60000

iptables -I INPUT -tcp --dport 50000:60000 -j ACCEPT

# 2. 更简单的办法是用 iptables的模块,nf_conntrack_ftp
#在/etc/sysconfig/iptables-config 中加入配置:
#IPTABLES_MODULES="nf_conntrack_ftp" 

 

NAT

    若让内网中的电脑能够与外网通讯,其中一种技术是NAT。

#两台机器,A机器网址是内网eth0: 192.168.135.20/24 ,
#另一台B机器有两块网卡,分别是内网eth1: 192.168.135.10/24,  eth0:外网 192.168.137.77/24
在A机器上配置/etc/sysconfig/network-scripts/ifcfg-eth0
TYPE=Ethernet
IPADDR=192.168.135.20
NETMASK=255.255.255.0
GATEWAY=192.168.135.10
DNS1=192.168.137.1

NAT是一种数据转发,所以B机器需要打开转发开关

sysctl -w net.ipv4.ip_forward=1

 

 

内网机器需要访问外网资源,需要做SNAT 或者 MASQUERADE。推荐使用MASQUERADE方式,这样可避免外网网卡的地址变化

#在B机器上SNAT
 iptables -t nat -I POSTROUTING -s 192.168.135.0/24 -j SNAT --to 192.168.137.77
#在B机器上MASQUERADE
iptables -t nat -A POSTROUTING -s 192.168.135.20 -o eth0 -j MASQUERADE
 

外网需要访问内网上的资源,比如A机器的80端口,要做DNAT

iptables -t nat -I PREROUTING -d 192.168.137.77 -p tcp --dport=8080 -j DNAT --to 192.168.135.20:80
  
 
 
 
  • iptables 使用 快速教程
            
    
    博客分类: linux iptablesNATSNATDNAT
  • 大小: 45.3 KB