在当下的IT相关技术工作中或多或少都会接触到Linux系统,本文介绍iptables基础使用管理,方便有利于在 Linux 系统上更好地控制 IP 信息包过滤和防火墙配置
iptables 安装
yum install iptables iptables-services -y
在centos 7下启用iptables
# firewall-cmd --state
running
默认情况下,firewalld 处于运行状态,并拒绝所有传入流量,但有几个例外,如 SSH
systemctl stop firewalld.service
systemctl disable firewalld.service
yum install iptables-services -y
systemctl enable iptables
systemctl start iptables
编辑ipatbles的规则
vim /etc/sysconfig/iptables
重启iptables服务
service iptables restart
iptables 规则清除
对链中规则:
-A 附加一条规则add
-I n 插入一条 insert
-R n 修改第几条
-D n 删除第几条
对链:
-N 新建一个自定义链
-X 删除一个自定义空链
-E 重命名一条自定义链
-F 清空指定链,如果不指定,则清空整个表中的所有链
-P 设定链的默认策略
-Z 置零(每条规则都有两个计数器,一个是被本规则匹配到的所有数据包
的个数,另一个,被匹配到的数据包的大小之和)
-L 查看 –v详细 -vv再详细 -vvv 再详细 –line-numbers显示行号
-x 显示计数器的精确值 –n显示数字地址,不是名称地址
iptables -L -n 可以查看出当前的防火墙规则
iptables -L -n --line-number 可以查看到每个规则chain 的序列号
iptables -I 和 iptables -A 区别:防火墙由上往下匹配,-A 会将后执行的策略添加到已有策略后,而-I 则会插入到已有策略的前(既成为第一条策略)。
查看状态: /etc/init.d/iptables status
关闭: /etc/rc.d/init.d/iptables stop
启动: /etc/rc.d/init.d/iptables start
重启: /etc/rc.d/init.d/iptables restart
开放指定的端口
允许本地回环接口(即运行本机访问本机)
iptables -A INPUT -s 127.0.0.1 -d 127.0.0.1 -j ACCEPT
允许所有本机向外的访问
iptables -A OUTPUT -j ACCEPT
允许访问22端口
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
打开22端口,允许远程管理。(设定附加条件:管理机器IP必须是250,并且必须从eth0网卡进入
iptables -A INPUT -i eth0 -s 192.168.1.250 -d 192.168.1.1 -p tcp --dport 22 -j ACCEPT
iptables -A OUTPUT -o eth0 -d 192.168.1.250 -s 192.168.1.1 -p tcp --sport 22 -j ACCEPT
允许访问80端口
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
允许指定IP访问22
iptables -I INPUT -s 192.168.0.100 -p tcp --dport 22 -j ACCEPT
禁止其他未允许的规则访问
-
iptables -A INPUT -j REJECT
-
iptables -A FORWARD -j REJECT
屏蔽IP
屏蔽单个IP的命令是
iptables -I INPUT -s 192.168.1.1 -j DROP
封整个段即从123.0.0.1到123.255.255.254的命令
iptables -I INPUT -s 123.0.0.0/8 -j DROP
封IP段即从123.45.0.1到123.45.255.254的命令
iptables -I INPUT -s 124.45.0.0/16 -j DROP
封IP段即从123.45.6.1到123.45.6.254的命令是
iptables -I INPUT -s 123.45.6.0/24 -j DROP
查看已添加的iptables规则
iptables -L -n
删除已添加的iptables规则
比如要删除INPUT里序号为8的规则,执行:
iptables -D INPUT 8
保存规则
service iptables save
重启服务
service iptables restart
iptables 配置文件
vi /etc/sysconfig/iptables
打开主动模式21端口
iptables -A INPUT -p tcp --dport 21 -j ACCEPT
全部开放FTP传输
加载模块:
-
modprobe ip_nat_ftp
-
modprobe ip_conntrack
-
modprobe ip_conntrack_ftp
加上一条规则:
iptables -A INPUT -m state –state ESTABLISHED,RELATED -j ACCEPT
iptables只允许指定ip地址访问指定端口
-
iptables -A INPUT -s 192.168.1.1 -p tcp --dport 22 -j ACCEPT
-
iptables -A OUTPUT -d 192.168.1.1 -p tcp --sport 22 -j ACCEPT
-
拒绝除了192.168.1.1/24的主机访问自己的80端口
Iptables –A INPUT -s ! 192.168.1.1/24 –d 192.168.1.100 –p tcp –-dport 80 –j DORP
上面这两条,请注意--dport为目标端口,当数据从外部进入服务器为目标端口;反之,数据从服务器出去则为数据源端口,使用 --sport 同理,-s是指定源地址,-d是指定目标地址。
关闭所有的端口
-
iptables -P INPUT DROP
-
iptables -P OUTPUT DROP
-
iptables -P FORWARD DROP
yum允许下载随机产生的高端口
-
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-
iptables -A INPUT -p udp --sport 53 -j ACCEPT
-
iptables -A OUTPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-
iptables -A OUTPUT -p udp --dport 53 -j ACCEPT
-
iptables -A OUTPUT -p tcp --sport 10000:65535 -j ACCEPT
允许Ping
-
iptables -A INPUT -p icmp --icmp-type echo-request -j ACCEPT
-
iptables -A OUTPUT -p icmp --icmp-type echo-reply -j ACCEPT
禁Ping
iptables -A INPUT -p icmp --icmp-type 8 -s 0/0 -j DROP
拒绝192.168.0.0/16网段的ping自己
iptables –t filter –A INPUT –s 192.168.0.0/16 –p icmp –icmp-type 8 –j DORP
外网访问内网(端口映射)
#iptables -t nat -I PREROUTING -i ens34 -p tcp --dport 10001 -j DNAT --to-destination 21.21.21.108:10000
内网访问外网
#PPPOE--access INTERNET:
#iptables -t nat -I POSTROUTING -s 20.20.20.0/24 -j MASQUERADE
#iptables -t nat -I POSTROUTING -s 20.20.20.0/24 -o ens34 -j SNAT --to-source 180.168.47.42
#iptables -I FORWARD -s 20.20.20.0/24 -p tcp -m tcp --tcp-flags SYN,RST SYN -j TCPMSS --set-mss 1440
#DHCP--access INTERNET:
#iptables -t nat -I POSTROUTING -s 21.21.21.0/24 -j MASQUERADE
#iptables -t nat -I POSTROUTING -s 21.21.21.0/24 -o ens34 -j SNAT --to-source 180.168.47.42
web包含admin字符串的页面不允许访问,源端口:dport
iptables -A INPUT -p tcp --dport 80 -m string --algo bm --string 'admin' -j REJECT
允许本机 ping 别的主机;但不开放别的主机 ping 本机;
iptables -I INPUT -p icmp --icmp-type echo-request -j DROP
iptables -I INPUT -p icmp --icmp-type echo-reply -j ACCEPT
iptables -I INPUT -p icmp --icmp-type destination-Unreachable -j ACCEPT
或者下面禁ping操作:
echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all
启动服务 # service iptables start 停止服务 # service iptables stop 重启服务 # service iptables restart 保存设置 # service iptables save
开启路由转发功能
/proc/sys/net/ipv4/ip_forward
1、在B服务器上开启内核路由转发参数
临时生效:
echo "1" > /proc/sys/net/ipv4/ip_forward
永久生效的话,需要修改sysctl.conf:
net.ipv4.ip_forward = 1
执行sysctl -p马上生效
2、B服务器开启iptables net转发
iptables -t nat -A POSTROUTING -s 192.168.10.0/24 -d 192.168.20.0/24 -o eth1 -j MASQUERADE
# 配置源地址10网段,目标地址20网段的地址转换,从eth1网卡出。
iptables -t nat -A POSTROUTING -s 192.168.20.0/24 -d 192.168.10.0/24 -o eth0 -j MASQUERADE
#配置源地址20网段,目标地址10网段的地址转换,从eth0网卡出。
永久保存:iptables-save > /etc/sysconfig/iptables
注意对应网卡。
3、在A和C服务器上设置路由为B服务器IP
A: route add -net 192.168.20.0 netmask 255.255.255.0 gw 192.168.10.1
C: route add -net 192.168.10.0 netmask 255.255.255.0 gw 192.168.20.1
查看路由表:route –n netstat –rn
持久化修改规则可以直接改iptables文件也可以使用iptables命令添加然后使用service iptables save命令保存。由于iptables规则是自上而下匹配,所以添加的所有的规则都必须在以下两个默认规则之前,理想方法是修改/etc/sysconfig/iptables文件,直接添加规则 。

发表评论