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

被折叠的 条评论
为什么被折叠?



