关于iptables:云小课-守护网络安全不是问题iptables的四表五链为你开启八卦阵

摘要:放心网络根本平安?iptables八卦阵为您守护!本文带您一起理解iptables的相干常识。 网络世界就和事实世界一样,总是会有些不怀好意的“人”呈现,扫扫你的端口啊,探测探测你的利用状况啊,看看有没有什么破绽啊,而后趁虚而入...... 像不像个小偷,这瞅瞅那瞅瞅,门有没有上锁,窗户有没有关严,看准机会就轻轻潜入了。 所以为了保障网络环境的平安,咱们得“武装”起来,守住各个入口。 怎么“武装”呢? 应用iptables就能够做到,您能够依据业务须要设计一套本人的“八卦阵”,每一个报文要进来或者进来都得通过“八卦阵”里的阻碍,能通过严格筛选的报文才是“好”报文。 iptables是什么?iptables是Linux 防火墙工作在用户空间的管理工具,是netfilter/iptablesIP 信息包过滤零碎的一部分,用来设置、保护和查看Linux内核的IP数据包过滤规定。它是收费的,能够代替低廉的商业防火墙解决方案,实现封包过滤、封包重定向和网络地址转换(NAT)等性能。 特点:iptables是基于内核的防火墙,性能十分弱小;iptables内置了filter,nat,mangle和raw四张表。所有规定配置后,立刻失效,不须要重启服务。 iptables组成iptables的构造是由表(tables)组成,而tables是由链(chains)组成,链又是由具体的规定组成。因而咱们在编写iptables规定时,要先指定表,再指定链。tables的作用是辨别不同性能的规定,并且存储这些规定。 iptables的四表五链四个表包含:raw表、mangle表、nat表、filter表。 这四个优先级顺次升高,raw不罕用,次要性能都在其余三种表里实现。每个表能够设置多个链。 mangle:次要用于批改数据包,表内包含五个链:PREROUTING、POSTROUTING、INPUT、OUTPUT、FORWARDnat:不经内核,用于网络地址转换(IP、端口),表内包含三个链:PREROUTING、POSTROUTING、OUTPUTfilter:通过本机内核的数据,负责过滤数据包,表内包含三个链:INPUT、FORWARD、OUTPUT五个链如下: INPUT:输出,过滤所有指标地址是本机的数据包。FORWARD:转发,过滤所有路过本机的数据包。OUTPUT:输入,过滤所有由本机产生的数据包。PREROUTING:路由前,能够在数据包达到防火墙时扭转指标地址。POSTROUTING:路由后,在数据包来到防火墙时扭转数据包的源地址。iptables解决数据包的流程 数据包有两种:目标地址是本机内核的数据包和通过本机内核的数据包。 数据包进入的时候,首先进入PREROUTING链,本机内核依据数据包目标地址判断是否须要转送进来。如果数据包是进入本机内核的,就进入INPUT链。数据包到了INPUT链后,按条件过滤限度进入。之后进入本机内核,再进入OUTPUT链,按条件过滤限度进来,而后达到POSTROUTING 链输入。如果数据包只是通过本机内核,须要转发进来的,且本机内核容许转发,数据包就会进入FORWARD链,按条件过滤限度转发,而后达到POSTROUTING链输入。iptables命令iptables [ -t 表名 ] 治理选项 [ 链名 ] [ 条件匹配 ] [ -j 指标动作或跳转 ] 留神: 1.不指定表名时,默认示意filter表。 2.不指定链名时,默认示意该表内所有链,除非设置规定链的缺省策略,否则须要指定匹配条件 举个例子,比方:须要回绝IP地址为10.10.10.8的主机拜访本机。 iptables -A INPUT -s 10.10.10.8 -j DROP 更多命令详情请参见:iptables语法规定。 课堂练习iptables规定都能够在云服务器里本人配置。然而如果云服务器数目十分多,每个都要配置,那就太麻烦了,如何实现同样需要的云服务器配置雷同的iptables规定? 平安组?网络ACL? 没错!!! 它们都通过管制Linux iptables来管制进出云服务器或者用户网络的数据包,在不同的地位应用不同的办法来实现不同的目标,能够同时部署网络ACL和平安组实现双重防护。 平安组将具备雷同平安爱护需要并相互信任的云服务器退出同一个平安组。不同平安组的虚拟机之间的拜访以及外网拜访虚拟机,都须要通过平安组进行过滤。 网络ACL则作用于子网上,能够在平安组之前隔离内部过去的歹意流量,对进出用户网络的流量进行过滤。 那么,实际一下,为您的弹性云服务器设置一套“八卦阵”吧~ 为云服务器配置平安组与网络ACL,请戳这里理解。 本文分享自华为云社区《云小课 |放心网络根本平安?iptables八卦阵为您守护》,原文作者:云小萌。点击关注,第一工夫理解华为云陈腐技术~

March 10, 2021 · 1 min · jiezi

关于iptables:K8S-面试题service-到底能不能-ping-通

面试中被问了这道题,其实是在考查你对 k8s service 的应用和底层原理的了解,答案显然没有那么简略。 ClusterIP/NodePort/Loadbalancer这三种 svc 都会调配 ClusterIP,这个 IP 地址是 VIP(虚构 IP),是在所有 node 上增加一些 netfilter 规定,次要有 iptables 和 ipvs 两种计划,能不能 ping 通要看具体实现。 iptables:clusterIP 只是 iptables 中的规定,只会解决 ip:port 四层数据包,reject 了 icmp。不能 ping 通。IPVS:clusterIP 会绑定到虚构网卡 kube-ipvs0,配置了 route 路由到回环网卡,icmp 包是 lo 网卡回复的。能够 ping 通。Headless: ClusterIP=NoneHeadless svc 不会调配 clusterIP,而是返回对应 DNS 的 A 记录,如果 svc 后端有3个 pod 则返回 3 个 pod IP。拜访 svc 时会随机抉择一个 IP,所以 headless svc 是能够 ping 通的。 ExternalNameExternalName 对应 DNS 的 CNAME,如果配置的域名能够 ping 通则 svc 能够 ping 通。 ...

March 6, 2021 · 1 min · jiezi

关于iptables:怎样使用firewalld与iptables对照版

How to use (firewald) 与 iptables对照版Use (systemctl) to manager (firewalld)To start,stop,restart (firewalld): systemctl start firewalldsystemctl stop firewalldsystemctl restart firewalldTo check (firewalld) state: systemctl status firewalldyou can also: firewall-cmd --stateTo make (firewalld) auto start, or not auto start on boot, systemctl enable firewalldsystemctl disable firewalldDisableing all traffic in case of emergency / 紧急禁止所有流量To disable all traffic immediately firewall-cmd --panic-onIt's corresponding (iptables) command is: iptables -t filter -I INPUT 1 -j REJECTiptables -t filter -I OUTPUT 1 -J REJECTTo cancel disabling all traffic: ...

February 19, 2021 · 7 min · jiezi

CentOS-8的firewalld已经与iptables解绑

文章转载自:CentOS 8的firewalld已经与iptables解绑今天有人找上我,说之前用的一键安装脚本不好使了,希望我能帮忙看看怎么回事。 根据他的描述,初步断定是系统多次安装某个依赖导致。仔细询问,他每次有问题都直接重建vps,不应该存在这个问题。接着猜测应该是脚本与当前系统不匹配,脚本太久没更新所以安装报错。他说的脚本既不是我写的也没用过,让他联系作者反馈估计很难也不能解决当下问题,于是帮忙找了另外一个一键安装脚本让其尝试。 新的脚本很快就将所需软件安装成功,但是出现无法连接的问题。考虑到服务器有可能被屏蔽掉,于是用境外服务器连接,同样不能连上。接着指导他排除服务未启动、iptables端口和服务商防火墙未放行等因素,问题依旧。 很久没碰到这么奇怪的状况,于是向他要了root密码,亲自登录服务器查看问题。首先用ps aux | grep xxx查看进程,确认软件正常运行;接着netstat -nltp查看端口监听,确认端口一直且正在被监听;iptables -nL查看系统内置防火墙,输出为空,说明iptables没有屏蔽进程监听的端口。然而在这样的配置下,依然无法telnet远程连接到这台服务器。问题到底出现在哪里? 会不会是因为进程的问题?于是测试用ssh进程监听端口,无法连接;换一个端口,还是连不上;改成常用的80和443端口,也telnet不过去。测试了多个进程和端口,除了ssh的22端口,不管哪个进程监听的其他端口都不行。 走到这个地步,不是系统有问题便是我的水平有问题。于是用uname -a查看系统版本,输出如下:Linux xxx 4.18.0-80.7.1.el8_0.x86_64 #1 SMP Sat Aug 3 10:14:00 UTC 2019 x86_64 x86_64 x86_64 GNU/Linux。信息略显杂乱,但还是能让人一眼就看出问题所在:el8,系统竟然是CentOS 8! 到此一切都明朗了:之前的一键安装脚本报错不好用了,因为脚本只适用于6和7,CentOS 8刚出来没多久没有测试过;我找的一键安装脚本能安装和运行,无法连接是因为CentOS 8中firewalld已经与iptables解绑,后端改用nftables,这便是iptables -nL输出为空还是无法连接的真正原因;要想连接上,只需要用nft或者firewall-cmd放行相应的端口即可: firewall-cmd --permanent --add-port=xxxx/tcpfirewall-cmd --reload向他解释这些有点难度,于是让他重建vps时选CentOS 7,一键安装脚本好用了,也能远程连接过去了。 CentOS 8打开了一个新世界。 参考https://www.zdnet.com/article...https://developers.redhat.com...

October 7, 2019 · 1 min · jiezi

Netfilter-是如何工作的四动作target

每一条iptables配置的规则(rule)都包含了匹配条件(match)部分和动作(target)。当报文途径HOOK点时,Netfilter会逐个遍历挂在该钩子点上的表的rule,若报文满足rule的匹配条件,内核就会执行动作(target)。 上面是一条普通iptables规则,如果报文匹配前面的条件,就会执行最后的-j DROP,它就是这条规则的动作(target) 普通动作 & 扩展动作动作又可分为普通target和扩展target两类,其中普通动作是指ACCEPT(允许报文通过)、DROP(拒绝报文通过)这类简单明了的行为,而扩展target是指包含了其他操作的动作,比如REJECT动作会产生ICMP差错信息、LOG动作记录日志、SNAT和DNAT用于进行地址转换。 本文不涉及 How to 配置这些动作的规则,也不涉及这些动作各自的作用是什么,对此有兴趣的读者可以参考链接表示 targetNetfilter使用xt_standard_target表示一个动作: 该结构由两部分组成,其中verdict是动作的编码, 取值有NF_DROP、NF_ACCEPT、NF_QUEUE等等。对于普通动作来说,有verdict就够了,但对于扩展动作来说,还需要有地方存储额外的信息(eg. 如何进行NAT),这里的target就是存储这些额外信息的地方。与本系列上一篇中说的xt_entry_match一样,xt_entry_target结构同样是一个union。它们的设计思路是一样的:内核代码和iptables用户态代码定义这样一个同样的数据类型,用户态使用的是user部分,设置要使用的扩展动作的name(普通动作的name为""),内核收到该结构后,根据name查询到注册过的动作,将该信息挂到xt_entry_target的target指针上。而data字段表示的柔性数组区域就是各种扩展模块各显神通的地方了,对NAT来说,这里存储转换后的地址。 注册 target我们需要将target预先注册到Netfilter框架中,才能在之后的配置中使用这个target。就拿本文最初的那条规则来说,需要一个隐含的前提就是SNAT这个xt_target事先被注册到Netfilter框架了。这部分工作在xt_nat.c定义的内核模块中完成: 除了SNAT, 通过xt_register_target接口,其他各个模块都可以注册自己的动作。根据名字进行区分,所有的target会挂到xf链表上。 每个target上有三个函数指针,其中 target:这个函数将决定skb的后续处理结果,如果为NULL,那么这条规则的动作就是普通target,处理结果从外面的verdict就可以得出。如果不为NULL,那么就执行这个函数,这个函数返回NF_DROP, NF_ACCEPT, NF_STOLEN这类动作checkentry:这个函数在用户配置规则时被调用,如果返回0,表示配置失败。destroy:这个函数再使用该target的规则被删除时调用。查找 target当用户通过iptables下发一条规则时,Netfilter会从xf链表上查找是否已有这样的target 执行 target当数据包经过HOOK点,如果某条rule的匹配条件与报文一致,就会执行该rule包含的动作。 REFnetfilter-hacking-HOWTO

June 20, 2019 · 1 min · jiezi

Centos-iptablesconfig-配置参数说明

下面是Centos7 默认的iptables-config 配置 # Load additional iptables modules (nat helpers)# Default: -none-# Space separated list of nat helpers (e.g. 'ip_nat_ftp ip_nat_irc'), which# are loaded after the firewall rules are applied. Options for the helpers are# stored in /etc/modprobe.conf.# 每次防火墙规则应用以后加载的模块,可以指定多个,以空格分开IPTABLES_MODULES=""# Unload modules on restart and stop# Value: yes|no, default: yes# This option has to be 'yes' to get to a sane state for a firewall# restart or stop. Only set to 'no' if there are problems unloading netfilter# modules.# 在重新启动和停止iptables模块时,是否卸载此模块IPTABLES_MODULES_UNLOAD="yes"# Save current firewall rules on stop.# Value: yes|no, default: no# Saves all firewall rules to /etc/sysconfig/iptables if firewall gets stopped# (e.g. on system shutdown).# 当防火墙停止时,是否保存当前防火墙规则到iptables文件,默认不保存IPTABLES_SAVE_ON_STOP="no"# Save current firewall rules on restart.# Value: yes|no, default: no# Saves all firewall rules to /etc/sysconfig/iptables if firewall gets# restarted.# 当防火墙重启时,是否保存当前防火墙规则到iptables文件,默认不保存IPTABLES_SAVE_ON_RESTART="no"# Save (and restore) rule and chain counter.# Value: yes|no, default: no# Save counters for rules and chains to /etc/sysconfig/iptables if# 'service iptables save' is called or on stop or restart if SAVE_ON_STOP or# SAVE_ON_RESTART is enabled.# 重启时是否保存并恢复所有chain和规则中的数据包和字节计数器,默认否IPTABLES_SAVE_COUNTER="no"# Numeric status output# Value: yes|no, default: yes# Print IP addresses and port numbers in numeric format in the status output.# 输出的IP地址是数字的格式,而不是域名和主机名的形式,yes:(默认值)在状态输出中只包括IP地址,no:在状态输出中返回域名或主机名IPTABLES_STATUS_NUMERIC="yes"# Verbose status output# Value: yes|no, default: yes# Print info about the number of packets and bytes plus the "input-" and# "outputdevice" in the status output.# 输出iptables状态时,是否包含输入输出设备,默认是IPTABLES_STATUS_VERBOSE="no"# Status output with numbered lines# Value: yes|no, default: yes# Print a counter/number for every rule in the status output.# 输出iptables状态时,是否同时输出每条规则的匹配数,默认是IPTABLES_STATUS_LINENUMBERS="yes"# Reload sysctl settings on start and restart# Default: -none-# Space separated list of sysctl items which are to be reloaded on start.# List items will be matched by fgrep.# 在启动和重新启动时重新加载sysctl设置,指定配置文件#IPTABLES_SYSCTL_LOAD_LIST=".nf_conntrack .bridge-nf"# Set wait option for iptables-restore calls in seconds# Default: 600# Set to 0 to deactivate the wait.# 装载由iptables-save保存的规则集的等待时间,默认600秒,设置为0表示不等待#IPTABLES_RESTORE_WAIT=600# Set wait interval option for iptables-restore calls in microseconds# Default: 1000000# Set to 100000 to try to get the lock every 100000 microseconds, 10 times a# second.# Only usable with IPTABLES_RESTORE_WAIT > 0# 和上面一样,但单位是微秒#IPTABLES_RESTORE_WAIT_INTERVAL=1000000

June 13, 2019 · 2 min · jiezi

使用rsyslog单独保存iptables-log日志实践

前言iptables作为经典的软件防火墙大家已经很熟悉了,不过各位应该比较少会使用到log日志记录保存的功能。这次因为Ngnix stream模块的编译和获取realip(ngx_http_realip_module / ngx_stream_realip_module)的方案改动成本过高,退而求其次的方式是通过iptables做转发,需要解决的问题就是如何保存日志和按时间rotate。原本计划使用Filebeat直接接入EFK但因为某些原因暂时搁浅了,最后选择比较简单的rsyslog在本地服务器上做处理。 使用rsyslog单独保存iptables log日志实践更新历史2019年05月09日 - 初稿 阅读原文 - https://wsgzao.github.io/post... 扩展阅读 rsyslog - https://www.rsyslog.com/guides/How to Enable Logging in Iptables on Linux - https://tecadmin.net/enable-l... RedHat官方教程How to configure syslog to log the iptables messages to a different log file in Red Hat Enterprise Linux 5/6/7EnvironmentRed Hat Enterprise Linux 5Red Hat Enterprise Linux 6Red Hat Enterprise Linux 7syslog IssueHow to modify the iptables rules to let it log at the appropriate level?How to configure syslog to log the iptables messages to a different log file?To stop iptables messages to get logged into /var/log/messages ?Resolution# Make a backup of /etc/syslog.conf before making any changes to it.cp /etc/syslog.conf /etc/syslog.conf.bak# Edit /etc/syslog.conf with an editor such as vi and add lines:# comment iptables logkern.warning /var/log/iptables# Make sure the iptables rule is logging at the appropriate level. This can be done by using the log-level switch. Default log-level is warning.# Below example will log ssh attempts:iptables -I INPUT -p tcp --dport 22 -j LOG --log-level 4# Note: Log Levels can be found using command:man syslog# Note: Consider adding a prefix to your iptables rule. This makes it easier to separate the firewall message from the few random messages that the kernel puts out. # Below example use to log ping and add the prefix "#### Firewall ####".iptables -I INPUT -p icmp --icmp-type ping -j LOG --log-prefix "#### Firewall ####"# Note:- Follow below steps if iptables print all the logs on the console:-# Step1:- Add below entry in /etc/sysctl.confkernel.printk = 4 1 1 7# Step2:- Run below command to make changes effectively at runtime./sbin/sysctl -p /etc/sysctl.conf# Step3:- Check the changes at below file.cat /proc/sys/kernel/printk个人实践过程iptables防火墙日志# 修改防火墙NAT表中的PREROUTING和POSTROUTING链,添加自定义log-prefixvim /etc/sysconfig/iptables*nat:PREROUTING ACCEPT [0:0]:INPUT ACCEPT [0:0]:OUTPUT ACCEPT [0:0]:POSTROUTING ACCEPT [0:0]-A PREROUTING -p tcp -d <IP> --dport 443 -j LOG --log-prefix seatalk:-A PREROUTING -p tcp -d <IP> --dport 443 -j DNAT --to-destination 10.71.19.142:443-A POSTROUTING -j MASQUERADECOMMIT# 重启iptablesservice iptables reload配置rsyslog读取和保存iptables日志rsyslog 是一个 syslogd 的多线程增强版。现在 Fedora 和 Ubuntu, rhel6 默认的日志系统都是 rsyslog 了。 ...

May 14, 2019 · 2 min · jiezi

centos 6 iptables修改后无法保存的解决方法

自己弄了一个vultur的便宜vps,主要用来爬梯子,但是发现频繁的遭受暴力密码破解的攻击(里面啥都没有,破解个球。。。。)于是改端口,禁root登录,生成rsa文件,添加防火墙规则,重启ssh,可是发现仍然登不上去。竟然发现知识用了防火墙的reload,没有用restart命令。。。。。所以用vi改完 /etc/sysconfig/iptables 后,保存退出,然后启用service iptables restart重新登录,ok。然后世界清静了。

May 15, 2018 · 1 min · jiezi