iptables命令
Iptabels是与Linux内核集成的包过滤防火墙系统,几乎所有的linux发行版本都会包含Iptables的功能。
netfilter/iptables过滤防火墙系统是一种功能强大的工具,可用于添加、编辑和除去规则,这些规则是在做信息包过滤决定时,防火墙所遵循和组成的规则。
这些规则存储在专用的信息包过滤表中,而这些表集成在 Linux 内核中。在信息包过滤表中,规则被分组放在我们所谓的链(chain)中。
虽然netfilter/iptables包过滤系统被称为单个实体,但它实际上由两个组件netfilter 和 iptables 组成。
netfilter 组件也称为内核空间(kernelspace),是内核的一部分,由一些信息包过滤表组成,这些表包含内核用来控制信息包过滤处理的规则集。
iptables 组件是一种工具,也称为用户空间(userspace),它使插入、修改和除去信息包过滤表中的规则变得容易。
安装:yum install iptables iptables-services
格式:iptables [-t table] command [match] [-j target/jump]
iptables [-t 表名] 选项 [链名] [条件] [-j 控制类型]
iptables –[A|I 链] [-i|o 网络接口] [-p 协议] [-s 来源ip/网域] [-d 目标ip/网域] –j[ACCEPT|DROP]
###常用命令
iptables -L INPUT #列出INPUT规则链中的所有规则。
iptables -I INPUT -p tcp --dport 8080 -j ACCEPT # linux iptables开放端口命令
iptables -t nat -A PREROUTING -p tcp --dport 7777 -j REDIRECT --to-port 6666 #将本机的 7777 端口转发到 6666 端口。
iptables -t nat -A OUTPUT -p tcp --dport 7777 -j REDIRECT --to-port 6666 #PREROUTING链修改的是从外部连接过来时的转发,如果本机连接到本机的转发,需要修改 OUTPUT链。
iptables -t nat -nL --line #查看当前iptables 的 nat 表的所有规则:(不用 -t 指定表名默认的是指 filter 表)
iptables -t nat -A PREROUTING -p tcp -d 15.45.23.67 --dport 80 -j DNAT --to-destination 192.168.1.1-192.168.1.10:80-100 #改写封包目的地IP为某特定 IP或IP范围
iptables -t nat -D PREROUTING -p tcp --dport 8080 -j REDIRECT --to-port 80 #删除当前80端口转发到8080端口的转发规则
###对iptables服务进行保存
service iptables save
#如果上述命令执行失败报出:The service command supports only basic LSB actions (start, stop, restart, try-restart, reload, force-reload, status). For other actions, please try to use systemctl.
#解决方法:
systemctl stop firewalld #关闭防火墙
yum install iptables-services #安装或更新服务
systemctl enable iptables #设置开机启动iptables
systemctl start iptables #打开iptables
service iptables save
###重启iptables服务:
service iptables restart
规则表的先后顺序:raw→mangle→nat→filter
规则链的先后顺序:
入站顺序:PREROUTING→INPUT
出站顺序:OUTPUT→POSTROUTING
转发顺序:PREROUTING→FORWARD→POSTROUTING
###常用配置
1.开放网口与ip来源
iptables -A INPUT -i lo –j ACCEPT #所有的来自 lo 这个网口的封包,都予以接受
iptables -A INPUT -i eth0 -s 192.168.1.200 -j ACCEPT #目标来自 192.168.1.200 这个 IP 的封包都予以接受
#192.168.1.0/24 可接受,但 192.168.1.10 丢弃
iptalbes -A INPUT -i eth0 -s 192.168.1.0/24 -j ACCEPT
iptables -A INPUT -i eth0 -s 192.168.1.10 -j DROP
2.规则记录
iptables -A INPUT -s 192.168.1.200 -j LOG #相关信息就会被写入到/var/log/messages当中,然后该封包会继续进行,后续的规则比对。LOG 这个动作仅在进行记录而已,并不会影响到这个封包的其它规则比对的。
3.开放tcp、udp端口
#开放samba端口(udp137,138;tcp139,445)
iptables -A INPUT -i eth0 -p udp --dport 137:138 -j ACCEPT
iptables -A INPUT -i eth0 -p tcp --dport 139 -j ACCEPT
iptables -A INPUT -i eth0 -p tcp --dport 445 -j ACCEPT
4.iptables匹配ICMP端口和ICMP类型
iptables -A INPUT -p icmp -icmp-type 类型 -j ACCEPT #--icmp-type :后面必须要接 ICMP 的封包类型,也可以使用代号,例如 8 代表 echo request 的意思。(可自查询ICMP-type对应表)
5.SNAT源地址转换(让多个内网用户通过一个外网地址上网,即共享上网)
iptables -t nat -A POSTROUTING -s 192.168.10.10 -o eth1 -j SNAT --to-source 111.196.221.212 #eth1为外网网卡,111.196.221.212为外网地址
iptables -t nat -A POSTROUTING -s 192.168.10.0/24 -j MASQUERADE #外网IP地址不稳定的情况即可使用MASQUERADE(动态伪装),能够自动的寻找外网地址并改为当前正确的外网IP地址
6.DNAT目地地址转换(让外网用户访问局域网内不同的服务器)
iptables -t nat -A PREROUTING -i eth1 -d 61.240.149.149 -p tcp --dport 80 -j DNAT --to-destination 192.168.10.6:80 #192.168.10.6为内网其他机器,eth1为外网网卡,61.240.149.149为外网ip
参数 | 作用 |
---|
-P(–policy) | 设置默认策略:iptables -P INPUT (DROP |
-F(–flush) | 清空规则链 |
-L(–list) | 查看规则链 |
-A(–append) | 在规则链的末尾加入新规则 |
-I(–insert) num | 在规则链的头部加入新规则 |
-D(–delete) num | 删除某一条规则 |
-R(–replace) | 替换规则列表中的某条规则 |
Z( --zero) | 将表中数据包计数器和流量计数器归零 |
-s | 匹配来源地址IP/MASK,加叹号"!"表示除这个IP外。 |
-d | 匹配目标地址 |
-i(–in-interface) | 网卡名称,匹配从这块网卡流入的数据 |
-o(–out-interface) | 网卡名称,匹配从这块网卡流出的数据 |
-p(—proto) | 匹配协议,如tcp,udp,icmp |
–dport num | 匹配目标端口号 |
–sport num | 匹配来源端口号 |