GoGPT Best VPN GoSearch

סמל OnWorks

ferm - מקוון בענן

הפעל ferm בספק אירוח חינמי של OnWorks על אובונטו אונליין, פדורה אונליין, אמולטור מקוון של Windows או אמולטור מקוון של MAC OS

זוהי הפקודה ferm שניתן להפעיל בספק האירוח החינמי של OnWorks באמצעות אחת מתחנות העבודה המקוונות המרובות שלנו, כגון Ubuntu Online, Fedora Online, אמולטור מקוון של Windows או אמולטור מקוון של MAC OS

תָכְנִית:

שֵׁם


ferm - מנתח כללים של חומת אש עבור לינוקס

תַקצִיר


פרם אפשרויות קובץ קלט

תיאור


פרם מהווה חזית עבור iptables. הוא קורא את הכללים מקובץ תצורה מובנה
ושיחות iptables(8) כדי להכניס אותם לגרעין הפועל.

פרםמטרתו היא להפוך את כללי חומת האש לקלים לכתיבה וקלים לקריאה. הוא מנסה לצמצם
המשימה המייגעת של כתיבת כללים, ובכך לאפשר למנהל חומת האש להוציא
יותר זמן לפיתוח כללים טובים מאשר יישום נכון של הכלל.

כדי להשיג זאת, פרם משתמש בשפת תצורה פשוטה אך רבת עוצמה, המאפשרת
משתנים, פונקציות, מערכים, בלוקים. זה גם מאפשר לך לכלול קבצים אחרים, מה שמאפשר
לך ליצור ספריות של מבנים ופונקציות נפוצות.

פרם, מבוטא "חזק", מייצג "ליצירת כללים קלה".

זהירות


דף מדריך זה עושה זאת לֹא להיכנס כדי ללמד אותך איך חומת אש עובדת ואיך לכתוב טוב
כללים. יש כבר מספיק תיעוד בנושא זה.

מבוא


נתחיל בדוגמה פשוטה:

שרשרת INPUT {
proto tcp קבל;
}

זה יוסיף כלל לשרשרת הקלט המוגדרת מראש, התאמה וקבלת כל tcp
מנות. אוקיי, בוא נעשה את זה יותר מסובך:

שרשרת (INPUT OUTPUT) {
פרוטו (udp tcp) קבל;
}

זה יכניס 4 כללים, כלומר 2 בקלט שרשרת, ו-2 בפלט שרשרת, התאמה ו
מקבל גם חבילות udp וגם tcp. בדרך כלל היית כותב את זה:

iptables -A INPUT -p tcp -j קבל
iptables -A OUTPUT -p tcp -j קבל
iptables -A INPUT -p udp -j קבל
iptables -A OUTPUT -p udp -j קבל

שימו לב כמה פחות אנחנו צריכים להקליד? :-)

בעיקרון, זה כל מה שיש בזה, אם כי אתה יכול לעשות את זה די יותר מורכב.
משהו שצריך להסתכל עליו:

שרשרת INPUT {
מדיניות קבל;
daddr 10.0.0.0/8 proto tcp dport! ftp jump mychain sport :1023 TOS 4 settos 8 סימן 2;
daddr 10.0.0.0/8 proto tcp dport ftp REJECT;
}

הנקודה שלי כאן היא ש*אתה* צריך לעשות חוקים נחמדים, לשמור אותם קריאים לך
אחרים, ולא להפוך את זה לבלגן.

זה יעזור לקורא אם כללי חומת האש שהתקבלו יוצבו כאן לעיון.
כמו כן, אתה יכול לכלול את הגרסה המקוננת עם קריאה טובה יותר.

נסה להשתמש בהערות כדי להראות מה אתה עושה:

# שורה זו מאפשרת http-proxy שקוף עבור הרשת הפנימית:
proto tcp if eth0 daddr! 192.168.0.0/255.255.255.0
dport http REDIRECT ליציאות 3128;

אתה תהיה אסיר תודה על זה מאוחר יותר!

שרשרת INPUT {
מדיניות קבל;
ממשק (eth0 ppp0) {
# שלל גישה להאקרים ידועים, חזור לכאן אם אין התאמה
נמצא ש-# מחדש חומת אש רגילה
רעלים לקפוץ;

פרוטוקול tcp jump fw_tcp;
פרוטוקול udp jump fw_udp;
}
}

ככל שאתה מקנן יותר, כך זה נראה טוב יותר. ודא שהסדר שאתה מציין נכון, אתה
לא רוצה לעשות את זה:

שרשרת FORWARD {
פרוטו ! udp DROP;
proto tcp dport ftp קבל;
}

כי הכלל השני לעולם לא יתאים. הדרך הטובה ביותר היא לציין קודם כל כלומר
מותר, ולאחר מכן להכחיש את כל השאר. תסתכל על הדוגמאות לעוד תמונות טובות.
רוב האנשים עושים דבר כזה:

proto tcp {
dport (
ssh http ftp
) קבל;
dport 1024:65535! syn קבל;
יְרִידָה;
}

מבנה OF A חומת אש קובץ


המבנה של קובץ חומת אש תקין נראה כמו קוד C פשוט. רק כמה
תווים תחביריים משמשים בקבצי תצורה של ferm. חוץ מזה המיוחדים האלה
אופי, ferm משתמשת ב'מפתחות' ו'ערכים', תחשוב עליהם כאפשרויות ופרמטרים, או כעל
משתנים וערכים, מה שלא יהיה.

עם המילים האלה, אתה מגדיר את המאפיינים של חומת האש שלך. כל חומת אש
מורכב משני דברים: ראשית, בדוק אם תעבורת הרשת תואמת לתנאים מסוימים, וכן
שנית, מה לעשות עם התנועה הזו.

אתה יכול לציין תנאים שתקפים עבור תוכנית ממשק הליבה שבה אתה משתמש,
כנראה iptables(8). לדוגמה, ב-iptables, כאשר אתה מנסה להתאים מנות tcp,
היית אומר:

iptables --פרוטוקול tcp

ב-ferm, זה יהפוך ל:

פרוטוקול tcp;

רק להקליד את זה ב-ferm לא עושה כלום, אתה צריך להגיד ל-ferm (למעשה, אתה צריך
לספר iptables(8) והקרנל) מה לעשות עם כל תעבורה שתואמת את התנאי הזה:

iptables --פרוטוקול tcp -j קבל

או, בתרגום ל פרם:

פרוטוקול tcp קבל;

השמיים ; אופי נמצא בסוף כל כלל פרם. Ferm מתעלם מעברי שורות, כלומר
הדוגמה לעיל זהה לדוגמא הבאה:

פרוטוקול tcp
לְקַבֵּל;

הנה רשימה של הדמויות המיוחדות:

; דמות זו מסיימת כלל.

מופרדים בנקודה-פסיק, אתה יכול לכתוב כללים מרובים בשורה אחת, למרות זאת
מקטין את הקריאות:

פרוטוקול tcp קבל; פרוטוקול udp DROP;

{} סמל הקינון מגדיר 'גוש' של כללים.

הסוגריים המתולתלים מכילים כל מספר של כללים מקוננים. כל המשחקים לפני ה
בלוק מועברים אליהם.

הסוגר המתולתל הסוגר מסיים את ערכת החוקים. אתה לא צריך לכתוב ';' לאחר
זה, כי זה יהיה כלל ריק.

דוגמא:

שרשרת INPUT proto icmp {
icmp-type echo-request קבל;
יְרִידָה;
}

בלוק זה מציג שני כללים בתוך בלוק, ששניהם ימוזגו עם כל דבר
לפניו, אז תקבלו שני כללים:

iptables -A INPUT -p icmp --icmp-type echo-request -j קבל
iptables -A INPUT -p icmp -j DROP

יכולות להיות מספר רמות קינון:

שרשרת INPUT {
פרוטו icmp {
icmp-type echo-request קבל;
יְרִידָה;
}
daddr 172.16.0.0/12 דחייה;
}

שים לב שכלל 'REJECT' אינו מושפע מ-'proto icmp', למרות שאין
';' אחרי הסד המתולתל הסוגר. תורגם ל-iptables:

iptables -A INPUT -p icmp --icmp-type echo-request -j קבל
iptables -A INPUT -p icmp -j DROP
iptables -A INPUT -d 172.16.0.0/12 -j דחייה

$ הרחבה משתנה. מחליף את '$FOO' בערך של המשתנה. עיין בסעיף
וריאציות לקבלת פרטים.

& קריאת פונקציה. עיין בסעיף פונקציות לקבלת פרטים.

() סמל המערך. באמצעות הסוגריים, ניתן להגדיר 'רשימה' של ערכים
יש להחיל את המפתח משמאל לו.

דוגמא:

פרוטוקול (tcp udp icmp)

זה יביא לשלושה כללים:

... -p tcp ...
... -p udp ...
... -p icmp ...

רק ערכים יכולים להיות 'רשומים', אז אתה לא יכול לעשות דבר כזה:

proto tcp (ACCEPT LOG);

אבל אתה יכול לעשות את זה:

שרשרת (INPUT OUTPUT FORWARD) פרוטו (icmp udp tcp) DROP;

(מה שיגרום לתשעה כללים!)

הערכים מופרדים על ידי רווחים. סמל המערך הוא גם שמאל וימין-
אסוציאטיבי, בניגוד לגוש הקינון, שהוא שמאל-אסוציאטיבי בלבד.

" # " סמל ההערה. כל מה שעוקב אחרי הסמל הזה עד סוף השורה הוא
התעלם.

"`פקודה`"
בצע את הפקודה במעטפת, והכנס את פלט התהליך. עיין בסעיף
תיקונים אחוריים לקבלת פרטים.

'חוּט'
ציטוט מחרוזת שעשויה להכיל רווחים לבנים, סימן דולר וכו'.

LOG log-prefix 'היי, זו קידומת היומן שלי!';

"חוּט"
ציטוט מחרוזת (ראה למעלה), אבל הפניות משתנות עם סימן דולר כן
העריך:

DNAT ל-"$myhost:$myport";

מילות מפתח
בסעיף הקודם, כבר הצגנו כמה מילות מפתח בסיסיות כמו "שרשרת",
"פרוטוקול" ו"קבל". בואו נחקור את הטבע שלהם.

ישנם שלושה סוגים של מילות מפתח:

· מיקום מילות מפתח מגדירות היכן ייווצר כלל. דוגמה: "שולחן", "שרשרת".

· להתאים מילות מפתח מבצעות בדיקה על כל החבילות העוברות. הכלל הנוכחי הוא בלי
השפעה אם אחד (או יותר) מההתאמות לא עובר. דוגמה: "פרוטו", "daddr".

רוב ההתאמות עוקבות אחר פרמטר: "proto tcp", "daddr 172.16.0.0/12".

· יעד מילות מפתח מציינות מה לעשות עם חבילה. דוגמה: "קבל", "דחה",
"קְפִיצָה".

יעדים מסוימים מגדירים יותר מילות מפתח לציון פרטים: "דחה דחייה-עם icmp-
רשת בלתי ניתנת להשגה".

כל כלל מורכב מא מיקום וכן יעד, בתוספת כל מספר של גפרורים:

מסנן טבלה # מיקום
proto tcp dport (http https) # התאמה
לְקַבֵּל; מטרה אחת

באופן קפדני, יש סוג רביעי: פרם מילות מפתח (ששולטות בפנים של ferm
התנהגות), אך הם יוסברו בהמשך.

פרמטרים
מילות מפתח רבות לוקחות פרמטרים. ניתן לציין את אלה בתור מילוליות, הפניות משתנות או
רשימות (מערכים):

פרוטו udp
saddr $TRUSTED_HOSTS;
proto tcp dport (http https ssh);
LOG-alert log-alert "funky wardriver: ";

ניתן לשלול חלק מהם (לא ניתן לשלול רשימות):

proto !esp;
proto udp dport !domain;

מילות מפתח שאינן מקבלות פרמטרים נשללות על ידי הקידומת '!':

פרוטו tcp !syn;

חומר עיוני iptables(8) כדי לראות היכן ! יכול לשמש.

בסיסי מילות מפתח


מקום מילות מפתח
תחום [ip|ip6]
הגדר את הדומיין. "ip" הוא ברירת המחדל ופירושו "IPv4" (iptables). "ip6" מיועד ל-IPv6
תמיכה, באמצעות "ip6tables".

שולחן [filter|nat|mangle]
מציין לאיזו טבלת netfilter הכלל הזה יוכנס: "filter" (ברירת מחדל),
"נט" או "מנגל".

שרשרת [שם שרשרת]
מציין את שרשרת ה-netfilter (בתוך הטבלה הנוכחית) כלל זה יהיה
מוכנס ל. שמות שרשרת מוגדרים מראש הנפוצים הם "INPUT", "OUTPUT", "FORWARD",
"PREROUTING", "POSTROUTING", בהתאם לטבלה. ראה את ה-netfilter
תיעוד לפרטים.

אם תציין כאן שרשרת לא קיימת, ferm תוסיף את הכלל לשרשרת מותאמת אישית
עם השם הזה.

מדיניות [קבל|הורד|..]
מציין את מדיניות ברירת המחדל עבור השרשרת הנוכחית (מובנית בלבד). יכול להיות אחד מהם
המטרות המובנות (קבל, DROP, REJECT, ...). חבילה שאינה תואמת כללים
בשרשרת יטופל כמפורט בפוליסה.

כדי למנוע אי בהירות, ציין תמיד את המדיניות של כל הרשתות המוגדרות מראש
בִּמְפוּרָשׁ.

@subchain ["שם שרשרת"] { ... }
עובד כמו אופרטורי הבלוק הרגילים (כלומר ללא @subchain מילת מפתח), למעט
זֶה פרם מעביר כללים בתוך הפלטה המתולתלת לשרשרת מותאמת אישית חדשה. השם
עבור שרשרת זו נבחרת אוטומטית על ידי ferm.

במקרים רבים, זה מהיר יותר מסתם חסימה, מכיוון שהקרנל עשוי לדלג על א
גוש עצום של כללים כאשר תנאי מוקדם הוא שקרי. דמיינו את הדוגמה הבאה:

שרשרת מסנן טבלה INPUT {
saddr (1.2.3.4 2.3.4.5 3.4.5.6 4.5.6.7 5.6.7.8) {
proto tcp dport (http https ssh) קבל;
proto udp dport domain ACCEPT;
}
}

זה יוצר 20 כללים. כאשר מגיעה חבילה שאינה עוברת את saddr
להתאים, הוא בכל זאת בודק את כל 20 הכללים. עם @subchain, בדיקה זו מתבצעת
פעם אחת, וכתוצאה מכך סינון רשת מהיר יותר ועומס פחות מעבד:

שרשרת מסנן טבלה INPUT {
saddr (1.2.3.4 2.3.4.5 3.4.5.6 4.5.6.7 5.6.7.8) @subchain {
proto tcp dport (http https ssh) קבל;
proto udp dport domain ACCEPT;
}
}

לחלופין, תוכל להגדיר את שם תת-השרשרת:

saddr (1.2.3.4 2.3.4.5 3.4.5.6) @subchain "foobar" {
proto tcp dport (http https ssh) קבל;
proto udp dport domain ACCEPT;
}

השם יכול להיות מחרוזת מצוטטת מילולית, או ביטוי ferm מורחב
כגון @cat("interface_", $iface) או @substr($var,0,20).

אתה יכול להשיג את אותו הדבר על ידי הכרזה מפורשת על שרשרת מותאמת אישית, אבל אתה עשוי להרגיש
זה באמצעות @subchain דורש פחות הקלדה.

בסיסי iptables להתאים מילות מפתח
ממשק [שם ממשק]
הגדר את שם הממשק, כרטיס הרשת החיצוני שלך, כמו eth0, או חיוג כמו
ppp1, או כל מכשיר שתרצה להתאים להעברת מנות. זה שווה ערך
למתג "-i" פנימה iptables(8).

פנים חיצוניות [שם ממשק]
זהה לממשק, רק עבור התאמת הממשק היוצא עבור מנה, כמו ב
iptables(8).

פרוטוקול [שם-פרוטוקול|מספר-פרוטוקול]
כרגע נתמכים על ידי הליבה tcp, udp ו-icmp, או בהתאמה שלהם
מספרים.

סאדר|אבא [מפרט כתובת]
התאמות על מנות שמקורן בכתובת שצוינה (saddr) או ממוקדות אליה
הכתובת (daddr).

דוגמאות:

saddr 192.168/8 קבל; # (זהה לזה הבא:)
saddr 192.168.0.0/255.255.255.0 קבל;
daddr my.domain.com קבל;

שבר
ציין שיש להתאים רק מנות IP מקוטעות. כאשר מנות הן
גדול יותר מגודל החבילה המקסימלי שהמערכת שלך יכולה להתמודד (נקרא מקסימום
יחידת שידור או MTU) הם ייחתכו לביטים וישלחו אחד אחד כ
חבילות בודדות. לִרְאוֹת ifconfig(8) אם אתה רוצה למצוא את ה-MTU עבור המערכת שלך (ה
ברירת המחדל היא בדרך כלל 1500 בתים).

פרגמנטים משמשים לעתים קרובות בהתקפות DOS, כי אין דרך למצוא
לגלות את המקור של חבילת קטעים.

ספורט|דפורט [מפרט יציאה]
התאמה על מנות ביציאת TCP או UDP שצוינו. "ספורט" תואם את המקור
port, ו-dport תואם את יציאת היעד.

ניתן להשתמש בהתאמה זו רק לאחר שציינת "פרוטוקול tcp" או "פרוטוקול udp",
כי רק לשני הפרוטוקולים הללו יש למעשה יציאות.

וכמה דוגמאות ליציאות/טווחים חוקיים:

dport 80 קבל;
dport http קבל;
dport ssh:http קבל;
dport 0:1023 קבל; # שווה ערך ל:1023
dport 1023:65535 קבל;

syn ציין שיש להתאים את דגל SYN בחבילת tcp, אשר רגילים אליו
לבנות חיבורי tcp חדשים. אתה יכול לזהות קשרים נכנסים עם זה, ו
להחליט אם אתה רוצה לאפשר את זה או לא. מנות שאין להן דגל זה הן
כנראה מחיבור שכבר נוצר, אז זה נחשב סביר
בטוח לשחרר אותם.

מודול [שם מודול]
טען מודול iptables. רוב המודולים מספקים יותר מילות מפתח בהתאמה. אנחנו נגיע
זאת מאוחר יותר.

בסיסי יעד מילות מפתח
לקפוץ [שם שרשרת מותאם אישית]
קופץ לשרשרת מותאמת אישית. אם שום כלל בשרשרת המותאמת אישית לא תואם, netfilter חוזר
לכלל הבא בשרשרת הקודמת.

realgoto [שם שרשרת מותאם אישית]
עבור לרשת מותאמת אישית. לא כמו ה לקפוץ אוֹפְּצִיָה, לַחֲזוֹר לא ימשיך בעיבוד
בשרשרת הזו אבל במקום זאת בשרשרת שקראה לנו דרך לקפוץ.

מילת המפתח realgoto נבחר בתקופת המעבר, כי goto
(כבר הוצא משימוש) היה בעבר כינוי עבור לקפוץ.

מסכים מקבל מנות תואמות.

DROP זרוק מנות תואמות ללא הודעה נוספת.

דחה דוחה מנות תואמות, כלומר שולח חבילת ICMP לשולח, שהיא פורט-
לא ניתן להגיע כברירת מחדל. אתה יכול לציין סוג ICMP אחר.

לִדחוֹת; # ברירת המחדל היא icmp-port-unreachable
REJECT reject-עם icmp-net-unreachable;

הקלד "iptables -j REJECT -h" לפרטים.

לַחֲזוֹר סיים את השרשרת הנוכחית וחזור לשרשרת המתקשרת (אם "קפוץ
[Custom-chain-name]" נעשה שימוש).

NOP שום פעולה בכלל.

נוֹסָף מילות מפתח


Netfilter הוא מודולרי. מודולים עשויים לספק יעדים נוספים ולהתאים מילות מפתח. הרשימה
של מודולי netfilter צומח כל הזמן, ו-ferm מנסה לעמוד בקצב התמיכה בהם
את כל. פרק זה מתאר מודולים הנתמכים כעת.

iptables להתאים מודולים
חשבון תעבורת חשבון עבור כל המארחים ברשת/מסכת רשת מוגדרת. זה אחד מה
להתאים מודולים שמתנהגים כמו יעד, כלומר תצטרך בעיקר להשתמש ב- NOP
יעד.

חשבון mod aname mynetwork aaddr 192.168.1.0/24 ashort NOP;

addrtype
בדוק את סוג הכתובת; כתובת מקור או כתובת יעד.

mod addrtype שידור מסוג src;
mod adrtype dst-type LOCAL;

הקלד "iptables -m addrtype -h" לפרטים.

ah בודק את כותרת ה-SPI בחבילת AH.

mod ah ahspi 0x101;
מוד אה אהספי ! 0x200:0x2ff;

ארגומנטים נוספים עבור IPv6:

mod ah ahlen 32 קבל;
mod ah ahlen !32 קבל;
mod ah ahres קבל;

הערה מוסיף הערה של עד 256 תווים לכלל, ללא השפעה. ציין זאת
בניגוד להערות ferm ('#'), זה יופיע ב-"iptables -L".

תגובה תגובה "זוהי התגובה שלי." לְקַבֵּל;

מצב
מתאים אם הערך ב-/proc/net/ipt_condition/NAME הוא 1 (הנתיב הוא
/proc/net/ip6t_condition/NAME עבור דומיין ip6).

מצב מצב mod (abc def) קבל;
מצב מצב !foo קבל;

קונבייטים
התאם לפי כמה בתים או מנות חיבור (או אחת משתי הזרימות
המהווים את החיבור) הועברו עד כה, או לפי בייטים ממוצעים לכל
חֲבִילָה.

mod connbytes connbytes 65536: connbytes-dir שני ה-connbytes-mode bytes ACCEPT;
mod connbytes connbytes !1024:2048 connbytes-dir תשובה connbytes-mode packets קבל;

ערכים חוקיים עבור connbytes-dir: מְקוֹרִי, תשובה, שניהם; ל connbytes-mode:
מנות, בתים, avgpkt.

חיבור
מאפשר להגביל את מספר חיבורי TCP מקבילים לשרת לכל
כתובת IP של הלקוח (או חסימת כתובת).

mod connlimit connlimit-מעל 4 REJECT;
mod connlimit connlimit-מעל !4 קבל;
mod connlimit connlimit-מעל 4 connlimit-mask 24 REJECT;

connmark
סמן את שדה הסימון המשויך לחיבור, שהוגדר על ידי יעד CONNMARK.

mod connmark סימן 64;
mod connmark סימן 6/7;

קונטראק
בדוק מידע על מעקב אחר חיבור.

mod conntrack ctstate (קשורים מבוססים);
mod conntrack ctproto tcp;
mod conntrack ctorigsrc 192.168.0.2;
mod conntrack ctorigdst 1.2.3.0/24;
mod conntrack ctorigsrcport 67;
mod conntrack ctorigdstport 22;
mod conntrack ctreplsrc 2.3.4.5;
mod conntrack ctrepldst ! 3.4.5.6;
mod conntrack ctstatus ASSURED;
mod conntrack ctexpire 60;
mod conntrack ctexpire 180:240;

הקלד "iptables -m conntrack -h" לפרטים.

dccp בדוק תכונות ספציפיות של DCCP (Datagram Congestion Control Protocol). זֶה
המודול נטען אוטומטית כאשר אתה משתמש ב"פרוטוקול dccp".

proto dccp sport 1234 dport 2345 קבל;
proto dccp dccp-types (SYNCACK ACK) קבל;
proto dccp dccp-types !REQUEST DROP;
proto dccp dccp-option 2 קבל;

dscp התאם את שדה DSCP של 6 סיביות בתוך שדה ה-TOS.

mod dscp dscp 11;
mod dscp dscp-class AF41;

ecn התאם את סיביות ה-ECN של כותרת IPv4 TCP.

mod ecn ecn-tcp-cwr;
mod ecn ecn-tcp-ece;
mod ecn ecn-ip-ect 2;

הקלד "iptables -m ecn -h" לפרטים.

ESP בודק את כותרת ה-SPI בחבילת ESP.

mod esp esppi 0x101;
mod esp esppi! 0x200:0x2ff;

eui64 "מודול זה תואם לחלק EUI-64 של כתובת IPv6 בעלת תצורה אוטומטית ללא מצב.
הוא משווה את ה-EUI-64 הנגזר מכתובת ה-MAC המקור במסגרת Ehternet עם
64 הסיביות התחתונות של כתובת המקור IPv6. אבל קצת "אוניברסלי/מקומי" לא
בהשוואה. מודול זה אינו תואם למסגרת אחרת של שכבת קישור, והוא תקף רק ב
שרשראות PREROUTING, INPUT ו-FORWARD."

mod eui64 קבל;

מְעוּרפָּל "מודול זה תואם מגבלת קצב המבוססת על בקר לוגי מעורפל [FLC]."

mod fuzzy גבול תחתון 10 גבול עליון 20 קבל;

hbh תואם את הכותרת של אפשרויות הופ-אחר-הופ (ip6).

mod hbh hbh-len 8 קבל;
mod hbh hbh-len !8 קבל;
mod hbh hbh-opts (1:4 2:8) קבל;

hl תואם את השדה Hop Limit (ip6).

mod hl hl-eq (8 10) קבל;
mod hl hl-eq !5 קבל;
mod hl hl-gt 15 קבל;
mod hl hl-lt ​​2 קבל;

עוזר בודק איזה מודול עוזר עוקב אחר חיבור זה. הנמל עשוי להיות
צוין עם "-portnr".

mod helper helper irc קבל;
mod helper helper ftp-21 קבל;

icmp בדוק תכונות ספציפיות של ICMP. מודול זה נטען אוטומטית בעת השימוש
"פרוטוקול icmp".

proto icmp icmp-type echo-request קבל;

ניתן להשתמש באפשרות זו גם ב-be ip6 תחום, למרות שזה נקרא icmpv6 in
טבלאות ip6.

השתמש ב-"iptables -p icmp "-h"" כדי לקבל רשימה של סוגי ICMP חוקיים.

iprange התאם טווח של כתובות IPv4.

mod iprange src-range 192.168.2.0-192.168.3.255;
mod iprange dst-range ! 192.168.6.0-192.168.6.255;

ipv4options
התאמה לאפשרויות כותרות IPv4 כמו ניתוב מקור, הקלטת מסלול, חותמת זמן ו
התראת נתב.

mod ipv4options ssrr קבל;
mod ipv4options lsrr קבל;
mod ipv4options no-srr קבל;
mod ipv4options !rr קבל;
mod ipv4options !ts ACCEPT;
mod ipv4options !ra קבל;
mod ipv4options !any-opt קבל;

ipv6header
תואם את הכותרת של תוסף IPv6 (ip6).

mod ipv6header header !(hop frag) קבל;
mod ipv6header header (auth dst) ACCEPT;

הגבלת hashlimit
דומה ל-'mod limit', אבל מוסיף את היכולת להוסיף לפי יעד או לכל יציאה
מגבלות המנוהלות בטבלת hash.

mod hashlimit hashlimit 10/דקה hashlimit-פרץ 30/דקה
hashlimit-mode dstip hashlimit-name foobar קבל;

ערכים אפשריים עבור hashlimit-mode: dstip dstport srcip srcport (או רשימה עם
יותר מאחד מאלה).

יש עוד הגדרות אפשריות, הקלד "iptables -m hashlimit -h" עבור
תיעוד.

אורך בדוק את אורך החבילה.

אורך מוד אורך 128; # בדיוק 128 בתים
אורך מוד 512:768; # טווח
אורך מוד אורך! 256; # מבוטל

להגביל מגביל את קצב החבילות.

מגבלת mod מגבלת 1/שנייה;
מגבלת mod limit 15/minute limit-burst 10;

הקלד "iptables -m limit -h" לפרטים.

מק התאם את כתובת ה-MAC המקור.

mod mac mac-source 01:23:45:67:89;

סימן מתאים למנות על סמך שדה סימן ה-netfilter שלהן. זה עשוי להיות מספר שלם של 32 סיביות
בין 0 לבין 4294967295.

מוד סימן סימן 42;

mh מתאים לכותרת הניידות (דומיין ip6).

עדכון מחייב מסוג proto mh mh קבל;

רב יציאות
התאם קבוצה של יציאות מקור או יעד (UDP ו-TCP בלבד).

יציאות מקור מרובות יציאות mod (https ftp);
יציאות יעד מרובות יציאות mod (דומיין mysql);

לכלל הזה יש יתרון גדול על "dport" ו-"sport": הוא מייצר כלל אחד בלבד
עבור עד 15 יציאות במקום כלל אחד לכל יציאה.

נ ' התאם כל חבילה א'.

mod nth כל 3;
mod nth counter 5 כל 2;
mod nth start 2 כל 3;
mod nth start 5 packet 2 כל 6;

הקלד "iptables -m nth -h" לפרטים.

OSF התאם מנות בהתאם למערכת ההפעלה של השולח.

ז'אנר mod osf לינוקס;
mod osf! ז'אנר FreeBSD ttl 1 log 1;

הקלד "iptables -m osf -h" לפרטים.

בעלים בדוק מידע על יוצר החבילות, כלומר מזהה משתמש, מזהה קבוצה, מזהה תהליך,
מזהה הפעלה ושם פקודה.

mod בעל uid-owner 0;
mod בעל gid-owner 1000;
בעל mod pid-owner 5432;
בעל מוד צד-בעלים 6543;
בעל מוד cmd-owner "sendmail";

("cmd-owner", "pid-owner" ו-"sid-owner" דורשים תיקוני ליבה מיוחדים לא
כלול בקרנל וניל לינוקס)

physdev מתאים למכשיר הפיזי שבו חבילה נכנסה או עומדת לצאת
מְכוֹנָה. זה שימושי עבור ממשקים מגושרים.

mod physdev physdev-in ppp1;
mod physdev physdev-out eth2;
mod physdev physdev-is-in;
mod physdev physdev-is-out;
mod physdev physdev-מגושר;

pkttype בדוק את סוג חבילת שכבת הקישור.

mod pkttype unicast מסוג pkt;
mod pkttype שידור מסוג pkt;
mod pkttype multicast מסוג pkt;

מדיניות תואם את מדיניות IPsec המוחלת על חבילה זו.

מדיניות mod dir out pol ipsec קבל;
מדיניות mod מחמירה דרושה 23 spi 0x10 proto ah קבל;
mod policy mode tunnel tunnel-src 192.168.1.2 קבל;
mod policy mode tunnel tunnel-dst 192.168.2.1 קבל;
מדיניות mod מחמירה next reqid 24 spi 0x11 קבל;

שים לב כי מילת המפתח פרוטו משמש גם כגרסת קיצור של פרוטוקול
(מודול התאמה מובנה). אתה יכול לתקן את ההתנגשות על ידי שימוש תמיד ב-long
מילות מפתח פרוטוקול.

PSD זיהוי סריקות יציאות TCP/UDP.

mod psd psd-weight-threshold 21 psd-delay-threshold 300
psd-lo-ports-weight 3 psd-hi-ports-weight 1 DROP;

מכסת מיישמת מכסות רשת על ידי הפחתת מונה בתים עם כל מנה.

מכסת mod 65536 קבל;

אקראי התאם אחוז אקראי מכל החבילות.

mod ממוצע אקראי 70;

תחום התאם את תחום הניתוב. שימושי בסביבות המשתמשות ב-BGP.

mod realm realm 3;

לאחרונה סמן באופן זמני כתובות IP מקור.

mod סט אחרון;
mod אחרונים rcheck שניות 60;
mod ההגדרה האחרונה rsource name "badguy";
mod האחרון קבע rdest;
mod לאחרונה rcheck rsource שם "badguy" שניות 60;
mod עדכון אחרון שניות 120 hitcount 3 rttl;

למודול netfilter זה יש פגם עיצובי: למרות שהוא מיושם כהתאמה
מודול, יש לו התנהגות כמו מטרה בעת שימוש במילת המפתח "סט".

<http://snowman.net/projects/ipt_recent/>

rt התאם את כותרת הניתוב של IPv6 (ip6 בלבד).

mod rt rt-type 2 rt-len 20 קבל;
mod rt rt-type !2 rt-len !20 קבל;
mod rt rt-segsleft 2:3 קבל;
mod rt rt-segsleft !4:5 קבל;
mod rt rt-0-res rt-0-addrs (::1 ::2) rt-0-not-strict קבל;

sctp בדוק תכונות ספציפיות של SCTP (Stream Control Transmission Protocol). זֶה
המודול נטען אוטומטית כאשר אתה משתמש ב"פרוטוקול sctp".

proto sctp sport 1234 dport 2345 קבל;
proto sctp chunk-types בלבד DATA:Be ACCEPT;
proto sctp chunk-types any (INIT INIT_ACK) קבל;
proto sctp chunk-types !all (HEARTBEAT) קבל;

השתמש ב-"iptables -p sctp "-h"" כדי לקבל רשימה של סוגי נתחים חוקיים.

סט בודק את המקור או היעד IP/Port/MAC מול קבוצה.

ערכת mod set badguys src DROP;

לִרְאוֹתhttp://ipset.netfilter.org/למידע נוסף.

היו בודק את מצב מעקב החיבור.

מצב מצב DROP לא חוקי;
מצב מצב (בהתאם קשור) קבל;

הקלד "iptables -m state -h" לפרטים.

נתון
יורש של נ ' ו אקראי, כרגע לא מתועד ב- iptables(8) דף אדם.

mod statistic mode הסתברות אקראית 0.8 קבל;
מצב סטטיסטי mod nth כל 5 מנות 0 DROP;

מחרוזת תואם מחרוזת.

מחרוזת mod "foo bar" קבל;
מחרוזת mod algo kmp מ-64 ל-128 מחרוזת משושה "deadbeef" קבל;

TCP בודק תכונות ספציפיות ל-TCP. מודול זה נטען אוטומטית בעת השימוש
"פרוטוקול tcp".

proto tcp sport 1234;
proto tcp dport 2345;
proto tcp tcp-flags (SYN ACK) SYN;
פרוטו tcp tcp-flags ! (SYN ACK) SYN;
proto tcp tcp-flags ALL (RST ACK);
proto tcp syn;
proto tcp tcp-אופציה 2;
proto tcp mss 512;

הקלד "iptables -p tcp -h" לפרטים.

tcpmss בדוק את השדה TCP MSS של חבילת SYN או SYN/ACK.

mod tcpmss mss 123 קבל;
mod tcpmss mss 234:567 קבל;

זמן בדוק אם השעה שבה חבילה מגיעה היא בטווח נתון.

זמן מוד התחלה זמן 12:00;
mod time timestop 13:30;
ימי זמן מוד (שני רביעי ו');
תאריך התחלה של mod time 2005:01:01;
mod time datestart 2005:01:01:23:59:59;
mod time datestop 2005:04:01;
mod time monthday (30 31);
mod time בימי חול (ד' ה');
זמן מוד התחלה זמן 12:00 UTC;
mod time timestart 12:00 localtz;

הקלד "iptables -m time -h" לפרטים.

tos מתאים לחבילה על ערך ה-TOS שצוין.

mod tos tos Minim-Cost AcCEPT;
mod tos tos !Normal-Service קבל;

הקלד "iptables -m tos -h" לפרטים.

Ttl מתאים לשדה ttl (זמן לחיות) בכותרת ה-IP.

mod ttl ttl-eq 12; # tl שווה
mod ttl ttl-gt 10; # tl גדול מ
mod ttl ttl-lt 16; # tl פחות מ

u32 משווה נתונים גולמיים מהחבילה. אתה יכול לציין יותר ממסנן אחד ב-ferm
רשימה; אלה אינם מורחבים למספר כללים.

mod u32 u32 '6&0xFF=1' קבל;
mod u32 u32 ('27&0x8f=7' '31=0x527c4833') DROP;

טָמֵא מתאים לחבילות שנראות פגומות או חריגות. למשחק הזה אין עוד
פרמטרים.

iptables יעד מודולים
היעדים הנוספים הבאים זמינים ב-ferm, בתנאי שהפעלת אותם ב
הגרעין שלך:

לסווג
הגדר את שיעור CBQ.

CLASSIFY סט-מעמד 3:50;

CLUSTERIP
הגדר אשכול פשוט של צמתים החולקים כתובת IP ו-MAC מסוימת.
החיבורים מחולקים באופן סטטי בין הצמתים.

CLUSTERIP new hashmode sourceip clustermac 00:12:34:45:67:89
total-nodes 4 local-node 2 hash-init 12345;

CONNMARK
מגדיר את ערך סימן ה-netfilter המשויך לחיבור.

CONNMARK set-mark 42;
CONNMARK save-mark;
CONNMARK שחזור סימן;
CONNMARK save-mark mask 0x7fff;
מסיכת סימן שחזור CONNMARK 0x8000;

CONNSECMARK
מודול זה מעתיק סימוני אבטחה ממנות לחיבורים (אם לא מסומנים),
ומחיבורים חזרה למנות (גם אם לא מסומנים). משמש בדרך כלל ב
בשילוב עם SECMARK, זה תקף רק בטבלת המנגל.

CONNSECMARK לשמור;
שחזור CONNSECMARK;

DTA ל [כתובת IP|טווח IP|טווח יציאות IP]
שנה את כתובת היעד של החבילה.

DNAT ל-10.0.0.4;
DNAT עד 10.0.0.4:80;
DNAT ל-10.0.0.4:1024-2048;
DNAT ל-10.0.1.1-10.0.1.20;

ECN יעד זה מאפשר לעבוד באופן סלקטיבי סביב חורים שחורים ידועים ב-ECN. זה יכול רק
לשמש בטבלת המנגל.

ECN ecn-tcp-remove;

HL שנה את השדה IPv6 Hop Limit (ip6/mangle בלבד).

HL hl-set 5;
HL hl-dec 2;
HL hl-inc 1;

IPV4OPTSSTRIP
הסר את כל אפשרויות ה-IP מחבילה. מודול זה אינו לוקח שום אפשרויות.

IPV4OPTSSTRIP;

LOG רישום את כל החבילות התואמות את הכלל הזה ביומן הליבה. היזהר עם יומן
שִׁיטָפוֹן. שימו לב שמדובר ב"יעד לא מסתיים", כלומר חציית כללים
ממשיך בכלל הבא.

יומן אזהרה ברמת יומן הקידומת "תסתכל על זה: ";
LOG log-tcp-sequence log-tcp-options;
LOG log-ip-Options;

סימן מגדיר את שדה הסימן netfilter עבור החבילה (מספר שלם של 32 סיביות בין 0 ל-
4294967295):

MARK קבע סימן 42;
MARK set-xmark 7/3;
MARK ו-סימן 31;
MARK or-סימן 1;
MARK xor-mark 12;

נֶשֶׁף מַסֵכוֹת
חבילות תואמות מסכות. אופציונלי ואחריו יציאה או טווח יציאות עבור
iptables. ציין כ-"123", "123-456" או "123:456". פרמטר טווח היציאה
מציין מאילו יציאות מקומיות חיבורים המסוווים צריכים להגיע.

נֶשֶׁף מַסֵכוֹת;
MASQUERADE ליציאות 1234:2345;
MASQUERADE ליציאות 1234:2345 אקראית;

MIRROR יעד הדגמה ניסיוני אשר הופך את שדות המקור והיעד
בכותרת ה-IP.

מַרְאָה;

NETMAP מפה רשת שלמה לרשת אחרת ב- נת השולחן.

NETMAP ל-192.168.2.0/24;

NOTRACK השבת את מעקב החיבורים עבור כל החבילות התואמות את הכלל הזה.

proto tcp dport (135:139 445) NOTRACK;

NFLOG רישום מנות דרך Netlink; זה היורש של ULOG.

NFLOG nflog-group 5 nflog-prefix "תסתכל על זה: ";
NFLOG nflog-range 256;
NFLOG nflog-threshold 10;

NFQUEUE עמידה בתור מרחב משתמש, דורש תמיכה בליבת nfnetlink_queue.

proto tcp dport ftp NFQUEUE תור-מספר 20;

תוֹר תור למרחב משתמש, קודמו ל NFQUEUE. כל החבילות עוברות לתור 0.

proto tcp dport ftp QUEUE;

הפניה מחדש ליציאות [יציאות]
פרוקסי שקוף: שנה את כתובת ה-IP היעד של החבילה למכונה
עצמו.

proto tcp dport http REDIRECT to-ports 3128;
proto tcp dport http REDIRECT to-ports 3128 אקראי;

אותו דומה ל-SNAT, אבל לקוח ממופה לאותו מקור IP עבור כל ה-IP שלו
קשרים.

SAME ל-1.2.3.4-1.2.3.7;
SAME ל-1.2.3.8-1.2.3.15 נודסט;
SAME ל-1.2.3.16-1.2.3.31 אקראי;

SECMARK זה משמש להגדרת ערך סימן האבטחה המשויך לחבילה לשימוש על ידי
תת-מערכות אבטחה כגון SELinux. זה תקף רק בטבלת המנגל.

SECMARK selctx "system_u:object_r:httpd_packet_t:s0";

SET [add-set|del-set] [שם קבוצה] [דגל(ים)]
הוסף את ה-IP לסט שצוין. לִרְאוֹתhttp://ipset.netfilter.org/>

proto icmp icmp-type echo-request SET add-set badguys src;

SNAT ל [כתובת IP|טווח IP|טווח יציאות IP]
שנה את כתובת המקור של החבילה.

SNAT ל-1.2.3.4;
SNAT ל-1.2.3.4:20000-30000;
SNAT ל-1.2.3.4 אקראי;

TCPMSS שנה את ערך ה-MSS של מנות TCP SYN.

TCPMSS set-mss 1400;
TCPMSS clamp-mss-to-pmtu;

תנאים והגבלות הגדרות [ערך]
הגדר את סיביות חבילת tcp Type Of Service לערך זה. זה ישמש את
כל מה שמתזמן התעבורה מוכן, בעיקר מכונת הלינוקס שלך, אבל אולי
יותר. ה-Tos-bits המקורי מוריקים ומוחלפים על ידי ערך זה.

הגדרות תנאי שימוש מקסום-תפוקה;
TOS ו-tos 7;
TOS או-tos 1;
TOS xor-tos 4;

הקלד "iptables -j TOS -h" לפרטים.

TTL שנה את שדה הכותרת של TTL.

TTL ttl-set 16;
TTL ttl-dec 1; # ירידה ב-1
TTL ttl-inc 4; # הגדל ב-4

ULOG רישום מנות לתוכנית מרחב משתמש.

ULOG ulog-nlgroup 5 ulog-prefix "תסתכל על זה: ";
ULOG ulog-cprange 256;
ULOG ulog-qthreshold 10;

אחר DOMAINS


מאז גרסה 2.0, פרם תומך לא רק ip ו ip6, אלא גם ARP (טבלאות ARP) ו eb
(טבלאות גישור של אתרנט). המושגים דומים ל iptables.

אומנות מילות מפתח
מקור-ip, יעד-ip
מתאים לכתובת ה-IPv4 של המקור או היעד. כמו saddr ו אבא ב ip
תחום.

מקור-מק, יעד-מק
מתאים לכתובת המקור או היעד של MAC.

ממשק, פנים חיצוניות
ממשק קלט ופלט.

באורך h
אורך החומרה של החבילה.

שרשרת INPUT h-length 64 קבל;

opcode קוד פעולה, לפרטים עיין ב iptables(8).

opcode 9 קבל;

סוג h סוג חומרה.

h-type 1 קבל;

אב טיפוס
סוג פרוטוקול.

סוג אב 0x800 קבל;

מננגל
מילות המפתח mangle-ip-s, mangle-ip-d, mangle-mac-s, mangle-mac-d, מנגל-מטרה
ניתן להשתמש ב-ARP. לִרְאוֹת iptables(8) לפרטים.

חובות מילות מפתח
פרוטו מתאים לפרוטוקול שיצר את המסגרת, למשל IPv4 or PPP. לרשימה, ראה
/etc/ethertypes.

ממשק, פנים חיצוניות
ממשק קלט ופלט פיזי.

לוגי-אין, הגיוני החוצה
ממשק הגשר הלוגי.

saddr, אבא
תואם כתובת MAC מקור או יעד.

להתאים מודולים
מודולי ההתאמה הבאים נתמכים: 802.3, arp, ip, mark_m, pkttype, stp,
vlan, log.

יעד סיומות
הרחבות היעד הבאות נתמכות: arpreply, dnat, mark, redirect,
חצץ.

שימו לב שיש סתירה ביניהם --סימן מ mark_m מודול התאמה
ו -j סימן. מכיוון ששניהם יוטמעו עם מילת המפתח ferm סימן, אנחנו
החליט לפתור זאת על ידי כתיבת שם המטרה באותיות רישיות, כמו באחר
תחומים. הדוגמה הבאה משכתבת את סימן 1 עד 2:

סימן 1 סימן 2;

מתקדם מאפיינים


משתנים
בקבצי חומת אש מורכבים, כדאי להשתמש במשתנים, למשל כדי לתת רשת
ממשק שם בעל משמעות.

כדי להגדיר משתנים, כתוב:

@def $DEV_INTERNET = eth0;
@def $PORTS = (http ftp);
@def $MORE_PORTS = ($PORTS 8080);

בקוד ferm האמיתי, משתנים משמשים כמו כל פרמטר אחר של מילת מפתח:

ממשק INPUT של שרשרת $DEV_INTERNET proto tcp dport $MORE_PORTS ACCEPT;

שים לב שניתן להשתמש במשתנים רק בפרמטרים של מילות מפתח ("192.168.1.1", "http"); הֵם
לא יכול להכיל מילות מפתח של ferm כמו "פרוטו" או "ממשק".

משתנים תקפים רק בבלוק הנוכחי:

@def $DEV_INTERNET = eth1;
שרשרת INPUT {
proto tcp {
@def $DEV_INTERNET = ppp0;
ממשק $DEV_INTERNET dport http ACCEPT;
}
ממשק $DEV_INTERNET DROP;
}

יורחב ל:

שרשרת INPUT {
proto tcp {
ממשק ppp0 dport http קבל;
}
ממשק eth1 DROP;
}

ה-"def $DEV_INTERNET = ppp0" תקף רק בבלוק "proto tcp"; בלוק האב
עדיין יודע "הגדר $DEV_INTERNET = eth1".

קבצי כלול הם מיוחדים - משתנים המוצהרים בקובץ כלול עדיין זמינים ב
בלוק הקורא. זה שימושי כאשר אתה כולל קובץ שמצהיר רק על משתנים.

מכני עם סלילה אוטומטית משתנים
חלק מהמשתנים נקבעים באופן פנימי על ידי ferm. סקריפטים של Ferm יכולים להשתמש בהם בדיוק כמו כל אחד אחר
משתנה

$FILENAME
השם של קובץ התצורה ביחס לספריית ferm הופעל ב.

$FILEBNAME
שם הבסיס של קובץ התצורה.

$DIRNAME
הספרייה של קובץ התצורה.

$DOMAIN הדומיין הנוכחי. אחד מ ip, ip6, ARP, eb.

$TABLE טבלת ה-netfilter הנוכחית.

$CHAIN שרשרת הרשת הנוכחית.

$LINE השורה של התסריט הנוכחי. ניתן להשתמש בו כך:

@def &log($msg) = {
LOG-prefix "rule=$msg:$LINE ";
}
.
.
.
&log("יומן הודעת");

פונקציות
פונקציות דומות למשתנים, אלא שייתכן שיש להן פרמטרים, והן מספקות
פקודות ferm, לא ערכים.

@def &FOO() = פרוטו (tcp udp) דומיין dport;
&FOO() קבל;

@def &TCP_TUNNEL($port, $dest) = {
שרשרת מסנן טבלה FORWARD ממשק ppp0 proto tcp dport $port daddr $dest outerface eth0 קבל;
table nat chain PREROUTING ממשק ppp0 proto tcp dport $port daddr 1.2.3.4 DNAT ל-$dest;
}

&TCP_TUNNEL(http, 192.168.1.33);
&TCP_TUNNEL(ftp, 192.168.1.30);
&TCP_TUNNEL((ssh smtp), 192.168.1.2);

קריאת פונקציה המכילה בלוק (כמו '{...}') חייבת להיות הפקודה האחרונה ב-ferm
כלל, כלומר חייב להיות אחריו ';'. ה '&FOO()הדוגמה אינה מכילה בלוק, כך
אתה יכול לכתוב 'קבל' לאחר השיחה. כדי לעקוף זאת, תוכל לסדר מחדש את מילות המפתח:

@def &IPSEC() = { proto (esp ah); proto udp dport 500; }
שרשרת INPUT ACCEPT &IPSEC();

חזרה
עם תווים לאחור, אתה יכול להשתמש בפלט של פקודה חיצונית:

@def $DNSSERVERS = `שרת שמות grep / Etc / resolv.conf | awk '{print $2}'`;
chain INPUT proto tcp saddr $DNSSERVERS ACCEPT;

הפקודה מבוצעת עם המעטפת (/ Bin / sh), בדיוק כמו backticks ב-perl. ferm עושה זאת
אל תעשה כאן שום הרחבה משתנה.

לאחר מכן, הפלט מסומן ונשמר כרשימת ferm (מערך). שורות המתחילות ב-'#'
מתעלמים מהם; השורות האחרות עשויות להכיל כל מספר של ערכים, מופרדים על ידי רווח לבן.

כולל
השמיים @לִכלוֹל מילת מפתח מאפשרת לך לכלול קבצים חיצוניים:

@include 'vars.ferm';

שם הקובץ הוא יחסי לקובץ המתקשר, למשל כאשר הוא כולל מאת
/etc/ferm/ferm.conf, ההצהרה לעיל כוללת /etc/ferm/vars.ferm. משתנים ו
פונקציות המוצהרות בקובץ כלול עדיין זמינות בקובץ הקורא.

לכלול עובד בתוך בלוק:

שרשרת INPUT {
@include 'input.ferm';
}

אם אתה מציין ספרייה (עם '/' נגרר), כל הקבצים בספרייה זו הם
כלול, ממוין בסדר אלפביתי:

@include 'ferm.d/';

עם סמל צינור נגרר, פרם מבצע פקודת מעטפת ומנתח את הפלט שלה:

@include '/root/generate_ferm_rules.sh $HOSTNAME|'

תנאים
מילת המפתח @אם מציג ביטוי מותנה:

@if $condition DROP;

ערך מוערך נכון בדיוק כמו בפרל: אפס, רשימה ריקה, מחרוזת ריקה הם שקר,
כל השאר נכון. דוגמאות לערכים אמיתיים:

(אב); 1; 'פו'; (0 0)

דוגמאות לערכים שגויים:

(); 0; '0'; ''

יש גם @אַחֵר:

@if $condition DROP; @else REJECT;

שימו לב לנקודה-פסיק לפני ה- @אַחֵר.

אפשר להשתמש בפלטה מתולתלת גם אחרי @אם or @אַחֵר:

@if $condition {
MARK קבע סימן 2;
לַחֲזוֹר;
} @else {
MARK קבע סימן 3;
}

מכיוון שגם הפלטה המתולתלת הסוגרת מסיימת את הפקודה, אין צורך בנקודה-פסיק.

אין @elsif, להשתמש @אַחֵר @אם במקום.

דוגמא:

@def $have_ipv6 = `test -f /proc/net/ip6_tables_names && echo 1 || הד`;
@if $have_ipv6 {
דומיין ip6 {
#....
}
}

הוקס
כדי להפעיל פקודות מותאמות אישית, אתה יכול להתקין ווים:

@hook pre "echo 0 >/proc/sys/net/ipv4/conf/eth0/forwarding";
פוסט @hook "הד 1 >/proc/sys/net/ipv4/conf/eth0/forwarding";
@hook flush "הד 0 >/proc/sys/net/ipv4/conf/eth0/forwarding";

הפקודה שצוינה מבוצעת באמצעות המעטפת. "pre" פירושו להפעיל את הפקודה לפני
החלת חוקי חומת האש, ו"פוסט" פירושו להפעיל את הפקודה לאחר מכן. ווי "שטף".
מופעלים לאחר ש-ferm שטפה את חוקי חומת האש (אפשרות --flush). אתה יכול להתקין כל
מספר ווים.

בנוי פונקציות


ישנן מספר פונקציות מובנות שאולי תמצאו בהן שימושיות.

@eq(a,b)
בודק שני ערכים לשוויון. דוגמא:

@if @eq($DOMAIN, ip6) DROP;

@ne(a,b)
בדומה ל-@eq, זה בודק אי-שוויון.

@לא(x)
שולל ערך בוליאני.

@resolve((שם מארח1 שם מארח2 ...), [סוּג])
בדרך כלל, שמות מארחים נפתרים על ידי iptables. כדי לאפשר ל-ferm לפתור שמות מארחים, השתמש ב-
function @resolve:

saddr @resolve(my.host.foo) proto tcp dport ssh ACCEPT;
saddr @resolve((another.host.foo third.host.foo)) proto tcp dport openvpn ACCEPT;
daddr @resolve(ipv6.google.com, AAAA) proto tcp dport http ACCEPT;

שימו לב לסוגריים הכפולים בשורה השנייה: הזוג הפנימי ליצירת רשימת ferm,
והזוג החיצוני כמפרידי פרמטרי פונקציה.

הפרמטר השני הוא אופציונלי, ומציין את סוג רשומת ה-DNS. ברירת המחדל היא "A".

היזהר עם שמות מארחים שנפתרו בתצורת חומת האש. בקשות DNS עשויות לחסום את
תצורת חומת האש למשך זמן רב, מה שמשאיר את המחשב פגיע, או שהם עלולים להיכשל.

@cat(a, b, ...)
שרשור את כל הפרמטרים למחרוזת אחת.

@substr(ביטוי, לְקַזֵז, אורך)
מחלץ מחרוזת משנה מתוך ביטוי ומחזיר אותה. התו הראשון הוא בהיסט 0. אם
OFFSET הוא שלילי, מתחיל כל כך רחוק מסוף המחרוזת.

@length(ביטוי)
מחזירה את האורך בתווים של הערך של EXPR.

@basename(נתיב)
החזר את שם הבסיס של הקובץ עבור נתיב נתון (File::Spec::splitpath).

@dirname(נתיב)
החזר את שם הספרייה האחרונה עבור נתיב נתון, בהנחה שהרכיב האחרון הוא a
שם הקובץ (File::Spec::splitpath).

@ipfilter(רשימה)
מסנן את כתובות ה-IP שכמובן אינן תואמות לתחום הנוכחי. זה
שימושי ליצירת משתנים וכללים נפוצים עבור IPv4 ו-IPv6:

@def $TRUSTED_HOSTS = (192.168.0.40 2001:abcd:ef::40);

דומיין (ip ip6) chain INPUT {
saddr @ipfilter($TRUSTED_HOSTS) proto tcp dport ssh ACCEPT;
}

מתכונים


השמיים ./examples/ הספרייה מכילה תצורות ferm רבות שבהן ניתן להשתמש כדי להתחיל
חומת אש חדשה. חלק זה מכיל עוד דוגמאות, מתכונים וטריקים.

קַל נמל העברה
פונקציית Ferm הופכת משימות שגרתיות למהירות וקלות:

@def &FORWARD_TCP($proto, $port, $dest) = {
שרשרת מסנן טבלה FORWARD ממשק $DEV_WORLD חיצוני $DEV_DMZ daddr $dest proto $proto dport $port ACCEPT;
table nat chain PREROUTING ממשק $DEV_WORLD daddr $HOST_STATIC פרוטו $proto dport $port DNAT ל-$dest;
}

&FORWARD_TCP(tcp, http, 192.168.1.2);
&FORWARD_TCP(tcp, smtp, 192.168.1.3);
&FORWARD_TCP((tcp udp), תחום, 192.168.1.4);

מרוחק פרם
אם מכונת היעד אינה מסוגלת לפעול פרם מסיבה כלשהי (אולי מכשיר מוטבע
ללא Perl), אתה יכול לערוך את פרם קובץ תצורה במחשב אחר ואפשר פרם
ליצור שם סקריפט מעטפת.

דוגמה ל-OpenWRT:

ferm --remote --shell mywrt/ferm.conf >mywrt/firewall.user
chmod +x mywrt/firewall.user
scp mywrt/firewall.user mywrt.local.net:/וכו/
ssh mywrt.local.net /etc/firewall.user

אפשרויות


--noexec אל תבצע את ה iptables(8) פקודות, אך דלג במקום זאת. כך אתה יכול
נתח את הנתונים שלך, השתמש --שורות כדי להציג את הפלט.

--סומק מנקה את חוקי חומת האש ומגדיר את המדיניות של כל הרשתות ל-ACCEPT. פרם
צריך קובץ תצורה בשביל זה כדי לקבוע אילו תחומים וטבלאות הם
מושפעים.

--שורות הצג את שורות חומת האש שנוצרו מהכללים. הם יוצגו
רגע לפני שהם מבוצעים, אז אם אתה מקבל הודעות שגיאה מ iptables(8)
וכו', אתה יכול לראות איזה כלל גרם לשגיאה.

--אינטראקטיבי
החל את כללי חומת האש ובקש מהמשתמש אישור. חוזר ל-
ערכת כללים קודמת אם אין תגובת משתמש חוקית תוך 30 שניות (ראה
--פסק זמן). זה שימושי עבור ניהול חומת אש מרחוק: אתה יכול לבדוק
הכללים מבלי לחשוש לנעול את עצמך בחוץ.

--פסק זמן S If --אינטראקטיבי נעשה שימוש, ולאחר מכן חזור לאחור אם אין תגובת משתמש חוקית
לאחר מספר שניות זה. ברירת המחדל היא 30.

- עזרה הצג רשימה קצרה של אפשרויות שורת הפקודה הזמינות.

--גִרְסָה מציג את מספר הגרסה של התוכנית.

--מָהִיר אפשר מצב מהיר: ferm מייצרת iptables-שמור(8) קובץ, ומתקין אותו
עם iptables-restore(8). זה הרבה יותר מהיר, כי ferm מתקשר iptables(8)
פעם אחת לכל כלל כברירת מחדל.

מצב מהיר מופעל כברירת מחדל מאז פרם 2.0, מבטל אפשרות זו.

--לְהַאֵט בטל מצב מהיר, כלומר ריצה iptables(8) לכל כלל, ואל תשתמש
iptables-restore(8).

- צור סקריפט מעטפת שקורא iptables-restore(8) ומדפיס אותו.
מרמז על קווים --מהירים.

--מְרוּחָק צור כללים עבור מכונה מרוחקת. מרמז --noexec ו --שורות. יכול להיות
בשילוב עם -.

--תְחוּם {ip|ip6}
טפל רק בדומיין שצוין. פרם הפלט עשוי להיות ריק אם הדומיין הוא
לא מוגדר בקובץ הקלט.

--בהגדרה '$name=value'
עוקף משתנה שהוגדר בקובץ התצורה.

השתמש ב-ferm באינטרנט באמצעות שירותי onworks.net


שרתים ותחנות עבודה בחינם

הורד אפליקציות Windows & Linux

פקודות לינוקס

Ad




×
פרסומת
❤️קנו, הזמינו או קנו כאן - ללא עלות, עוזר לשמור על שירותים בחינם.