Linux中iptables那点儿事儿

本文深入解析Linux系统下的iptables防火墙配置及NAT地址转换机制,涵盖iptables的四张表、五条链和常见规则,以及SNAT和DNAT的具体应用。同时,提供了FTP主动与被动模式下的iptables配置示例,帮助读者理解并掌握网络数据包过滤和地址转换的实战技巧。

1、NetFilter

是Linux系统核心层内部的一个数据包处理模块

2、Hook point

数据包在NetFilter中的挂载点,包括

  • PRE_ROUTING
  • INPUT
  • OUTPUT
  • FORWARD
  • POST_ROUTING

iptables命令最终会调用netfilter,通过hook point挂载到网络层五个不同的挂载点,数据包通过这些挂载点,进行相应的操作,实现目的;

3、iptables规则组成

四张表+五条链+规则

3.1 四张表:

  • filter表:访问控制、规则匹配;
  • nat表:地址转发;
  • mangle表:修改数据包,改变包头中内容(TTL、TOS、MARK),不常用;
  • raw表:数据包的状态跟踪和分析,不常用;

3.2 五条链:INPUT、OUTPUT、FORWARD、PREROUTING、POSTROUTING

3.3 规则

  • 数据包访问控制:ACCEPT、DROP、REJECT
  • 数据包改写地址:SNAT(源地址)、DNAT(目标地址)
  • 信息记录:LOG

4、配置实例

4.1 查看本机端口使用情况

netstat -lntp

4.2 查看iptables版本

iptables --version
iptables v1.4.21

4.3 开放指定端口

查看已有iptables规则

iptables -nL

清除已有规则

iptables -F

4.3.1 规则1:

  • 开放22、80、10-21tcp端口访问
  • 开放基于ICMP协议的数据包访问(即ping)
  • 其他禁止访问
iptables -I INPUT -p tcp --dport 22 -j ACCEPT
iptables -I INPUT -p tcp --dport 80 -j ACCEPT
iptables -I INPUT -p tcp --dport 10:21 -j ACCEPT
iptables -I INPUT -p icmp -j ACCEPT
iptables -A INPUT -j REJECT

删除80端口

iptables -D INPUT -p tcp --dport 80 -j ACCEPT

禁止访问80端口

iptables -I INPUT -p tcp --dport 80 -j REJECT

4.3.2 规则2:

  • 本机可以访问本机
  • 本机可以访问其他主机
iptables -I INPUT -i lo -j ACCEPT
iptables -I INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

4.3.3 规则3:

只允许指定IP地址访问指定的端口80

iptables -I INPUT -p tcp -s 118.24.9.139 --dport 80 -j ACCEPT

设置后,在139上访问80端口

[root@centos ~]# curl -I http://ip:80
HTTP/1.1 403 Forbidden
Date: Sat, 20 Apr 2019 15:53:35 GMT
Server: Apache/2.4.6 (CentOS)
Last-Modified: Thu, 16 Oct 2014 13:20:58 GMT
ETag: "1321-5058a1e728280"
Accept-Ranges: bytes
Content-Length: 4897
Content-Type: text/html; charset=UTF-8

在其他电脑上访问80端口

curl -I http://ip:80
curl: (7) Failed to connect to ip port 80: Connection refused

4.4 FTP场景

  • 主动模式:1、客户端向服务器21端口发送用户名密码登录服务器;2、服务端由21端口返回登录成功消息;3、客户端随机开放端口;4、客户端向服务端21号端口发送PORT命令,上传随机端口号;5、服务端由20端口向客户端的随机端口主动发送数据;
  • 被动模式:1、客户端向服务器21端口发送用户名密码登录服务器;2、服务端由21端口返回登录成功消息;3、客户端向服务端21号端口发送PASV命令;4、服务端随机开放端口;5、客户端接收服务端随机端口信息;6、客户端连接到随机端口获取数据;

4.4.1 FTP主动模式

ftp连接的默认模式为被动模式

vsftpd服务支持主动模式需要注意配置选项(vim /etc/vsftpd/vsftpd.conf)

  • port_enable=yes
  • connect_from_port_20=YES

iptables需要开启21端口访问权限,而不需要开启20端口号,因为20端口从服务端向客户端发送数据,而不是从客户端向服务端发送数据;

iptables -I INPUT -p tcp -dport 21 -j ACCEPT

主动模式下规则:

iptables -F
iptables -I INPUT -p tcp --dport 21 -j ACCEPT
iptables -I INPUT -p tcp --dport 22 -j ACCEPT
iptables -I INPUT -p icmp -j ACCEPT
iptables -I INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -j REJECT
iptables -nL

因为主动模式中,服务端通过20端口向客户端随机端口发送数据,只有局域网内直连的情况下,才会成功,所以一般建议使用被动模式;

4.4.2 被动模式

为vsftpd指定数据端口,并且通过iptables开放相应需要传输的端口段;

修改vsftpd配置文件vim /etc/vsftpd/vsftpd.conf

  • pasv_min_port=50000
  • pasv_max_port=60000

被动模式下规则:

iptables -F
iptables -I INPUT -p tcp --dport 21 -j ACCEPT
iptables -I INPUT -p tcp --dport 22 -j ACCEPT
iptables -I INPUT -p tcp --dport 50000:60000 -j ACCEPT
iptables -I INPUT -p icmp -j ACCEPT
iptables -I INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -j REJECT
iptables -nL

4.5 常见端口梳理

常见允许外网访问的服务

  • 网站:http-80/tcp,https-443/tcp
  • 邮件:smtp-25/tcp,smtps-465/tcp,pop3-110/tcp,pop3s-995/tcp,imap-143/tcp

常见不允许外网访问的服务

  • 文件服务器:nfs-123/udp,samba-137:139/tcp-445/tcp,ftp-20:21/tcp
  • 远程管理:ssh-22/tcp
  • 数据库:mysql-3306/tcp,oracle-1521/tcp

4.6 将规则保存到配置文件中

[root@server ~]# service iptables save
iptables: Saving firewall rules to /etc/sysconfig/iptables:[  OK  ]

将服务设置为开机启动

chkconfig iptables on

查看是否已经加入开机启动列表

chkconfig --list | grep iptables

如果上述命令不能显示,使用如下命令:

[root@server ~]# systemctl list-unit-files | grep iptables
iptables.service                          enabled

4.7 手动将规则写入shell脚本中

将规则写入iptables_ssh.sh文件中,并将启动该脚本的命令加入到/etc/rc.local文件中,实现开机自启效果;

5、NAT模式

  • SNAT:源地址转换,作用在出口POSTROUTING作用连上;
  • DNAT:目标地址转换,作用在入口PREROUTING作用连上;

 

更加详细请移步

http://www.cnblogs.com/gaorong/p/8047559.html

 

 

 

 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值